|
|
@@ -1,76 +1,126 @@
|
|
|
<template>
|
|
|
- <ele-page flex-table>
|
|
|
- <page-search @search="reload"></page-search>
|
|
|
- <common-table
|
|
|
- ref="pageRef"
|
|
|
- :pageConfig="pageConfig"
|
|
|
- :columns="columns"
|
|
|
- :tools="false"
|
|
|
- show-summary
|
|
|
- :flex-table="false"
|
|
|
- >
|
|
|
- <template #toolbar="{ row }">
|
|
|
- <div>
|
|
|
- <el-radio-group @change="handleStatusChange" v-model="useStatus">
|
|
|
- <el-radio-button label="售后订单实时统计" value="1" />
|
|
|
- <el-radio-button label="售后订单历史统计" value="2" />
|
|
|
- </el-radio-group>
|
|
|
- <el-button
|
|
|
- style="margin-left: 40px"
|
|
|
- type="success"
|
|
|
- plain
|
|
|
- v-permission="'statistic:afterSales:export'"
|
|
|
- @click="handleExportExcel(row)"
|
|
|
- >
|
|
|
- 导出EXCEL
|
|
|
- </el-button>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </common-table>
|
|
|
- </ele-page>
|
|
|
+ <ele-page flex-table>
|
|
|
+ <page-search @search="reload" v-if="historyData == '1'"></page-search>
|
|
|
+ <common-table
|
|
|
+ ref="pageRef"
|
|
|
+ :pageConfig="pageConfig"
|
|
|
+ :columns="columns"
|
|
|
+ :tools="false"
|
|
|
+ show-summary
|
|
|
+ :summary-method="getSummaries"
|
|
|
+ :flex-table="false"
|
|
|
+ >
|
|
|
+ <template #toolbar="{ row }">
|
|
|
+ <div>
|
|
|
+ <el-radio-group
|
|
|
+ @change="handleStatusChange"
|
|
|
+ v-model="historyData"
|
|
|
+ >
|
|
|
+ <el-radio-button label="售后订单实时统计" value="0" />
|
|
|
+ <el-radio-button label="售后订单历史统计" value="1" />
|
|
|
+ </el-radio-group>
|
|
|
+ <el-button
|
|
|
+ style="margin-left: 40px"
|
|
|
+ type="success"
|
|
|
+ plain
|
|
|
+ v-permission="'statistic:afterSales:export'"
|
|
|
+ v-if="historyData == '1'"
|
|
|
+ @click="handleExportExcel(row)"
|
|
|
+ >
|
|
|
+ 导出EXCEL
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </common-table>
|
|
|
+ </ele-page>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
- import { ref, reactive } from 'vue';
|
|
|
- import CommonTable from '@/components/CommonPage/CommonTable.vue';
|
|
|
- import pageSearch from './components/page-search.vue';
|
|
|
- import { useDictData } from '@/utils/use-dict-data';
|
|
|
+import { ref, reactive } from "vue";
|
|
|
+import CommonTable from "@/components/CommonPage/CommonTable.vue";
|
|
|
+import pageSearch from "./components/page-search.vue";
|
|
|
|
|
|
- defineOptions({ name: 'afterSalesStatistic' });
|
|
|
+defineOptions({ name: "afterSalesStatistic" });
|
|
|
|
|
|
- const useStatus = ref('1');
|
|
|
- function handleStatusChange(val) {
|
|
|
- useStatus.value = val;
|
|
|
+const historyData = ref("0");
|
|
|
+function handleStatusChange(val) {
|
|
|
+ historyData.value = val;
|
|
|
+ pageConfig.params = { history: val };
|
|
|
pageRef.value?.reload();
|
|
|
- }
|
|
|
+}
|
|
|
|
|
|
- /** 表格列配置 */
|
|
|
- const columns = ref([
|
|
|
- { type: 'index', label: '#', align: 'center', width: 80 },
|
|
|
- { label: '售后订单数', prop: 'orderNum', align: 'center' },
|
|
|
- { label: '发出订单数', prop: 'bookNum', align: 'center' },
|
|
|
- { label: '未发订单数', prop: 'price', align: 'center' },
|
|
|
- { label: '客户申请时间', prop: 'createTime', align: 'center' },
|
|
|
- { label: '仓库', prop: 'godownName', align: 'center' },
|
|
|
- ]);
|
|
|
+/** 表格列配置 */
|
|
|
+const columns = ref([
|
|
|
+ { type: "index", label: "#", align: "center", width: 80 },
|
|
|
+ { label: "售后订单数", prop: "refundNum", align: "center" },
|
|
|
+ { label: "发出订单数", prop: "sendRefundNum", align: "center" },
|
|
|
+ { label: "未发订单数", prop: "noSendRefundNum", align: "center" },
|
|
|
+ { label: "客户申请时间", prop: "statDate", align: "center" },
|
|
|
+ { label: "仓库", prop: "godownName", align: "center" },
|
|
|
+]);
|
|
|
|
|
|
- /** 页面组件实例 */
|
|
|
- const pageRef = ref(null);
|
|
|
+/** 页面组件实例 */
|
|
|
+const pageRef = ref(null);
|
|
|
|
|
|
- const pageConfig = reactive({
|
|
|
- pageUrl: '/baseinfo/godown/pagelist',
|
|
|
- exportUrl: '/baseinfo/godown/export',
|
|
|
- fileName: '售后统计',
|
|
|
- cacheKey: 'afterSalesStatisticTable'
|
|
|
- });
|
|
|
+const pageConfig = reactive({
|
|
|
+ pageUrl: "/order/refundStat/pagelist",
|
|
|
+ params: { history: 0 }, // 默认查询实时数据
|
|
|
+ exportUrl: "/order/refundStat/listExport",
|
|
|
+ fileName: "售后统计",
|
|
|
+ cacheKey: "afterSalesStatisticTable",
|
|
|
+});
|
|
|
|
|
|
- //刷新表格
|
|
|
- function reload(where) {
|
|
|
+/**
|
|
|
+ * 自定义表格汇总计算方法
|
|
|
+ * @param {Object} param0 - 表格数据和列信息
|
|
|
+ * @returns {Array} - 汇总行显示的数据
|
|
|
+ */
|
|
|
+function getSummaries({ columns, data }) {
|
|
|
+ const sums = [];
|
|
|
+ columns.forEach((column, index) => {
|
|
|
+ if (index === 0) {
|
|
|
+ sums[index] = "合计";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const values = data.map((item) => Number(item[column.property]));
|
|
|
+
|
|
|
+ if (!values.length) {
|
|
|
+ sums[index] = "N/A";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (column.property) {
|
|
|
+ case "refundNum":
|
|
|
+ case "sendRefundNum":
|
|
|
+ case "noSendRefundNum": {
|
|
|
+ // 数量类字段求和
|
|
|
+ const sum = values.reduce((prev, curr) => {
|
|
|
+ const value = Number(curr);
|
|
|
+ if (!isNaN(value)) {
|
|
|
+ return prev + value;
|
|
|
+ } else {
|
|
|
+ return prev;
|
|
|
+ }
|
|
|
+ }, 0);
|
|
|
+ sums[index] = sum;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ sums[index] = "";
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return sums;
|
|
|
+}
|
|
|
+
|
|
|
+//刷新表格
|
|
|
+function reload(where) {
|
|
|
pageRef.value?.reload(where);
|
|
|
- }
|
|
|
+}
|
|
|
|
|
|
- //导出excel
|
|
|
- function handleExportExcel() {
|
|
|
- pageRef.value?.exportData('售后统计');
|
|
|
- }
|
|
|
+//导出excel
|
|
|
+function handleExportExcel() {
|
|
|
+ pageRef.value?.exportData("售后统计");
|
|
|
+}
|
|
|
</script>
|