Pārlūkot izejas kodu

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

002637 1 gadu atpakaļ
vecāks
revīzija
5ad5501b0c

+ 5 - 5
src/api/business/spd/goal_management/monthReturnGoal.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 查询月回款目标填报列表
 export function listMonthReturnGoal(query) {
   return request({
-    url: '/goal_management/monthReturnGoal/list',
+    url: '/mk/monthReturnGoal/list',
     method: 'get',
     params: query
   })
@@ -12,7 +12,7 @@ export function listMonthReturnGoal(query) {
 // 查询月回款目标填报详细
 export function getMonthReturnGoal(id) {
   return request({
-    url: '/goal_management/monthReturnGoal/' + id,
+    url: '/mk/monthReturnGoal/' + id,
     method: 'get'
   })
 }
@@ -20,7 +20,7 @@ export function getMonthReturnGoal(id) {
 // 新增月回款目标填报
 export function addMonthReturnGoal(data) {
   return request({
-    url: '/goal_management/monthReturnGoal',
+    url: '/mk/monthReturnGoal',
     method: 'post',
     data: data
   })
@@ -29,7 +29,7 @@ export function addMonthReturnGoal(data) {
 // 修改月回款目标填报
 export function updateMonthReturnGoal(data) {
   return request({
-    url: '/goal_management/monthReturnGoal',
+    url: '/mk/monthReturnGoal',
     method: 'put',
     data: data
   })
@@ -38,7 +38,7 @@ export function updateMonthReturnGoal(data) {
 // 删除月回款目标填报
 export function delMonthReturnGoal(id) {
   return request({
-    url: '/goal_management/monthReturnGoal/' + id,
+    url: '/mk/monthReturnGoal/' + id,
     method: 'delete'
   })
 }

+ 5 - 5
src/api/business/spd/goal_management/monthReturnGoalDetails.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 查询月回款目标填报明细列表
 export function listMonthReturnGoalDetails(query) {
   return request({
-    url: '/goal_management/monthReturnGoalDetails/list',
+    url: '/mk/monthReturnGoalDetails/list',
     method: 'get',
     params: query
   })
@@ -12,7 +12,7 @@ export function listMonthReturnGoalDetails(query) {
 // 查询月回款目标填报明细详细
 export function getMonthReturnGoalDetails(id) {
   return request({
-    url: '/goal_management/monthReturnGoalDetails/' + id,
+    url: '/mk/monthReturnGoalDetails/parent/' + id,
     method: 'get'
   })
 }
@@ -20,7 +20,7 @@ export function getMonthReturnGoalDetails(id) {
 // 新增月回款目标填报明细
 export function addMonthReturnGoalDetails(data) {
   return request({
-    url: '/goal_management/monthReturnGoalDetails',
+    url: '/mk/monthReturnGoalDetails',
     method: 'post',
     data: data
   })
@@ -29,7 +29,7 @@ export function addMonthReturnGoalDetails(data) {
 // 修改月回款目标填报明细
 export function updateMonthReturnGoalDetails(data) {
   return request({
-    url: '/goal_management/monthReturnGoalDetails',
+    url: '/mk/monthReturnGoalDetails',
     method: 'put',
     data: data
   })
@@ -38,7 +38,7 @@ export function updateMonthReturnGoalDetails(data) {
 // 删除月回款目标填报并明细
 export function delMonthReturnGoalDetails(id) {
   return request({
-    url: '/goal_management/monthReturnGoalDetails/' + id,
+    url: '/mk/monthReturnGoalDetails/' + id,
     method: 'delete'
   })
 }

+ 325 - 8
src/views/business/spd/goal_management/MonthReturnGoal.vue

@@ -18,11 +18,17 @@
         />
       </el-form-item>
       <el-form-item label="单据日期" prop="documentDate">
-        <el-date-picker clearable
-                        v-model="queryParams.documentDate"
-                        type="date"
-                        value-format="yyyy-MM-dd"
-                        placeholder="请选择单据日期">
+        <el-date-picker
+          v-model="documentDateRange"
+          @change="setBeginAndEnd"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          align="right"
+          unlink-panels
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :picker-options="pickerOptions">
         </el-date-picker>
       </el-form-item>
       <el-form-item label="年度" prop="annual">
@@ -116,8 +122,8 @@
       </el-table-column>
       <el-table-column label="年度" align="center" prop="annual"/>
       <el-table-column label="客户" align="center" prop="custom"/>
-      <el-table-column label="销售区域" align="center" prop="saleZone"/>
       <el-table-column label="制单人" align="center" prop="creator"/>
+      <el-table-column label="销售区域" align="center" prop="saleZone"/>
       <el-table-column label="部门" align="center" prop="dept"/>
       <el-table-column label="目标合计" align="center" prop="goalSum"/>
       <el-table-column label="备注" align="center" prop="notes"/>
@@ -143,6 +149,196 @@
         </template>
       </el-table-column>
     </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <el-drawer :title="title" :visible.sync="open" direction="rtl" :before-close="handleClose" size="100%">
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="编码" prop="code">
+              <el-input v-model="form.code" placeholder="编码后端自动生成" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="目标名称" prop="goalName">
+              <el-input v-model="form.goalName" placeholder="目标名称后端自动生成" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="单据日期" prop="documentDate">
+              <el-date-picker clearable
+                              v-model="form.documentDate"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="请选择单据日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="年度" prop="annual">
+              <el-date-picker
+                v-model="form.annual"
+                type="year"
+                value-format="yyyy"
+                placeholder="选择年度">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="客户" prop="custom">
+              <el-popover-select-v2 v-model="form.custom" title="客户" valueKey="name"
+                                    referName="CUSTOMER_PARAM"
+                                    :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                    :source.sync="form" placeholder="请输入客户">
+              </el-popover-select-v2>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="制单人" prop="creator">
+              <el-popover-select-v2 v-model="form.creator" title="制单人" valueKey="name"
+                                    referName="CONTACTS_PARAM"
+                                    :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                    :source.sync="form" placeholder="请输入制单人">
+              </el-popover-select-v2>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="销售区域" prop="saleZone">
+              <el-popover-select-v2 v-model="form.saleZone" title="销售区域" valueKey="name"
+                                    referName="CUSTOMER_PARAM"
+                                    :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                    :source.sync="form" placeholder="请输入销售区域">
+              </el-popover-select-v2>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="部门" prop="dept">
+              <el-popover-select-v2 v-model="form.dept" title="部门" valueKey="name"
+                                    referName="DEPT_PARAM"
+                                    :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                    :source.sync="form" placeholder="请输入部门">
+              </el-popover-select-v2>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="目标合计" prop="goalSum">
+              <el-input v-model="form.goalSum" placeholder="目标合计自动计算" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="备注" prop="notes">
+              <el-input v-model="form.notes" placeholder="请输入备注"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="单据状态" prop="documentStatus">
+              <el-input v-model="form.documentStatus" placeholder="新增页默认'未提交'" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="操作">
+              <el-button type="primary" @click="submitForm">确 定</el-button>
+              <el-button @click="cancel">取 消</el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddDetails">增行</el-button>
+        </el-col>
+      </el-row>
+      <el-tabs v-model="activeName">
+        <el-tab-pane label="月回款目标明细" name="monthReturnGoalDetails">
+<!--          v-loading="loading"-->
+          <el-table :data="monthReturnGoalDetailsList" @selection-change="handleSelectionChange">
+            <el-table-column type="selection" width="55" align="center" fixed />
+            <el-table-column label="销售组织" align="center" prop="saleOrg" width="180">
+              <template slot-scope="scope">
+                <el-popover-select-v2 v-model="monthReturnGoalDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
+                                      referName="CUSTOMER_PARAM"
+                                      :dataMapping="{saleOrg: 'name'}"
+                                      :source.sync="monthReturnGoalDetailsList[scope.$index]" placeholder="请输入销售组织">
+                </el-popover-select-v2>
+              </template>
+            </el-table-column>
+            <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
+              <template slot-scope="scope">
+                <el-popover-select-v2 v-model="monthReturnGoalDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
+                                      referName="CUSTOMER_PARAM"
+                                      :dataMapping="{saleZone: 'name'}"
+                                      :source.sync="monthReturnGoalDetailsList[scope.$index]" placeholder="请输入销售区域">
+                </el-popover-select-v2>
+              </template>
+            </el-table-column>
+            <el-table-column label="客户" align="center" prop="custom" width="180">
+              <template slot-scope="scope">
+                <el-popover-select-v2 v-model="monthReturnGoalDetailsList[scope.$index].custom" title="客户" valueKey="name"
+                                      referName="CUSTOMER_PARAM"
+                                      :dataMapping="{custom: 'name'}"
+                                      :source.sync="monthReturnGoalDetailsList[scope.$index]" placeholder="请输入客户">
+                </el-popover-select-v2>
+              </template>
+            </el-table-column>
+            <el-table-column label="部门" align="center" prop="dept" width="180">
+              <template slot-scope="scope">
+                <el-popover-select-v2 v-model="monthReturnGoalDetailsList[scope.$index].dept" title="部门" valueKey="name"
+                                      referName="DEPT_PARAM"
+                                      :dataMapping="{dept: 'name'}"
+                                      :source.sync="monthReturnGoalDetailsList[scope.$index]" placeholder="请输入客户">
+                </el-popover-select-v2>
+              </template>
+            </el-table-column>
+            <el-table-column label="制单人" align="center" prop="creator" width="180">
+              <template slot-scope="scope">
+                <el-popover-select-v2 v-model="monthReturnGoalDetailsList[scope.$index].creator" title="负责人" valueKey="name"
+                                      referName="CONTACTS_PARAM"
+                                      :dataMapping="{creator: 'name'}"
+                                      :source.sync="monthReturnGoalDetailsList[scope.$index]" placeholder="请输入负责人">
+                </el-popover-select-v2>
+              </template>
+            </el-table-column>
+            <el-table-column label="月份" align="center" prop="num" width="250">
+              <template slot-scope="scope">
+                <el-date-picker v-model="monthReturnGoalDetailsList[scope.$index].monthly" value-format="yyyy-MM" type="month" placeholder="选择月份">
+                </el-date-picker>
+              </template>
+            </el-table-column>
+            <el-table-column label="目标值" align="center" prop="totalGoal" width="220">
+              <template slot-scope="scope">
+                <el-input-number @change="computeTotal" v-model="monthReturnGoalDetailsList[scope.$index].goalSum" :precision="2" :step="1" :min="0"></el-input-number>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120px" fixed="right">
+              <template slot-scope="scope">
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-delete"
+                  @click="handleDeleteDetails(scope.$index, scope.row)"
+                >删除</el-button>
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-delete"
+                  @click="handleCopyDetails(scope.row)"
+                >复制</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-tab-pane>
+      </el-tabs>
+    </el-drawer>
 
   </div>
 </template>
@@ -155,7 +351,11 @@ import {
   addMonthReturnGoal,
   updateMonthReturnGoal,
   delMonthReturnGoal
-} from "@/api/business/spd/goal_management/monthReturnGoal"
+} from "@/api/business/spd/goal_management/monthReturnGoal";
+import {
+  getMonthReturnGoalDetails,
+  delMonthReturnGoalDetails
+} from "@/api/business/spd/goal_management/monthReturnGoalDetails"
 
 // 树形参照
 import TreeRefers from '@/components/Refers/treeRefer.vue'
@@ -206,7 +406,7 @@ export default {
         goalSum: null,
         notes: null,
         documentStatus: null,
-        documentDateRange: null
+        params: { beginTime: null, endTime: null,}
       },
       // 表单参数
       form: {
@@ -240,6 +440,36 @@ export default {
       },
       // 表单校验
       rules: {},
+      // 子表导航名
+      activeName: 'monthReturnGoalDetails',
+      documentDateRange: null,
+      pickerOptions: {
+        shortcuts: [{
+          text: '最近一周',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '最近一个月',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '最近三个月',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+            picker.$emit('pick', [start, end]);
+          }
+        }]
+      }
     }
   },
   created() {
@@ -255,6 +485,17 @@ export default {
         this.loading = false;
       });
     },
+    getListDetails() {
+      this.loading = true
+      getMonthReturnGoalDetails(this.form.id).then(response => {
+        this.monthReturnGoalDetailsList = response.data
+        this.computeTotal()
+        this.form.monthReturnGoalDetailsList = this.monthReturnGoalDetailsList
+        updateMonthReturnGoal(this.form).then(response => {
+        })
+        this.loading = false
+      })
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -305,6 +546,28 @@ export default {
       this.open = true;
       this.title = "添加--月回款目标填报";
     },
+    handleAddDetails() {
+      let list = {
+        id: null,
+        code: null,
+        saleOrg: null,
+        saleZone: null,
+        custom: null,
+        dept: null,
+        creator: null,
+        oneLevelClassifyCode: null,
+        oneLevelClassify: null,
+        twoLevelClassifyCode: null,
+        twoLevelClassify: null,
+        materialCode: null,
+        material: null,
+        department: null,
+        num: null,
+        monthly: null,
+        goalValue: null
+      }
+      this.monthReturnGoalDetailsList.push(list)
+    },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
@@ -351,6 +614,26 @@ export default {
       }).catch(() => {
       });
     },
+    handleDeleteDetails(index, row) {
+      if (this.form.id === null) {
+        this.monthReturnGoalDetailsList.splice(index, 1)
+        this.computeTotal()
+      } else {
+        if (row.id !== null) {
+          this.$modal.confirm('是否确认删除月销售目标填报明细编号为"' + row.id + '"的数据项?').then(function () {
+            return delMonthReturnGoalDetails(row.id);
+          }).then(() => {
+            this.getListDetails();
+            this.$modal.msgSuccess("删除成功");
+          }).catch(() => {
+          });
+        } else {
+          this.monthReturnGoalDetailsList.splice(index, 1)
+          this.$message.success('删除成功')
+          this.computeTotal()
+        }
+      }
+    },
     /** 导出按钮操作 */
     handleExport() {
       this.download('goal_management/monthReturnGoal/export', {
@@ -364,6 +647,40 @@ export default {
         })
         .catch(_ => {
         });
+    },
+    // 计算主表合计
+    computeTotal() {
+      let list = this.monthReturnGoalDetailsList
+      let sum = 0
+      for (const listElement of list) {
+        sum = (sum * 1000000 + listElement.goalSum * 1000000) / 1000000
+      }
+      this.form.goalSum = sum
+    },
+    // 复制明细
+    handleCopyDetails(row) {
+      let list = {
+        id: null,
+        code: row.code,
+        saleOrg: row.saleOrg,
+        saleZone: row.saleZone,
+        custom: row.custom,
+        creator: row.creator,
+        monthly: row.monthly,
+        goalSum: row.goalSum
+      }
+      this.monthReturnGoalDetailsList.push(list)
+      this.computeTotal()
+    },
+    setBeginAndEnd() {
+      let array = this.documentDateRange
+      if (array !== null) {
+        this.queryParams.params.beginTime = array[0]
+        this.queryParams.params.endTime = array[1]
+      } else {
+        this.queryParams.beginTime = null
+        this.queryParams.endTime = null
+      }
     }
   }
 }