feat(审批): 添加退货审批列表导出功能并调整表格列宽

在审批页面中增加了导出Excel的功能,允许用户导出退货审批列表。同时调整了表格列的宽度以改善显示效果。
This commit is contained in:
dzq 2025-04-28 11:05:44 +08:00
parent b400da676d
commit e0bdcaee0d
2 changed files with 46 additions and 14 deletions

View File

@ -87,12 +87,16 @@ export interface UpdateReturnApprovalCommand {
export const getReturnApprovalListApi = (params?: SearchReturnApprovalQuery) => {
return http.request<ResponseData<PageDTO<ReturnApprovalDTO>>>(
'get',
'/shop/returnApproval',
{ params }
'/shop/returnApproval', {
params: {
...params,
approvalTime: params?.approvalTime ? params.approvalTime : undefined
}
}
);
};
/** 批量导出订单 */
export const exportOrderExcelApi = (params: SearchReturnApprovalQuery, fileName: string) => {
export const exportReturnApprovalExcelApi = (params: SearchReturnApprovalQuery, fileName: string) => {
return http.download("/shop/returnApproval/excel", fileName, {
params: {
...params,

View File

@ -2,7 +2,7 @@
import { ref } from "vue";
import { PureTableBar } from "@/components/RePureTableBar";
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import { getReturnApprovalListApi, deleteReturnApprovalApi, ReturnApprovalDTO, SearchReturnApprovalQuery } from "@/api/shop/approval";
import { getReturnApprovalListApi, deleteReturnApprovalApi, exportReturnApprovalExcelApi, ReturnApprovalDTO, SearchReturnApprovalQuery } from "@/api/shop/approval";
import Delete from "@iconify-icons/ep/delete";
import Search from "@iconify-icons/ep/search";
import Refresh from "@iconify-icons/ep/refresh";
@ -34,6 +34,7 @@ const pagination = ref({
});
const loading = ref(false);
const exportLoading = ref(false);
const dataList = ref<ReturnApprovalDTO[]>([]);
const multipleSelection = ref<number[]>([]);
const detailVisible = ref(false);
@ -75,6 +76,26 @@ const resetForm = () => {
const handlePaginationChange = () => getList();
//
const handleExport = async () => {
try {
exportLoading.value = true;
const dateSuffix = searchFormParams.value.approvalTime
? `_${searchFormParams.value.approvalTime.split(' ')[0].replace(/-/g, '')}`
: '';
const fileName = `退货审批列表${dateSuffix}.xlsx`;
await exportReturnApprovalExcelApi({
...searchFormParams.value,
pageSize: pagination.value.pageSize,
pageNum: pagination.value.currentPage
}, fileName);
ElMessage.success('导出任务已开始,请稍后查看下载文件');
} catch (e) {
ElMessage.error('导出失败');
} finally {
exportLoading.value = false;
}
};
const handleBulkDelete = async () => {
if (multipleSelection.value.length === 0) return;
@ -140,6 +161,10 @@ getList();
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm">
重置
</el-button>
<el-button type="success" :loading="exportLoading" :icon="useRenderIcon('vscode-icons:file-type-excel2')"
@click="handleExport">
导出Excel
</el-button>
</el-form-item>
</el-form>
@ -152,20 +177,23 @@ getList();
</template>
<el-table ref="tableRef" v-loading="loading" :data="dataList" row-key="approvalId"
@selection-change="rows => multipleSelection = rows.map(r => r.approvalId)" border>
<el-table-column label="审批ID" prop="approvalId" width="50" />
<el-table-column label="订单ID" prop="orderId" width="50" />
<el-table-column label="商品ID" prop="goodsId" width="50" />
<el-table-column label="审批ID" prop="approvalId" width="80" />
<el-table-column label="订单ID" prop="orderId" width="80" />
<el-table-column label="商品ID" prop="goodsId" width="80" />
<el-table-column label="用户姓名" prop="name" width="100" />
<el-table-column label="手机号" prop="mobile" width="120" />
<el-table-column label="商品名称" prop="goodsName" width="120" />
<el-table-column label="商品封面" width="100">
<el-table-column label="商品封面" width="120">
<template #default="{ row }">
<el-image v-if="row.coverImg" :src="row.coverImg" :preview-src-list="[row.coverImg]" fit="cover"
class="rounded" width="40" height="40" />
<div v-if="row.coverImg" class="flex gap-2">
<el-image v-for="(img, index) in row.coverImg.split(',')" :key="index" :src="img"
:preview-src-list="row.coverImg.split(',')" :z-index="9999" :preview-teleported="true"
:hide-on-click-modal="true" fit="cover" class="rounded" width="40" height="40" />
</div>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="商品价格" prop="goodsPrice" width="50">
<el-table-column label="商品价格" prop="goodsPrice" width="90">
<template #default="{ row }">{{ row.goodsPrice }}</template>
</el-table-column>
<el-table-column label="支付方式" prop="paymentMethod" width="100">
@ -173,8 +201,8 @@ getList();
{{ { wechat: '微信支付', balance: '余额支付' }[row.paymentMethod] || row.paymentMethod }}
</template>
</el-table-column>
<el-table-column label="退货数量" prop="returnQuantity" width="50" />
<el-table-column label="退款金额" prop="returnAmount" width="50">
<el-table-column label="退货数量" prop="returnQuantity" width="90" />
<el-table-column label="退款金额" prop="returnAmount" width="90">
<template #default="{ row }">{{ row.returnAmount }}</template>
</el-table-column>
<el-table-column label="提交时间" prop="createTime" width="180">
@ -182,7 +210,7 @@ getList();
{{ row.createTime ? new Date(row.createTime).toLocaleString() : '-' }}
</template>
</el-table-column>
<el-table-column label="状态" prop="status" width="80">
<el-table-column label="状态" prop="status" width="100">
<template #default="{ row }">
<el-tag :type="{ 1: 'warning', 2: 'success', 3: 'danger' }[row.status]">
{{ row.statusStr }}