浏览代码

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

002637 1 年之前
父节点
当前提交
a3428384e3

+ 12 - 4
src/api/business/spd/goal_management/annualSaleMergeDetails.js

@@ -20,7 +20,7 @@ export function getAnnualSaleMergeDetails(id) {
 // 新增年销售目标合并明细
 export function addAnnualSaleMergeDetails(data) {
   return request({
-    url: '/goal_management/annualSaleMergeDetails',
+    url: '/goal_management/annualSaleMergeDetails/addAnnualSaleMergeDetails',
     method: 'post',
     data: data
   })
@@ -44,9 +44,17 @@ export function delAnnualSaleMergeDetails(id) {
 }
 
 // 根据目标分类合并,在年度销售目标明细查找
-export function mergeAnnualSaleGoalDetailsByCate(goalCategory) {
+export function mergeAnnualSaleGoalDetails(query) {
   return request({
-    url: '/goal_management/annualGoalMergeDetails/' + goalCategory,
-    method: 'get'
+    url: '/goal_management/annualSaleMergeDetails/mergeAnnualSaleGoalDetails',
+    method: 'get',
+    params: query
+  })
+}
+
+export function setGoalMergeCodeIsNotNull() {
+  return request({
+    url: 'goal_management/annualSaleMergeDetails/setGoalMergeCodeIsNotNull',
+    method: 'post'
   })
 }

+ 311 - 57
src/views/business/spd/goal_management/annualSaleGoal/AnnualSaleGoalMerge.vue

@@ -261,6 +261,16 @@
         </el-col>
         <el-col :span="1.5">
           <el-button
+            type="primary"
+            plain
+            icon="el-icon-plus"
+            size="mini"
+            @click="openDetailsAddDrawer"
+            v-hasPermi="['goal_management:annualSaleMergeDetails:add']"
+          >新增</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
             type="danger"
             plain
             icon="el-icon-delete"
@@ -270,60 +280,61 @@
             v-hasPermi="['goal_management:annualSaleMergeDetails:remove']"
           >删除</el-button>
         </el-col>
-<!--        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
       </el-row>
+      <el-tabs v-model="activeName">
+        <el-tab-pane label="年销售目标合并明细" name="年销售目标合并明细">
+          <el-table v-loading="loading" :data="annualSaleMergeDetailsList1" @selection-change="handleSelectionChange" size="mini">
+            <el-table-column type="selection" width="55" align="center" />
+            <el-table-column label="销售组织" align="center" prop="saleOrg" />
+            <el-table-column label="销售区域" align="center" prop="saleZone" />
+            <el-table-column label="客户" align="center" prop="custom" />
+            <el-table-column label="负责人" align="center" prop="creator" />
+            <el-table-column label="一级分类" align="center" prop="oneLevelClassify" />
+            <el-table-column label="二级分类" align="center" prop="twoLevelClassify" />
+            <el-table-column label="目标合计" align="center" prop="goalSum" />
+            <el-table-column label="一月目标" align="center" prop="januaryGoal" />
+            <el-table-column label="二月目标" align="center" prop="februaryGoal" />
+            <el-table-column label="三月目标" align="center" prop="marchGoal" />
+            <el-table-column label="四月目标" align="center" prop="aprilGoal" />
+            <el-table-column label="五月目标" align="center" prop="mayGoal" />
+            <el-table-column label="六月目标" align="center" prop="juneGoal" />
+            <el-table-column label="七月目标" align="center" prop="julyGoal" />
+            <el-table-column label="八月目标" align="center" prop="augustGoal" />
+            <el-table-column label="九月目标" align="center" prop="septemberGoal" />
+            <el-table-column label="十月目标" align="center" prop="octoberGoal" />
+            <el-table-column label="十一月目标" align="center" prop="novemberGoal" />
+            <el-table-column label="十二月目标" align="center" prop="decemberGoal" />
+            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+              <template slot-scope="scope">
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-edit"
+                  @click="handleUpdate(scope.row)"
+                  v-hasPermi="['goal_management:annualSaleMergeDetails:edit']"
+                >修改</el-button>
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-delete"
+                  @click="handleDelete(scope.row)"
+                  v-hasPermi="['goal_management:annualSaleMergeDetails:remove']"
+                >删除</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination
+            v-show="totalDetails1>0"
+            :total="totalDetails1"
+            :page.sync="queryDetailsParam1.pageNum"
+            :limit.sync="queryDetailsParam1.pageSize"
+            @pagination="getDetailsList"
+          />
+        </el-tab-pane>
+        <el-tab-pane label="区域目标汇总(年)" name="区域目标汇总(年)">配置管理</el-tab-pane>
+        <el-tab-pane label="客户目标汇总(年)" name="客户目标汇总(年)">角色管理</el-tab-pane>
 
-      <el-table v-loading="loading" :data="annualSaleMergeDetailsList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="id唯一标识" align="center" prop="id" />
-        <el-table-column label="合并编码" align="center" prop="mergeCode" />
-        <el-table-column label="销售组织" align="center" prop="saleOrg" />
-        <el-table-column label="销售区域" align="center" prop="saleZone" />
-        <el-table-column label="客户" align="center" prop="custom" />
-        <el-table-column label="负责人" align="center" prop="creator" />
-        <el-table-column label="一级分类" align="center" prop="oneLevelClassify" />
-        <el-table-column label="二级分类" align="center" prop="twoLevelClassify" />
-        <el-table-column label="目标合计" align="center" prop="goalSum" />
-        <el-table-column label="一月目标" align="center" prop="juanaryGoal" />
-        <el-table-column label="二月目标" align="center" prop="februaryGoal" />
-        <el-table-column label="三月目标" align="center" prop="marchGoal" />
-        <el-table-column label="四月目标" align="center" prop="aprilGoal" />
-        <el-table-column label="五月目标" align="center" prop="mayGoal" />
-        <el-table-column label="六月目标" align="center" prop="juneGoal" />
-        <el-table-column label="七月目标" align="center" prop="julyGoal" />
-        <el-table-column label="八月目标" align="center" prop="augustGoal" />
-        <el-table-column label="九月目标" align="center" prop="steptemberGoal" />
-        <el-table-column label="十月目标" align="center" prop="octoberGoal" />
-        <el-table-column label="十一月目标" align="center" prop="novemberGoal" />
-        <el-table-column label="十二月目标" align="center" prop="decemberGoal" />
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['goal_management:annualSaleMergeDetails:edit']"
-            >修改</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['goal_management:annualSaleMergeDetails:remove']"
-            >删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-
+      </el-tabs>
     </el-drawer>
 
     <el-drawer title="年销售目标合并--修改" :visible.sync="drawerEdit" :direction="direction" :before-close="handleClose" size="100%">
@@ -430,13 +441,107 @@
       </el-form>
     </el-drawer>
 
+    <el-drawer title="年销售目标合并--新增" :visible.sync="drawerInnerAdd" :direction="direction" :before-close="handleDrawerClose" :append-to-body="true">
+      <el-form :rules="rulesDetails" :model="formDetails" ref="formDetails" :inline="true" label-width="110px">
+        <el-form-item label="明细编码" prop="mergeCode">
+          <el-input v-model="formDetails.mergeCode" placeholder="编码后端自动生成" disabled />
+        </el-form-item>
+        <el-form-item label="销售组织" prop="saleOrg">
+          <el-popover-select-v2 v-model="formDetails.saleOrg" title="销售组织" valueKey="name" referName="ORG_PARAM" :dataMapping="{
+            saleOrg: 'name'
+          }" :source.sync="formDetails" placeholder="请输入销售组织">
+          </el-popover-select-v2>
+        </el-form-item>
+        <el-form-item label="销售区域" prop="saleZone">
+          <el-popover-select-v2 v-model="formDetails.saleZone" title="销售区域" valueKey="name" referName="ORG_PARAM" :dataMapping="{
+            saleZone: 'name'
+          }" :source.sync="formDetails" placeholder="请输入销售区域">
+          </el-popover-select-v2>
+        </el-form-item>
+        <el-form-item label="客户" prop="custom">
+          <el-popover-select-v2 v-model="formDetails.custom" title="客户" valueKey="name" referName="CUSTOMER_PARAM" :dataMapping="{
+            custom: 'name'
+          }" :source.sync="formDetails" placeholder="请输入客户">
+          </el-popover-select-v2>
+        </el-form-item>
+        <el-form-item label="制单人" prop="creator">
+          <el-popover-select-v2 v-model="formDetails.creator" title="制单人" valueKey="name" referName="CONTACTS_PARAM" :dataMapping="{
+            creator: 'name'
+          }" :source.sync="formDetails" placeholder="请输入制单人">
+          </el-popover-select-v2>
+        </el-form-item>
+        <el-form-item label="一级分类" prop="oneLevelClassify">
+          <el-select v-model="formDetails.oneLevelClassify" placeholder="请输入一级物料" clearable
+                     @focus="chooseTreeRefer('MATERIALCLASSIFY_PARAM', false, '一级物料分类')"
+          ></el-select>
+        </el-form-item>
+        <el-form-item label="二级分类" prop="twoLevelClassify">
+          <el-select v-model="formDetails.twoLevelClassify" placeholder="请输入二级物料" clearable
+                     @focus="chooseTreeRefer('MATERIALCLASSIFY_PARAM', false, '二级物料分类')"
+          ></el-select>
+        </el-form-item>
+        <el-form-item label="一月目标" prop="januaryGoal">
+          <el-input v-model="formDetails.januaryGoal" placeholder="请输入一月目标" />
+        </el-form-item>
+        <el-form-item label="二月目标" prop="februaryGoal">
+          <el-input v-model="formDetails.februaryGoal" placeholder="请输入二月目标" />
+        </el-form-item>
+        <el-form-item label="三月目标" prop="marchGoal">
+          <el-input v-model="formDetails.marchGoal" placeholder="请输入三月目标" />
+        </el-form-item>
+        <el-form-item label="四月目标" prop="aprilGoal">
+          <el-input v-model="formDetails.aprilGoal" placeholder="请输入四月目标" />
+        </el-form-item>
+        <el-form-item label="五月目标" prop="mayGoal">
+          <el-input v-model="formDetails.mayGoal" placeholder="请输入五月目标" />
+        </el-form-item>
+        <el-form-item label="六月目标" prop="juneGoal">
+          <el-input v-model="formDetails.juneGoal" placeholder="请输入六月目标" />
+        </el-form-item>
+        <el-form-item label="七月目标" prop="julyGoal">
+          <el-input v-model="formDetails.julyGoal" placeholder="请输入七月目标" />
+        </el-form-item>
+        <el-form-item label="八月目标" prop="augustGoal">
+          <el-input v-model="formDetails.augustGoal" placeholder="请输入八月目标" />
+        </el-form-item>
+        <el-form-item label="九月目标" prop="septemberGoal">
+          <el-input v-model="formDetails.septemberGoal" placeholder="请输入九月目标" />
+        </el-form-item>
+        <el-form-item label="十月目标" prop="octoberGoal">
+          <el-input v-model="formDetails.octoberGoal" placeholder="请输入十月目标" />
+        </el-form-item>
+        <el-form-item label="十一月目标" prop="novemberGoal">
+          <el-input v-model="formDetails.novemberGoal" placeholder="请输入十一月目标" />
+        </el-form-item>
+        <el-form-item label="十二月目标" prop="decemberGoal">
+          <el-input v-model="formDetails.decemberGoal" placeholder="请输入十二月目标" />
+        </el-form-item>
+        <el-form-item style="margin-left: 115px">
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="submitFormDetails" v-hasPermi="['goal_management:annualSaleMergeDetails:add']">新增</el-button>
+        </el-form-item>
+      </el-form>
+    </el-drawer>
+
     <TreeRefers ref="tree" :single="true" @doSubmit="selectionsToTreeInput"></TreeRefers>
+    <TreeRefers ref="tree" :single="true" @doSubmit="selectionsToTreeInputDetails"></TreeRefers>
   </div>
 </template>
 
 <script>
-import { listAnnualSaleGoalMerge, getAnnualSaleGoalMerge, delAnnualSaleGoalMerge, addAnnualSaleGoalMerge, updateAnnualSaleGoalMerge } from "@/api/business/spd/goal_management/annualSaleGoalMerge";
-import { delAnnualSaleMergeDetails, updateAnnualSaleMergeDetails, getAnnualSaleMergeDetails } from "@/api/business/spd/goal_management/annualSaleMergeDetails"
+import {
+  listAnnualSaleGoalMerge,
+  getAnnualSaleGoalMerge,
+  delAnnualSaleGoalMerge,
+  addAnnualSaleGoalMerge,
+  updateAnnualSaleGoalMerge
+} from "@/api/business/spd/goal_management/annualSaleGoalMerge";
+
+import {
+  mergeAnnualSaleGoalDetails,
+  setGoalMergeCodeIsNotNull,
+  updateAnnualSaleMergeDetails,
+  addAnnualSaleMergeDetails
+} from "@/api/business/spd/goal_management/annualSaleMergeDetails";
 
 // 树形参照
 import TreeRefers from "@/components/Refers/treeRefer.vue"
@@ -510,6 +615,28 @@ export default {
         twoLevelClassifyCode: null,
         twoLevelClassify: null
       },
+      formDetails: {
+        mergeCode: null,
+        saleOrg: null,
+        saleZone: null,
+        custom: null,
+        creator: null,
+        oneLevelClassify: null,
+        twoLevelClassify: null,
+        goalSum: null,
+        januaryGoal: null,
+        februaryGoal: null,
+        marchGoal: null,
+        aprilGoal: null,
+        mayGoal: null,
+        juneGoal: null,
+        julyGoal: null,
+        augustGoal: null,
+        septemberGoal: null,
+        octoberGoal: null,
+        novemberGoal: null,
+        decemberGoal: null
+      },
       // 表单校验
       rules: {
         documentDate: [{required: true, message: '单据日期不能为空', trigger: 'blur'}],
@@ -521,10 +648,14 @@ export default {
         oneLevelClassify: [{required: true, message: '一级分类不能为空', trigger: 'blur'}],
         twoLevelClassify: [{required: true, message: '二级分类不能为空', trigger: 'blur'}],
       },
+      rulesDetails: {},
       // 添加抽屉
       drawerAdd: false,
       // 修改抽屉
       drawerEdit: false,
+      // 内部抽屉
+      drawerInnerAdd: false,
+      drawerInnerEdit: false,
       // 抽屉打开方向
       direction: 'rtl',
       // 目标分类
@@ -561,7 +692,11 @@ export default {
       referCondition: { type: '', isPage: true, title: '' },
       classList: [],
       // 合并子表明细
-      annualSaleMergeDetailsList: []
+      annualSaleMergeDetailsList1: [],
+      totalDetails1: 0,
+      queryDetailsParam1: { pageNum: 1, pageSize: 10, goalCategory: null, condition: null },
+      // 新增页的标签页
+      activeName: '年销售目标合并明细'
     };
   },
   created() {
@@ -577,6 +712,14 @@ export default {
         this.loading = false;
       });
     },
+    getDetailsList() {
+      this.loading = true;
+      addAnnualSaleMergeDetails(this.queryDetailsParam1).then(response => {
+        this.annualSaleMergeDetailsList1 = response.rows;
+        this.totalDetails1 = response.total;
+        this.loading = false;
+      });
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -608,6 +751,32 @@ export default {
       };
       this.resetForm("form");
     },
+    resetDetails() {
+      this.formDetails = {
+        id: null,
+        mergeCode: null,
+        saleOrg: null,
+        saleZone: null,
+        custom: null,
+        creator: null,
+        oneLevelClassify: null,
+        twoLevelClassify: null,
+        goalSum: null,
+        januaryGoal: null,
+        februaryGoal: null,
+        marchGoal: null,
+        aprilGoal: null,
+        mayGoal: null,
+        juneGoal: null,
+        julyGoal: null,
+        augustGoal: null,
+        septemberGoal: null,
+        octoberGoal: null,
+        novemberGoal: null,
+        decemberGoal: null
+      };
+      this.resetForm("formDetails");
+    },
     /** 搜索按钮操作 */
     handleQuery() {
       console.log(this.queryParams);
@@ -693,6 +862,29 @@ export default {
         }
       });
     },
+    submitFormDetails() {
+      console.log(this.formDetails);
+      this.$refs["formDetails"].validate(valid => {
+        if (valid) {
+          if (this.formDetails.id != null) {
+            updateAnnualSaleMergeDetails(this.formDetails).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.drawerInnerAdd = false;
+              this.getDetailsList();
+            });
+          } else {
+            addAnnualSaleMergeDetails(this.formDetails).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.drawerInnerAdd = false;
+              this.getDetailsList();
+            });
+          }
+          this.rules.saleZone = [{required: true, message: '销售区域不能为空', trigger: 'blur'}]
+          this.rules.oneLevelClassify = [{required: true, message: '一级分类不能为空', trigger: 'blur'}]
+          this.rules.twoLevelClassify = [{required: true, message: '二级分类不能为空', trigger: 'blur'}]
+        }
+      });
+    },
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids;
@@ -715,6 +907,13 @@ export default {
         done();
         this.reset()
         this.getList()
+        this.setGoalMergeCodeIsNotNull()
+      }).catch(_ => {})
+    },
+    handleDrawerClose(done) {
+      this.$confirm('确认关闭?').then(_ => {
+        done();
+        this.resetDetails()
       }).catch(_ => {})
     },
     // 改变目标分类
@@ -764,12 +963,67 @@ export default {
         this.form.twoLevelClassifyCode = selection.code
       }
     },
+    selectionsToTreeInputDetails(selection) {
+      this.classList.push(selection)
+      if (this.referCondition.title === '一级物料分类') {
+        if (selection.code.length !== 1) {
+          return this.$message.error('请在一级物料分类中选择数据')
+        }
+        this.formDetails.oneLevelClassify = selection.name
+      } else if (this.referCondition.title === '二级物料分类') {
+        if (selection.code.length !== 4) {
+          return this.$message.error('请在二级物料分类中选择数据')
+        }
+        this.formDetails.twoLevelClassify = selection.name
+      }
+    },
     // 根据目标分类合并数据
     annualGoalMerge() {
-      const goalCategory = this.form.goalCategory
-      if (goalCategory === null || goalCategory === '') {
+      if (this.activeName !== '年销售目标合并明细') {
+        return this.$message.info(this.activeName + '不支持新增、合并、删除操作')
+      }
+      this.queryDetailsParam1.goalCategory = this.form.goalCategory
+      if (this.queryDetailsParam1.goalCategory === null || this.queryDetailsParam1.goalCategory === '') {
         return this.$message.info('请在主表输入“目标分类”')
+      } else if (this.queryDetailsParam1.goalCategory === '销售区域') {
+        this.queryDetailsParam1.condition = this.form.saleZone
+        if (this.queryDetailsParam1.condition === null || this.queryDetailsParam1.condition === '') {
+          return this.$message.info('请在主表输入“销售区域”')
+        }
+      } else if (this.queryDetailsParam1.goalCategory === '一级分类') {
+        this.queryDetailsParam1.condition = this.form.oneLevelClassify
+        if (this.queryDetailsParam1.condition === null || this.queryDetailsParam1.condition === '') {
+          return this.$message.info('请在主表输入“一级分类”')
+        }
+      } else if (this.queryDetailsParam1.goalCategory === '二级分类') {
+        this.queryDetailsParam1.condition = this.form.twoLevelClassify
+        if (this.queryDetailsParam1.condition === null || this.queryDetailsParam1.condition === '') {
+          return this.$message.info('请在主表输入“二级分类”')
+        }
       }
+      this.loading = true
+      mergeAnnualSaleGoalDetails(this.queryDetailsParam1).then(response => {
+        console.log(response);
+        this.annualSaleMergeDetailsList1 = response.rows
+        this.totalDetails1 = response.total
+        this.loading = false
+        const list = response.rows
+        for (const listElement of list) {
+          this.form.goalTotal = this.form.goalTotal + listElement.totalGoal
+        }
+      })
+    },
+    // 将合并明细隐藏
+    setGoalMergeCodeIsNotNull() {
+      setGoalMergeCodeIsNotNull().then(response => {
+        console.log(response);
+        this.annualSaleMergeDetailsList1 = []
+      })
+    },
+    // 打开新增细节抽屉
+    openDetailsAddDrawer() {
+      this.resetDetails()
+      this.drawerInnerAdd = !this.drawerInnerAdd
     }
   }
 };