Bläddra i källkod

lizhuo submits AnnualSaleGoal at 2023-7-27 17:00

002637 1 år sedan
förälder
incheckning
23a9ac5f5f

+ 31 - 30
src/views/business/spd/goal_management/AnnualSaleGoalMerge.vue

@@ -608,6 +608,7 @@ import deepCopy from "@gby/deep-copy";
 // 树形参照
 import TreeRefers from '@/components/Refers/treeRefer.vue'
 import ElPopoverSelectV2 from "@/components/popover-select-v2"
+import log from "../../../monitor/job/log";
 
 export default {
   name: "AnnualSaleGoalMerge",
@@ -1112,43 +1113,43 @@ export default {
       mergeAnnualSaleMergeDetails(query).then(response => {
         console.log(response);
         this.annualSaleGoalMergeDetailsList = response.data.consolidatedDetail
-        if (classify !== '销售区域') {
-          this.areaDetailList = []
-          this.customerDetailList = []
-        } else {
-          this.areaDetailList = response.data.areaDetail
-          this.customerDetailList = response.data.customerDetail
-        }
         this.computeTotal()
       })
     },
     // 获得区域目标汇总or客户目标汇总
     getNewTwoArray() {
-      let activeName = this.activeName
-      let array = deepCopy(this.annualSaleGoalMergeDetailsList)
-      console.log(this.annualSaleGoalMergeDetailsList);
-      if (activeName === 'annualSaleGoalMergeDetails') {
-        console.log('annualSaleGoalMergeDetails')
-      } else if (activeName === 'zoneGoalSum(year)') {
-        for (let i = 0; i < array.length; i++) {
-          for (let j = 0; j < array.length; j++) {
-            if (i !== j && array[i].saleOrg === array[j].saleOrg && array[i].saleZone === array[j].saleZone && array[i].creator === array[j].creator) {
-              array[i].totalGoal += array[j].totalGoal
-              array.splice(j, 1)
-            }
+      let arr = JSON.parse(JSON.stringify(this.annualSaleGoalMergeDetailsList))
+      // 如果子表标签是annualSaleGoalMergeDetails 或者 主表的目标分类是“销售区域”
+      if (this.activeName === 'annualSaleGoalMergeDetails' || this.form.goalCategory !== '销售区域') {
+        this.areaDetailList = null
+        this.customerDetailList = null
+        return
+      }
+      // 根据某三个属性进行合并并相加totalGoal的函数
+      const mergeAndSumTotalGoal = (array) => {
+        return Array.from(array.reduce((map, obj) => {
+          let key = null
+          if (this.activeName === 'zoneGoalSum(year)') {
+            key = `${obj.saleOrg}-${obj.saleZone}-${obj.creator}`
+          } else if (this.activeName === 'customerGoalSum(year)') {
+            key = `${obj.saleOrg}-${obj.saleZone}-${obj.custom}`
           }
-        }
-        this.areaDetailList = array
-      } else if (activeName === 'customerGoalSum(year)') {
-        for (let i = 0; i < array.length; i++) {
-          for (let j = 0; j < array.length; j++) {
-            if (i !== j && array[i].saleOrg === array[j].saleOrg && array[i].saleZone === array[j].saleZone && array[i].custom === array[j].custom) {
-              array[i].totalGoal += array[j].totalGoal
-              array.splice(j, 1)
-            }
+          console.log(key);
+          if (map.has(key)) {
+            const existingObj = map.get(key)
+            existingObj.totalGoal += obj.totalGoal
+          } else {
+            map.set(key, { ...obj })
           }
-        }
-        this.customerDetailList = array
+          return map
+        }, new Map()).values())
+      }
+      // 调用合并函数
+      const mergedArray = mergeAndSumTotalGoal(arr)
+      if (this.activeName === 'zoneGoalSum(year)') {
+        this.areaDetailList = mergedArray
+      } else if (this.activeName === 'customerGoalSum(year)') {
+        this.customerDetailList = mergedArray
       }
     }
   }

+ 27 - 8
src/views/business/spd/goal_management/MonthReturnMerge.vue

@@ -276,7 +276,7 @@
         <el-button type="primary" plain icon="el-icon-folder-opened" size="mini" @click="clickMerge">合 并</el-button>
       </el-col>
     </el-row>
-    <el-tabs v-model="activeName">
+    <el-tabs v-model="activeName" @tab-click="getNewTwoArray">
       <el-tab-pane label="月回款目标合并明细" name="monthReturnMergeDetails">
 <!--        v-loading="loading"-->
         <el-table :data="monthReturnMergeDetailsList" @selection-change="handleSelectionChange">
@@ -355,7 +355,7 @@
           </el-table-column>
         </el-table>
       </el-tab-pane>
-      <el-tab-pane label="区域目标汇总(月回款)">
+      <el-tab-pane label="区域目标汇总(月回款)" name="zoneGoalSum(monthReturn)">
         <el-table :data="zoneGoalSumList" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55" align="center" fixed />
           <el-table-column label="销售组织" align="center" prop="saleOrg" width="180" />
@@ -372,15 +372,15 @@
 
 <script>
 import {
-  listMonthReturnMerge,
-  getMonthReturnMerge,
   addMonthReturnMerge,
-  updateMonthReturnMerge,
-  delMonthReturnMerge
+  delMonthReturnMerge,
+  getMonthReturnMerge,
+  listMonthReturnMerge,
+  updateMonthReturnMerge
 } from "@/api/business/spd/goal_management/monthReturnMerge";
 import {
-  getMonthReturnMergeDetails,
   delMonthReturnMergeDetails,
+  getMonthReturnMergeDetails,
   mergeMonthReturnMergeDetails
 } from "@/api/business/spd/goal_management/monthReturnMergeDetails"
 
@@ -719,7 +719,6 @@ export default {
       this.monthReturnMergeDetailsList.push(list)
       this.computeTotal()
     },
-
     // 设置查询的开始和结束时间
     setBeginAndEnd() {
       let array = this.documentDateRange
@@ -730,6 +729,26 @@ export default {
         this.queryParams.beginTime = null
         this.queryParams.endTime = null
       }
+    },
+    getNewTwoArray() {
+      let arr = JSON.parse(JSON.parse(this.monthReturnMergeDetailsList))
+      if (this.activeName === 'monthReturnMergeDetails') {
+        this.zoneGoalSumList = null
+      }
+      // 根据销售组织,销售区域,制单人,月份进行合并,并相加goalSum
+      const mergeAndSumTotalGoal = (array) => {
+        return Array.from(array.reduce((map, obj) => {
+          const key = `${obj.saleOrg}-${obj.saleZone}-${obj.creator}-${obj.monthly}`
+          if (map.has(key)) {
+            const existingObj = map.get(key)
+            existingObj.goalSum +=obj.goalSum
+          } else {
+            map.set(key, { ...obj })
+          }
+          return map
+        }, new Map()).values())
+      }
+      this.zoneGoalSumList = mergeAndSumTotalGoal(arr)
     }
   }
 }