瀏覽代碼

refactor(forecast-summary): 重构预测汇总页面以使用主表接口

yz 1 月之前
父節點
當前提交
9c25bd7cba
共有 2 個文件被更改,包括 38 次插入23 次删除
  1. 32 18
      src/views/forecast-summary/summaryIndex.js
  2. 6 5
      src/views/forecast-summary/types.d.ts

+ 32 - 18
src/views/forecast-summary/summaryIndex.js

@@ -2,12 +2,12 @@
 
 /**
  * @typedef {import('@/api/forecast/types').ForecastSummaryQueryParams} ForecastSummaryQueryParams
- * @typedef {import('@/api/forecast/types').ForecastSummaryRecord} ForecastSummaryRecord
+ * @typedef {import('@/api/forecast/types').SalesForecastMainListItemRecord} SalesForecastMainListItemRecord
  * @typedef {import('./types').PageConfig} PageConfig
  * @typedef {import('./types').ForecastSummaryComponent} ForecastSummaryComponent
  */
 
-import { getForecastSummaryList, getForecastSummaryDetail } from '@/api/forecast/forecast-summary'
+import { getSalesForecastMainList, getForecastSummaryDetail } from '@/api/forecast/forecast-summary'
 import {
   APPROVAL_STATUS,
   APPROVAL_STATUS_CONFIG,
@@ -60,13 +60,13 @@ export default {
 
       /**
        * 表格数据
-       * @type {Array<ForecastSummaryRecord>}
+       * @type {Array<SalesForecastMainListItemRecord>}
        */
       data: [],
 
       /**
        * 选中的行数据
-       * @type {Array<ForecastSummaryRecord>}
+       * @type {Array<SalesForecastMainListItemRecord>}
        */
       selectionList: [],
 
@@ -351,7 +351,7 @@ export default {
     /**
      * 选择变化处理
      * @this {ForecastSummaryComponent & Vue}
-     * @param {Array<ForecastSummaryRecord>} selection - 选中的行数据
+     * @param {Array<SalesForecastMainListItemRecord>} selection - 选中的行数据
      */
     selectionChange(selection) {
       this.selectionList = selection
@@ -403,30 +403,44 @@ export default {
     async onLoad(page, params = {}) {
       this.loading = true
       try {
-        const queryParams = {
-          ...this.query,
-          ...params
+        // 仅挑选 main-list 支持的查询参数,避免无效字段影响
+        const merged = { ...this.query, ...params }
+        const safeParams = {
+          year: merged.year,
+          month: merged.month,
+          customerName: merged.customerName
         }
 
-        const response = await getForecastSummaryList(
+        const response = await getSalesForecastMainList(
           page.currentPage || 1,
           page.pageSize || 10,
-          queryParams
+          safeParams
         )
 
-        if (response && response.data && response.data.code === 200) {
-          const { records, total, current, size } = response.data.data
-          this.data = records || []
-          this.page.total = total || 0
-          this.page.currentPage = current || 1
-          this.page.pageSize = size || 10
+        if (response && response.data && response.data.code === 200 && response.data.data) {
+          const pageData = response.data.data
+          const records = Array.isArray(pageData.records) ? pageData.records : []
+          // 扁平化子列表供表格展示(保持ID为后端返回的原样,避免大整数精度丢失)
+          const flat = []
+          for (const rec of records) {
+            const list = Array.isArray(rec.pcBladeSalesForecastSummaryList) ? rec.pcBladeSalesForecastSummaryList : []
+            for (const item of list) {
+              // 通过浅拷贝确保不会意外修改原对象
+              flat.push({ ...item })
+            }
+          }
+
+          this.data = flat
+          this.page.total = Number(pageData.total) || 0
+          this.page.currentPage = Number(pageData.current) || 1
+          this.page.pageSize = Number(pageData.size) || 10
         } else {
           this.$message.error(response?.data?.message || '获取数据失败')
           this.data = []
           this.page.total = 0
         }
       } catch (error) {
-        console.error('获取预测汇总列表失败:', error)
+        console.error('获取预测主表分页列表失败:', error)
         this.$message.error('获取数据失败,请稍后重试')
         this.data = []
         this.page.total = 0
@@ -439,7 +453,7 @@ export default {
      * 获取预测汇总详情
      * @this {ForecastSummaryComponent & Vue}
      * @param {string|number} id - 预测汇总ID
-     * @returns {Promise<ForecastSummaryRecord|null>} 详情数据
+     * @returns {Promise<import('@/api/forecast/types').ForecastSummaryRecord|null>} 详情数据
      */
     async getForecastSummaryDetail(id) {
       try {

+ 6 - 5
src/views/forecast-summary/types.d.ts

@@ -1,6 +1,6 @@
 // 销售预测汇总页面类型定义
 
-import type { ForecastSummaryQueryParams, ForecastSummaryRecord } from '@/api/forecast/types'
+import type { ForecastSummaryRecord, SalesForecastMainListItemRecord } from '@/api/forecast/types'
 
 // 页面配置类型
 export interface PageConfig {
@@ -12,11 +12,12 @@ export interface PageConfig {
 // 组件数据类型
 export interface ForecastSummaryComponentData {
   form: Record<string, any>
-  query: ForecastSummaryQueryParams
+  // 由于 DEFAULT_FORECAST_SUMMARY_QUERY 中包含 null 值,这里放宽为 Record<string, any>
+  query: Record<string, any>
   loading: boolean
   page: PageConfig
-  data: Array<ForecastSummaryRecord>
-  selectionList: Array<ForecastSummaryRecord>
+  data: Array<SalesForecastMainListItemRecord>
+  selectionList: Array<SalesForecastMainListItemRecord>
   option: AvueCrudOption
 }
 
@@ -26,7 +27,7 @@ export interface ForecastSummaryComponent extends ForecastSummaryComponentData {
   getForecastSummaryDetail: (id: string | number) => Promise<ForecastSummaryRecord | null>
   searchChange: (params: Record<string, any>, done: () => void) => void
   searchReset: () => void
-  selectionChange: (selection: Array<ForecastSummaryRecord>) => void
+  selectionChange: (selection: Array<SalesForecastMainListItemRecord>) => void
   currentChange: (currentPage: number) => void
   sizeChange: (pageSize: number) => void
   refreshChange: () => void