소스 검색

refactor(forecast-summary): 优化销售预测汇总数据加载逻辑

yz 1 개월 전
부모
커밋
e80e8cd644
1개의 변경된 파일43개의 추가작업 그리고 41개의 파일을 삭제
  1. 43 41
      src/views/forecast-summary/summaryIndex.js

+ 43 - 41
src/views/forecast-summary/summaryIndex.js

@@ -7,7 +7,7 @@
  * @typedef {import('./types').ForecastSummaryComponent} ForecastSummaryComponent
  */
 
-import { getSalesForecastMainList, getForecastSummaryDetail, exportSalesForecastTemplate, exportSalesForecastByMonth, exportSalesForecastByMainId } from '@/api/forecast/forecast-summary'
+import { getSalesForecastMainPage, getForecastSummaryDetail, exportSalesForecastTemplate, exportSalesForecastByMonth, exportSalesForecastByMainId } from '@/api/forecast/forecast-summary'
 import {
   APPROVAL_STATUS,
   APPROVAL_STATUS_CONFIG,
@@ -516,11 +516,11 @@ import { mapGetters } from 'vuex'
            customerName: merged.customerName
          }
 
-         const response = await getSalesForecastMainList(
-           page.currentPage || 1,
-           page.pageSize || 10,
-           safeParams
-         )
+         const response = await getSalesForecastMainPage(
+            page.currentPage || 1,
+            page.pageSize || 10,
+            safeParams
+          )
 
          if (response && response.data && response.data.code === 200 && response.data.data) {
            const pageData = response.data.data
@@ -528,20 +528,21 @@ import { mapGetters } from 'vuex'
            // 字段类型转换与BigInt处理
            this.data = records.map(r => {
              const children = Array.isArray(r.pcBladeSalesForecastSummaryList)
-               ? r.pcBladeSalesForecastSummaryList.map(it => ({
-                   ...it,
-                   idBigint: this.safeBigInt(it.id),
-                   forecastMainIdBigint: it.forecastMainId != null ? this.safeBigInt(it.forecastMainId) : null,
-                   year: Number(it.year),
-                   month: Number(it.month),
-                   forecastQuantity: typeof it.forecastQuantity === 'string' ? Number(it.forecastQuantity) : Number(it.forecastQuantity),
-                   // 继承主表字段,确保子表数据完整性
-                   customerName: it.customerName != null ? it.customerName : r.customerName,
-                   approvalStatus: it.approvalStatus != null ? it.approvalStatus : r.approvalStatus,
-                   approvedName: it.approvedName != null ? it.approvedName : r.approvedName,
-                   approvedTime: it.approvedTime != null ? it.approvedTime : r.approvedTime
-                 }))
-               : []
+                ? r.pcBladeSalesForecastSummaryList.map(it => ({
+                    ...it,
+                    idBigint: this.safeBigInt(it.id),
+                    forecastMainIdBigint: it.forecastMainId != null ? this.safeBigInt(it.forecastMainId) : null,
+                    year: Number(it.year),
+                    month: Number(it.month),
+                    forecastQuantity: typeof it.forecastQuantity === 'string' ? Number(it.forecastQuantity) : Number(it.forecastQuantity),
+                    // 继承主表字段,确保子表数据完整性
+                    customerName: it.customerName != null ? it.customerName : r.customerName,
+                    approvalStatus: it.approvalStatus != null ? it.approvalStatus : r.approvalStatus,
+                    approvedName: it.approvedName != null ? it.approvedName : r.approvedName,
+                    approvedTime: it.approvedTime != null ? it.approvedTime : r.approvedTime
+                  }))
+                : []
+
              return {
                ...r,
                idBigint: this.safeBigInt(r.id),
@@ -550,35 +551,36 @@ import { mapGetters } from 'vuex'
                pcBladeSalesForecastSummaryList: children
              }
            })
-           this.page.total = Number(pageData.total) || 0
-           this.page.currentPage = Number(pageData.current) || 1
-           this.page.pageSize = Number(pageData.size) || 10
-         } else {
-           this.data = []
-           this.page.total = 0
+
+           this.page.total = Number(pageData.total || 0)
+           this.page.pageSize = Number(pageData.size || page.pageSize)
+           this.page.currentPage = Number(pageData.current || page.currentPage)
          }
        } catch (e) {
-         console.error('加载销售预测汇总数据失败:', e)
-         this.$message.error('加载失败,请稍后重试')
+         console.error('加载列表失败:', e)
        } finally {
          this.loading = false
        }
      },
 
      /**
-      * BigInt 安全转换(兼容 stringify)
-      * @param {string|number|bigint|null|undefined} v
-      * @returns {string|null}
-      */
-     safeBigInt(v) {
-       try {
-         if (v === null || v === undefined) return null
-         const n = BigInt(v)
-         return n.toString()
-       } catch (e) {
-         return v != null ? String(v) : null
-       }
-     },
+       * BigInt 安全转换(兼容 stringify)
+       * @param {string|number|bigint|null|undefined} v
+       * @returns {string|null}
+       */
+      safeBigInt(v) {
+        try {
+          if (v === null || v === undefined) return '0'
+          // 兼容旧浏览器/运行环境无 BigInt 的情况
+          if (typeof BigInt === 'function') {
+            const n = BigInt(v)
+            return n.toString()
+          }
+          return String(v)
+        } catch (e) {
+          return v != null ? String(v) : null
+        }
+      },
 
      /**
       * 查询主表对应的子表明细