123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- import { request } from './index';
- import $storage from '@/sheep/utils/storage';
- import { ElMessage } from 'element-plus';
- // 查看列表
- export const LIST = (url, data, pageInParams = true) => {
- // 分离分页参数和其他参数
- const { page, size, ...otherParams } = data;
- const requestConfig = {
- url: url + `/list`,
- method: 'POST',
- };
- if (pageInParams) {
- // 分页参数放在params中(默认行为)
- requestConfig.params = { page, size };
- requestConfig.data = otherParams;
- } else {
- // 分页参数放在data中
- requestConfig.data = { page, size, ...otherParams };
- }
- return request(requestConfig);
- };
- // 查看详情
- export const DETAIL = (url, id) =>
- request({
- url: url + `/detail`,
- method: 'POST',
- params: { id },
- });
- // 新增
- export const ADD = (url, data) =>
- request({
- url: url + '/add',
- method: 'POST',
- data,
- options: {
- showSuccessMessage: false,
- },
- });
- // 编辑&更新
- export const EDIT = (url, data) =>
- request({
- url: url + `/update`,
- method: 'POST',
- data,
- options: {
- showSuccessMessage: false,
- },
- });
- // 删除(软删除/真实删除)
- export const DELETE = (url, data) =>
- request({
- url: url + `/delete`,
- method: 'POST',
- params: data,
- options: {
- showSuccessMessage: true,
- },
- });
- // 选择
- export const SELECT = (url, params) =>
- request({
- url: url + '/select',
- method: 'GET',
- params,
- });
- // 回收站列表
- export const RECYCLE_BIN = (url, params) =>
- request({
- url: url + '/recyclebin',
- method: 'GET',
- params,
- });
- // 销毁
- export const DESTROY = (url, id) =>
- request({
- url: url + '/destroy/' + id,
- method: 'DELETE',
- });
- // 还原
- export const RESTORE = (url, id) =>
- request({
- url: url + '/restore/' + id,
- method: 'PUT',
- });
- // 通用增删改查
- export const CRUD = (url, methods = ['list', 'detail', 'add', 'edit', 'delete', 'export']) => {
- const apis = {};
- if (methods.includes('list'))
- apis.list = (params, pageInParams = true) => LIST(url, params, pageInParams);
- if (methods.includes('detail')) apis.detail = (id) => DETAIL(url, id);
- if (methods.includes('add')) apis.add = (data) => ADD(url, data);
- if (methods.includes('edit')) apis.edit = (id, data) => EDIT(url, id, data);
- if (methods.includes('delete')) apis.delete = (id) => DELETE(url, id);
- if (methods.includes('report')) apis.report = (params, filename) => REPORT(url, params, filename);
- if (methods.includes('export'))
- apis.export = (params, filename) => REPORT(url, params, filename, 'export');
- return apis;
- };
- // 通用回收站
- export const RECYCLE = (url) => {
- return {
- recyclebin: (params) => RECYCLE_BIN(url, params),
- restore: (id) => RESTORE(url, id),
- destroy: (id) => DESTROY(url, id),
- };
- };
- // 导出报表 - 需要超级管理员权限
- export const REPORT = async (url, params, filename = '导出数据', typeName = 'report') => {
- // 获取用户信息进行权限验证
- const userInfo = $storage.get('userInfo');
- // 检查用户是否为超级管理员
- if (!userInfo || userInfo.roleName !== '超级管理员') {
- ElMessage.error('只有超级管理员可以导出');
- return Promise.reject(new Error('权限不足:只有超级管理员可以导出'));
- }
- let response = null;
- try {
- // 发送导出请求
- response = await request({
- url: url + `/${typeName}`,
- method: typeName == 'report' ? 'GET' : 'POST',
- ...(typeName == 'report' ? { params } : { data: params }),
- responseType: 'blob', // 用于文件下载
- options: {
- showSuccessMessage: false,
- },
- });
- // 检查响应状态和内容类型
- if (response.status === 200 && response.headers['content-type']?.includes('excel')) {
- // 成功响应,处理文件下载
- const blob = response.data; // 从响应对象中获取 Blob 数据
- const downloadUrl = window.URL.createObjectURL(blob);
- const link = document.createElement('a');
- link.href = downloadUrl;
- link.download = `${filename}_${new Date().toISOString().slice(0, 10)}.xlsx`;
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- window.URL.revokeObjectURL(downloadUrl);
- ElMessage.success('导出成功');
- return Promise.resolve();
- } else {
- // 如果不是成功的文件响应,说明返回的是错误信息
- let errorData;
- try {
- // 尝试解析 Blob 中的 JSON 错误信息
- const text = await response.data.text();
- errorData = JSON.parse(text);
- } catch (parseError) {
- // 如果解析失败,使用默认错误信息
- errorData = { code: '500', message: '导出失败' };
- }
- // 检查返回的 code
- // if (errorData.code !== '200') {
- // const errorMessage = errorData.message || '导出失败';
- // ElMessage.error(errorMessage);
- // return Promise.reject(new Error(errorMessage));
- // }
- }
- } catch (error) {
- console.error('导出失败:', error);
- // 如果是网络错误或其他异常
- if (error.response) {
- // 有响应但状态码不是 2xx
- const errorMessage = error.response.data?.message || '服务器错误';
- ElMessage.error(errorMessage);
- } else if (error.message?.includes('权限不足')) {
- // 权限错误已经在上面处理了,不需要重复提示
- } else {
- // 其他错误
- ElMessage.error('导出失败,请稍后重试');
- }
- return Promise.reject(error);
- }
- };
- // add, list, delete, edit, detail, select, recyclebin, restore, destroy, report
|