diff --git a/react-ui/src/pages/System/User/index.tsx b/react-ui/src/pages/System/User/index.tsx index f58e16a8..52e68f9a 100644 --- a/react-ui/src/pages/System/User/index.tsx +++ b/react-ui/src/pages/System/User/index.tsx @@ -4,7 +4,6 @@ import { getRoleList } from '@/services/system/role'; import { addUser, changeUserStatus, - exportUser, getDeptTree, getUser, getUserList, @@ -13,6 +12,7 @@ import { updateAuthRole, updateUser, } from '@/services/system/user'; +import { downloadXlsx } from '@/utils/downloadfile'; import { DeleteOutlined, DownOutlined, @@ -132,15 +132,12 @@ const handleRemoveOne = async (selectedRow: API.System.User) => { /** * 导出数据 - * - * */ -const handleExport = async () => { +const handleExport = async (deptId: string) => { const hide = message.loading('正在导出'); try { - await exportUser(); + await downloadXlsx('/api/system/user/export', 'POST', { data: { deptId: deptId } }); hide(); - message.success('导出成功'); return true; } catch (error) { hide(); @@ -470,7 +467,7 @@ const UserTableList: React.FC = () => { key="export" hidden={!access.hasPerms('system:user:export')} onClick={async () => { - handleExport(); + handleExport(selectDept.id); }} > {' '} @@ -581,7 +578,7 @@ const UserTableList: React.FC = () => { /> { - const success = await updateAuthRole(values); + const success = await updateAuthRole(currentRow!.userId, values.roleIds); if (success) { setAuthRoleModalVisible(false); setSelectedRows([]); diff --git a/react-ui/src/services/system/user.ts b/react-ui/src/services/system/user.ts index eb3cfeb8..93f30107 100644 --- a/react-ui/src/services/system/user.ts +++ b/react-ui/src/services/system/user.ts @@ -60,8 +60,9 @@ export async function removeUser(ids: string, options?: { [key: string]: any }) // 导出用户信息 export function exportUser(params?: API.System.UserListParams, options?: { [key: string]: any }) { return request(`/api/system/user/export`, { - method: 'GET', - params, + method: 'POST', + data: params, + skipValidating: true, ...(options || {}), }); } @@ -126,16 +127,19 @@ export function uploadAvatar(data: any) { // 查询授权角色 export function getAuthRole(userId: number) { - return request('/system/user/authRole/' + userId, { + return request('/api/system/user/authRole/' + userId, { method: 'get', }); } // 保存授权角色 -export function updateAuthRole(data: Record) { - return request('/system/user/authRole', { - method: 'put', - params: data, +export function updateAuthRole(userId: number, data: Record) { + return request(`/api/system/user/authRole/${userId}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json;charset=UTF-8', + }, + data: data, }); } diff --git a/react-ui/src/utils/downloadfile.ts b/react-ui/src/utils/downloadfile.ts index ee56962e..7d4e46cd 100644 --- a/react-ui/src/utils/downloadfile.ts +++ b/react-ui/src/utils/downloadfile.ts @@ -1,19 +1,21 @@ import { request } from '@umijs/max'; -const mimeMap = { +/** MimeType */ +export const mimeMap = { xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', zip: 'application/zip', }; /** * 解析blob响应内容并下载 - * @param {*} res blob响应内容 - * @param {String} mimeType MIME类型 + * @param res - blob响应内容 + * @param mimeType - MIME类型 */ export function resolveBlob(res: any, mimeType: string) { const aLink = document.createElement('a'); const blob = new Blob([res.data], { type: mimeType }); - // //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名; + // 从response的headers中获取filename, + // 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名; const patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*'); // console.log(res); const contentDisposition = decodeURI(res.headers['content-disposition']); @@ -29,6 +31,11 @@ export function resolveBlob(res: any, mimeType: string) { document.body.removeChild(aLink); } +/** + * 下载 Zip 文件 + * @param url - url 地址 + * @param options - 请求参数 + */ export function downLoadZip(url: string, params?: any) { request(url, { method: 'GET', @@ -40,24 +47,30 @@ export function downLoadZip(url: string, params?: any) { }); } -export async function downLoadXlsx(url: string, params: any, fileName: string) { +/** + * 下载 XLSX 文件 + * @param url - url 地址 + * @param method - 请求方式 + * @param options - 请求选项 + */ +export async function downloadXlsx( + url: string, + method: string = 'GET', + options?: Record, +) { return request(url, { - ...params, - method: 'POST', + method: method, + ...options, responseType: 'blob', - }).then((data) => { - const aLink = document.createElement('a'); - const blob = data as any; // new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); - aLink.style.display = 'none'; - aLink.href = URL.createObjectURL(blob); - aLink.setAttribute('download', fileName); // 设置下载文件名称 - document.body.appendChild(aLink); - aLink.click(); - URL.revokeObjectURL(aLink.href); // 清除引用 - document.body.removeChild(aLink); + getResponse: true, + }).then((res) => { + resolveBlob(res, mimeMap.xlsx); }); } +/** + * @deprecated 无效 + */ export function download(fileName: string) { window.location.href = `/api/common/download?fileName=${encodeURI(fileName)}&delete=${true}`; }