Bläddra i källkod

Merge remote-tracking branch 'origin/dev' into dev

001295 1 år sedan
förälder
incheckning
d27afd7c2e
36 ändrade filer med 2761 tillägg och 2120 borttagningar
  1. 8 0
      src/api/business/purchase/task.js
  2. 3 3
      src/api/business/spd/goal_management/annualSaleMergeDetails.js
  3. 3 3
      src/api/business/spd/goal_management/monthGoalMergeDetails.js
  4. 3 3
      src/api/business/spd/goal_management/monthReturnMergeDetails.js
  5. 8 1
      src/api/business/spd/task_management/visitingPlan/visitingPlan.js
  6. 28 0
      src/api/changeApply/basic.js
  7. 34 11
      src/components/super-table/hide.vue
  8. 18 16
      src/components/super-table/index.vue
  9. 24 2
      src/utils/request.js
  10. 145 115
      src/views/business/spd/goal_management/AnnualSaleGoal.vue
  11. 493 438
      src/views/business/spd/goal_management/AnnualSaleGoalMerge.vue
  12. 431 247
      src/views/business/spd/goal_management/MonthGoalMerge.vue
  13. 224 170
      src/views/business/spd/goal_management/MonthReturnGoal.vue
  14. 237 188
      src/views/business/spd/goal_management/MonthReturnMerge.vue
  15. 262 209
      src/views/business/spd/goal_management/MonthSaleGoal.vue
  16. 150 151
      src/views/business/spd/task_management/visitingPlan/add.vue
  17. 70 122
      src/views/business/spd/task_management/visitingPlan/index.vue
  18. 45 39
      src/views/material/changeApply/batchImport/index.vue
  19. 3 2
      src/views/material/changeApply/index.vue
  20. 1 0
      src/views/purchase/DemandSummary/add.vue
  21. 1 0
      src/views/purchase/DemandSummary/index.vue
  22. 14 3
      src/views/purchase/PurchaseDemandList/add.vue
  23. 1 0
      src/views/purchase/PurchaseDemandList/index.vue
  24. 8 0
      src/views/purchase/apply/copy/index.vue
  25. 8 0
      src/views/purchase/apply/edit/index.vue
  26. 15 18
      src/views/purchase/contract/add/columns.js
  27. 12 9
      src/views/purchase/purchase-order/index.vue
  28. 279 0
      src/views/purchase/purchase-order/print/index.vue
  29. BIN
      src/views/purchase/purchase-order/print/湖南德荣医疗健康产业有限公司.png
  30. BIN
      src/views/purchase/purchase-order/print/湖南德荣医疗器械有限公司.png
  31. BIN
      src/views/purchase/purchase-order/print/湖南德荣医疗器械物流配送服务有限公司.png
  32. 26 3
      src/views/purchase/purchase-order/see/index.vue
  33. 1 2
      src/views/purchase/task/index.vue
  34. 1 1
      src/views/purchase/task/tui-hui-xu-qiu/index.vue
  35. 2 2
      src/views/purchase/task/zhuan-pai/index.vue
  36. 203 362
      src/views/purchase/transferOrder/add.vue

+ 8 - 0
src/api/business/purchase/task.js

@@ -64,3 +64,11 @@ export function EXPORT(data, params) {
     params: params,
   });
 }
+
+export function PRINT(params) {
+  return request({
+    url: "/pu/order/print",
+    method: "GET",
+    params: params,
+  });
+}

+ 3 - 3
src/api/business/spd/goal_management/annualSaleMergeDetails.js

@@ -17,10 +17,10 @@ export function delAnnualSaleMergeDetails(id) {
 }
 
 // 年销售目标合并明细
-export function mergeAnnualSaleMergeDetails(query) {
+export function mergeAnnualSaleMergeDetails(data) {
   return request({
     url: '/goal_management/annualSaleGoalMerge/merge',
-    method: 'get',
-    params: query
+    method: 'post',
+    data: data
   })
 }

+ 3 - 3
src/api/business/spd/goal_management/monthGoalMergeDetails.js

@@ -44,10 +44,10 @@ export function delMonthGoalMergeDetails(id) {
 }
 
 // 合并月销售目标明细
-export function mergeMonthSaleMergeDetails(query) {
+export function mergeMonthSaleMergeDetails(data) {
   return request({
     url: '/goal_management/monthGoalMergeDetails/merge',
-    method: 'get',
-    params: query
+    method: 'post',
+    data: data
   })
 }

+ 3 - 3
src/api/business/spd/goal_management/monthReturnMergeDetails.js

@@ -44,10 +44,10 @@ export function delMonthReturnMergeDetails(id) {
 }
 
 // 合并月销售目标明细
-export function mergeMonthReturnMergeDetails(query) {
+export function mergeMonthReturnMergeDetails(data) {
   return request({
     url: '/mk/monthReturnMergeDetails/merge',
-    method: 'get',
-    params: query
+    method: 'post',
+    data: data
   })
 }

+ 8 - 1
src/api/business/spd/task_management/visitingPlan/visitingPlan.js

@@ -53,6 +53,13 @@ export function delPlan(id) {
         method: 'delete'
     })
 }
+//拜访计划明细删除
+export function delPlanItem(id) {
+    return request({
+        url: '/mk/bo/item/' + id,
+        method: 'delete'
+    })
+}
 // 采购需求单导出
 export function exportPlan(data) {
     return request({
@@ -61,4 +68,4 @@ export function exportPlan(data) {
       data: data,
       responseType: 'blob'
     })
-  }
+}

+ 28 - 0
src/api/changeApply/basic.js

@@ -70,3 +70,31 @@ export function getRecordList(params) {
     params: params
   })
 }
+
+// 模板下载
+export function changeDownload(data) {
+  return request({
+    url: `/material/change/download`,
+    method: 'post',
+    data: data
+  })
+}
+
+// 导入
+export function changeImport(data) {
+  return request({
+    url: `/material/change/import`,
+    method: 'post',
+    data: data
+  })
+}
+
+// 下载失败导入文件数据
+export function downloadFailData(data) {
+  return request({
+    url: `/material/change/downloadFailData`,
+    method: 'post',
+    data: data,
+    responseType: 'blob',
+  })
+}

+ 34 - 11
src/components/super-table/hide.vue

@@ -2,12 +2,19 @@
   <el-button size="mini" @click="drawer = true">
     {{ number ? `隐藏列 :${number}` : "隐藏列" }}
     <el-drawer
-      :modal="false"
+      :show-close="false"
       :visible.sync="drawer"
       size="20%"
       title="隐藏列"
       append-to-body
     >
+      <template slot="title">
+        <span>隐藏列</span>
+        <el-button type="primary" size="mini" @click="useSubmit('superForm')">
+          确 认
+        </el-button>
+        <el-button size="mini" @click="drawer = false"> 取 消 </el-button>
+      </template>
       <el-input
         v-model="key"
         size="mini"
@@ -15,11 +22,11 @@
         style="width: 100%; padding: 0 16px 16px"
       >
       </el-input>
-      <el-row :gutter="20" style="margin: 0">
+      <el-row :gutter="20" style="margin: 0; display: flex">
         <el-draggable
           v-model="columns"
           :group="{ item: 'key' }"
-          @end="$emit('hide')"
+          @change="onDraggableChange"
         >
           <el-col
             v-for="({ item }, index) in searchColumns"
@@ -33,6 +40,8 @@
           >
             <span
               style="
+                height: 20px;
+                line-height: 20px;
                 font-size: 13px;
                 flex: 1;
                 cursor: move;
@@ -53,21 +62,28 @@
               ></i>
               {{ item.title }}
             </span>
-            <div>
-              <el-switch
-                v-model="item.hidden"
-                size="mini"
-                @change="$emit('hide')"
-              ></el-switch>
-            </div>
           </el-col>
         </el-draggable>
+        <div @click.stop>
+          <div
+            v-for="({ item }, index) in searchColumns"
+            :key="index"
+            style="padding: 12px 16px"
+          >
+            <el-switch
+              v-model="item.hidden"
+              size="mini"
+              @change="onDraggableChange"
+            ></el-switch>
+          </div>
+        </div>
       </el-row>
     </el-drawer>
   </el-button>
 </template>
 
 <script>
+import deepCopy from "@gby/deep-copy";
 export default {
   name: "",
   components: {
@@ -110,7 +126,14 @@ export default {
     },
   },
   watch: {},
-  methods: {},
+  methods: {
+    onClone(prop) {
+      return deepCopy(prop);
+    },
+    onDraggableChange() {
+      this.$emit("change", this.columns);
+    },
+  },
   created() {},
   mounted() {},
   destroyed() {},

+ 18 - 16
src/components/super-table/index.vue

@@ -161,7 +161,9 @@ export default {
       }
     },
     // 冻结
-    onHide() {
+    onHide(prop) {
+      console.log("new", prop[0].item.title);
+      console.log("old", this.innerColumns[0].item.title);
       this.$nextTick(() => {
         this.$refs.superTable.doLayout();
       });
@@ -236,6 +238,17 @@ export default {
       v-on="$listeners"
       style="flex: 1"
     >
+      <!-- 多选 -->
+      <el-table-column
+        v-if="checkbox"
+        :column-key="rowKey"
+        fixed
+        width="50"
+        align="center"
+        type="selection"
+        reserve-selection
+      >
+      </el-table-column>
       <!-- 序号 -->
       <el-table-column
         v-if="index"
@@ -250,20 +263,9 @@ export default {
           {{ scope.$index + 1 }}
         </template>
       </el-table-column>
-      <!-- 多选 -->
-      <el-table-column
-        v-if="checkbox"
-        :column-key="rowKey"
-        fixed
-        width="50"
-        align="center"
-        type="selection"
-        reserve-selection
-      >
-      </el-table-column>
       <el-table-column
         v-for="({ item, attr }, index) in showColumns"
-        :key="index"
+        :key="item.key + index"
         :prop="item.key"
         :label="item.title"
         :fixed="item.fixed"
@@ -402,11 +404,11 @@ export default {
           </el-button>
         </template>
         <template v-if="convenitentOperation">
-          <button-hide v-model="innerColumns" @hide="onHide"></button-hide>
-          <button-freeze
+          <button-hide v-model="innerColumns" @change="onHide"></button-hide>
+          <!-- <button-freeze
             v-model="showColumns"
             @freeze="onFreeze"
-          ></button-freeze>
+          ></button-freeze> -->
         </template>
       </div>
       <pagination

+ 24 - 2
src/utils/request.js

@@ -1,11 +1,12 @@
 import axios from "axios";
 import { Notification, MessageBox, Message, Loading } from "element-ui";
 import store from "@/store";
-import { getToken } from "@/utils/auth";
+import { getToken, setToken } from "@/utils/auth";
 import errorCode from "@/utils/errorCode";
 import { tansParams, blobValidate } from "@/utils/ruoyi";
 import cache from "@/plugins/cache";
 import { saveAs } from "file-saver";
+import { sso } from "@/api/sso/ssoLogin";
 
 let downloadLoadingInstance;
 // 是否显示重新登录
@@ -88,7 +89,7 @@ service.interceptors.request.use(
 
 // 响应拦截器
 service.interceptors.response.use(
-  (res) => {
+  async (res) => {
     // 未设置状态码则默认成功状态
     const code = res.data.code || 200;
     // 获取错误信息
@@ -100,6 +101,27 @@ service.interceptors.response.use(
     ) {
       return res.data;
     }
+    if (code === 222) {
+      let userInfo = JSON.parse(localStorage.getItem("userInfo"));
+      try {
+        const ssoRes = await sso(userInfo);
+        if (ssoRes.code === 200) {
+          let token = ssoRes.token;
+          setToken(token);
+          store.commit("SET_TOKEN", token);
+          store.dispatch("GetInfo").then(() => {});
+          return await service({
+            url: res.config.url,
+            data: res.config.data,
+            method: res.config.method,
+            params: { ...res.config.params, DName: "蒙奇·D·伟涛" },
+          });
+        }
+      } catch (err) {
+        return Promise.reject("error");
+      } finally {
+      }
+    }
     if (code === 401) {
       if (!isRelogin.show) {
         isRelogin.show = true;

+ 145 - 115
src/views/business/spd/goal_management/AnnualSaleGoal.vue

@@ -1,82 +1,107 @@
 <template>
   <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="编码" prop="code">
+            <el-input
+              v-model="queryParams.code"
+              placeholder="请输入编码"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="目标名称" prop="goalName">
+            <el-input
+              v-model="queryParams.goalName"
+              placeholder="请输入年度销售目标名称"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单据日期" prop="documentDate">
+            <el-date-picker
+              v-model="queryParams.documentDateRange"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              align="right"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              placeholder="请选择单据日期"
+              :picker-options="pickerOptions">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+    </el-form>
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="编码" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="请输入编码"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="目标名称" prop="goalName">
-        <el-input
-          v-model="queryParams.goalName"
-          placeholder="请输入年度销售目标名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="单据日期" prop="documentDate">
-        <el-date-picker
-          v-model="queryParams.documentDateRange"
-          type="daterange"
-          value-format="yyyy-MM-dd"
-          clearable
-          align="right"
-          unlink-panels
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          placeholder="请选择单据日期"
-          :picker-options="pickerOptions">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-      <el-form-item label="年度" prop="annual">
-        <el-date-picker
-          v-model="queryParams.annual"
-          type="year"
-          value-format="yyyy"
-          placeholder="选择年度"
-          clearable
-          @keyup.enter.native="handleQuery">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="客户" prop="custom">
-        <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
-                              referName="CUSTOMER_PARAM"
-                              :dataMapping="{ customCode: 'code', custom: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入客户" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="销售区域" prop="saleZone">
-        <el-popover-select-v2 v-model="queryParams.saleZone" title="销售区域" valueKey="name"
-                              referName="CUSTOMER_PARAM"
-                              :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入销售区域" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="制单人" prop="creator">
-        <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
-                              referName="CONTACTS_PARAM"
-                              :dataMapping="{ creatorCode: 'code', creator: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入制单人" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="部门" prop="dept">
-        <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
-                              referName="DEPT_PARAM"
-                              :dataMapping="{ deptCode: 'code', dept: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入部门" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="年度" prop="annual">
+            <el-date-picker
+              v-model="queryParams.annual"
+              type="year"
+              value-format="yyyy"
+              placeholder="选择年度"
+              clearable
+              @keyup.enter.native="handleQuery">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="客户" prop="custom">
+            <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
+                                  referName="CUSTOMER_PARAM"
+                                  :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入客户" @keyup.enter.native="handleQuery">
+            </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="queryParams.saleZone" title="销售区域" valueKey="name"
+                                  referName="MK_SALESAREA_PARAM"
+                                  :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入销售区域" @keyup.enter.native="handleQuery">
+            </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="queryParams.creator" title="制单人" valueKey="name"
+                                  referName="CONTACTS_PARAM"
+                                  :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入制单人" @keyup.enter.native="handleQuery">
+            </el-popover-select-v2>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="部门" prop="dept">
+            <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
+                                  referName="DEPT_PARAM"
+                                  :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入部门" @keyup.enter.native="handleQuery">
+            </el-popover-select-v2>
+          </el-form-item>
+        </el-col>
+      </el-row>
     </el-form>
 
-    <el-row :gutter="10" class="mb8">
+    <el-row :gutter="10" class="mb8" style="float: right">
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -155,6 +180,13 @@
           <el-button
             size="mini"
             type="text"
+            icon="el-icon-document-copy"
+            @click="handleCopy(scope.row.id)"
+          >复制
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
           >修改
@@ -216,7 +248,7 @@
           <el-col :span="6">
             <el-form-item label="销售区域" prop="saleZone">
               <el-popover-select-v2 v-model="form.saleZone" title="销售区域" valueKey="name"
-                                    referName="CUSTOMER_PARAM"
+                                    referName="MK_SALESAREA_PARAM"
                                     :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
                                     :source.sync="form" placeholder="请输入销售区域">
               </el-popover-select-v2>
@@ -254,19 +286,13 @@
           </el-col>
           <el-col :span="6">
             <el-form-item label="单据状态" prop="documentStatus">
-              <el-input v-model="form.documentStatus" placeholder="单据状态后端自动生成" clearable disabled/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="操作">
-              <el-button type="primary" @click="submitForm" size="medium">确 定</el-button>
-              <el-button @click="cancel" size="medium">返 回</el-button>
+              <el-input v-model="form.documentStatus" placeholder="未提交" clearable disabled/>
             </el-form-item>
           </el-col>
         </el-row>
       </el-form>
       <div id="addDetails">
-        <el-row :gutter="10" class="mb8">
+        <el-row :gutter="10" class="mb8" style="margin-left: 94%">
           <el-col :span="1.5">
             <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddDetails">增行</el-button>
           </el-col>
@@ -276,8 +302,7 @@
           <el-table-column label="销售组织" align="center" prop="saleOrg" width="180" :render-header="addRedStar">
             <template slot-scope="scope">
               <el-popover-select-v2 v-model="annualSaleGoalDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
-                                    referName="CUSTOMER_PARAM"
-                                    @blur="validateField(scope.row, 'saleOrg')"
+                                    referName="ORG_PARAM"
                                     :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
                                     :source.sync="annualSaleGoalDetailsList[scope.$index]" placeholder="请输入销售组织">
               </el-popover-select-v2>
@@ -286,7 +311,7 @@
           <el-table-column label="销售区域" align="center" prop="saleZone" width="180" :render-header="addRedStar">
             <template slot-scope="scope">
               <el-popover-select-v2 v-model="annualSaleGoalDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
-                                    referName="CUSTOMER_PARAM"
+                                    referName="MK_SALESAREA_PARAM"
                                     :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
                                     :source.sync="annualSaleGoalDetailsList[scope.$index]" placeholder="请输入销售区域">
               </el-popover-select-v2>
@@ -419,6 +444,10 @@
             </template>
           </el-table-column>
         </el-table>
+        <div slot="footer" class="dialog-footer" style="margin-left: 88%; margin-top: 1%">
+          <el-button type="primary" @click="submitForm" size="medium">确 定</el-button>
+          <el-button @click="cancel" size="medium">返 回</el-button>
+        </div>
       </div>
     </el-drawer>
 
@@ -460,7 +489,7 @@ export default {
       // 非多个禁用
       multiple: true,
       // 显示搜索条件
-      showSearch: true,
+      showSearch: false,
       // 总条数
       total: 0,
       // 年度销售目标表格数据
@@ -594,15 +623,6 @@ export default {
         this.total = response.total;
         this.loading = false;
         console.log(this.annualSaleGoalList);
-        for (const element of this.annualSaleGoalList) {
-          if (element.documentStatus === '0') {
-            element.documentStatus = '未提交'
-          } else if (element.documentStatus === '1') {
-            element.documentStatus = '审核中'
-          } else {
-            element.documentStatus = '已审核'
-          }
-        }
       });
     },
     getListDetails() {
@@ -683,15 +703,19 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
-      this.title = "添加年度销售目标";
+      this.title = "添加--年度销售目标";
       this.annualSaleGoalDetailsList = []
       this.open = true;
+      this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+      this.form.annual = new Date().getFullYear().toString()
+      this.form.creator = this.$store.state.user.nickName
+      this.form.dept = this.$store.state.user.deptName
     },
     handleAddDetails() {
       let list = {
         id: null,
         code: null,
-        saleOrg: this.form.saleZone,
+        saleOrg: this.$store.state.user.orgName,
         saleZone: this.form.saleZone,
         custom: this.form.custom,
         creator: this.form.creator,
@@ -726,16 +750,28 @@ export default {
         this.form = response.data;
         this.annualSaleGoalDetailsList = this.form.annualGoalMergeDetails
         this.open = true;
-        this.title = "修改年度销售目标";
-        if (this.form.documentStatus === '0') {
-          this.form.documentStatus = '未提交'
-        } else if (this.form.documentStatus === '1') {
-          this.form.documentStatus = '审批中'
-        } else if (this.form.documentStatus === '2') {
-          this.form.documentStatus = '已审核'
-        }
+        this.title = "修改--年度销售目标";
       });
     },
+    // 复制按钮
+    handleCopy(id) {
+      this.reset();
+      getAnnualSaleGoal(id).then(response => {
+        this.form = response.data;
+        this.form.id = null
+        this.form.code = null
+        this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+        this.form.annual = new Date().getFullYear().toString()
+        this.annualSaleGoalDetailsList = JSON.parse(JSON.stringify(this.form.annualGoalMergeDetails))
+        for (const element of this.annualSaleGoalDetailsList) {
+          element.id = null
+          element.code = null
+        }
+        this.open = true;
+        this.title = "新增--年度销售目标";
+        console.log(this.form);
+      })
+    },
     /** 提交按钮 */
     submitForm() {
       if (!this.justiceDetailsList()) {
@@ -744,21 +780,15 @@ export default {
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id != null) {
-            if (this.form.documentStatus === '未提交') {
-              this.form.documentStatus = 0
-            } else if (this.form.documentStatus === '审批中') {
-              this.form.documentStatus = 1
-            } else {
-              this.form.documentStatus = 2
-            }
-            this.form.annualGoalMergeDetails = this.annualSaleGoalDetailsList
+            this.form.annualGoalMergeDetails = JSON.parse(JSON.stringify(this.annualSaleGoalDetailsList))
             updateAnnualSaleGoal(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
-            this.form.annualGoalMergeDetails = this.annualSaleGoalDetailsList
+            this.form.documentStatus = '未提交'
+            this.form.annualGoalMergeDetails = JSON.parse(JSON.stringify(this.annualSaleGoalDetailsList))
             addAnnualSaleGoal(this.form).then(response => {
               this.$modal.msgSuccess("新增成功");
               this.open = false;

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 493 - 438
src/views/business/spd/goal_management/AnnualSaleGoalMerge.vue


+ 431 - 247
src/views/business/spd/goal_management/MonthGoalMerge.vue

@@ -1,106 +1,133 @@
 <template>
   <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="编码" prop="code">
+            <el-input v-model="queryParams.code" placeholder="请输入编码" clearable @keyup.enter.native="handleQuery"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="目标名称" prop="goalName">
+            <el-input v-model="queryParams.goalName" placeholder="请输入目标名称" clearable @keyup.enter.native="handleQuery"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单据日期" prop="documentDate">
+            <el-date-picker
+              v-model="documentDateRange"
+              @change="setBeginAndEnd"
+              type="daterange"
+              align="right"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="yyyy-MM-dd"
+              @keyup.enter.native="handleQuery"
+              :picker-options="pickerOptions">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="编码" prop="code">
-        <el-input v-model="queryParams.code" placeholder="请输入编码" clearable @keyup.enter.native="handleQuery"/>
-      </el-form-item>
-      <el-form-item label="目标名称" prop="goalName">
-        <el-input v-model="queryParams.goalName" placeholder="请输入目标名称" clearable @keyup.enter.native="handleQuery"/>
-      </el-form-item>
-      <el-form-item label="单据日期" prop="documentDate">
-        <el-date-picker
-          v-model="documentDateRange"
-          @change="setBeginAndEnd"
-          type="daterange"
-          align="right"
-          unlink-panels
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          @keyup.enter.native="handleQuery"
-          :picker-options="pickerOptions">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-      <el-form-item label="年度" prop="annual">
-        <el-date-picker
-          v-model="queryParams.annual"
-          type="year"
-          clearable
-          value-format="yyyy"
-          @keyup.enter.native="handleQuery"
-          placeholder="请输入年度">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="月份" prop="monthly">
-        <el-date-picker
-          v-model="queryParams.monthly"
-          type="month"
-          clearable
-          value-format="yyyy-MM"
-          @keyup.enter.native="handleQuery"
-          placeholder="请输入月份">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="制单人" prop="creator">
-        <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
-                              referName="CONTACTS_PARAM"
-                              :dataMapping="{ creatorCode: 'code', creator: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入制单人">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="部门" prop="dept">
-        <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
-                              referName="DEPT_PARAM"
-                              :dataMapping="{ deptCode: 'code', dept: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入部门">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="目标类型" prop="goalCategory">
-        <el-select v-model="queryParams.goalCategory" placeholder="请输入目标类型" @change="changeGoalCategoryQuery" @keyup.enter.native="handleQuery">
-          <el-option
-            v-for="item in goalCategoryList"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value">
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item v-if="queryParams.goalCategory === '客户维度'" label="客户" prop="custom">
-        <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
-                              referName="CUSTOMER_PARAM"
-                              :dataMapping="{ customCode: 'code', custom: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入客户">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item v-if="queryParams.goalCategory === '销售区域'" label="销售区域" prop="saleZone">
-        <el-popover-select-v2 v-model="queryParams.saleZoneCode" title="销售区域" valueKey="name"
-                              referName="DEPT_PARAM"
-                              :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入销售区域">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item v-if="queryParams.goalCategory === '一级分类'" label="一级分类" prop="oneLevelClassify">
-        <el-select v-model="queryParams.oneLevelClassify" size="mini" clearable
-                   @focus="chooseTreeReferForQuery('MATERIALCLASSIFY_PARAM', false, '一级物料分类')"
-                   style="width: 200px">
-          <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
-        </el-select>
-      </el-form-item>
-      <el-form-item v-if="queryParams.goalCategory === '二级分类'" label="二级分类" prop="custom">
-        <el-select v-model="queryParams.twoLevelClassify" size="mini" clearable
-                   @focus="chooseTreeReferForQuery('MATERIALCLASSIFY_PARAM', false, '二级物料分类')"
-                   style="width: 200px">
-          <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
-        </el-select>
-      </el-form-item>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="年度" prop="annual">
+            <el-date-picker
+              v-model="queryParams.annual"
+              type="year"
+              clearable
+              value-format="yyyy"
+              @keyup.enter.native="handleQuery"
+              placeholder="请输入年度">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="月份" prop="monthly">
+            <el-date-picker
+              v-model="queryParams.monthly"
+              type="month"
+              clearable
+              value-format="yyyy-MM"
+              @keyup.enter.native="handleQuery"
+              placeholder="请输入月份">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="制单人" prop="creator">
+            <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
+                                  referName="CONTACTS_PARAM"
+                                  :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                  :source.sync="queryParams" 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="queryParams.dept" title="部门" valueKey="name"
+                                  referName="DEPT_PARAM"
+                                  :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                  :source.sync="queryParams" 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="goalCategory">
+            <el-select v-model="queryParams.goalCategory" placeholder="请输入目标类型" @change="changeGoalCategoryQuery" @keyup.enter.native="handleQuery">
+              <el-option
+                v-for="item in goalCategoryList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item v-if="queryParams.goalCategory === '客户维度'" label="客户" prop="custom">
+            <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
+                                  referName="CUSTOMER_PARAM"
+                                  :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入客户">
+            </el-popover-select-v2>
+          </el-form-item>
+          <el-form-item v-if="queryParams.goalCategory === '销售区域'" label="销售区域" prop="saleZone">
+            <el-popover-select-v2 v-model="queryParams.saleZoneCode" title="销售区域" valueKey="name"
+                                  referName="MK_SALESAREA_PARAM"
+                                  :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入销售区域">
+            </el-popover-select-v2>
+          </el-form-item>
+          <el-form-item v-if="queryParams.goalCategory === '一级分类'" label="一级分类" prop="oneLevelClassify">
+            <el-select v-model="queryParams.oneLevelClassify" size="mini" clearable
+                       @focus="chooseTreeReferForQuery('MATERIALCLASSIFY_PARAM', false, '一级物料分类')"
+                       style="width: 200px">
+              <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="queryParams.goalCategory === '二级分类'" label="二级分类" prop="custom">
+            <el-select v-model="queryParams.twoLevelClassify" size="mini" clearable
+                       @focus="chooseTreeReferForQuery('MATERIALCLASSIFY_PARAM', false, '二级物料分类')"
+                       style="width: 200px">
+              <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
     </el-form>
 
-    <el-row :gutter="10" class="mb8">
+    <el-row :gutter="10" class="mb8" style="float: right">
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -179,6 +206,13 @@
           <el-button
             size="mini"
             type="text"
+            icon="el-icon-document-copy"
+            @click="handleCopy(scope.row.id)"
+          >复制
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
           >修改
@@ -289,14 +323,14 @@
             <el-form-item v-if="form.goalCategory === '客户维度'" label="客户" prop="custom">
               <el-popover-select-v2 v-model="form.custom" title="客户" valueKey="name"
                                     referName="CUSTOMER_PARAM"
-                                    :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                    :dataMapping="{custom: 'name'}"
                                     :source.sync="form" placeholder="请输入客户">
               </el-popover-select-v2>
             </el-form-item>
             <el-form-item v-if="form.goalCategory === '销售区域'" label="销售区域" prop="saleZone">
-              <el-popover-select-v2 v-model="form.saleZoneCode" title="销售区域" valueKey="name"
-                                    referName="ORG_PARAM"
-                                    :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+              <el-popover-select-v2 v-model="form.saleZone" title="销售区域" valueKey="name"
+                                    referName="MK_SALESAREA_PARAM"
+                                    :dataMapping="{saleZone: 'name'}"
                                     :source.sync="form" placeholder="请输入销售区域">
               </el-popover-select-v2>
             </el-form-item>
@@ -316,133 +350,212 @@
             </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 label="单据状态" prop="documentStatus">
+              <el-input v-model="form.documentStatus" placeholder="未提交" disabled/>
             </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-col :span="1.5">
-          <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-tab-pane label="月销售目标合并明细" name="monthGoalMergeDetails">
-          <el-table v-loading="loading" :data="monthGoalMergeDetailsList" @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="monthGoalMergeDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
-                                      referName="CUSTOMER_PARAM" disabled
-                                      :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
-                                      :source.sync="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
-                                      referName="CUSTOMER_PARAM" disabled
-                                      :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
-                                      :source.sync="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].custom" title="客户" valueKey="name"
-                                      referName="CUSTOMER_PARAM" disabled
-                                      :dataMapping="{ customCode: 'code', custom: 'name'}"
-                                      :source.sync="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].dept" title="部门" valueKey="name"
-                                      referName="DEPT_PARAM" disabled
-                                      :dataMapping="{ deptCode: 'code', dept: 'name'}"
-                                      :source.sync="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].creator" title="负责人" valueKey="name"
-                                      referName="CONTACTS_PARAM" disabled
-                                      :dataMapping="{ creatorCode: 'code', creator: 'name'}"
-                                      :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入负责人">
-                </el-popover-select-v2>
-              </template>
-            </el-table-column>
-            <el-table-column label="科室" align="center" prop="department" width="180">
-              <template slot-scope="scope">
-                <el-input v-model="monthGoalMergeDetailsList[scope.$index].department" placeholder="请输入科室" disabled></el-input>
-              </template>
-            </el-table-column>
-            <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220">
-              <template slot-scope="scope">
-                <el-select v-model="monthGoalMergeDetailsList[scope.$index].oneLevelClassify" size="mini" clearable
-                           @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)"
-                           style="width: 200px" disabled>
-                  <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
-                </el-select>
-              </template>
-            </el-table-column>
-            <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220">
-              <template slot-scope="scope">
-                <el-select v-model="monthGoalMergeDetailsList[scope.$index].twoLevelClassify" size="mini" clearable
-                           @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)"
-                           style="width: 200px" disabled>
-                  <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
-                </el-select>
-              </template>
-            </el-table-column>
-            <el-table-column label="物料" align="center" prop="material" width="180">
-              <template slot-scope="scope">
-                <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].material" title="物料" valueKey="name"
-                                      referName="MATERIAL_PARAM" disabled
-                                      :dataMapping="{ materialCode: 'code', material: 'name'}"
-                                      :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入物料">
-                </el-popover-select-v2>
-              </template>
-            </el-table-column>
-            <el-table-column label="月份" align="center" prop="monthly" width="250">
-              <template slot-scope="scope">
-                <el-date-picker disabled v-model="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].goalValue" :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>
+      <div>
+        <el-row :gutter="10" class="mb8" style="margin-left: 94%">
+          <el-col :span="1.5">
+            <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" @tab-click="getNewTwoArray">
+          <el-tab-pane label="月销售目标合并明细" name="monthGoalMergeDetails">
+            <el-table v-loading="loading" :data="monthGoalMergeDetailsList" @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="monthGoalMergeDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
+                                        referName="ORG_PARAM" disabled
+                                        :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
+                                        :source.sync="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
+                                        referName="MK_SALESAREA_PARAM" disabled
+                                        :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                        :source.sync="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].custom" title="客户" valueKey="name"
+                                        referName="CUSTOMER_PARAM" disabled
+                                        :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                        :source.sync="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].dept" title="部门" valueKey="name"
+                                        referName="DEPT_PARAM" disabled
+                                        :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                        :source.sync="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].creator" title="负责人" valueKey="name"
+                                        referName="CONTACTS_PARAM" disabled
+                                        :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                        :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入负责人">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="科室" align="center" prop="department" width="180">
+                <template slot-scope="scope">
+                  <el-input v-model="monthGoalMergeDetailsList[scope.$index].department" placeholder="请输入科室" disabled></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220">
+                <template slot-scope="scope">
+                  <el-select v-model="monthGoalMergeDetailsList[scope.$index].oneLevelClassify" size="mini" clearable
+                             @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)"
+                             style="width: 200px" disabled>
+                    <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220">
+                <template slot-scope="scope">
+                  <el-select v-model="monthGoalMergeDetailsList[scope.$index].twoLevelClassify" size="mini" clearable
+                             @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)"
+                             style="width: 200px" disabled>
+                    <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column label="物料" align="center" prop="material" width="180">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthGoalMergeDetailsList[scope.$index].material" title="物料" valueKey="name"
+                                        referName="MATERIAL_PARAM" disabled
+                                        :dataMapping="{ materialCode: 'code', material: 'name'}"
+                                        :source.sync="monthGoalMergeDetailsList[scope.$index]" placeholder="请输入物料">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="月份" align="center" prop="monthly" width="250">
+                <template slot-scope="scope">
+                  <el-date-picker disabled v-model="monthGoalMergeDetailsList[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="monthGoalMergeDetailsList[scope.$index].goalValue" :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-tab-pane label="区域目标汇总(月)" name="zoneGoalSum">
+            <el-table :data="zoneGoalSumList">
+              <el-table-column label="序号" type="index" 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="zoneGoalSumList[scope.$index].saleOrg" title="销售组织" valueKey="name"
+                                        referName="ORG_PARAM" disabled
+                                        :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
+                                        :source.sync="zoneGoalSumList[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="zoneGoalSumList[scope.$index].saleZone" title="销售区域" valueKey="name"
+                                        referName="ORG_PARAM" disabled
+                                        :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                        :source.sync="zoneGoalSumList[scope.$index]" placeholder="请输入销售区域">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="月份" align="center" prop="monthly" width="250">
+                <template slot-scope="scope">
+                  <el-date-picker disabled v-model="zoneGoalSumList[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="zoneGoalSumList[scope.$index].goalValue" :precision="2" :step="1" :min="0" disabled></el-input-number>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-tab-pane>
+          <el-tab-pane label="客户目标汇总(月)" name="customGoalSum">
+            <el-table :data="customGoalSumList">
+              <el-table-column label="序号" type="index" 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="customGoalSumList[scope.$index].saleOrg" title="销售组织" valueKey="name"
+                                        referName="ORG_PARAM" disabled
+                                        :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
+                                        :source.sync="customGoalSumList[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="customGoalSumList[scope.$index].saleZone" title="销售区域" valueKey="name"
+                                        referName="ORG_PARAM" disabled
+                                        :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                        :source.sync="customGoalSumList[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="customGoalSumList[scope.$index].custom" title="客户" valueKey="name"
+                                        referName="CUSTOMER_PARAM" disabled
+                                        :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                        :source.sync="customGoalSumList[scope.$index]" placeholder="请输入客户">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="月份" align="center" prop="monthly" width="250">
+                <template slot-scope="scope">
+                  <el-date-picker disabled v-model="customGoalSumList[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="customGoalSumList[scope.$index].goalValue" :precision="2" :step="1" :min="0" disabled></el-input-number>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-tab-pane>
+        </el-tabs>
+        <div slot="footer" class="dialog-footer" style="margin-left: 88%; margin-top: 1%">
+          <el-button type="primary" @click="submitForm" size="medium">确 定</el-button>
+          <el-button @click="cancel" size="medium">返 回</el-button>
+        </div>
+      </div>
     </el-drawer>
 
     <TreeRefers ref="treeQuery" @doSubmit="selectionsToInputForQuery" :single="true"/>
@@ -485,12 +598,14 @@ export default {
       // 非多个禁用
       multiple: true,
       // 显示搜索条件
-      showSearch: true,
+      showSearch: false,
       // 总条数
       total: 0,
       // 月销售目标合并表格数据
       monthGoalMergeList: [],
       monthGoalMergeDetailsList: [],
+      zoneGoalSumList: [],
+      customGoalSumList: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -572,7 +687,8 @@ export default {
         oneLevelClassify: null,
         twoLevelClassifyCode: null,
         twoLevelClassify: null,
-        monthMergeDetailsList: null
+        monthMergeDetailsList: null,
+        oldMonthMergeDetailsList: null
       },
       formDetails: {
         id: null,
@@ -669,7 +785,9 @@ export default {
         oneLevelClassifyCode: null,
         oneLevelClassify: null,
         twoLevelClassifyCode: null,
-        twoLevelClassify: null
+        twoLevelClassify: null,
+        monthMergeDetailsList: null,
+        oldMonthMergeDetailsList: null
       };
       this.resetForm("form");
     },
@@ -719,8 +837,16 @@ export default {
     handleAdd() {
       this.reset();
       this.monthGoalMergeDetailsList = []
+      this.customGoalSumList = []
+      this.zoneGoalSumList = []
+      this.activeName = 'monthGoalMergeDetails'
       this.open = true;
-      this.title = "添加月销售目标合并";
+      this.title = "添加--月销售目标合并";
+      this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+      this.form.annual = new Date().getFullYear().toString()
+      this.form.monthly = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0')
+      this.form.creator = this.$store.state.user.nickName
+      this.form.dept = this.$store.state.user.deptName
     },
     handleAddDetails() {
       let list = {
@@ -747,20 +873,43 @@ export default {
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
+      this.customGoalSumList = []
+      this.zoneGoalSumList = []
+      this.activeName = 'monthGoalMergeDetails'
       const id = row.id || this.ids
       getMonthGoalMerge(id).then(response => {
         this.form = response.data;
         this.monthGoalMergeDetailsList = this.form.monthMergeDetailsList
         this.open = true;
-        this.title = "修改月销售目标合并";
+        this.title = "修改--月销售目标合并";
       });
     },
+    // 复制按钮操作
+    handleCopy(id) {
+      this.reset()
+      this.monthGoalMergeDetailsList = []
+      this.customGoalSumList = []
+      this.zoneGoalSumList = []
+      this.activeName = 'monthGoalMergeDetails'
+      getMonthGoalMerge(id).then(response => {
+        this.form = response.data
+        this.form.id = null
+        this.form.code = null
+        this.title = "添加--月销售目标合并";
+        this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+        this.form.annual = new Date().getFullYear().toString()
+        this.form.monthly = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0')
+        this.open = true
+        this.changeGoalCategoryForm()
+      })
+    },
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id !== null) {
-            this.form.monthMergeDetailsList = this.monthGoalMergeDetailsList
+            this.form.monthMergeDetailsList = JSON.parse(JSON.stringify(this.monthGoalMergeDetailsList))
+            console.log(this.form);
             updateMonthGoalMerge(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
@@ -1042,32 +1191,32 @@ export default {
     },
     // 合并数据
     clickMerge() {
-      let classify = this.form.goalCategory
-      let classifyValue;
-      if (classify === null || classify === '') {
+      if (this.form.id !== null) {
+        this.form.oldMonthMergeDetailsList = JSON.parse(JSON.stringify(this.monthGoalMergeDetailsList))
+      }
+      if (this.activeName !== 'monthGoalMergeDetails') {
+        return this.$message.error('当前标签不是月销售目标合并明细')
+      }
+      let query = JSON.parse(JSON.stringify(this.form))
+      if (query.goalCategory === null || query.goalCategory === '') {
         return this.$message.error('请输入目标分类')
-      } else if (classify === '销售区域') {
-        classifyValue = this.form.saleZone
-        if (classifyValue === null) {
+      } else if (query.goalCategory === '销售区域') {
+        if (query.saleZone === null) {
           return this.$message.error('请输入销售区域')
         }
-      } else if (classify === '一级分类') {
-        classifyValue = this.form.oneLevelClassify
-        if (classifyValue === null) {
+      } else if (query.goalCategory === '一级分类') {
+        if (query.oneLevelClassify === null) {
           return this.$message.error('请输入一级分类')
         }
-      } else if (classify === '二级分类') {
-        classifyValue = this.form.twoLevelClassify
-        if (classifyValue === null) {
+      } else if (query.goalCategory === '二级分类') {
+        if (query.twoLevelClassify === null) {
           return this.$message.error('请输入二级分类')
         }
-      } else if (classify === '客户维度') {
-        classifyValue = this.form.custom
-        if (classifyValue === null) {
+      } else if (query.goalCategory === '客户维度') {
+        if (query.custom === null) {
           return this.$message.error('请输入客户')
         }
       }
-      let query = { classify: classify, classifyValue: classifyValue }
       mergeMonthSaleMergeDetails(query).then(response => {
         console.log(response);
         this.monthGoalMergeDetailsList = response.data.monthGoalMergeDetails
@@ -1099,7 +1248,42 @@ export default {
         console.log('导出明细');
         this.handleExportDetails()
       }
-    }
+    },
+    // 获得区域目标汇总or客户目标汇总
+    getNewTwoArray() {
+      let arr = JSON.parse(JSON.stringify(this.monthGoalMergeDetailsList))
+      // 如果子表标签是annualSaleGoalMergeDetails 或者 主表的目标分类是“销售区域”
+      if (this.activeName === 'monthGoalMergeDetails' || this.form.goalCategory !== '销售区域') {
+        this.zoneGoalSumList = null
+        this.customGoalSumList = null
+        return
+      }
+      // 根据某三个属性进行合并并相加totalGoal的函数
+      const mergeAndSumTotalGoal = (array) => {
+        return Array.from(array.reduce((map, obj) => {
+          let key = null
+          if (this.activeName === 'zoneGoalSum') {
+            key = `${obj.saleOrg}-${obj.saleZone}-${obj.monthly}`
+          } else if (this.activeName === 'customerGoalSum') {
+            key = `${obj.saleOrg}-${obj.saleZone}-${obj.custom}-${obj.monthly}`
+          }
+          if (map.has(key)) {
+            const existingObj = map.get(key)
+            existingObj.goalValue += obj.goalValue
+          } else {
+            map.set(key, { ...obj })
+          }
+          return map
+        }, new Map()).values())
+      }
+      // 调用合并函数
+      const mergedArray = mergeAndSumTotalGoal(arr)
+      if (this.activeName === 'zoneGoalSum') {
+        this.zoneGoalSumList = mergedArray
+      } else if (this.activeName === 'customGoalSum') {
+        this.customGoalSumList = mergedArray
+      }
+    },
   }
 };
 </script>

+ 224 - 170
src/views/business/spd/goal_management/MonthReturnGoal.vue

@@ -1,80 +1,105 @@
 <template>
   <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="编码" prop="code">
+            <el-input
+              v-model="queryParams.code"
+              placeholder="请输入编码"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="目标名称" prop="goalName">
+            <el-input
+              v-model="queryParams.goalName"
+              placeholder="请输入目标名称"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单据日期" prop="documentDate">
+            <el-date-picker
+              v-model="documentDateRange"
+              @change="setBeginAndEnd"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              align="right"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :picker-options="pickerOptions">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="编码" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="请输入编码"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="目标名称" prop="goalName">
-        <el-input
-          v-model="queryParams.goalName"
-          placeholder="请输入目标名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="单据日期" prop="documentDate">
-        <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>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-      <el-form-item label="年度" prop="annual">
-        <el-date-picker
-          v-model="queryParams.annual"
-          type="year"
-          value-format="yyyy"
-          placeholder="选择年度"
-          clearable
-          @keyup.enter.native="handleQuery">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="客户" prop="custom">
-        <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
-                              referName="CUSTOMER_PARAM"
-                              :dataMapping="{ customCode: 'code', custom: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入客户" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="制单人" prop="creator">
-        <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
-                              referName="CONTACTS_PARAM"
-                              :dataMapping="{ creatorCode: 'code', creator: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入制单人" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="销售区域" prop="saleZone">
-        <el-popover-select-v2 v-model="queryParams.saleZone" title="销售区域" valueKey="name"
-                              referName="CUSTOMER_PARAM"
-                              :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入销售区域" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="部门" prop="dept">
-        <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
-                              referName="DEPT_PARAM"
-                              :dataMapping="{ deptCode: 'code', dept: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入部门" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="年度" prop="annual">
+            <el-date-picker
+              v-model="queryParams.annual"
+              type="year"
+              value-format="yyyy"
+              placeholder="选择年度"
+              clearable
+              @keyup.enter.native="handleQuery">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="客户" prop="custom">
+            <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
+                                  referName="CUSTOMER_PARAM"
+                                  :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入客户" @keyup.enter.native="handleQuery">
+            </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="queryParams.creator" title="制单人" valueKey="name"
+                                  referName="CONTACTS_PARAM"
+                                  :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入制单人" @keyup.enter.native="handleQuery">
+            </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="queryParams.saleZone" title="销售区域" valueKey="name"
+                                  referName="MK_SALESAREA_PARAM"
+                                  :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入销售区域" @keyup.enter.native="handleQuery">
+            </el-popover-select-v2>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="部门" prop="dept">
+            <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
+                                  referName="DEPT_PARAM"
+                                  :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入部门" @keyup.enter.native="handleQuery">
+            </el-popover-select-v2>
+          </el-form-item>
+        </el-col>
+      </el-row>
     </el-form>
-    <el-row :gutter="10" class="mb8">
+    <el-row :gutter="10" class="mb8" style="float: right">
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -152,6 +177,13 @@
           <el-button
             size="mini"
             type="text"
+            icon="el-icon-document-copy"
+            @click="handleCopy(scope.row.id)"
+          >复制
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
           >修改
@@ -230,7 +262,7 @@
           <el-col :span="6">
             <el-form-item label="销售区域" prop="saleZone">
               <el-popover-select-v2 v-model="form.saleZone" title="销售区域" valueKey="name"
-                                    referName="CUSTOMER_PARAM"
+                                    referName="MK_SALESAREA_PARAM"
                                     :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
                                     :source.sync="form" placeholder="请输入销售区域">
               </el-popover-select-v2>
@@ -259,101 +291,101 @@
           </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-input v-model="form.documentStatus" placeholder="未提交" disabled/>
             </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">
-          <el-table v-loading="loading" :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" :render-header="addRedStar">
-              <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" :render-header="addRedStar">
-              <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" :render-header="addRedStar">
-              <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" :render-header="addRedStar">
-              <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" :render-header="addRedStar">
-              <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="monthly" width="250" :render-header="addRedStar">
-              <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="goalSum" width="220" :render-header="addRedStar">
-              <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>
+      <div>
+        <el-row :gutter="10" class="mb8" style="margin-left: 94%">
+          <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">
+            <el-table v-loading="loading" :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" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthReturnGoalDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
+                                        referName="ORG_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" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthReturnGoalDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
+                                        referName="MK_SALESAREA_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" :render-header="addRedStar">
+                <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" :render-header="addRedStar">
+                <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" :render-header="addRedStar">
+                <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="monthly" width="250" :render-header="addRedStar">
+                <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="goalSum" width="220" :render-header="addRedStar">
+                <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>
+        <div slot="footer" class="dialog-footer" style="margin-left: 88%; margin-top: 1%">
+          <el-button type="primary" @click="submitForm" size="medium">确 定</el-button>
+          <el-button @click="cancel" size="medium">返 回</el-button>
+        </div>
+      </div>
     </el-drawer>
 
   </div>
@@ -393,7 +425,7 @@ export default {
       // 非多个禁用
       multiple: true,
       // 显示搜索条件
-      showSearch: true,
+      showSearch: false,
       // 总条数
       total: 0,
       // 月回款目标填报表格数据
@@ -570,17 +602,21 @@ export default {
       this.monthReturnGoalDetailsList = []
       this.open = true;
       this.title = "添加--月回款目标填报";
+      this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+      this.form.annual = new Date().getFullYear().toString()
+      this.form.creator = this.$store.state.user.nickName
+      this.form.dept = this.$store.state.user.deptName
     },
     handleAddDetails() {
       let list = {
         id: null,
         code: null,
-        saleOrg: this.form.saleZone,
+        saleOrg: this.$store.state.user.orgName,
         saleZone: this.form.saleZone,
         custom: this.form.custom,
         dept: this.form.dept,
         creator: this.form.creator,
-        monthly: null,
+        monthly: new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0'),
         goalSum: 0
       }
       this.monthReturnGoalDetailsList.push(list)
@@ -598,6 +634,24 @@ export default {
         this.title = "修改--月回款目标填报";
       });
     },
+    // 复制按钮操作
+    handleCopy(id) {
+      this.reset();
+      getMonthReturnGoal(id).then(response => {
+        this.form = response.data;
+        this.form.id = null
+        this.form.code = null
+        this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+        this.form.annual = new Date().getFullYear().toString()
+        this.monthReturnGoalDetailsList = JSON.parse(JSON.stringify(this.form.monthReturnGoalDetailsList))
+        for (const element of this.monthReturnGoalDetailsList) {
+          element.id = null
+          element.code = null
+        }
+        this.open = true;
+        this.title = "新增--月销售目标填报";
+      })
+    },
     /** 提交按钮 */
     submitForm() {
       if (!this.justiceDetailsList()) {
@@ -606,7 +660,7 @@ export default {
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id != null) {
-            this.form.monthReturnGoalDetailsList = this.monthReturnGoalDetailsList
+            this.form.monthReturnGoalDetailsList = JSON.parse(JSON.stringify(this.monthReturnGoalDetailsList))
             updateMonthReturnGoal(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
@@ -614,7 +668,7 @@ export default {
             });
           } else {
             this.form.documentStatus = '未提交'
-            this.form.monthReturnGoalDetailsList = this.monthReturnGoalDetailsList
+            this.form.monthReturnGoalDetailsList = JSON.parse(JSON.stringify(this.monthReturnGoalDetailsList))
             console.log(this.form);
             addMonthReturnGoal(this.form).then(response => {
               this.$modal.msgSuccess("新增成功");

+ 237 - 188
src/views/business/spd/goal_management/MonthReturnMerge.vue

@@ -1,81 +1,108 @@
 <template>
 <div class="app-container">
+  <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
+    <el-row :gutter="20">
+      <el-col :span="6">
+        <el-form-item label="编码" prop="code">
+          <el-input v-model="queryParams.code" placeholder="请输入编码" clearable @keyup.enter.native="handleQuery"/>
+        </el-form-item>
+      </el-col>
+      <el-col :span="6">
+        <el-form-item label="目标名称" prop="goalName">
+          <el-input v-model="queryParams.goalName" placeholder="请输入目标名称" clearable @keyup.enter.native="handleQuery"/>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8">
+        <el-form-item label="单据日期" prop="documentDate">
+          <el-date-picker
+            v-model="documentDateRange"
+            @change="setBeginAndEnd"
+            type="daterange"
+            align="right"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="yyyy-MM-dd"
+            @keyup.enter.native="handleQuery"
+            :picker-options="pickerOptions">
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col :span="4">
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        </el-form-item>
+      </el-col>
+    </el-row>
+  </el-form>
   <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-    <el-form-item label="编码" prop="code">
-      <el-input v-model="queryParams.code" placeholder="请输入编码" clearable @keyup.enter.native="handleQuery"/>
-    </el-form-item>
-    <el-form-item label="目标名称" prop="goalName">
-      <el-input v-model="queryParams.goalName" placeholder="请输入目标名称" clearable @keyup.enter.native="handleQuery"/>
-    </el-form-item>
-    <el-form-item label="单据日期" prop="documentDate">
-      <el-date-picker
-        v-model="documentDateRange"
-        @change="setBeginAndEnd"
-        type="daterange"
-        align="right"
-        unlink-panels
-        range-separator="至"
-        start-placeholder="开始日期"
-        end-placeholder="结束日期"
-        value-format="yyyy-MM-dd"
-        @keyup.enter.native="handleQuery"
-        :picker-options="pickerOptions">
-      </el-date-picker>
-    </el-form-item>
-    <el-form-item>
-      <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-      <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-    </el-form-item>
-    <el-form-item label="年度" prop="annual">
-      <el-date-picker
-        v-model="queryParams.annual"
-        type="year"
-        clearable
-        value-format="yyyy"
-        @keyup.enter.native="handleQuery"
-        placeholder="请输入年度">
-      </el-date-picker>
-    </el-form-item>
-    <el-form-item label="月份" prop="monthly">
-      <el-date-picker
-        v-model="queryParams.monthly"
-        type="month"
-        clearable
-        value-format="yyyy-MM"
-        @keyup.enter.native="handleQuery"
-        placeholder="请输入月份">
-      </el-date-picker>
-    </el-form-item>
-    <el-form-item label="客户" prop="custom">
-      <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
-                            referName="CUSTOMER_PARAM"
-                            :dataMapping="{ customCode: 'code', custom: 'name'}"
-                            :source.sync="queryParams" placeholder="请输入客户">
-      </el-popover-select-v2>
-    </el-form-item>
-    <el-form-item label="销售区域" prop="saleZone">
-      <el-popover-select-v2 v-model="queryParams.saleZoneCode" title="销售区域" valueKey="name"
-                            referName="DEPT_PARAM"
-                            :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
-                            :source.sync="queryParams" placeholder="请输入销售区域">
-      </el-popover-select-v2>
-    </el-form-item>
-    <el-form-item label="制单人" prop="creator">
-      <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
-                            referName="CONTACTS_PARAM"
-                            :dataMapping="{ creatorCode: 'code', creator: 'name'}"
-                            :source.sync="queryParams" placeholder="请输入制单人">
-      </el-popover-select-v2>
-    </el-form-item>
-    <el-form-item label="部门" prop="dept">
-      <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
-                            referName="DEPT_PARAM"
-                            :dataMapping="{ deptCode: 'code', dept: 'name'}"
-                            :source.sync="queryParams" placeholder="请输入部门">
-      </el-popover-select-v2>
-    </el-form-item>
+    <el-row :gutter="20">
+      <el-col :span="6">
+        <el-form-item label="年度" prop="annual">
+          <el-date-picker
+            v-model="queryParams.annual"
+            type="year"
+            clearable
+            value-format="yyyy"
+            @keyup.enter.native="handleQuery"
+            placeholder="请输入年度">
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col :span="6">
+        <el-form-item label="月份" prop="monthly">
+          <el-date-picker
+            v-model="queryParams.monthly"
+            type="month"
+            clearable
+            value-format="yyyy-MM"
+            @keyup.enter.native="handleQuery"
+            placeholder="请输入月份">
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col :span="6">
+        <el-form-item label="客户" prop="custom">
+          <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
+                                referName="CUSTOMER_PARAM"
+                                :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                :source.sync="queryParams" 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="queryParams.saleZoneCode" title="销售区域" valueKey="name"
+                                referName="MK_SALESAREA_PARAM"
+                                :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                :source.sync="queryParams" 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="creator">
+          <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
+                                referName="CONTACTS_PARAM"
+                                :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                :source.sync="queryParams" 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="queryParams.dept" title="部门" valueKey="name"
+                                referName="DEPT_PARAM"
+                                :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                :source.sync="queryParams" placeholder="请输入部门">
+          </el-popover-select-v2>
+        </el-form-item>
+      </el-col>
+    </el-row>
   </el-form>
-  <el-row :gutter="10" class="mb8">
+  <el-row :gutter="10" class="mb8" style="float: right">
     <el-col :span="1.5">
       <el-button
         type="primary"
@@ -126,6 +153,7 @@
         <el-dropdown-menu slot="dropdown">
           <el-dropdown-item command="export">导出</el-dropdown-item>
           <el-dropdown-item command="exportDetails">导出明细</el-dropdown-item>
+          <el-dropdown-item command="exportZoneSum">导出区域目标汇总</el-dropdown-item>
         </el-dropdown-menu>
       </el-dropdown>
     </el-col>
@@ -154,6 +182,13 @@
         <el-button
           size="mini"
           type="text"
+          icon="el-icon-document-copy"
+          @click="handleCopy(scope.row.id)"
+        >复制
+        </el-button>
+        <el-button
+          size="mini"
+          type="text"
           icon="el-icon-edit"
           @click="handleUpdate(scope.row)"
         >修改
@@ -234,7 +269,7 @@
         <el-col :span="6">
           <el-form-item label="销售区域" prop="saleZone">
             <el-popover-select-v2 v-model="form.saleZoneCode" title="销售区域" valueKey="name"
-                                  referName="DEPT_PARAM"
+                                  referName="MK_SALESAREA_PARAM"
                                   :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
                                   :source.sync="form" placeholder="请输入销售区域">
             </el-popover-select-v2>
@@ -274,115 +309,96 @@
       <el-row :gutter="20">
         <el-col :span="6">
           <el-form-item label="单据状态" prop="goalSum">
-            <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-input v-model="form.documentStatus" placeholder="未提交" disabled/>
           </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-col :span="1.5">
-        <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" @tab-click="getNewTwoArray">
-      <el-tab-pane label="月回款目标合并明细" name="monthReturnMergeDetails">
-        <el-table v-loading="loading" :data="monthReturnMergeDetailsList">
-          <el-table-column label="序号" type="index" 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="monthReturnMergeDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
-                                    referName="CUSTOMER_PARAM" disabled
-                                    :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
-                                    :source.sync="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
-                                    referName="CUSTOMER_PARAM" disabled
-                                    :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
-                                    :source.sync="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].custom" title="客户" valueKey="name"
-                                    referName="CUSTOMER_PARAM" disabled
-                                    :dataMapping="{ customCode: 'code', custom: 'name'}"
-                                    :source.sync="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].dept" title="部门" valueKey="name"
-                                    referName="DEPT_PARAM" disabled
-                                    :dataMapping="{ deptCode: 'code', dept: 'name'}"
-                                    :source.sync="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].creator" title="制单人" valueKey="name"
-                                    referName="CONTACTS_PARAM" disabled
-                                    :dataMapping="{ creatorCode: 'code', creator: 'name'}"
-                                    :source.sync="monthReturnMergeDetailsList[scope.$index]" placeholder="请输入制单人">
-              </el-popover-select-v2>
-            </template>
-          </el-table-column>
-          <el-table-column label="月份" align="center" prop="monthly" width="250">
-            <template slot-scope="scope">
-              <el-date-picker disabled v-model="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[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-tab-pane label="区域目标汇总(月回款)" name="zoneGoalSum(monthReturn)">
-        <el-table :data="zoneGoalSumList">
-          <el-table-column label="序号" type="index" width="55" align="center" fixed />
-          <el-table-column label="销售组织" align="center" prop="saleOrg" width="180" />
-          <el-table-column label="区域" align="center" prop="saleZone" width="180" />
-          <el-table-column label="部门" align="center" prop="dept" width="180" />
-          <el-table-column label="制单人" align="center" prop="creator" width="180" />
-          <el-table-column label="月份" align="center" prop="monthly" width="180" />
-          <el-table-column label="目标值" align="center" prop="goalSum" width="180" />
-        </el-table>
-      </el-tab-pane>
-    </el-tabs>
+    <div>
+      <el-row :gutter="10" class="mb8" style="margin-left: 94%">
+        <el-col :span="1.5">
+          <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" @tab-click="getNewTwoArray">
+        <el-tab-pane label="月回款目标合并明细" name="monthReturnMergeDetails">
+          <el-table v-loading="loading" :data="monthReturnMergeDetailsList">
+            <el-table-column label="序号" type="index" 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="monthReturnMergeDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
+                                      referName="ORG_PARAM" disabled
+                                      :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
+                                      :source.sync="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
+                                      referName="MK_SALESAREA_PARAM" disabled
+                                      :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                      :source.sync="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].custom" title="客户" valueKey="name"
+                                      referName="CUSTOMER_PARAM" disabled
+                                      :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                      :source.sync="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].dept" title="部门" valueKey="name"
+                                      referName="DEPT_PARAM" disabled
+                                      :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                      :source.sync="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].creator" title="制单人" valueKey="name"
+                                      referName="CONTACTS_PARAM" disabled
+                                      :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                      :source.sync="monthReturnMergeDetailsList[scope.$index]" placeholder="请输入制单人">
+                </el-popover-select-v2>
+              </template>
+            </el-table-column>
+            <el-table-column label="月份" align="center" prop="monthly" width="250">
+              <template slot-scope="scope">
+                <el-date-picker disabled v-model="monthReturnMergeDetailsList[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="monthReturnMergeDetailsList[scope.$index].goalSum" :precision="2" :step="1" :min="0"></el-input-number>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-tab-pane>
+        <el-tab-pane label="区域目标汇总(月回款)" name="zoneGoalSum(monthReturn)">
+          <el-table :data="zoneGoalSumList">
+            <el-table-column label="序号" type="index" width="55" align="center" fixed />
+            <el-table-column label="销售组织" align="center" prop="saleOrg" width="180" />
+            <el-table-column label="区域" align="center" prop="saleZone" width="180" />
+            <el-table-column label="部门" align="center" prop="dept" width="180" />
+            <el-table-column label="制单人" align="center" prop="creator" width="180" />
+            <el-table-column label="月份" align="center" prop="monthly" width="180" />
+            <el-table-column label="目标值" align="center" prop="goalSum" width="180" />
+          </el-table>
+        </el-tab-pane>
+      </el-tabs>
+      <div slot="footer" class="dialog-footer" style="margin-left: 88%; margin-top: 1%">
+        <el-button type="primary" @click="submitForm" size="medium">确 定</el-button>
+        <el-button @click="cancel" size="medium">返 回</el-button>
+      </div>
+    </div>
   </el-drawer>
 </div>
 </template>
@@ -422,7 +438,7 @@ export default {
       // 非多个禁用
       multiple: true,
       // 显示搜索条件
-      showSearch: true,
+      showSearch: false,
       // 总条数
       total: 0,
       // 月销售目标合并表格数据
@@ -475,7 +491,8 @@ export default {
         goalSum: null,
         documentStatus: null,
         delFlag: null,
-        monthReturnMergeDetailsList: null
+        monthReturnMergeDetailsList: null,
+        oldMonthReturnMergeDetailsList: null
       },
       formDetails: {
         id: null,
@@ -603,8 +620,14 @@ export default {
       this.reset();
       this.activeName = 'monthReturnMergeDetails'
       this.monthReturnMergeDetailsList = []
+      this.zoneGoalSumList = []
       this.open = true;
       this.title = "添加--月回款目标合并";
+      this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+      this.form.annual = new Date().getFullYear().toString()
+      this.form.monthly = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0')
+      this.form.creator = this.$store.state.user.nickName
+      this.form.dept = this.$store.state.user.deptName
     },
     handleAddDetails() {
       let list = {
@@ -632,12 +655,30 @@ export default {
         this.title = "修改--月回款目标合并";
       });
     },
+    // 复制按钮操作
+    handleCopy(id) {
+      this.reset()
+      this.monthGoalMergeDetailsList = []
+      this.activeName = 'monthReturnMergeDetails'
+      this.monthReturnMergeDetailsList = []
+      this.zoneGoalSumList = []
+      getMonthReturnMerge(id).then(response => {
+        this.form = response.data
+        this.form.id = null
+        this.form.code = null
+        this.title = "添加--月销售目标合并";
+        this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+        this.form.annual = new Date().getFullYear().toString()
+        this.form.monthly = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0')
+        this.open = true
+      })
+    },
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id !== null) {
-            this.form.monthReturnMergeDetailsList = this.monthReturnMergeDetailsList
+            this.form.monthReturnMergeDetailsList = JSON.parse(JSON.stringify(this.monthReturnMergeDetailsList))
             updateMonthReturnMerge(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
@@ -646,7 +687,7 @@ export default {
           } else {
             this.form.documentStatus = '未提交'
             this.form.goalCategory = '客户维度'
-            this.form.monthReturnMergeDetailsList = this.monthReturnMergeDetailsList
+            this.form.monthReturnMergeDetailsList = JSON.parse(JSON.stringify(this.monthReturnMergeDetailsList))
             console.log(this.form);
             addMonthReturnMerge(this.form).then(response => {
               this.$modal.msgSuccess("新增成功");
@@ -699,6 +740,11 @@ export default {
         ...this.queryParams
       }, `monthReturnMergeDetails_${new Date().getTime()}.xlsx`)
     },
+    handleExportZoneSum() {
+      this.download('mk/monthReturnMergeDetails/exportZoneSum', {
+        ...this.queryParams
+      }, `zoneSum_${new Date().getTime()}.xlsx`)
+    },
     // 关闭抽屉
     handleClose(done) {
       this.$confirm('确认关闭?')
@@ -710,16 +756,16 @@ export default {
     },
     // 合并数据
     clickMerge() {
+      if (this.form.id !== null) {
+        this.form.oldMonthReturnMergeDetailsList = JSON.parse(JSON.stringify(this.monthReturnMergeDetailsList))
+      }
       if (this.activeName !== 'monthReturnMergeDetails') {
         return this.$message.error('当前页签不是月回款合并明细')
       }
       if (this.form.custom === null) {
         return this.$message.error('请输入客户')
       }
-      let classify = this.form.goalCategory
-      let classifyValue = this.form.custom
-      let query = { classify: classify, classifyValue: classifyValue }
-      mergeMonthReturnMergeDetails(query).then(response => {
+      mergeMonthReturnMergeDetails(this.form).then(response => {
         console.log(response)
         this.monthReturnMergeDetailsList = response.data.monthReturnMergeDetails
         this.computeTotal()
@@ -796,6 +842,9 @@ export default {
       } else if (command === 'exportDetails') {
         console.log('导出明细');
         this.handleExportDetails()
+      } else if (command === 'exportZoneSum') {
+        console.log('导出区域目标汇总');
+        this.handleExportZoneSum()
       }
     }
   }

+ 262 - 209
src/views/business/spd/goal_management/MonthSaleGoal.vue

@@ -1,81 +1,106 @@
 <template>
   <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="编码" prop="code">
+            <el-input
+              v-model="queryParams.code"
+              placeholder="请输入编码"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="目标名称" prop="goalName">
+            <el-input
+              v-model="queryParams.goalName"
+              placeholder="请输入目标名称"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单据日期" prop="documentDate">
+            <el-date-picker
+              v-model="documentDateRange"
+              value-format="yyyy-MM-dd"
+              @change="setBeginAndEnd"
+              type="daterange"
+              align="right"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :picker-options="pickerOptions">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="编码" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          placeholder="请输入编码"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="目标名称" prop="goalName">
-        <el-input
-          v-model="queryParams.goalName"
-          placeholder="请输入目标名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="单据日期" prop="documentDate">
-        <el-date-picker
-          v-model="documentDateRange"
-          value-format="yyyy-MM-dd"
-          @change="setBeginAndEnd"
-          type="daterange"
-          align="right"
-          unlink-panels
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          :picker-options="pickerOptions">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-      <el-form-item label="年度" prop="annual">
-        <el-date-picker
-          v-model="queryParams.annual"
-          type="year"
-          value-format="yyyy"
-          placeholder="选择年度"
-          clearable
-          @keyup.enter.native="handleQuery">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="客户" prop="custom">
-        <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
-                              referName="CUSTOMER_PARAM"
-                              :dataMapping="{ customCode: 'code', custom: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入客户" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="销售区域" prop="saleZone">
-        <el-popover-select-v2 v-model="queryParams.saleZone" title="销售区域" valueKey="name"
-                              referName="CUSTOMER_PARAM"
-                              :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入销售区域" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="制单人" prop="creator">
-        <el-popover-select-v2 v-model="queryParams.creator" title="制单人" valueKey="name"
-                              referName="CONTACTS_PARAM"
-                              :dataMapping="{ creatorCode: 'code', creator: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入制单人" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
-      <el-form-item label="部门" prop="dept">
-        <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
-                              referName="DEPT_PARAM"
-                              :dataMapping="{ deptCode: 'code', dept: 'name'}"
-                              :source.sync="queryParams" placeholder="请输入部门" @keyup.enter.native="handleQuery">
-        </el-popover-select-v2>
-      </el-form-item>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="年度" prop="annual">
+            <el-date-picker
+              v-model="queryParams.annual"
+              type="year"
+              value-format="yyyy"
+              placeholder="选择年度"
+              clearable
+              @keyup.enter.native="handleQuery">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="客户" prop="custom">
+            <el-popover-select-v2 v-model="queryParams.custom" title="客户" valueKey="name"
+                                  referName="CUSTOMER_PARAM"
+                                  :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入客户" @keyup.enter.native="handleQuery">
+            </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="queryParams.saleZone" title="销售区域" valueKey="name"
+                                  referName="MK_SALESAREA_PARAM"
+                                  :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入销售区域" @keyup.enter.native="handleQuery">
+            </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="queryParams.creator" title="制单人" valueKey="name"
+                                  referName="CONTACTS_PARAM"
+                                  :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入制单人" @keyup.enter.native="handleQuery">
+            </el-popover-select-v2>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="部门" prop="dept">
+            <el-popover-select-v2 v-model="queryParams.dept" title="部门" valueKey="name"
+                                  referName="DEPT_PARAM"
+                                  :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                  :source.sync="queryParams" placeholder="请输入部门" @keyup.enter.native="handleQuery">
+            </el-popover-select-v2>
+          </el-form-item>
+        </el-col>
+      </el-row>
     </el-form>
 
-    <el-row :gutter="10" class="mb8">
+    <el-row :gutter="10" class="mb8" style="float: right">
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -154,6 +179,13 @@
           <el-button
             size="mini"
             type="text"
+            icon="el-icon-document-copy"
+            @click="handleCopy(scope.row.id)"
+          >复制
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
           >修改
@@ -224,7 +256,7 @@
           <el-col :span="6">
             <el-form-item label="销售区域" prop="saleZone">
               <el-popover-select-v2 v-model="form.saleZone" title="销售区域" valueKey="name"
-                                    referName="CUSTOMER_PARAM"
+                                    referName="MK_SALESAREA_PARAM"
                                     :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
                                     :source.sync="form" placeholder="请输入销售区域">
               </el-popover-select-v2>
@@ -261,138 +293,138 @@
           </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-input v-model="form.documentStatus" placeholder="未提交" disabled/>
             </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="monthSaleGoalDetails">
-          <el-table v-loading="loading" :data="monthSaleGoalDetailsList" @selection-change="handleSelectionChange">
-            <el-table-column type="selection" width="55" align="center" fixed />
-            <el-table-column label="销售组织" align="center" prop="saleOrg" width="180" :render-header="addRedStar">
-              <template slot-scope="scope">
-                <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
-                                      referName="CUSTOMER_PARAM"
-                                      :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
-                                      :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入销售组织">
-                </el-popover-select-v2>
-              </template>
-            </el-table-column>
-            <el-table-column label="销售区域" align="center" prop="saleZone" width="180" :render-header="addRedStar">
-              <template slot-scope="scope">
-                <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
-                                      referName="CUSTOMER_PARAM"
-                                      :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
-                                      :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入销售区域">
-                </el-popover-select-v2>
-              </template>
-            </el-table-column>
-            <el-table-column label="客户" align="center" prop="custom" width="180" :render-header="addRedStar">
-              <template slot-scope="scope">
-                <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].custom" title="客户" valueKey="name"
-                                      referName="CUSTOMER_PARAM"
-                                      :dataMapping="{ customCode: 'code', custom: 'name'}"
-                                      :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入客户">
-                </el-popover-select-v2>
-              </template>
-            </el-table-column>
-            <el-table-column label="部门" align="center" prop="dept" width="180" :render-header="addRedStar">
-              <template slot-scope="scope">
-                <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].dept" title="部门" valueKey="name"
-                                      referName="DEPT_PARAM"
-                                      :dataMapping="{ deptCode: 'code', dept: 'name'}"
-                                      :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入部门">
-                </el-popover-select-v2>
-              </template>
-            </el-table-column>
-            <el-table-column label="制单人" align="center" prop="creator" width="180" :render-header="addRedStar">
-              <template slot-scope="scope">
-                <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].creator" title="制单人" valueKey="name"
-                                      referName="CONTACTS_PARAM"
-                                      :dataMapping="{ creatorCode: 'code', creator: 'name'}"
-                                      :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入制单人">
-                </el-popover-select-v2>
-              </template>
-            </el-table-column>
-            <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220" :render-header="addRedStar">
-              <template slot-scope="scope">
-                <el-select v-model="monthSaleGoalDetailsList[scope.$index].oneLevelClassify" size="mini" clearable
-                           @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)"
-                           style="width: 200px">
-                  <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
-                </el-select>
-              </template>
-            </el-table-column>
-            <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220" :render-header="addRedStar">
-              <template slot-scope="scope">
-                <el-select v-model="monthSaleGoalDetailsList[scope.$index].twoLevelClassify" size="mini" clearable
-                           @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)"
-                           style="width: 200px">
-                  <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
-                </el-select>
-              </template>
-            </el-table-column>
-            <el-table-column label="物料" align="center" prop="material" width="180">
-              <template slot-scope="scope">
-                <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].material" title="物料" valueKey="name"
-                                      referName="MATERIAL_PARAM"
-                                      :dataMapping="{ materialCode: 'code', material: 'name'}"
-                                      :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入物料">
-                </el-popover-select-v2>
-              </template>
-            </el-table-column>
-            <el-table-column label="科室" align="center" prop="department" width="180">
-              <template slot-scope="scope">
-                <el-input v-model="monthSaleGoalDetailsList[scope.$index].department" placeholder="请输入科室"></el-input>
-              </template>
-            </el-table-column>
-            <el-table-column label="数量" align="center" prop="num" width="220">
-              <template slot-scope="scope">
-                <el-input-number v-model="monthSaleGoalDetailsList[scope.$index].num" :min="0"></el-input-number>
-              </template>
-            </el-table-column>
-            <el-table-column label="月份" align="center" prop="monthly" width="250">
-              <template slot-scope="scope">
-                <el-date-picker v-model="monthSaleGoalDetailsList[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="monthSaleGoalDetailsList[scope.$index].goalValue" :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>
+      <div>
+        <el-row :gutter="10" class="mb8" style="margin-left: 94%">
+          <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="monthSaleGoalDetails">
+            <el-table v-loading="loading" :data="monthSaleGoalDetailsList" @selection-change="handleSelectionChange">
+              <el-table-column type="selection" width="55" align="center" fixed />
+              <el-table-column label="销售组织" align="center" prop="saleOrg" width="180" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
+                                        referName="ORG_PARAM"
+                                        :dataMapping="{ saleOrgCode: 'code', saleOrg: 'name'}"
+                                        :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入销售组织">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="销售区域" align="center" prop="saleZone" width="180" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
+                                        referName="MK_SALESAREA_PARAM"
+                                        :dataMapping="{ saleZoneCode: 'code', saleZone: 'name'}"
+                                        :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入销售区域">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="客户" align="center" prop="custom" width="180" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].custom" title="客户" valueKey="name"
+                                        referName="CUSTOMER_PARAM"
+                                        :dataMapping="{ customCode: 'code', custom: 'name'}"
+                                        :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入客户">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="部门" align="center" prop="dept" width="180" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].dept" title="部门" valueKey="name"
+                                        referName="DEPT_PARAM"
+                                        :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                        :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入部门">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="制单人" align="center" prop="creator" width="180" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].creator" title="制单人" valueKey="name"
+                                        referName="CONTACTS_PARAM"
+                                        :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                        :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入制单人">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-select v-model="monthSaleGoalDetailsList[scope.$index].oneLevelClassify" size="mini" clearable
+                             @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)"
+                             style="width: 200px">
+                    <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-select v-model="monthSaleGoalDetailsList[scope.$index].twoLevelClassify" size="mini" clearable
+                             @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)"
+                             style="width: 200px">
+                    <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.id" />
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column label="物料" align="center" prop="material" width="180">
+                <template slot-scope="scope">
+                  <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].material" title="物料" valueKey="name"
+                                        referName="MATERIAL_PARAM"
+                                        :dataMapping="{ materialCode: 'code', material: 'name'}"
+                                        :source.sync="monthSaleGoalDetailsList[scope.$index]" placeholder="请输入物料">
+                  </el-popover-select-v2>
+                </template>
+              </el-table-column>
+              <el-table-column label="科室" align="center" prop="department" width="180">
+                <template slot-scope="scope">
+                  <el-input v-model="monthSaleGoalDetailsList[scope.$index].department" placeholder="请输入科室"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="数量" align="center" prop="num" width="220">
+                <template slot-scope="scope">
+                  <el-input-number v-model="monthSaleGoalDetailsList[scope.$index].num" :min="0"></el-input-number>
+                </template>
+              </el-table-column>
+              <el-table-column label="月份" align="center" prop="monthly" width="250" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-date-picker v-model="monthSaleGoalDetailsList[scope.$index].monthly" value-format="yyyy-MM" type="month" placeholder="选择月份">
+                  </el-date-picker>
+                </template>
+              </el-table-column>
+              <el-table-column label="目标值" align="center" prop="goalValue" width="220" :render-header="addRedStar">
+                <template slot-scope="scope">
+                  <el-input-number @change="computeTotal" v-model="monthSaleGoalDetailsList[scope.$index].goalValue" :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>
+        <div slot="footer" class="dialog-footer" style="margin-left: 88%; margin-top: 1%">
+          <el-button type="primary" @click="submitForm" size="medium">确 定</el-button>
+          <el-button @click="cancel" size="medium">返 回</el-button>
+        </div>
+      </div>
     </el-drawer>
 
     <TreeRefers ref="treeDetails" @doSubmit="selectionsToInputForDetails" :single="true"/>
@@ -415,7 +447,6 @@ import {
 // 树形参照
 import TreeRefers from '@/components/Refers/treeRefer.vue'
 import ElPopoverSelectV2 from "@/components/popover-select-v2"
-import log from "../../../monitor/job/log";
 
 export default {
   name: "MonthSaleGoal",
@@ -433,7 +464,7 @@ export default {
       // 非多个禁用
       multiple: true,
       // 显示搜索条件
-      showSearch: true,
+      showSearch: false,
       // 总条数
       total: 0,
       // 月销售目标填报表格数据
@@ -537,7 +568,7 @@ export default {
         annual: [{ required: true, message: '年度不能为空', trigger: 'blur' }],
         custom: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
         saleZone: [{ required: true, message: '销售区域不能为空', trigger: 'blur' }],
-        creator: [{ required: true, message: '销售区域不能为空', trigger: 'blur' }],
+        creator: [{ required: true, message: '制单人不能为空', trigger: 'blur' }],
         dept: [{ required: true, message: '部门不能为空', trigger: 'blur' }]
       },
       // 参照条件
@@ -642,12 +673,16 @@ export default {
       this.monthSaleGoalDetailsList = []
       this.open = true;
       this.title = "添加月销售目标填报";
+      this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+      this.form.annual = new Date().getFullYear().toString()
+      this.form.creator = this.$store.state.user.nickName
+      this.form.dept = this.$store.state.user.deptName
     },
     handleAddDetails() {
       let list = {
         id: null,
         code: null,
-        saleOrg: this.form.saleZone,
+        saleOrg: this.$store.state.user.orgName,
         saleZone: this.form.saleZone,
         custom: this.form.custom,
         dept: this.form.dept,
@@ -677,6 +712,24 @@ export default {
         this.title = "修改月销售目标填报";
       });
     },
+    // 复制按钮
+    handleCopy(id) {
+      this.reset();
+      getMonthSaleGoal(id).then(response => {
+        this.form = response.data;
+        this.form.id = null
+        this.form.code = null
+        this.form.documentDate = new Date().getFullYear().toString() + '-' + (new Date().getMonth() + 1).toString().padStart(2, '0') + '-' + new Date().getDate().toString().padStart(2, '0')
+        this.form.annual = new Date().getFullYear().toString()
+        this.monthSaleGoalDetailsList = JSON.parse(JSON.stringify(this.form.monthDetailsList))
+        for (const element of this.monthSaleGoalDetailsList) {
+          element.id = null
+          element.code = null
+        }
+        this.open = true;
+        this.title = "新增--月销售目标填报";
+      })
+    },
     /** 提交按钮 */
     submitForm() {
       if (!this.justiceDetailsList()) {
@@ -685,7 +738,7 @@ export default {
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id != null) {
-            this.form.monthDetailsList = this.monthSaleGoalDetailsList
+            this.form.monthDetailsList = JSON.parse(JSON.stringify(this.monthSaleGoalDetailsList))
             updateMonthSaleGoal(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
@@ -693,7 +746,7 @@ export default {
             });
           } else {
             this.form.documentStatus = '未提交'
-            this.form.monthDetailsList = this.monthSaleGoalDetailsList
+            this.form.monthDetailsList = JSON.parse(JSON.stringify(this.monthSaleGoalDetailsList))
             console.log(this.form);
             addMonthSaleGoal(this.form).then(response => {
               this.$modal.msgSuccess("新增成功");
@@ -827,7 +880,7 @@ export default {
     justiceDetailsList() {
       const arr = JSON.parse(JSON.stringify(this.monthSaleGoalDetailsList))
       for (const element of arr) {
-        if (element.saleOrg === null || element.saleZone === null || element.custom === null || element.dept === null || element.creator === null || element.oneLevelClassify === null || element.twoLevelClassify === null) {
+        if (element.saleOrg === null || element.saleZone === null || element.custom === null || element.dept === null || element.creator === null || element.oneLevelClassify === null || element.twoLevelClassify === null || element.monthly === null || element.goalValue === 0) {
           return false
         }
       }

+ 150 - 151
src/views/business/spd/task_management/visitingPlan/add.vue

@@ -20,7 +20,7 @@
               <el-input
                 v-model.trim="basicForm.planName"
                 size="mini"
-                :disabled="sonDisable"
+                :readonly="sonDisable"
                 clearable
                 style="width: 200px"
               />
@@ -28,6 +28,15 @@
          </el-col>
 
          <el-col :span="1.5">
+            <el-form-item label="线路类型" prop="type">
+              <el-select :disabled="sonDisable" v-model="basicForm.type" size="mini" style="width: 200px">
+                <el-option v-for="dict in dict.type.mk_plan_route_type" :key="dict.value" :label="dict.label" :value="dict.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
             <el-form-item label="执行人" prop="chargerName">
                 <el-select clearable size="mini" v-model="basicForm.chargerName" :disabled="sonDisable" @focus="choose('CONTACTS_PARAM', true, '执行人')" style="width: 200px">
                   <el-option v-for="item in personOptions" :key="item.id" :label="item.name" :value="item.code" />
@@ -36,6 +45,19 @@
           </el-col>
 
           <el-col :span="1.5">
+            <el-form-item label="确认状态" prop="state">
+              <el-select disabled v-model="basicForm.state" size="mini" style="width: 200px">
+                <el-option v-for="dict in dict.type.mk_plan_state" :key="dict.value" :label="dict.label" :value="dict.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+
+        <el-row :gutter="10">
+
+          <el-col :span="1.5">
             <el-form-item label="开始时间" prop="startDate" :rules="{ required: true, message: '请选择开始时间', trigger: 'blur' }">
               <el-date-picker
                 v-model="basicForm.startDate"
@@ -43,7 +65,6 @@
                 clearable
                 type="date"
                 value-format="yyyy-MM-dd"
-                @change="changePlanDate"
                 size="mini"
                 style="width: 200px"
               >
@@ -59,7 +80,6 @@
                 clearable
                 type="date"
                 value-format="yyyy-MM-dd"
-                @change="changePlanDate"
                 size="mini"
                 style="width: 200px"
               >
@@ -93,19 +113,13 @@
             </el-form-item>
           </el-col>
 
-          <el-col :span="1.5">
-            <el-form-item label="确认状态" prop="state">
-              <el-select disabled v-model="basicForm.state" size="mini" style="width: 200px">
-                <el-option v-for="dict in dict.type.mk_plan_state" :key="dict.value" :label="dict.label" :value="dict.value">
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
         </el-row>
 
         <span>明细信息</span>
         <div class="btn_grooup">
           <el-button type="primary" size="mini" @click="addLine" v-if="!sonDisable">增行</el-button>
+          <el-button type="primary" size="mini" @click="delItems" v-if="sonPageStu == 'edit'">批量删除</el-button>
+          <el-button type="primary" size="mini" @click="edit" v-if="sonPageStu == 'check'">编辑</el-button>
         </div>
 
         <el-table 
@@ -116,82 +130,82 @@
           @selection-change="handleSelectionChange"
           :cell-class-name="cellClassName"
         >
-        <el-table-column show-overflow-tooltip type="selection"/>
-        <el-table-column show-overflow-tooltip label="序号" type="index" align="center"/>
-        <el-table-column show-overflow-tooltip label="计划编号" prop="planCode" width="150"/>
-        <el-table-column show-overflow-tooltip label="日期"  prop="date" width="230px">
-          <template slot-scope="scope">
-            <el-form-item class="hang" :prop="'mkBoPlanItemList.' + scope.$index + '.' + 'date'" :rules="{ required: true, message: '请填写日期', trigger: 'blur' }">
-              <el-date-picker
-                v-model="scope.row.date"
-                :readonly="sonDisable"
-                clearable
-                type="date"
-                size="mini"
-                value-format="yyyy-MM-dd"
-                placeholder="选择日期">
-              </el-date-picker>
-            </el-form-item>
-          </template>
-        </el-table-column>
+          <el-table-column type="selection" align="center"/>
+          <el-table-column label="序号" type="index" align="center"/>
+          <el-table-column show-overflow-tooltip label="计划编号" prop="planCode" width="150"/>
+          <el-table-column show-overflow-tooltip label="日期"  prop="date" width="230px">
+            <template slot-scope="scope">
+              <el-form-item class="hang" :prop="'mkBoPlanItemList.' + scope.$index + '.' + 'date'" :rules="{ required: true, message: '请填写日期', trigger: 'blur' }">
+                <el-date-picker
+                  v-model="scope.row.date"
+                  readonly
+                  clearable
+                  type="date"
+                  size="mini"
+                  value-format="yyyy-MM-dd"
+                  placeholder="选择日期">
+                </el-date-picker>
+              </el-form-item>
+            </template>
+          </el-table-column>
 
-        <el-table-column show-overflow-tooltip label="客户名称" prop="customerName" min-width="230">
-          <template slot-scope="scope">
-            <el-form-item class="hang">
-              <el-select clearable size="mini" v-model="scope.row.customerName" :disabled="sonDisable" @focus="chooseSon(scope.$index, 'CUSTOMER_PARAM_ZT', true, '客户')" style="width: 200px">
-                <el-option v-for="item in customerOptions" :key="item.id" :label="item.name" :value="item.code" />
-              </el-select>
-            </el-form-item>
-          </template>
-        </el-table-column>
+          <el-table-column show-overflow-tooltip label="客户名称" prop="customerName" min-width="230">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-select clearable size="mini" v-model="scope.row.customerName" :disabled="sonDisable" @focus="chooseSon(scope.$index, 'CUSTOMER_PARAM_ZT', true, '客户')" style="width: 200px">
+                  <el-option v-for="item in customerOptions" :key="item.id" :label="item.name" :value="item.code" />
+                </el-select>
+              </el-form-item>
+            </template>
+          </el-table-column>
 
-        <el-table-column show-overflow-tooltip label="联系人" prop="contactName" min-width="230">
-          <template slot-scope="scope">
-            <el-form-item class="hang">
-              <el-select clearable size="mini" v-model="scope.row.contactName" :disabled="sonDisable" @focus="chooseSon(scope.$index, 'LINKMAN_PARAM', true, '联系人', {})" style="width: 200px">
-                <el-option v-for="item in linkOptions" :key="item.id" :label="item.name" :value="item.code" />
-              </el-select>
-            </el-form-item>
-          </template>
-        </el-table-column>
+          <el-table-column show-overflow-tooltip label="联系人" prop="contactName" min-width="230">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-select clearable size="mini" v-model="scope.row.contactName" :disabled="sonDisable" @focus="chooseSon(scope.$index, 'LINKMAN_PARAM', true, '联系人', {})" style="width: 200px">
+                  <el-option v-for="item in linkOptions" :key="item.id" :label="item.name" :value="item.code" />
+                </el-select>
+              </el-form-item>
+            </template>
+          </el-table-column>
 
-        <el-table-column show-overflow-tooltip label="详细地址" prop="address" min-width="200">
-          <template slot-scope="scope">
-            <el-form-item class="hang">
-              <el-input clearable :readonly="sonDisable" size="mini" v-model="scope.row.address"/>
-            </el-form-item>
-          </template>
-        </el-table-column>
+          <el-table-column show-overflow-tooltip label="详细地址" prop="address" min-width="200">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-input clearable :readonly="sonDisable" size="mini" v-model="scope.row.address"/>
+              </el-form-item>
+            </template>
+          </el-table-column>
 
-        <el-table-column show-overflow-tooltip label="拜访目的" prop="purpose" min-width="200">
-          <template slot-scope="scope">
-            <el-form-item class="hang">
-              <el-select clearable v-model="scope.row.purpose" size="mini">
-                <el-option v-for=" dict in dict.type.mk_bo_behavior_goal" :key="dict.value" :label="dict.label" :value="dict.value">
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </template>
-        </el-table-column>
+          <el-table-column show-overflow-tooltip label="拜访目的" prop="purpose" min-width="200">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-select clearable :disabled="sonDisable" v-model="scope.row.purpose" size="mini">
+                  <el-option v-for=" dict in dict.type.mk_bo_behavior_goal" :key="dict.value" :label="dict.label" :value="dict.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </template>
+          </el-table-column>
 
-        <el-table-column show-overflow-tooltip label="商机" prop="boName" min-width="200"/>
-        <el-table-column show-overflow-tooltip label="营销活动" prop="marketingCampaign" min-width="200">
-          <template slot-scope="scope">
-            <el-form-item class="hang">
-              <el-input clearable :readonly="sonDisable" size="mini" v-model="scope.row.marketingCampaign"/>
-            </el-form-item>
-          </template>
-        </el-table-column>
+          <el-table-column :readonly="sonDisable" show-overflow-tooltip label="商机" prop="boName" min-width="200"/>
+          <el-table-column :readonly="sonDisable" show-overflow-tooltip label="营销活动" prop="marketingCampaign" min-width="200">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-input clearable :readonly="sonDisable" size="mini" v-model="scope.row.marketingCampaign"/>
+              </el-form-item>
+            </template>
+          </el-table-column>
 
-        <el-table-column
+          <el-table-column
             fixed="right"
             label="操作"
             align="center"
-            >
-          <template slot-scope="scope">
-            <el-button type="text" size="mini" :disabled="sonDisable" @click="delLine(scope.$index, scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
+          >
+            <template slot-scope="scope">
+              <el-button type="text" size="mini" :disabled="sonDisable" @click="delLine(scope.$index, scope.row)">删除</el-button>
+            </template>
+          </el-table-column>
         </el-table>
       </el-form>
     </el-card>
@@ -209,26 +223,21 @@
 
       <Refers ref="refer" @doSubmit="selectionsToInput" :single="true"/>
 
-      <!-- <popDialog ref="materialRefer" @doSubmit="selectMaterial" :single="true" /> -->
-
     </div>
   </div>
 </template>
 
 <script>
-import {addPlan, getPlanDetail, editPlan} from '@/api/business/spd/task_management/visitingPlan/visitingPlan.js'
+import {addPlan, getPlanDetail, editPlan, delPlanItem} from '@/api/business/spd/task_management/visitingPlan/visitingPlan.js'
 import Refers from '@/components/Refers/refers.vue'
 // 用于回显参照框数据
 import {getRefer} from '@/api/purchase/basic.js'
-// 明细行选择物料参照
-import popDialog from '@/components/PopDialog/index.vue'
 export default {
   name: 'addPlanList',
-  props: ['pageStu','row', 'disable'],
-  dicts: ['mk_plan_state', 'mk_bo_behavior_goal'],
+  props: ['pageStu', 'row', 'disable'],
+  dicts: ['mk_plan_state', 'mk_plan_route_type', 'mk_bo_behavior_goal'],
   components: {
-    Refers,
-    popDialog
+    Refers
   },
   model: {
     prop: 'isList',
@@ -239,9 +248,9 @@ export default {
       // 不能直接改变props传来的值
       sonPageStu: this.pageStu,
       sonDisable: this.disable,
-      dialog: {
-        config: false
-      },
+      // dialog: {
+      //   config: false
+      // },
       basicForm: {
         id: '',
         planId: '',
@@ -249,10 +258,11 @@ export default {
         planName :'',
         charger: '',
         chargerName: '',
+        type: '0',
         dept: '',
         deptName: '',
-        startDate: '',
-        deadlineTime: '',
+        startDate: this.getWeek(1),
+        deadlineTime: this.getWeek(7),
         date: '',
         marketingArea: '',
         marketingAreaName: '',
@@ -269,11 +279,6 @@ export default {
         mkBoPlanItemList: []
       },
       delDemandItemList: [],
-      options: [{
-        value: 'Y', label: '是',
-      }, {
-        value: 'N', label: '否'
-      }],
       basicRules: {},
       tableList: [],
       referCondition: {
@@ -313,17 +318,6 @@ export default {
     }
   },
   methods:{
-    // 改变单据日期时清空子表的日期
-    changePlanDate() {
-      this.basicForm.mkBoPlanItemList.forEach(item => {
-        item.deliveryDate = null
-      })
-    },
-    // 清空
-    cleanYLSL(scope) {
-      scope.row.reservedQty = ''
-      scope.row.reservedPeriod = ''
-    },
     handleData() {
       console.log('222')
       // 复制新增把id,编码,创建人置为空,子表去掉id
@@ -351,31 +345,9 @@ export default {
         if (res.code === 200) {
           // console.log('res', res)
           this.basicForm = res.data
-          for (let i = 0; i < this.basicForm.mkBoPlanItemList.length; i++) {
-            this.basicForm.mkBoPlanItemList[i].planCode = res.data.planCode
-          }
-          // console.log('this.basicForm.mkBoPlanItemList.planCode', this.basicForm.mkBoPlanItemList.planCode)
         }
       })
     },
-    // getDetails(row) {
-    //   getPlanDetail(row.id).then(res => {
-    //     if (res.code === 200) {
-    //       // this.basicForm = res.data
-    //       console.log('res', res)
-    //       let reciveForm = res.data
-    //       let params = {...{id: row.id}, ...{pageNum:1, pageSize: 10}}
-    //       getPlanSonDetail(params.id).then(res => {
-    //         if (res.code === 200) {
-    //         reciveForm.mkBoPlanItemList = res.data
-    //         console.log('reciveForm',reciveForm)
-    //         this.basicForm = reciveForm
-    //         }
-    //       })
-    //     }
-    //   })
-    // },
-
     async save() {
       if(this.basicForm.mkBoPlanItemList.length !== 0) {
         this.$refs['basic'].validate((valid) => {
@@ -436,7 +408,7 @@ export default {
         id: null,
         planId: null,
         planCode: null,
-        date: null,
+        date: this.getCurrentTime(),
         customer: null,
         customerName: null,
         contact: null,
@@ -446,14 +418,6 @@ export default {
         bo: null,
         boName: null,
         marketingCampaign: null,
-        tenantId: null,
-        revision: null,
-        createBy: null,
-        createByName: null,
-        createTime: null,
-        updateBy: null,
-        updateByName: null,
-        updateTime: null,
         delFlag: 0,
         // 新增字段
         model: null,
@@ -462,6 +426,22 @@ export default {
       }
       this.basicForm.mkBoPlanItemList.push(newLine)
     },
+    // 批量删除按钮
+    delItems() {
+      if(this.ids.length == 0) {
+        this.$modal.msgWarning("请选中至少一条数据");
+      } else {
+        let param = this.ids.join()
+        this.$modal.confirm('确认信息').then(() => {
+        delPlanItem(param).then(res => {
+          if (res.code === 200) {
+            this.$modal.msgSuccess("删除成功");
+            this.getDetails(this.row)
+          }
+        })
+        }).catch(() => {})
+      }
+    },
     delLine(index, row) {
       console.log('删除行:', index)
       console.log('改变行:', row)
@@ -480,7 +460,12 @@ export default {
       this.delDemandItemList.push(...delList)
       console.log('删除的数组',this.delDemandItemList)
     },
-
+    edit() {
+      // this.isList = false
+      // this.page = 'edit'
+      // this.rowDetail = row
+      // this.disable = false
+    },
     back() {
       this.$emit('jugislist', true)
       // let queryParams = {
@@ -495,11 +480,16 @@ export default {
         return 'success-row';
       }
     },
+    // handleSelectionChange(selection) {
+    //   this.ids = selection.map(item =>{
+    //     return item.id
+    //   })
+    //   console.log('选中数组', this.ids)
+    // },
     handleSelectionChange(selection) {
-      this.ids = selection.map(item =>{
-        return item.id
-      })
-      console.log('选中数组', this.ids)
+      console.log('选中', selection)
+      this.ids = selection.map(item => item.id)
+      console.log('选中数组', this.ids.join())
     },
     // 回显参照框
     reBackRefer(type, id, title) {
@@ -564,13 +554,22 @@ export default {
         this.basicForm.mkBoPlanItemList[this.tableIndex].contactName = selection[0].name
       }
     },
-    // tableRowClassName({ row, rowIndex }) {
-    //   row.index = rowIndex;
-    // },
-    // rowClick(row){
-    //   this.tableIndex = row.index;
-    //   console.log("row.index",row.index);
-    // }
+    //获取当前时间
+    getCurrentTime() {
+      let date = new Date();
+      return date;
+    },
+    //获取下周七天日期,day表示想要星期几
+    getWeek(day) {
+      const week = [];
+      for (let i = 0; i < 7; i++) {
+        let Stamp = new Date();
+        let num = 7-Stamp.getDay() + 1 + i;
+        Stamp.setDate(Stamp.getDate() + num);
+        week[i] = Stamp.getFullYear() + '-' + (Stamp.getMonth() + 1) + '-' + Stamp.getDate();
+      }
+      return week[day - 1];
+    }
   }
 }
 

+ 70 - 122
src/views/business/spd/task_management/visitingPlan/index.vue

@@ -4,6 +4,7 @@
       <el-card>
         <el-form class="search_area" label-width="100px">
           <el-row :gutter="10">
+            
             <el-col :span="1.5">
               <el-form-item label="计划编码">
                 <el-input
@@ -24,30 +25,25 @@
                 />
               </el-form-item>
             </el-col>
-            <!-- <el-col :span="1.5">
+            
+            <el-col :span="1.5">
               <el-form-item label="线路类型">
-                <el-select clearable size="mini" v-model="queryParams.type" @focus="chooseOrg('CONTACTS_PARAM', true, '线路类型')" style="width: 200px">
-                  <el-option v-for="item in typeOptions" :key="item.id" :label="item.name" :value="item.code" />
+                <el-select clearable v-model="queryParams.type" size="mini" style="width: 200px">
+                  <el-option v-for=" dict in dict.type.mk_plan_route_type" :key="dict.value" :label="dict.label" :value="dict.value">
+                  </el-option>
                 </el-select>
               </el-form-item>
-            </el-col> -->
+            </el-col>
+
             <el-col :span="1.5">
               <el-form-item label="执行人">
-              <el-select clearable size="mini" v-model="queryParams.chargerName" @focus="chooseOrg('CONTACTS_PARAM', true, '执行人')" style="width: 200px">
+              <el-select clearable size="mini" v-model="queryParams.chargerName" @focus="choose('CONTACTS_PARAM', true, '执行人')" style="width: 200px">
                 <el-option v-for="item in personOptions" :key="item.id" :label="item.name" :value="item.code" />
               </el-select>
               </el-form-item>
             </el-col>
                             
             <el-col :span="1.5">
-              <el-form-item label="确认状态">
-                <el-select clearable v-model="queryParams.state" size="mini" style="width: 200px">
-                  <el-option v-for=" dict in dict.type.mk_plan_state" :key="dict.value" :label="dict.label" :value="dict.value">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="1.5">
               <el-form-item label="" label-width="20px">
               <el-button type="primary" size="mini" icon="el-icon-search" plain @click="searchList">搜索</el-button>
               <el-button size="mini" icon="el-icon-refresh" plain @click="resetList">重置</el-button>
@@ -58,7 +54,8 @@
           <CollapseTransition>
             <div v-show="expanded">
               <el-row :gutter="10">
-                <el-col :span="1.5">
+
+                <!-- <el-col :span="1.5">
                   <el-form-item label="开始时间">
                     <el-date-picker
                     v-model="queryParams.startDate"
@@ -83,10 +80,11 @@
                     >
                     </el-date-picker>
                   </el-form-item>
-                </el-col>
+                </el-col> -->
+
                 <el-col :span="1.5">
                   <el-form-item label="销售区域">
-                    <el-select clearable v-model="queryParams.marketingAreaName" size="mini" @focus="chooseOrg('DEPT_PARAM', true, '销售区域')" style="width: 200px">
+                    <el-select clearable v-model="queryParams.marketingAreaName" size="mini" @focus="choose('MK_SALESAREA_PARAM', true, '销售区域')" style="width: 200px">
                       <el-option
                         v-for="item in deptOptions"
                         :key="item.id"
@@ -96,9 +94,10 @@
                     </el-select>
                   </el-form-item>
                 </el-col>
+
                 <el-col :span="1.5">
                   <el-form-item label="部门">
-                    <el-select clearable v-model="queryParams.deptName" size="mini" @focus="chooseOrg('DEPT_PARAM', true, '部门')" style="width: 200px">
+                    <el-select clearable v-model="queryParams.deptName" size="mini" @focus="choose('DEPT_PARAM', true, '部门')" style="width: 200px">
                       <el-option
                         v-for="item in deptOptions"
                         :key="item.id"
@@ -108,6 +107,31 @@
                     </el-select>
                   </el-form-item>
                 </el-col>
+
+                <el-col :span="1.5">
+                  <el-form-item label="确认状态">
+                    <el-select clearable v-model="queryParams.state" size="mini" style="width: 200px">
+                      <el-option v-for=" dict in dict.type.mk_plan_state" :key="dict.value" :label="dict.label" :value="dict.value">
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                
+                <el-col :span="1.5">
+                  <el-form-item label="时间范围">
+                    <el-date-picker
+                      size="mini"
+                      v-model="dateRange"
+                      style="width: 200px"
+                      value-format="yyyy-MM-dd"
+                      type="daterange"
+                      range-separator="-"
+                      start-placeholder="开始日期"
+                      end-placeholder="结束日期"
+                      />
+                  </el-form-item>
+                </el-col>
+
               </el-row>
             </div>
           </CollapseTransition>
@@ -149,7 +173,8 @@
         style="font-size: 12px;"
         @selection-change="handleSelectionChange"
         >
-          <el-table-column show-overflow-tooltip type="selection" width="55" />
+          <el-table-column type="selection" align="center" min-width="55" />
+          <el-table-column type="index" label="序号" min-width="50" align="center"/>
           <el-table-column show-overflow-tooltip label="计划编码" align="center" min-width="200" prop="planCode"/>
           <el-table-column show-overflow-tooltip label="计划名称" align="center" min-width="150" prop="planName"/>
           <el-table-column show-overflow-tooltip label="执行人" align="center" min-width="150" prop="chargerName"/>
@@ -185,79 +210,6 @@
       </el-card>
     </div>
 
-    <!-- 用户导入对话框 -->
-    <el-dialog title="数据导入" :visible.sync="upload.open" width="400px">
-      <el-upload
-      ref="upload"
-      :limit="1"
-      accept=".xlsx, .xls"
-      :headers="upload.headers"
-      :action="upload.url + '?updateSupport=' + upload.updateSupport"
-      :disabled="upload.isUploading"
-      :on-progress="handleFileUploadProgress"
-      :on-success="handleFileSuccess"
-      :on-error="errorFile"
-      :auto-upload="false"
-      drag
-      >
-        <i class="el-icon-upload"></i>
-        <div class="el-upload__text">
-          将文件拖到此处,或
-          <em>点击上传</em>
-        </div>
-        <!-- <div class="el-upload__tip" slot="tip">
-          <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
-        </div> -->
-        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
-      </el-upload>
-      <div slot="footer" class="dialog-footer">
-        <el-button size="mini" type="primary" @click="submitFileForm">确 定</el-button>
-        <el-button size="mini" @click="upload.open = false">取 消</el-button>
-      </div>
-    </el-dialog>
-
-    <!-- 模板下载新增参数 -->
-    <el-dialog title="需求模板下载" :visible.sync="download.open" @close="clearDownload" width="400px">
-
-    <el-row style="margin-bottom: 20px;">
-      <span style="margin-right: 10px;">需求客户</span>
-      <el-select clearable size="mini" v-model="download.customer" @clear="download.customer = ''" @focus="chooseOrg('CUSTOMER_PARAM', true, '选择客户')">
-       <el-option v-for="item in mBcustomer" :key="item.id" :label="item.name" :value="item.code" />
-      </el-select>
-    </el-row>
-
-    <!-- <el-row style="margin-bottom: 20px;">
-      <span style="margin-right: 10px;">供应仓库</span>
-      <el-select clearable size="mini" v-model="download.warehouse" @clear="cleanMb" @focus="chooseOrg('WAREHOUSE_PARAM', true, '选择仓库')">
-        <el-option v-for="item in mBwarehouse" :key="item.id" :label="item.name" :value="item.code" />
-      </el-select>
-    </el-row> -->
-
-    <el-row style="margin-bottom: 20px;">
-      <span style="margin-right: 10px;">供应货位</span>
-      <el-select clearable size="mini" v-model="download.cargoSpace" @clear="download.cargoSpace = ''" @focus="mbHuowei('ALLOCATION_PARAM', true, '选择货位', download.warehouseId)">
-        <el-option v-for="item in mBcargoSpace" :key="item.id" :label="item.name" :value="item.code" />
-      </el-select>
-    </el-row>
-
-    <el-row style="margin-bottom: 20px;">
-      <span style="margin-right: 10px;">品类选择</span>
-      <el-select
-      v-model="download.category"
-      size="mini"
-      clearable
-      @focus="chooseTreeRefer('MATERIALCLASSIFY_PARAM', false, '选择品类')"
-      >
-       <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.code" />
-      </el-select>
-    </el-row>
-
-    <div slot="footer" class="dialog-footer">
-      <el-button size="mini" type="primary" @click="mbDownload">模板下载</el-button>
-      <el-button size="mini" @click="download.open = false">取 消</el-button>
-    </div>
-    </el-dialog>
-
     <Add v-model="isList" v-if="!isList" :pageStu="page" :disable="disable" :row="rowDetail" @refresh="searchList"/>
 
     <Refers ref="refer" @doSubmit="selectionsToInput" :single="true"/>
@@ -273,7 +225,7 @@ import Add from './add.vue'
 import Refers from '@/components/Refers/refers.vue'
 import TreeRefers from '@/components/Refers/treeRefer.vue'
 import CollapseTransition from '@/components/MyCollapse/collapse.vue'
-import {getPlanList, delPlan, downLoadDemand, exportPlan, submitPlan } from '@/api/business/spd/task_management/visitingPlan/visitingPlan.js'
+import {getPlanList, delPlan, exportPlan, submitPlan } from '@/api/business/spd/task_management/visitingPlan/visitingPlan.js'
 export default {
   name: 'PlanLise',
   components: {
@@ -282,7 +234,7 @@ export default {
     Refers,
     TreeRefers
   },
-  dicts: ['mk_plan_state'],
+  dicts: ['mk_plan_state', 'mk_plan_route_type'],
   data() {
     return {
       // 导入参数
@@ -340,11 +292,6 @@ export default {
         isPage: true,
         title: ''
       },
-      options: [{
-        value: 'Y', label: '是',
-      }, {
-        value: 'N', label: '否'
-      }],
       customerOptions: [],
       personOptions: [],
       deptOptions: [],
@@ -352,7 +299,9 @@ export default {
       total: 0,
       rowDetail: {},
       disable: false,
-      ids: []
+      ids: [],
+      // 查询日期范围
+      dateRange: [],
     }
   },
   created() {
@@ -374,6 +323,7 @@ export default {
       this.getList(this.queryParams)
     },
     resetList() {
+      this.dateRange = [];
       this.queryParams = {
         planCode: '',
         planName: '',
@@ -393,7 +343,7 @@ export default {
       this.getList(this.queryParams)
     },
     getList(params){
-      getPlanList(params).then(res => {
+      getPlanList(this.addDateRange(params, this.dateRange)).then(res => {
         if (res.code === 200) {
           this.tableList = res.rows
           this.total = res.total
@@ -581,44 +531,42 @@ export default {
     drop() {
       this.expanded = !this.expanded
     },
-    // 搜索区参照选择
-    chooseOrg(type, isPage, title, stordocId) {
+    // // 搜索区参照选择
+    // chooseOrg(type, isPage, title, stordocId) {
+    //   this.referCondition.type = type
+    //   this.referCondition.isPage = isPage
+    //   this.referCondition.title = title
+    //   this.referCondition.stordocId = stordocId
+    //   this.$refs.refer.init(this.referCondition)
+    // },
+    // 基本信息选择参照带出数据
+    choose(type, isPage, title) {
       this.referCondition.type = type
       this.referCondition.isPage = isPage
       this.referCondition.title = title
-      this.referCondition.stordocId = stordocId
       this.$refs.refer.init(this.referCondition)
     },
     selectionsToInput(selection) {
       // 搜索区选择客户
-      if (this.referCondition.type == 'CUSTOMER_PARAM' && this.referCondition.title == '需求客户') {
+      if (this.referCondition.type == 'CUSTOMER_PARAM') {
         this.customerOptions = selection
         this.queryParams.customer = selection[0].id
-      }
-      // 模板内选择客户
-      if (this.referCondition.type == 'CUSTOMER_PARAM' && this.referCondition.title == '选择客户') {
-        this.mBcustomer = selection
-        this.download.customer = selection[0].code
-      }
-      // 模板内选择仓库
-      if (this.referCondition.type == 'WAREHOUSE_PARAM' && this.referCondition.title == '选择仓库') {
-        this.mBwarehouse = selection
-        this.download.warehouse = selection[0].code
-        this.download.warehouseId = selection[0].id
-      }
-      // 模板内选择货位
-      if (this.referCondition.type == 'ALLOCATION_PARAM' && this.referCondition.title == '选择货位') {
-        this.mBcargoSpace = selection
-        this.download.cargoSpace = selection[0].code
+        this.queryParams.customerName = selection[0].name
       }
       if (this.referCondition.type == 'CONTACTS_PARAM') {
         this.personOptions = selection
-        this.queryParams.charger = selection[0].name
+        this.queryParams.charger = selection[0].id
         this.queryParams.chargerName = selection[0].name
       }
       if (this.referCondition.type == 'DEPT_PARAM') {
         this.deptOptions = selection
-        this.queryParams.demandDept = selection[0].id
+        this.queryParams.dept = selection[0].id
+        this.queryParams.deptName = selection[0].name
+      }
+      if(this.referCondition.type == 'MK_SALESAREA_PARAM') {
+        this.personOptions = selection
+        this.queryParams.marketingArea = selection[0].id
+        this.queryParams.marketingAreaName = selection[0].name
       }
     },
     // 搜索区树形选择

+ 45 - 39
src/views/material/changeApply/batchImport/index.vue

@@ -1,5 +1,6 @@
 <script>
 import { importData, fileImport} from '@/api/requisition/basic';
+import { changeImport, downloadFailData} from '@/api/changeApply/basic';
 export default {
   name:'BatchImport',
   props:{},
@@ -7,52 +8,57 @@ export default {
     return {
       title:'批量导入',
       visible:false,
-      fileData:[]
+      fileData:[],
+      size:'mini',
     }
   },
   methods:{
-    beforeColse(){},
+    beforeColse(done){
+      this.cancal();
+      done();
+
+    },
     handleClick(){
       this.visible = true;
     },
     confirmUpdate(){
-  if (this.fileData.length) {
+      if (this.fileData.length) {
 
-    let formData = new FormData();
+        let formData = new FormData();
 
-    formData.append('file', this.fileData[0].raw);
-    importData(formData).then(res => {
-      if (res.code == 200) {
-        this.visible = false;
-        this.fileData = [];
-        if (res.data.flag) {
-          this.failLoad = true;
-          console.log(res.data.datas)
-          let param = {failDatas: res.data.datas}
-          if (null != param) {
+        formData.append('file', this.fileData[0].raw);
+        importData(formData).then(res => {
+          if (res.code == 200) {
+            this.visible = false;
+            this.fileData = [];
+            if (res.data.flag) {
+              this.failLoad = true;
+              console.log(res.data.datas)
+              let param = {failDatas: res.data.datas}
+              if (null != param) {
 
-            fileImport(param).then(res => {
-              console.log('res',res)
-              const isBlob = blobValidate(res);
-              if (isBlob) {
-                const blob = new Blob([res]);
-                saveAs(blob, '导入失败的物料申请单数据.xlsx');
+                fileImport(param).then(res => {
+                  console.log('res',res)
+                  const isBlob = blobValidate(res);
+                  if (isBlob) {
+                    const blob = new Blob([res]);
+                    saveAs(blob, '导入失败的物料申请单数据.xlsx');
+                  }
+                  this.failLoad = false;
+                })
               }
-              this.failLoad = false;
-            })
+            }
+            this.$notify({
+              message: res.data.msg,
+              type: res.data.flag ? 'warning' : 'success'
+            });
+          } else {
+            this.$notify({
+              message: res.msg,
+              type: res.code == 200 ? 'success' : 'warning'
+            });
           }
-        }
-        this.$notify({
-          message: res.data.msg,
-          type: res.data.flag ? 'warning' : 'success'
-        });
-      } else {
-        this.$notify({
-          message: res.msg,
-          type: res.code == 200 ? 'success' : 'warning'
-        });
-      }
-    })
+        })
       } else {
       this.$notify({
         title:'警告',
@@ -96,7 +102,7 @@ export default {
       append-to-body
       :before-close="beforeColse"
     >
-      <div>
+      <div style="display: flex;justify-content: center;">
         <el-upload 
           accept=".xls, .xlsx" 
           ref="upload" 
@@ -107,10 +113,10 @@ export default {
           :on-change="handleChangeFile" 
           :limit="1"
         >
-          <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
+          <el-button slot="trigger" :size="size" type="primary">选取文件</el-button>
           <el-button 
             style="margin-left: 10px;" 
-            size="small" 
+            :size="size"
             type="success"
             @click="handleDownTemplate"
           >下载模板
@@ -120,8 +126,8 @@ export default {
 
       </div>
       <span slot="footer">
-        <el-button @click="cancal">取 消</el-button>
-        <el-button type="primary" @click="confirmUpdate">确 定</el-button>
+        <el-button :size="size" @click="cancal">取 消</el-button>
+        <el-button type="primary" :size="size" @click="confirmUpdate">确 定</el-button>
       </span>
     </el-dialog>
   </el-button>

+ 3 - 2
src/views/material/changeApply/index.vue

@@ -40,8 +40,8 @@
         style="margin-top: 20px;"
       >
         <el-col :span="1.5">
-          <el-button type="primary" size="small" @click="newAdd">新增</el-button>
-          
+          <el-button type="primary" size="mini" @click="newAdd">新增</el-button>
+          <!-- <BatchImport></BatchImport> -->
         </el-col>
       </el-row>
 
@@ -79,6 +79,7 @@ export default {
   components: {
     AddChangeOrders:() => import('./add/index.vue'),
     SeeChangeOrders:() => import('./see/index.vue'),
+    BatchImport:() => import('./batchImport/index.vue'),
     ElSuperTable: () => import("@/components/super-table/index.vue"),
     ElSuperSearch: () => import("@/components/super-search/index.vue"),
   },

+ 1 - 0
src/views/purchase/DemandSummary/add.vue

@@ -17,6 +17,7 @@
           :header-cell-style="{ borderColor: '#c0c0c0' }"
           class="exporttable"
           border
+          highlight-current-row
           max-height="580"
           style="font-size: 12px;"
           @selection-change="handleSelectionChange"

+ 1 - 0
src/views/purchase/DemandSummary/index.vue

@@ -228,6 +228,7 @@
           border
           show-summary
           :summary-method="getSummaries"
+          highlight-current-row
           height="355"
           max-height="355"
           style="font-size: 12px;"

+ 14 - 3
src/views/purchase/PurchaseDemandList/add.vue

@@ -44,7 +44,7 @@
 
         <el-col :span="1.5">
           <el-form-item label="需求计划">
-            <el-select v-model="basicForm.planType" size="mini" style="width: 200px">
+            <el-select :disabled="sonDisable" v-model="basicForm.planType" size="mini" style="width: 200px">
               <el-option v-for="dict in dict.type.sys_plan_type" :key="dict.value" :label="dict.label" :value="dict.value">
               </el-option>
             </el-select>
@@ -84,7 +84,7 @@
 
         <el-col :span="1.5">
           <el-form-item label="是否客户指定">
-            <el-select clearable v-model="basicForm.isCustomerSpecified" :disabled="sonDisable" size="mini" style="width: 200px">
+            <el-select clearable @change="isCustomer" v-model="basicForm.isCustomerSpecified" :disabled="sonDisable" size="mini" style="width: 200px">
               <el-option v-for=" item in options" :key="item.value" :label="item.label" :value="item.value">
               </el-option>
             </el-select>
@@ -171,6 +171,7 @@
           :data="basicForm.puDemandItemList.slice(0, over)"
           fit
           border
+          highlight-current-row
           :cell-style="{ borderColor: '#c0c0c0' }"
           :header-cell-style="{ borderColor: '#c0c0c0' }"
           class="exporttable"
@@ -660,6 +661,14 @@ export default {
         this.basicForm.puDemandItemList.forEach(item => { item.isUrgency = 'N' })
       }
     },
+    // 改变是否客户指定
+    isCustomer() {
+      if (this.basicForm.isCustomerSpecified == 'Y' && this.basicForm.puDemandItemList.length != 0) {
+        this.basicForm.puDemandItemList.forEach(item => {item.isCustomerSpecified = 'Y'})
+      } else {
+        this.basicForm.puDemandItemList.forEach(item => {item.isCustomerSpecified = 'N'})
+      }
+    },
     hangStatus(row) {
       switch (row.status) {
         case '0':
@@ -1735,7 +1744,9 @@ export default {
     },
     jumpOA() {
       toOA(this.$store.state.user.name, this.basicForm.flowId).then(res => {
-
+        if(res.code === 200) {
+          window.open(res.oaUrl)
+        }
       })
     }
   }

+ 1 - 0
src/views/purchase/PurchaseDemandList/index.vue

@@ -167,6 +167,7 @@
           class="exporttable"
           max-height="410"
           border
+          highlight-current-row
           style="font-size: 12px;"
           @selection-change="handleSelectionChange"
         >

+ 8 - 0
src/views/purchase/apply/copy/index.vue

@@ -116,9 +116,17 @@ export default {
       try {
         // try
         this.loading = true;
+        const { tabName, TabColumns } = this;
+        const { TableColumns } = TabColumns.find(
+          ({ item: { key } }) => key === tabName
+        );
         const { code, data } = await ITEM(prop);
         if (code === 200) {
           this.params = data;
+          this.params.priceApplyItems = data.priceApplyItems.map((item) => ({
+            ...this.$init.params(TableColumns),
+            ...item,
+          }));
           return true;
         } else {
           return false;

+ 8 - 0
src/views/purchase/apply/edit/index.vue

@@ -139,9 +139,17 @@ export default {
       try {
         // try
         this.loading = true;
+        const { tabName, TabColumns } = this;
+        const { TableColumns } = TabColumns.find(
+          ({ item: { key } }) => key === tabName
+        );
         const { code, data } = await ITEM(prop);
         if (code === 200) {
           this.params = data;
+          this.params.priceApplyItems = data.priceApplyItems.map((item) => ({
+            ...this.$init.params(TableColumns),
+            ...item,
+          }));
           return true;
         } else {
           return false;

+ 15 - 18
src/views/purchase/contract/add/columns.js

@@ -197,11 +197,11 @@ export default function useColumns() {
       attr: { is: "el-date-picker", valueFormat: "yyyy-MM-dd" },
     },
     {
-      item: { key: "isTarget", title: "是否有指标", require: true },
+      item: { key: "isTarget", title: "是否有指标" },
       attr: { is: "el-select", dictName: "sys_yes_no" },
     },
     {
-      item: { key: "contractTarget", title: "合同指标", require: true },
+      item: { key: "contractTarget", title: "合同指标" },
       attr: { is: "el-input", placeholder: '当【是否有指标】="有"时,必填' },
     },
     {
@@ -217,7 +217,7 @@ export default function useColumns() {
       attr: { is: "el-select", dictName: "sys_yes_no" },
     },
     {
-      item: { key: "rebatePolicy", title: "返利政策", span: 18 },
+      item: { key: "rebatePolicy", title: "返利政策", span: 18, require: true },
       attr: {
         is: "el-input",
         placeholder: '当【是否有返利】="有"时,必填',
@@ -333,7 +333,7 @@ export default function useColumns() {
           item: {
             title: "物料名称",
             key: "materialName",
-            require: true 
+            require: true,
           },
           attr: {
             is: "el-popover-select-v2",
@@ -384,7 +384,7 @@ export default function useColumns() {
           },
         },
         {
-          item: { title: "税率%", key: "tax" ,require: true },
+          item: { title: "税率%", key: "tax", require: true },
           attr: {
             is: "el-popover-select-v2",
             valueKey: "ntaxrate",
@@ -401,7 +401,7 @@ export default function useColumns() {
           },
         },
         {
-          item: { title: "含税单价", key: "taxPrice", require: true  },
+          item: { title: "含税单价", key: "taxPrice", require: true },
           attr: {
             is: "el-input-number",
             precision: CONFIG.precision,
@@ -418,7 +418,7 @@ export default function useColumns() {
           },
         },
         {
-          item: { title: "无税单价", key: "taxFreePrice",require: true  },
+          item: { title: "无税单价", key: "taxFreePrice", require: true },
           attr: {
             formatter: (prop) => {
               const { tax = 0, taxPrice = 0 } = prop;
@@ -525,7 +525,7 @@ export default function useColumns() {
           item: {
             title: "付款起点",
             key: "origin",
-            require: true 
+            require: true,
           },
           attr: {
             is: "el-select",
@@ -533,14 +533,14 @@ export default function useColumns() {
           },
         },
         {
-          item: { title: "账期天数", key: "paymetDays" , require: true },
+          item: { title: "账期天数", key: "paymetDays", require: true },
           attr: {
             is: "el-input-number",
             precision: 2,
           },
         },
         {
-          item: { title: "付款比例%", key: "ratio" , require: true },
+          item: { title: "付款比例%", key: "ratio", require: true },
           attr: {
             is: "el-input-number",
             precision: CONFIG.precision,
@@ -577,7 +577,7 @@ export default function useColumns() {
           item: {
             title: "结算方式",
             key: "paymentMeans",
-            require: true 
+            require: true,
           },
           attr: {
             is: "el-popover-select-v2",
@@ -623,16 +623,13 @@ export default function useColumns() {
         { item: { title: "组织编码", key: "org", width: "auto" }, attr: {} },
       ],
     },
-  ].map(({item,attr,TableColumns}) =>({
+  ].map(({ item, attr, TableColumns }) => ({
     attr,
     item,
-    TableColumns:TableColumns.map(({item, attr}) =>({
+    TableColumns: TableColumns.map(({ item, attr }) => ({
       attr,
       item: { ...item, hidden: true, span: item.span || 6 },
-  
-    }))
-
-  }))
-  ;
+    })),
+  }));
   return { TableColumns, TabColumns };
 }

+ 12 - 9
src/views/purchase/purchase-order/index.vue

@@ -598,16 +598,17 @@ export default {
     </el-row>
 
     <el-super-table
+      class="purchaseTable"
       v-model="tableData"
       ref="purchaseTable"
-      max-height="480"
       :dict="dict"
       :columns="tableColumns"
       :selectable="setSelectable"
+      index
       checkbox
       pagination
       :page="page"
-      :iconOperation="false"
+      convenitentOperation
       @pagination="fetchList(params, page)"
       @row-dblclick="handleOpenSeeDrawer" 
       @row-click="handleDetailsData" 
@@ -677,17 +678,11 @@ export default {
             :columns="column.tableColumns"
             :selectable="setTabSelectable"
             :checkbox="setTabSelectable()"
-            :iconOperation="false"
+            convenitentOperation
             @select="handleTabSelect"
             @selection-change="handleTabSelectionChange"
 
           >
-            <!-- <el-table-column
-              v-if=" tabName === 'puOrderItemList'" 
-              type="selection" 
-              width="45"
-            ></el-table-column> -->
-            <!-- <el-table-column type="index" width="50" label="序号"></el-table-column> -->
           </el-super-table>
          
         </el-tab-pane>
@@ -697,3 +692,11 @@ export default {
     </div>
   </el-card>
 </template>
+
+<style lang="scss">
+.purchaseTable{
+  .el-table__body-wrapper{
+    height: 480px;
+  }
+}
+</style>

+ 279 - 0
src/views/purchase/purchase-order/print/index.vue

@@ -0,0 +1,279 @@
+<template>
+  <div style="display: inline-block">
+    <el-dropdown
+      size="mini"
+      :disabled="disabled"
+      split-button
+      placement="top-start"
+      @command="onCommand"
+      @click="visible = true"
+    >
+      <span v-print="print">
+        <i class="el-icon-printer mr-1"></i>
+        打 印
+      </span>
+      <el-dropdown-menu slot="dropdown">
+        <el-dropdown-item v-print="print" command="湖南德荣医疗器械有限公司">
+          湖南德荣医疗器械有限公司
+        </el-dropdown-item>
+        <el-dropdown-item
+          v-print="print"
+          divided
+          command="湖南德荣医疗健康产业有限公司"
+        >
+          湖南德荣医疗健康产业有限公司
+        </el-dropdown-item>
+        <el-dropdown-item
+          v-print="print"
+          divided
+          command="湖南德荣医疗器械物流配送服务有限公司"
+        >
+          湖南德荣医疗器械物流配送服务有限公司
+        </el-dropdown-item>
+      </el-dropdown-menu>
+    </el-dropdown>
+    <div
+      id="PurchaseOrderPdf"
+      style="
+        position: relative;
+        width: 210mm;
+        font-size: 12px;
+        line-height: 1.5;
+        font-family: '宋体';
+        z-index: -1;
+      "
+    >
+      <img
+        :src="src"
+        :alt="company"
+        style="position: absolute; top: 10px; left: 10px; z-index: 1"
+      />
+      <div style="position: absolute; top: 0; left: 0; z-index: 2">
+        <h1>湖南德荣医疗集团 - 采购订单</h1>
+        <p style="display: flex">
+          <span style="width: 60%">甲方(购货方):{{ params.puOrgName }}</span>
+          <span style="width: 40%">签订日期:{{ params.billDate }}</span>
+        </p>
+        <p style="display: flex">
+          <span style="width: 60%">订单编号:{{ params.code }}</span>
+          <span style="width: 40%">采购部门:{{ params.puDeptName }}</span>
+        </p>
+        <p style="display: flex">
+          <span style="width: 60%">采购员:{{ params.buyerName }}</span>
+          <span style="width: 40%"> 采购项目: </span>
+        </p>
+        <p style="display: flex">
+          <span style="width: 60%">E-mail:</span>
+          <span style="width: 40%">联系方式:{{ params.contactsPhone }}</span>
+        </p>
+        <P style="color: #ff4949"> 甲方收票地址:{{ params.address }} </P>
+        <div style="border-bottom: 1px dashed black"></div>
+        <p>乙方(供货方):{{ params.supplierName }}</p>
+        <p>ATTN:</p>
+        <p>E-MAIL:</p>
+        <p>收货地址:</p>
+        <p>收货联系人:</p>
+
+        <el-table
+          show-summary
+          :summary-method="getSummaries"
+          :data="params.orderItemPrintList"
+          style="width: 100%; font-size: 12px"
+        >
+          <el-table-column prop="materialCode" label="物料编码" width="auto">
+          </el-table-column>
+          <el-table-column prop="materialName" label="物料名称" width="auto">
+          </el-table-column>
+          <el-table-column prop="specification" label="规格" width="auto">
+          </el-table-column>
+          <el-table-column
+            prop="manufacturerName"
+            label="生产厂家"
+            width="auto"
+          >
+          </el-table-column>
+          <el-table-column prop="unitName" label="单位" width="auto">
+          </el-table-column>
+          <el-table-column prop="qty" label="数量" width="auto">
+          </el-table-column>
+          <el-table-column prop="taxPrice" label="含税单价" width="auto">
+          </el-table-column>
+          <el-table-column prop="money" label="价税合计" width="auto">
+          </el-table-column>
+          <el-table-column prop="registration" label="注册证号" width="auto">
+          </el-table-column>
+        </el-table>
+        <p>
+          二、质量要求与技术标准:符合供方企业标准、所在行业标准、国家标准。
+        </p>
+        <p>
+          供方承诺若本订单上的货物发生质量问题,按双方签署的《质量保证协议》或其他双方签订的质保条约执行处理。
+        </p>
+        <p>三、交货要求:</p>
+        <p>
+          1.供货方在1个工作日内回复交期(若1个工作日内未回复,视同供货方默认同意接受交货日期)
+        </p>
+        <p>
+          2.常规产品7天内到货,订制产品按双方协议日期交期。交货时,以下纸质资料随货同行,资料所在箱号清晰易见:
+        </p>
+        <p>
+          (1)随货同行单。供货方提供给我公司的随货同行单需包括以下内容:德荣订单编码、供货单位、医疗器械名称、规格(型号)、生产企业、生产企业许可证号(或者备案凭证编号)、注册证号(或者备案凭证编号)、生产批号、有效期、数量、单位、单价、金额、储运条件、收货单位、收货地址、发货日期等内容,并加盖供货单位出库专用章。
+        </p>
+        <p>
+          (2)生产厂家同一批次产品的检验报告。(3)进口物资的报关单和检验检疫证明。
+        </p>
+        <p>
+          3.交货实际时间以供方货物实际到达需方指定地点的时间为准。如遇特殊情况需变更交货时间,供方应事先通知需方并征得需方同意
+        </p>
+        <p>
+          4.运输要求:供货方负责将货物运输到购货方指定地址,运输方式及费用由供货方负责(双方另有书面约定的除外)。发货后供货方提供运输单号给购货方。.需要专业冷链运输的产品,必须按照GSP要求严格执行冷链运输,全程温湿度必须在GSP冷链运输的管控范围内,随货同行的温湿度记录仪的冷链数据须在交付时可导出或打印。
+        </p>
+        <p>
+          四、验收标准:购货方收货后3日内按质量标准进行验收,若有不符应及时通知供货方,供货方应在3日内处理。
+        </p>
+        <p>
+          五、发票要求:供货方根据双方签定的格式合同约定的时间或是于发货后7个工作日内开具符合国家要求的可抵扣的增值税专用发票给购货方。
+        </p>
+        <p>六、结算方式:电汇/转账。</p>
+        <p>
+          七、违约责任:按《中国人民共和国合同法》执行,一方违约,违约方按货款总金额的5‰支付给守约方。
+        </p>
+        <p>
+          八、争议的解决:因履行本合同发生争议,由双方协商解决,协商不成应向长沙仲裁委员会申请仲裁解决。
+        </p>
+        <p>
+          九、本订单作为双方采购合同的有效组成附件,经各采购员发布确认后生效。供方应在接到订单后按采购合同约定的时间内向需方作出反馈,否则需方视为供方默认。
+        </p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import print from "vue-print-nb";
+import { PRINT } from "@/api/business/purchase/task";
+export default {
+  directives: {
+    print,
+  },
+  name: "",
+  components: {},
+  props: {
+    id: {
+      type: [String, Number],
+      require: true,
+    },
+    value:{
+      type:Object,
+      require:true
+    }
+  },
+  data() {
+    console.log(this.value,'this.value');
+    return {
+      visible: false,
+      disabled: false,
+      company: "湖南德荣医疗器械有限公司",
+      print: {
+        id: "PurchaseOrderPdf",
+        popTitle: "配置页眉标题", // 打印配置页上方的标题
+        extraHead: "", // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割
+        preview: false, // 是否启动预览模式,默认是false
+        previewTitle: "预览的标题", // 打印预览的标题
+        previewPrintBtnLabel: "预览结束,开始打印", // 打印预览的标题下方的按钮文本,点击可进入打印
+        zIndex: 20002, // 预览窗口的z-index,默认是20002,最好比默认值更高
+        previewBeforeOpenCallback() {
+          console.log("正在加载预览窗口!");
+          console.log(this);
+        }, // 预览窗口打开之前的callback
+        previewOpenCallback() {
+          console.log("已经加载完预览窗口,预览打开了!");
+        }, // 预览窗口打开时的callback
+        beforeOpenCallback() {
+          console.log("开始打印之前!");
+        }, // 开始打印之前的callback
+        openCallback() {
+          console.log("执行打印了!");
+        }, // 调用打印时的callback
+        closeCallback() {
+          console.log("关闭了打印工具!");
+        }, // 关闭打印的callback(无法区分确认or取消)
+        clickMounted() {
+          console.log("点击v-print绑定的按钮了!");
+        },
+        // url: 'http://localhost:8080/', // 打印指定的URL,确保同源策略相同
+        // asyncUrl (reslove) {
+        //   setTimeout(() => {
+        //     reslove('http://localhost:8080/')
+        //   }, 2000)
+        // },
+        standard: "",
+        extarCss: "",
+      },
+      // params: {},
+      // params: this.value,
+    };
+  },
+  computed: {
+    src: {
+      get: function () {
+        return require(`./${this.company}.png`);
+      },
+      set: function () {},
+    },
+    params:{
+      get:function(){
+        return this.value;
+      }
+    }
+  },
+  watch: {},
+  methods: {
+    onCommand(prop) {
+      this.company = prop;
+      this.visible = true;
+    },
+    getSummaries(param) {
+      const { columns, data } = param;
+      const sums = [];
+      columns.forEach((column, index) => {
+        const { property } = column;
+        if (index === 0) {
+          sums[index] = "合计";
+          return;
+        }
+        if (property === "qty" || property === "money") {
+          const values = data.map((item) => Number(item[property]));
+          if (!values.every((value) => isNaN(value))) {
+            sums[index] = values.reduce((prev, curr) => {
+              const value = Number(curr);
+              if (!isNaN(value)) {
+                return prev + curr;
+              } else {
+                return prev;
+              }
+            }, 0);
+          }
+        }
+      });
+      return sums;
+    },
+  },
+  async created() {
+    // try {
+    //   this.disabled = true;
+    //   const { data, code } = await PRINT({ id: this.$props.id || 628 });
+    //   if (code === 200) {
+    //     this.params = data;
+    //     this.disabled = false;
+    //   }
+    // } catch (err) {
+    //   alert(err);
+    // } finally {
+    // }
+  },
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style scoped></style>

BIN
src/views/purchase/purchase-order/print/湖南德荣医疗健康产业有限公司.png


BIN
src/views/purchase/purchase-order/print/湖南德荣医疗器械有限公司.png


BIN
src/views/purchase/purchase-order/print/湖南德荣医疗器械物流配送服务有限公司.png


+ 26 - 3
src/views/purchase/purchase-order/see/index.vue

@@ -8,6 +8,7 @@ import {
 } from "@/utils/init/index.js";
 import { Columns, TabColumns } from "../add/column";
 import orderApi from "@/api/business/purchase/purchase-order";
+import { PRINT } from "@/api/business/purchase/task";
 
 const NewColumns = initColumns(Columns);
 const NewTabColumns = TabColumns.map((element) => ({
@@ -26,12 +27,14 @@ export default {
   dicts: initDicts(SelectColumns),
   components: {
     FileUploadCenter: () => import('../components/FileUploadCenter/index.vue'),
+    FilePrint:() => import('../print/index.vue'),
   },
   data() {
     return {
       visible: false,
-      loading:false,
+      loading: false,
       columns: NewColumns,
+      printData:{},
       rules: initRules(NewColumns),
       params: {
         ...initParams(NewColumns),
@@ -72,6 +75,18 @@ export default {
       } finally {
         this.loading = false;
       }
+
+      try {
+          this.loading = true;
+          const { data, code } = await PRINT({ id: this.params.id || 628 });
+          if (code === 200) {
+            this.printData = data;
+            this.loading = false;
+          }
+        } catch (err) {
+          alert(err);
+        } finally {
+        }
     },
     // 取 消
     handleCancel() {
@@ -119,9 +134,13 @@ export default {
 
       return false;
     },
-    beforeOpen() { },
+    beforeOpen() { 
+      
+    },
+  },
+  created() { 
+
   },
-  created() { },
   mounted() { },
   destroyed() { },
 };
@@ -144,6 +163,7 @@ export default {
       :rules="rules"
       ref="orderSeeForm" 
     >
+        
       <el-card :body-style="{
         padding: '20px',
         display: 'flex',
@@ -156,6 +176,8 @@ export default {
           ">
           <h3>查看</h3>
           <div style="text-align: right">
+            <!-- <FilePrint :id="params.id"></FilePrint> -->
+            <FilePrint v-model="printData"></FilePrint>
             <el-button size="mini" @click="handleRefresh">刷新</el-button>
             <template v-if="judgeIsToNC()">
               <el-tooltip
@@ -176,6 +198,7 @@ export default {
                 }}</el-button>
               </el-tooltip>
             </template>
+            
             <el-button size="mini" @click="handleCancel">取 消</el-button>
           </div>
         </div>

+ 1 - 2
src/views/purchase/task/index.vue

@@ -51,8 +51,7 @@ export default {
       try {
         this.loading = true;
         this.tableData = [];
-        const { pageNum, pageSize } = page;
-        const { code, rows, total } = await LIST(prop, { pageNum, pageSize });
+        const { code, rows, total } = await LIST(prop, page);
         if (code === 200) {
           this.tableData = rows;
           this.page.total = total;

+ 1 - 1
src/views/purchase/task/tui-hui-xu-qiu/index.vue

@@ -44,7 +44,7 @@ export default {
         const {
           params: { baskCause },
         } = this;
-        const documentIds = prop.map((item) => item.id);
+        const documentIds = prop.map((item) => Number(item.id));
         const { msg, code } = await DOCUMENTSRETURN({
           baskCause,
           documentIds,

+ 2 - 2
src/views/purchase/task/zhuan-pai/index.vue

@@ -32,7 +32,7 @@ export default {
     //
     open(prop) {
       this.visible = true;
-      this.params.id = prop;
+      this.params.id = prop.id;
     },
     //
     hide() {
@@ -49,9 +49,9 @@ export default {
         const { id, buyer, buyerName } = prop;
         const { msg, code } = await MODEIFYBUYER([
           {
-            id,
             buyer,
             buyerName,
+            id: Number(id),
           },
         ]);
         if (code === 200) {

+ 203 - 362
src/views/purchase/transferOrder/add.vue

@@ -1,237 +1,131 @@
 <template>
   <div id="addOder">
-    <el-card style="position: relative;">
+    <el-card style="position: relative">
       <span>基本信息</span>
-      <el-form
-        :model="basicForm"
-        :rules="basicRules"
-        ref="basic"
-        label-width="auto"
-      >
+      <el-form :model="basicForm" :rules="basicRules" ref="basic" label-width="auto">
         <el-row :gutter="10">
           <el-col :span="1.5">
             <el-form-item label="调出库存组织">
-              <el-select
-                clearable
-                size="mini"
-                v-model="basicForm.deliveryInventoryOrg"
-                :disabled="sonDisable"
+              <el-select clearable :disabled="sonDisable" size="mini" v-model="basicForm.deliveryInventoryOrg" 
                 @clear="clean('调出库存组织')"
                 @change="controlCk('调出库存组织')"
                 @focus="chooseRefer('ORG_PARAM', true, '调出库存组织')"
                 style="width: 200px"
               >
-                <el-option
-                  v-for="item in chuOrgOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
+                <el-option v-for="item in chuOrgOptions" :key="item.id" :label="item.name" :value="item.id"/>
               </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="订单类型">
-              <el-select
-                v-model="basicForm.billType"
-                :disabled="sonDisable"
+            <el-form-item label="调出部门">
+              <el-select clearable :disabled="sonDisable || isOrg"
                 size="mini"
+                v-model="basicForm.deliveryDept"
+                @focus="chooseRefer('DEPT_PARAM', true, '调出部门', basicForm.deliveryInventoryOrg)"
                 style="width: 200px"
-                clearable
               >
-                <el-option
-                  v-for="dict in dict.type.sys_allot_billtype"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                >
-                </el-option>
+                <el-option v-for="item in deptOptions" :key="item.id" :label="item.name" :value="item.id"/>
               </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="单据号">
-              <el-input
-                v-model="basicForm.code"
-                size="mini"
-                :disabled="sonDisable"
-                clearable
-                style="width: 200px"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="1.5">
-            <el-form-item label="单据日期">
-              <el-date-picker
-                v-model="basicForm.billDate"
+            <el-form-item label="调出仓库">
+              <el-select clearable :disabled="sonDisable || isOrg"
                 size="mini"
-                :disabled="sonDisable"
-                type="date"
-                clearable
-                @change="changeBillDate"
-                value-format="yyyy-MM-dd"
+                v-model="basicForm.deliveryWarehouse"
+                @clear="clean('调出仓库')"
+                @change="controlDCHW"
+                @focus="chooseRefer('WAREHOUSE_PARAM', true, '调出仓库', basicForm.deliveryInventoryOrg, 'N', 'N')"
                 style="width: 200px"
               >
-              </el-date-picker>
+                <el-option v-for="item in chuHouseOptions" :key="item.id" :label="item.name" :value="item.id"/>
+              </el-select>
             </el-form-item>
           </el-col>
+      
           <el-col :span="1.5">
-            <el-form-item label="调拨方式">
-              <el-select
-                v-model="basicForm.allotType"
-                disabled
+            <el-form-item label="调出业务员">
+              <el-select clearable :disabled="sonDisable"
                 size="mini"
+                v-model="basicForm.businessPersonal"
+                @clear="clean('调出业务员')"
+                @focus="chooseRefer('CONTACTS_PARAM', true, '调出业务员')"
                 style="width: 200px"
-                clearable
               >
-                <el-option
-                  v-for="dict in dict.type.sys_to_type"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                >
-                </el-option>
+                <el-option v-for="item in manOptions" :key="item.id" :label="item.name" :value="item.code"/>
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="1.5">
-            <el-form-item label="调拨出库单号">
-              <el-input
-                v-model="basicForm.deliveryCode"
-                size="mini"
-                :disabled="sonDisable"
-                clearable
-                style="width: 200px"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="1.5">
-            <el-form-item label="调拨入库单号">
-              <el-input
-                v-model="basicForm.storageCode"
-                size="mini"
-                :disabled="sonDisable"
-                clearable
-                style="width: 200px"
-              />
-            </el-form-item>
-          </el-col>
+
           <el-col :span="1.5">
             <el-form-item label="调入库存组织">
-              <el-select
-                clearable
-                size="mini"
-                v-model="basicForm.storageInventoryOrg"
-                :disabled="sonDisable"
+              <el-select clearable :disabled="sonDisable" size="mini" v-model="basicForm.storageInventoryOrg"
                 @clear="clean('调入库存组织')"
                 @change="controlCk('调入库存组织')"
                 @focus="chooseRefer('ORG_PARAM', true, '调入库存组织')"
                 style="width: 200px"
               >
-                <el-option
-                  v-for="item in ruOrgOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
+                <el-option v-for="item in ruOrgOptions" :key="item.id" :label="item.name" :value="item.id"/>
               </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="调出业务员">
-              <el-select
-                clearable
+            <el-form-item label="调入仓库">
+              <el-select clearable :disabled="sonDisable || isOrg"
                 size="mini"
-                v-model="basicForm.businessPersonal"
-                :disabled="sonDisable"
-                @clear="clean('调出业务员')"
-                @focus="chooseRefer('CONTACTS_PARAM', true, '调出业务员')"
+                v-model="basicForm.storageWarehouse"
+                @clear="clean('调入仓库')"
+                @change="controlDRHW"
+                @focus="chooseRefer('WAREHOUSE_PARAM', true, '调入仓库', basicForm.storageInventoryOrg, 'N', 'N')"
                 style="width: 200px"
               >
-                <el-option
-                  v-for="item in manOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.code"
-                />
+                <el-option v-for="item in ruHouseOptions" :key="item.id" :label="item.name" :value="item.id"/>
               </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="调出部门">
-              <el-select
-                clearable
-                size="mini"
-                v-model="basicForm.deliveryDept"
-                :disabled="sonDisable || isOrg"
-                @focus="
-                  chooseRefer(
-                    'DEPT_PARAM',
-                    true,
-                    '调出部门',
-                    basicForm.deliveryInventoryOrg
-                  )
-                "
-                style="width: 200px"
-              >
-                <el-option
-                  v-for="item in deptOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
+            <el-form-item label="订单类型">
+              <el-select clearable v-model="basicForm.billType" :disabled="sonDisable" size="mini" style="width: 200px">
+                <el-option v-for="dict in dict.type.sys_allot_billtype" :key="dict.value" :label="dict.label" :value="dict.value">
+                </el-option>
               </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="币种">
-              <el-select
-                clearable
-                size="mini"
-                v-model="basicForm.currency"
-                :disabled="sonDisable"
-                @focus="chooseRefer('CURRENCY_PARAM', true, '币种')"
-                style="width: 200px"
-              >
-                <el-option
-                  v-for="item in currencyOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
+            <el-form-item label="调拨方式">
+              <el-select clearable disabled v-model="basicForm.allotType" size="mini" style="width: 200px">
+                <el-option v-for="dict in dict.type.sys_to_type" :key="dict.value" :label="dict.label" :value="dict.value">
+                </el-option>
               </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="折本汇率">
-              <el-input-number
-                v-model="basicForm.rate"
-                size="mini"
-                disabled
-                :precision="2"
-                :step="0.1"
-                :max="10"
-                style="width: 200px"
-              ></el-input-number>
+            <el-form-item label="单据号">
+              <el-input clearable :disabled="sonDisable" v-model="basicForm.code" size="mini" style="width: 200px"/>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="在途归属">
-              <el-input
-                v-model="basicForm.onRouteAffilliation"
-                size="mini"
-                disabled
-                clearable
+            <el-form-item label="单据日期">
+              <el-date-picker clearable :disabled="sonDisable" v-model="basicForm.billDate" size="mini" type="date"
+                @change="changeBillDate"
+                value-format="yyyy-MM-dd"
                 style="width: 200px"
-              />
+              >
+              </el-date-picker>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="总数量">
+            <el-form-item label="调拨出库单号">
               <el-input
-                v-model="basicForm.qty"
-                type="number"
-                min="0"
+                v-model="basicForm.deliveryCode"
                 size="mini"
                 :disabled="sonDisable"
                 clearable
@@ -239,10 +133,11 @@
               />
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="结算路径">
+            <el-form-item label="调拨入库单号">
               <el-input
-                v-model="basicForm.accountPath"
+                v-model="basicForm.storageCode"
                 size="mini"
                 :disabled="sonDisable"
                 clearable
@@ -250,152 +145,98 @@
               />
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="客户">
-              <el-select
-                clearable
+            <el-form-item label="币种">
+              <el-select clearable :disabled="sonDisable"
                 size="mini"
-                :disabled="sonDisable"
-                v-model="basicForm.customer"
-                @clear="clean('客户')"
-                @focus="chooseRefer('CUSTOMER_PARAM', true, '客户')"
+                v-model="basicForm.currency"
+                @focus="chooseRefer('CURRENCY_PARAM', true, '币种')"
                 style="width: 200px"
               >
-                <!-- @change="controlDRHW"  -->
-                <el-option
-                  v-for="item in customerOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
+                <el-option v-for="item in currencyOptions" :key="item.id" :label="item.name" :value="item.id"/>
               </el-select>
-              <!-- <el-input
-                  v-model="basicForm.customer"
-                  size="mini"
-                  :disabled="sonDisable"
-                  clearable
-                  style="width: 200px"
-                /> -->
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="调入仓库">
-              <el-select
-                clearable
-                size="mini"
-                v-model="basicForm.storageWarehouse"
-                :disabled="sonDisable || isOrg"
-                @clear="clean('调入仓库')"
-                @change="controlDRHW"
-                @focus="
-                  chooseRefer(
-                    'WAREHOUSE_PARAM',
-                    true,
-                    '调入仓库',
-                    basicForm.storageInventoryOrg,
-                    'N',
-                    'N'
-                  )
-                "
-                style="width: 200px"
-              >
-                <el-option
-                  v-for="item in ruHouseOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
-              </el-select>
+            <el-form-item label="总数量">
+              <el-input clearable :disabled="sonDisable" v-model="basicForm.qty" type="number" min="0" size="mini" style="width: 200px"/>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
-            <el-form-item label="调出仓库">
-              <el-select
-                clearable
+            <el-form-item label="结算路径">
+              <el-input clearable :disabled="sonDisable" v-model="basicForm.accountPath" size="mini" style="width: 200px"/>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="折本汇率">
+              <el-input-number
+                v-model="basicForm.rate" size="mini" disabled :precision="2" :step="0.1" :max="10" style="width: 200px"></el-input-number>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="客户">
+              <el-select clearable :disabled="sonDisable"
                 size="mini"
-                v-model="basicForm.deliveryWarehouse"
-                :disabled="sonDisable || isOrg"
-                @clear="clean('调出仓库')"
-                @change="controlDCHW"
-                @focus="
-                  chooseRefer(
-                    'WAREHOUSE_PARAM',
-                    true,
-                    '调出仓库',
-                    basicForm.deliveryInventoryOrg,
-                    'N',
-                    'N'
-                  )
-                "
+                v-model="basicForm.customer"
+                @clear="clean('客户')"
+                @focus="chooseRefer('CUSTOMER_PARAM', true, '客户')"
                 style="width: 200px"
               >
-                <el-option
-                  v-for="item in chuHouseOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
+                <!-- @change="controlDRHW"  -->
+                <el-option v-for="item in customerOptions" :key="item.id" :label="item.name" :value="item.id"/>
               </el-select>
             </el-form-item>
           </el-col>
+          
           <el-col :span="1.5">
             <el-form-item label="物流项目组">
-              <el-select
-                v-model="basicForm.materialProject"
-                :disabled="sonDisable"
+              <el-select clearable :disabled="sonDisable" v-model="basicForm.materialProject"
                 size="mini"
                 style="width: 200px"
-                clearable
               >
-                <el-option
-                  v-for="dict in dict.type.sys_project_group"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                >
+                <el-option v-for="dict in dict.type.sys_project_group" :key="dict.value" :label="dict.label" :value="dict.value">
                 </el-option>
               </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
             <el-form-item label="利润中心">
-              <el-select
-                clearable
+              <el-select clearable :disabled="sonDisable"
                 size="mini"
                 v-model="basicForm.liacenter"
-                :disabled="sonDisable"
                 @clear="clean('利润中心')"
                 @focus="chooseTreeRefer('LIACENTER_PARAM', false, '利润中心')"
                 style="width: 200px"
               >
-                <el-option
-                  v-for="item in liacenterOptions"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-                />
+                <el-option v-for="item in liacenterOptions" :key="item.id" :label="item.name" :value="item.id"/>
               </el-select>
             </el-form-item>
           </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="在途归属">
+              <el-input clearable disabled v-model="basicForm.onRouteAffilliation" size="mini" style="width: 200px"/>
+            </el-form-item>
+          </el-col>
+
           <el-col :span="1.5">
             <el-form-item label="单据状态">
-              <el-select
-                disabled
-                v-model="basicForm.status"
+              <el-select disabled v-model="basicForm.status"
                 size="mini"
                 style="width: 200px"
-                clearable
               >
-                <el-option
-                  v-for="dict in dict.type.sys_status"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                >
+                <el-option v-for="dict in dict.type.sys_status" :key="dict.value" :label="dict.label" :value="dict.value">
                 </el-option>
               </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :span="1.5">
             <el-form-item label="备注">
               <el-input
@@ -440,14 +281,9 @@
         <el-tabs style="margin-top: 10px" type="border-card">
           <el-tab-pane label="物料信息">
             <div class="btn_grooup">
-              <el-button
-                type="primary"
-                size="mini"
-                v-if="!sonDisable"
-                @click="addLine"
-                >增行</el-button
-              >
+              <el-button type="primary" size="mini" v-if="!sonDisable" @click="addLine">增行</el-button>
             </div>
+            
             <el-table
               :data="materialInfo"
               fit
@@ -463,7 +299,7 @@
                 prop="rowno"
               >
                 <template slot-scope="scope">
-                  {{ scope.$index + 1 + "0" }}
+                  {{ scope.row.rowno = scope.$index + 1 + "0" }}
                 </template>
               </el-table-column>
               <el-table-column
@@ -1491,55 +1327,53 @@
       </el-form>
 
       <div class="btn_group">
-        <el-col :span="1.5">
-          <el-button
-            style="margin-right: 10px"
-            type="primary"
-            size="mini"
-            plain
-            @click="copy"
-            v-if="sonPageStu == 'check'"
-            >复制</el-button
-          >
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            style="margin-right: 10px"
-            type="danger"
-            size="mini"
-            plain
-            @click="toNC"
-            v-if="sonPageStu == 'check' && row.status == '2'"
-            >重传NC</el-button
-          >
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            style="margin-right: 10px"
-            type="primary"
-            size="mini"
-            plain
-            @click="save"
-            v-if="sonPageStu == 'add' || sonPageStu == 'edit'"
-            >保存</el-button
-          >
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            style="margin-right: 10px"
-            type="primary"
-            size="mini"
-            plain
-            @click="submit"
-            v-if="
-              sonPageStu == 'check' && (row.status == '0' || row.status == '3')
-            "
-            >提交</el-button
-          >
-        </el-col>
-        <el-col :span="1.5">
-          <el-button size="mini" plain @click="back">返回</el-button>
-        </el-col>
+        <el-button
+          type="primary"
+          size="mini"
+          plain
+          @click="jumpOA"
+          v-if="
+            sonPageStu == 'check' &&
+            (row.status == '1' || row.status == '2') &&
+            row.oaId
+          "
+          >跳转OA</el-button
+        >
+        <el-button
+          type="primary"
+          size="mini"
+          plain
+          @click="copy"
+          v-if="sonPageStu == 'check'"
+          >复制</el-button
+        >
+        <el-button
+          type="danger"
+          size="mini"
+          plain
+          @click="toNC"
+          v-if="sonPageStu == 'check' && row.status == '2'"
+          >重传NC</el-button
+        >
+        <el-button
+          type="primary"
+          size="mini"
+          plain
+          @click="save"
+          v-if="sonPageStu == 'add' || sonPageStu == 'edit'"
+          >保存</el-button
+        >
+        <el-button
+          type="primary"
+          size="mini"
+          plain
+          @click="submit"
+          v-if="
+            sonPageStu == 'check' && (row.status == '0' || row.status == '3')
+          "
+          >提交</el-button
+        >
+        <el-button size="mini" plain @click="back">返回</el-button>
       </div>
     </el-card>
 
@@ -1551,6 +1385,7 @@
 </template>
 
 <script>
+import { toOA } from "@/api/purchase/purchaseDemand.js";
 import {
   addOrder,
   getOrderDetail,
@@ -1692,8 +1527,8 @@ export default {
       this.getDetails(this.row);
     } else if (this.pageStu == "edit") {
       this.getDetails(this.row);
-      this.isDRCk = false
-      this.isDCCk = false
+      this.isDRCk = false;
+      this.isDCCk = false;
     }
   },
   methods: {
@@ -1705,8 +1540,11 @@ export default {
     },
     // 控制先选调出库存组织和调入库存组织再选调出部门和调入调出仓库
     controlCk(val) {
-      console.log("进了吗");
-      if (this.basicForm.deliveryInventoryOrg && this.basicForm.storageInventoryOrg){
+      if (val = '调出库存组织') {console.log("进了吗");}
+      if (
+        this.basicForm.deliveryInventoryOrg &&
+        this.basicForm.storageInventoryOrg
+      ) {
         this.isOrg = false;
       } else {
         this.basicForm.deliveryDept = "";
@@ -1757,25 +1595,20 @@ export default {
       this.basicForm.updateBy = "";
       this.basicForm.updateByName = "";
       this.basicForm.updateTime = "";
-      this.isDRCk = false
-      this.isDCCk = false
-    },
-    handleData() {
-      console.log("222");
+      this.basicForm.storageCode = "";
+      this.basicForm.deliveryCode = "";
       // 复制新增把id,编码,创建人置为空,子表去掉id
-      this.basicForm.id = "";
-      this.basicForm.code = "";
-      this.basicForm.createBy = "";
-      this.basicForm.createByName = "";
-      this.basicForm.createTime = "";
-      this.basicForm.isSendWms = "";
-      this.basicForm.ncCode = "";
-      this.basicForm.oaId = "";
-      this.basicForm.updateBy = "";
-      this.basicForm.updateByName = "";
-      this.basicForm.updateTime = "";
       if (this.materialInfo.length !== 0) {
         this.materialInfo.forEach((item) => {
+          if (item.deliveryCode) {
+            item.deliveryCode = "";
+          }
+          if (item.storageCode) {
+            item.storageCode = "";
+          }
+          if (item.demandCode) {
+            item.demandCode = "";
+          }
           if (item.allotId) {
             delete item.allotId;
           }
@@ -1794,6 +1627,8 @@ export default {
           }
         });
       }
+      this.isDRCk = false;
+      this.isDCCk = false;
     },
     toNC() {
       againToNC(this.row)
@@ -1825,7 +1660,6 @@ export default {
     save() {
       if (this.materialInfo.length !== 0) {
         if (this.sonPageStu == "add") {
-          this.handleData();
           this.basicForm.stAllotMaterialList = this.materialInfo;
           this.basicForm.stAllotReceiveDeliverList = this.receiveInfo;
           this.basicForm.stAllotReceiveExecuteList = this.priceList;
@@ -1901,7 +1735,7 @@ export default {
           if (this.basicForm.deliveryDept) {
             this.reBackRefer("DEPT_PARAM", this.basicForm.deliveryDept);
           }
-          
+
           if (this.basicForm.currency) {
             this.reBackRefer("CURRENCY_PARAM", this.basicForm.currency);
           }
@@ -1934,7 +1768,6 @@ export default {
     },
     // 回显参照框
     reBackRefer(type, id, title) {
-      console.log(type, id, title,'回显参照框');
       getRefer({ type: type, id: id, title: title }).then((res) => {
         if (type == "ORG_PARAM" && title == "调出库存组织") {
           this.chuOrgOptions = res.rows;
@@ -2016,7 +1849,7 @@ export default {
         classify: null,
         customerLogistic: null,
         customerLogisticName: null,
-        delFlag: 0
+        delFlag: 0,
       };
       this.materialInfo.push(newLine);
     },
@@ -2026,7 +1859,7 @@ export default {
         ...item,
         delFlag: index === $index ? "2" : item.delFlag,
       }));
-      console.log('看看列表',this.materialInfo)
+      console.log("看看列表", this.materialInfo);
     },
     //
     rowClassName(prop) {
@@ -2179,25 +2012,23 @@ export default {
     },
     selectMaterial(selection) {
       console.log("选中的物料", selection);
+      // 先清空通用名,调入调出结算规则明细
+      this.materialInfo[this.tableIndex].ruleDetail = ''
+      this.materialInfo[this.tableIndex].commonCode = ''
       this.materialInfo[this.tableIndex].material = selection[0].id;
       this.materialInfo[this.tableIndex].materialCode = selection[0].code;
       this.materialInfo[this.tableIndex].materialName = selection[0].name;
-      this.materialInfo[this.tableIndex].specification =
-        selection[0].specification;
+      this.materialInfo[this.tableIndex].specification = selection[0].specification;
       this.materialInfo[this.tableIndex].model = selection[0].model;
       this.materialInfo[this.tableIndex].originPlace = selection[0].originPlace;
-      this.materialInfo[this.tableIndex].originPlaceName =
-        selection[0].originPlaceName;
+      this.materialInfo[this.tableIndex].originPlaceName = selection[0].originPlaceName;
       this.materialInfo[this.tableIndex].unit = selection[0].unitId;
       this.materialInfo[this.tableIndex].mainUnit = selection[0].unitId;
       this.materialInfo[this.tableIndex].unitName = selection[0].unitIdName;
       this.materialInfo[this.tableIndex].mainUnitName = selection[0].unitIdName;
-      this.materialInfo[this.tableIndex].manufacturer =
-        selection[0].manufacturerIdName;
-      this.materialInfo[this.tableIndex].marketingApprovalPersonal =
-        selection[0].registrant;
-      this.materialInfo[this.tableIndex].production =
-        selection[0].productionPermit;
+      this.materialInfo[this.tableIndex].manufacturer = selection[0].manufacturerIdName;
+      this.materialInfo[this.tableIndex].marketingApprovalPersonal = selection[0].registrant;
+      this.materialInfo[this.tableIndex].production = selection[0].productionPermit;
       // 根据物料单位id查询单位code
       this.reBackRefer("UNIT_PARAM", selection[0].unitId);
     },
@@ -2206,7 +2037,7 @@ export default {
       this.tableIndex = index;
       this.referConditionMx.orgId = this.basicForm.deliveryInventoryOrg;
       this.referConditionMx.materialCode =
-        this.materialInfo[this.tableIndex].materialCode;
+      this.materialInfo[this.tableIndex].materialCode;
       this.referConditionMx.unitId = this.materialInfo[this.tableIndex].unit;
       this.referConditionMx.warehouseId = this.basicForm.deliveryWarehouse;
       this.$refs.batchRefer.init(this.referConditionMx);
@@ -2279,6 +2110,8 @@ export default {
         this.materialInfo[index].unitName = "";
         this.materialInfo[index].mainUnitName = "";
         this.materialInfo[index].manufacturer = "";
+        this.materialInfo[index].ruleDetail = ''
+        this.materialInfo[index].commonCode = ''
         this.materialInfo[index].marketingApprovalPersonal = "";
         this.materialInfo[index].production = "";
         this.materialInfo[index].unitCode = "";
@@ -2296,6 +2129,13 @@ export default {
         this.materialInfo[index].storageAllocation = "";
       }
     },
+    jumpOA() {
+      toOA(this.$store.state.user.name, this.basicForm.oaId).then((res) => {
+        if (res.code === 200) {
+          window.open(res.oaUrl);
+        }
+      });
+    },
   },
 };
 </script>
@@ -2311,7 +2151,8 @@ export default {
   display: flex;
   // justify-content: center;
   position: absolute;
-  top: 10px;right: 20px;
+  top: 10px;
+  right: 20px;
 }
 .btn_grooup {
   margin-bottom: 10px;

Vissa filer visades inte eftersom för många filer har ändrats