refactor(manager): 重构统计报表、促销活动与工单审核等12个列表页为 useTable

- 重构统计报表(销售订单明细、商品销售汇总、店铺业绩)列表页为 useTable

- 重构营销活动(秒杀、第N件优惠、积分商品)列表页为 useTable

- 重构财务流水(钱包日志)、服务工单、分销导入、店铺审核、商品参数、订单投诉列表页

- 消除约 210+ 行分页/防抖/竞态重复样板代码,统一加载与查询状态规范
This commit is contained in:
pikachu1995@126.com
2026-10-20 14:20:36 +08:00
parent 45338c9d70
commit ba964ff478
12 changed files with 235 additions and 448 deletions

View File

@@ -24,8 +24,8 @@
</el-table>
<div class="mt_10" style="display: flex; justify-content: flex-end">
<el-pagination
v-model:current-page="pageNumber"
v-model:page-size="pageSize"
v-model:current-page="searchForm.pageNumber"
v-model:page-size="searchForm.pageSize"
:total="total"
layout="total, prev, pager, next"
size="small"
@@ -37,46 +37,31 @@
</template>
<script setup>
import { onMounted, reactive, ref } from "vue";
import { ref } from "vue";
import { useTable } from "@/utils/useTable";
import * as API_Finance from "@/api/finance";
import { getRequest } from "@/libs/axios";
import { downloadBlob } from "@/utils/downloadBlob";
defineOptions({ name: "finance-wallet-log" });
const loading = ref(false);
const searchForm = reactive({ memberName: "" });
const dateRange = ref([]);
const pageNumber = ref(1);
const pageSize = ref(20);
const data = ref([]);
const total = ref(0);
const { loading, data, total, searchForm, getDataList, handleSearch } = useTable(
(p) => getRequest("/wallet/log", p),
{
pageSize: 20,
form: { memberName: "" },
beforeRequest: (p) => {
const params = { ...p };
if (dateRange.value?.length === 2) {
params.startDate = dateRange.value[0];
params.endDate = dateRange.value[1];
}
return params;
},
}
);
onMounted(() => {
getDataList();
});
function handleSearch() {
pageNumber.value = 1;
getDataList();
}
function getDataList() {
loading.value = true;
const params = {
pageNumber: pageNumber.value,
pageSize: pageSize.value,
memberName: searchForm.memberName,
};
getRequest("/wallet/log", params).then((res) => {
loading.value = false;
if (res.success) {
data.value = res.result.records;
total.value = res.result.total;
}
}).catch(() => {
loading.value = false;
});
}
function handleExport() {
const params = { memberName: searchForm.memberName };
if (dateRange.value?.length === 2) {