ylong 6 bulan lalu
induk
melakukan
d899b2d281
1 mengubah file dengan 160 tambahan dan 145 penghapusan
  1. 160 145
      src/views/statistic/entry/index.vue

+ 160 - 145
src/views/statistic/entry/index.vue

@@ -1,164 +1,179 @@
 <template>
-  <ele-page flex-table>
-    <page-search @search="reload" v-if="useStatus==2"></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="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:entry:export'"
-            v-if="useStatus==2"
-            @click="handleExportExcel(row)"
-          >
-            导出EXCEL
-          </el-button>
-        </div>
-      </template>
-    </common-table>
-  </ele-page>
+    <ele-page flex-table>
+        <page-search @search="reload" v-if="useStatus == 2"></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="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:entry:export'"
+                        v-if="useStatus == 2"
+                        @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';
+    import { useDictData } from '@/utils/use-dict-data';
 
-  defineOptions({ name: 'entryStatistic' });
+    defineOptions({ name: 'entryStatistic' });
 
-  const useStatus = ref('1');
-  function handleStatusChange(val) {
-    useStatus.value = val;
-    // 根据选择的状态动态更新接口URL
-    if (val === '1') {
-      // 实时统计
-      pageConfig.pageUrl = '/order/recycleOrderStatistic/audit/todayList';
-    } else {
-      // 历史统计
-      pageConfig.pageUrl = '/order/recycleOrderStatistic/audit/historyPage';
+    const useStatus = ref('1');
+    function handleStatusChange(val) {
+        useStatus.value = val;
+        // 根据选择的状态动态更新接口URL
+        if (val === '1') {
+            // 实时统计
+            pageConfig.pageUrl = '/order/recycleOrderStatistic/audit/todayList';
+        } else {
+            // 历史统计
+            pageConfig.pageUrl =
+                '/order/recycleOrderStatistic/audit/historyPage';
+        }
+        pageRef.value?.reload();
     }
-    pageRef.value?.reload();
-  }
-
-  /** 表格列配置 */
-  const columns = ref([
-    { type: 'index', label: '#', align: 'center', width: 80 },
-    { label: '录入员', prop: 'sysUserName', align: 'center' },
-    { label: '录入审核订单', prop: 'orderCount', align: 'center' },
-    { label: '录入书籍数量', prop: 'totalNum', align: 'center' },
-    { label: '实际回收数量', prop: 'totalRecycleReal', align: 'center' },
-    { label: '品相良好', prop: 'totalGoodNum', align: 'center' },
-    { label: '品相一般', prop: 'totalGeneralNum', align: 'center' },
-    { label: '品相极差', prop: 'totalBadNum', align: 'center' },
-    { label: '不良率', prop: 'badRate', align: 'center' },
-    { label: '预估金额', prop: 'totalExpectMoney', align: 'center' },
-    { label: '审核金额', prop: 'totalAuditMoney', align: 'center' },
-    { label: '审核日期', prop: 'statisticDate', align: 'center' }
-  ]);
 
-  /** 页面组件实例 */
-  const pageRef = ref(null);
+    /** 表格列配置 */
+    const columns = ref([
+        { type: 'index', label: '#', align: 'center', width: 80 },
+        { label: '录入员', prop: 'sysUserName', align: 'center' },
+        { label: '录入审核订单', prop: 'orderCount', align: 'center' },
+        { label: '录入书籍数量', prop: 'totalNum', align: 'center' },
+        { label: '实际回收数量', prop: 'totalRecycleReal', align: 'center' },
+        { label: '品相良好', prop: 'totalGoodNum', align: 'center' },
+        { label: '品相一般', prop: 'totalGeneralNum', align: 'center' },
+        { label: '品相极差', prop: 'totalBadNum', align: 'center' },
+        {
+            label: '不良率',
+            prop: 'badRate',
+            align: 'center',
+            formatter: (row) => (row.badRate || 0) + '%'
+        },
+        { label: '预估金额', prop: 'totalExpectMoney', align: 'center' },
+        { label: '审核金额', prop: 'totalAuditMoney', align: 'center' },
+        { label: '审核日期', prop: 'statisticDate', align: 'center' }
+    ]);
 
-  const pageConfig = reactive({
-    pageUrl: '/order/recycleOrderStatistic/audit/todayList', // 默认使用实时统计接口
-    exportUrl: '/order/recycleOrderStatistic/audit/export',
-    fileName: '录入统计',
-    cacheKey: 'entryStatisticTable'
-  });
+    /** 页面组件实例 */
+    const pageRef = ref(null);
 
-  /**
-   * 自定义表格汇总计算方法
-   * @param {Object} param0 - 表格数据和列信息
-   * @returns {Array} - 汇总行显示的数据
-   */
-  function getSummaries({ columns, data }) {
-    const sums = [];
-    columns.forEach((column, index) => {
-      if (index === 0) {
-        sums[index] = '合计';
-        return;
-      }
+    const pageConfig = reactive({
+        pageUrl: '/order/recycleOrderStatistic/audit/todayList', // 默认使用实时统计接口
+        exportUrl: '/order/recycleOrderStatistic/audit/export',
+        fileName: '录入统计',
+        cacheKey: 'entryStatisticTable'
+    });
 
-      const values = data.map((item) => Number(item[column.property]));
+    /**
+     * 自定义表格汇总计算方法
+     * @param {Object} param0 - 表格数据和列信息
+     * @returns {Array} - 汇总行显示的数据
+     */
+    function getSummaries({ columns, data }) {
+        const sums = [];
+        columns.forEach((column, index) => {
+            if (index === 0) {
+                sums[index] = '合计';
+                return;
+            }
 
-      if (!values.length) {
-        sums[index] = 'N/A';
-        return;
-      }
+            const values = data.map((item) => Number(item[column.property]));
 
-      switch (column.property) {
-        case 'badRate': {
-          // 不良率计算平均值
-          const validValues = values.filter((value) => value && !isNaN(value));
-          if (validValues.length > 0) {
-            const sum = validValues.reduce((prev, curr) => prev + curr, 0);
-            sums[index] = (sum / validValues.length).toFixed(2) + '%';
-          } else {
-            sums[index] = '';
-          }
-          break;
-        }
-        case 'orderCount':
-        case 'totalNum':
-        case 'totalRecycleReal':
-        case 'totalGoodNum':
-        case 'totalGeneralNum':
-        case 'totalBadNum': {
-          // 数量类字段求和
-          const sum = values.reduce((prev, curr) => {
-            const value = Number(curr);
-            if (!isNaN(value)) {
-              return prev + value;
-            } else {
-              return prev;
+            if (!values.length) {
+                sums[index] = 'N/A';
+                return;
             }
-          }, 0);
-          sums[index] = sum;
-          break;
-        }
-        case 'totalExpectMoney':
-        case 'totalAuditMoney': {
-          // 金额类字段求和,保留两位小数
-          const sum = values.reduce((prev, curr) => {
-            const value = Number(curr);
-            if (!isNaN(value)) {
-              return prev + value;
-            } else {
-              return prev;
+
+            switch (column.property) {
+                case 'badRate': {
+                    // 不良率计算平均值
+                    const validValues = values.filter(
+                        (value) => value && !isNaN(value)
+                    );
+                    if (validValues.length > 0) {
+                        const sum = validValues.reduce(
+                            (prev, curr) => prev + curr,
+                            0
+                        );
+                        sums[index] =
+                            (sum / validValues.length).toFixed(2) + '%';
+                    } else {
+                        sums[index] = '';
+                    }
+                    break;
+                }
+                case 'orderCount':
+                case 'totalNum':
+                case 'totalRecycleReal':
+                case 'totalGoodNum':
+                case 'totalGeneralNum':
+                case 'totalBadNum': {
+                    // 数量类字段求和
+                    const sum = values.reduce((prev, curr) => {
+                        const value = Number(curr);
+                        if (!isNaN(value)) {
+                            return prev + value;
+                        } else {
+                            return prev;
+                        }
+                    }, 0);
+                    sums[index] = sum;
+                    break;
+                }
+                case 'totalExpectMoney':
+                case 'totalAuditMoney': {
+                    // 金额类字段求和,保留两位小数
+                    const sum = values.reduce((prev, curr) => {
+                        const value = Number(curr);
+                        if (!isNaN(value)) {
+                            return prev + value;
+                        } else {
+                            return prev;
+                        }
+                    }, 0);
+                    sums[index] = sum.toFixed(2);
+                    break;
+                }
+                default:
+                    sums[index] = '';
             }
-          }, 0);
-          sums[index] = sum.toFixed(2);
-          break;
-        }
-        default:
-          sums[index] = '';
-      }
-    });
+        });
 
-    return sums;
-  }
+        return sums;
+    }
 
-  //刷新表格
-  function reload(where) {
-    pageRef.value?.reload(where);
-  }
+    //刷新表格
+    function reload(where) {
+        pageRef.value?.reload(where);
+    }
 
-  //导出excel
-  function handleExportExcel() {
-    pageRef.value?.exportData('录入统计');
-  }
+    //导出excel
+    function handleExportExcel() {
+        pageRef.value?.exportData('录入统计');
+    }
 </script>