【更新】完善前端用户管理导出用户功能

pull/89/MERGE
小诺 2023-03-11 22:29:33 +08:00 committed by 俞宝山
parent b87a7f5d65
commit d552d86dd2
2 changed files with 94 additions and 30 deletions

View File

@ -0,0 +1,25 @@
/**
* Copyright [2022] [https://www.xiaonuo.vip]
* Snowy采用APACHE LICENSE 2.0开源协议您在使用过程中需要注意以下几点
* 1.请不要删除和修改根目录下的LICENSE文件
* 2.请不要删除和修改Snowy源码头部的版权声明
* 3.本项目代码可免费商业使用商业使用请保留源码和相关描述文件的项目出处作者声明等
* 4.分发源码时候请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
export default {
// 对下载的流进行处理,直接从浏览器下载下来
resultDownload (res) {
const blob = new Blob([res.data], { type: 'application/octet-stream;charset=UTF-8' })
const contentDisposition = res.headers['content-disposition']
const patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
const $link = document.createElement('a')
$link.href = URL.createObjectURL(blob)
$link.download = decodeURIComponent(patt.exec(contentDisposition)[1])
$link.click()
document.body.appendChild($link)
document.body.removeChild($link) // 下载完成移除元素
window.URL.revokeObjectURL($link.href) // 释放掉blob对象
}
}

View File

@ -56,18 +56,31 @@
:row-selection="options.rowSelection"
>
<template #operator class="table-operator">
<a-button type="primary" class="primaryAdd" @click="form.onOpen()">
<template #icon><plus-outlined /></template>
<span>{{ $t('common.addButton') }}{{ $t('model.user') }}</span>
</a-button>
<a-button class="primaryAdd" @click="ImpExpRef.onOpen()">
<template #icon><import-outlined /></template>
<span>{{ $t('common.imports') }}</span>
</a-button>
<a-button danger @click="removeBatchUser()">
<template #icon><delete-outlined /></template>
{{ $t('common.batchRemoveButton') }}
</a-button>
<a-space>
<a-button type="primary" @click="form.onOpen()">
<template #icon><plus-outlined /></template>
<span>{{ $t('common.addButton') }}{{ $t('model.user') }}</span>
</a-button>
<a-button @click="ImpExpRef.onOpen()">
<template #icon><import-outlined /></template>
<span>{{ $t('common.imports') }}</span>
</a-button>
<a-button @click="exportBatchUserVerify">
<template #icon><delete-outlined /></template>
批量导出
</a-button>
<a-popconfirm
title="删除此信息?"
:visible="deleteVisible"
@visibleChange="deleteVisibleChange"
@confirm="deleteBatchUser"
>
<a-button danger>
<template #icon><delete-outlined /></template>
{{ $t('common.batchRemoveButton') }}
</a-button>
</a-popconfirm>
</a-space>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'avatar'">
@ -136,6 +149,7 @@
<script setup name="sysUser">
import { message, Empty } from 'ant-design-vue'
import tool from '@/utils/tool'
import downloadUtil from '@/utils/downloadUtil'
import userApi from '@/api/sys/userApi'
import roleSelectorPlus from '@/components/Selector/roleSelectorPlus.vue'
import Form from './form.vue'
@ -207,7 +221,7 @@
const ImpExpRef = ref()
const grantResourceFormRef = ref()
const grantPermissionFormRef = ref()
const deleteVisible = ref(false)
// Promise
const loadData = (parameter) => {
return userApi.userPage(Object.assign(parameter, searchFormState)).then((res) => {
@ -291,12 +305,49 @@
table.value.refresh()
})
}
//
const removeBatchUser = () => {
if (selectedRowKeys.value.length < 1) {
message.warning('请选择一条或多条数据')
//
const exportBatchUserVerify = () => {
if ((selectedRowKeys.value.length < 1) & !searchFormState.searchKey & !searchFormState.userStatus) {
message.warning('请输入查询条件或勾选要导出的信息')
}
if (selectedRowKeys.value.length > 0) {
const params = selectedRowKeys.value.map((m) => {
return m
})
exportBatchUser(params)
return
}
if (searchFormState.searchKey || searchFormState.userStatus) {
const params = {
searchKey: searchFormState.searchKey,
userStatus: searchFormState.userStatus
}
exportBatchUser(params)
return
}
}
//
const exportBatchUser = (params) => {
userApi.userExport(params).then((res) => {
downloadUtil.resultDownload(res)
})
}
//
const deleteVisibleChange = () => {
if (deleteVisible.value) {
deleteVisible.value = false
return false
}
if (selectedRowKeys.value.length < 1) {
message.warning('请选择一条或多条数据')
deleteVisible.value = false
return false
} else {
deleteVisible.value = true
}
}
//
const deleteBatchUser = () => {
const params = selectedRowKeys.value.map((m) => {
return {
id: m
@ -340,16 +391,7 @@
id: record.id
}
userApi.userExportUserInfo(params).then((res) => {
const blob = new Blob([res.data], { type: 'application/octet-stream;charset=UTF-8' })
const contentDisposition = res.headers['content-disposition']
const patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
const $link = document.createElement('a')
$link.href = URL.createObjectURL(blob)
$link.download = decodeURIComponent(patt.exec(contentDisposition)[1])
$link.click()
document.body.appendChild($link)
document.body.removeChild($link) //
window.URL.revokeObjectURL($link.href) // blob
downloadUtil.resultDownload(res)
})
}
</script>
@ -361,9 +403,6 @@
.ant-form-item {
margin-bottom: 0 !important;
}
.primaryAdd {
margin-right: 10px;
}
.snowy-table-avatar {
margin-top: -10px;
margin-bottom: -10px;