Forráskód Böngészése

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

001295 1 éve
szülő
commit
7757c8bf57

+ 101 - 26
src/views/business/spd/goal_management/AnnualSaleGoal.vue

@@ -134,15 +134,13 @@
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-dropdown @command="handleCommand">
-          <el-button type="primary" size="mini" plain icon="el-icon-upload">
-            导入<i class="el-icon-arrow-down el-icon--right"></i>
-          </el-button>
-          <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item command="importModel">导入模板</el-dropdown-item>
-            <el-dropdown-item command="import">导入</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+        >导入</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-dropdown @command="handleCommand">
@@ -297,9 +295,9 @@
             <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddDetails">增行</el-button>
           </el-col>
         </el-row>
-        <el-table v-loading="loading" :data="annualSaleGoalDetailsList" @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">
+        <el-table show-summary sum-text="小计" v-loading="loading" :data="annualSaleGoalDetailsList" @selection-change="handleSelectionChange" style="width: 100%; margin-top: 20px">
+          <el-table-column label="序号" type="index" width="70" align="center" fixed />
+          <el-table-column label="销售组织" align="center" width="180" :render-header="addRedStar">
             <template slot-scope="scope">
               <el-popover-select-v2 v-model="annualSaleGoalDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
                                     referName="ORG_PARAM"
@@ -308,7 +306,7 @@
               </el-popover-select-v2>
             </template>
           </el-table-column>
-          <el-table-column label="销售区域" align="center" prop="saleZone" width="180" :render-header="addRedStar">
+          <el-table-column label="销售区域" align="center" width="180" :render-header="addRedStar">
             <template slot-scope="scope">
               <el-popover-select-v2 v-model="annualSaleGoalDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
                                     referName="MK_SALESAREA_PARAM"
@@ -317,7 +315,7 @@
               </el-popover-select-v2>
             </template>
           </el-table-column>
-          <el-table-column label="客户" align="center" prop="custom" width="180" :render-header="addRedStar">
+          <el-table-column label="客户" align="center" width="180" :render-header="addRedStar">
             <template slot-scope="scope">
               <el-popover-select-v2 v-model="annualSaleGoalDetailsList[scope.$index].custom" title="客户" valueKey="name"
                                     referName="CUSTOMER_PARAM"
@@ -326,7 +324,7 @@
               </el-popover-select-v2>
             </template>
           </el-table-column>
-          <el-table-column label="负责人" align="center" prop="creator" width="180" :render-header="addRedStar">
+          <el-table-column label="负责人" align="center" width="180" :render-header="addRedStar">
             <template slot-scope="scope">
               <el-popover-select-v2 v-model="annualSaleGoalDetailsList[scope.$index].creator" title="负责人" valueKey="name"
                                     referName="CONTACTS_PARAM"
@@ -335,7 +333,7 @@
               </el-popover-select-v2>
             </template>
           </el-table-column>
-          <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220" :render-header="addRedStar">
+          <el-table-column label="一级分类" align="center" width="220" :render-header="addRedStar">
             <template slot-scope="scope">
               <el-select v-model="annualSaleGoalDetailsList[scope.$index].oneLevelClassify" size="mini" clearable
                          @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)"
@@ -344,7 +342,7 @@
               </el-select>
             </template>
           </el-table-column>
-          <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220">
+          <el-table-column label="二级分类" align="center" width="220">
             <template slot-scope="scope">
               <el-select v-model="annualSaleGoalDetailsList[scope.$index].twoLevelClassify" size="mini" clearable
                          @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)"
@@ -353,7 +351,7 @@
               </el-select>
             </template>
           </el-table-column>
-          <el-table-column label="物料" align="center" prop="material" width="180">
+          <el-table-column label="物料" align="center" width="180">
             <template slot-scope="scope">
               <el-popover-select-v2 v-model="annualSaleGoalDetailsList[scope.$index].material" title="物料" valueKey="name"
                                     referName="MATERIAL_PARAM"
@@ -451,6 +449,36 @@
       </div>
     </el-drawer>
 
+    <!-- 用户导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <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"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+
     <TreeRefers ref="treeDetails" @doSubmit="selectionsToInputForDetails" :single="true"/>
   </div>
 </template>
@@ -468,6 +496,7 @@ import {
   delAnnualSaleGoalDetails,
   getAnnualSaleGoalDetails
 } from "@/api/business/spd/goal_management/annualSaleGoalDetails"
+import { getToken } from "@/utils/auth";
 
 // 树形参照
 import TreeRefers from '@/components/Refers/treeRefer.vue'
@@ -608,7 +637,22 @@ export default {
       referCondition: {type: '', isPage: true, title: '', index: null},
       classOptions: [],
       // 子表数组
-      annualSaleGoalDetailsList: []
+      annualSaleGoalDetailsList: [],
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/goal_management/annualSaleGoal/importData"
+      },
     };
   },
   created() {
@@ -948,19 +992,50 @@ export default {
     },
     handleCommand(command) {
       // 执行对应的功能
-      if (command === 'importModel') {
-        // 执行选项1的功能
-        console.log('导入模板');
-      } else if (command === 'import') {
-        // 执行选项2的功能
-        console.log('导入');
-      } else if (command === 'export') {
+      if (command === 'export') {
         console.log('导出主表');
         this.handleExport()
       } else if (command === 'exportDetails') {
         console.log('导出明细');
         this.handleExportDetails()
       }
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.open = true;
+      if (this.open && this.form.id !== null) {
+        this.upload.title = "年销售目标填报明细导入"
+        this.upload.url = process.env.VUE_APP_BASE_API + "goal_management/annualSaleGoalDetails/importData/" + this.form.id
+      } else {
+        this.upload.title = "年销售目标填报导入";
+        this.upload.url = process.env.VUE_APP_BASE_API + "goal_management/annualSaleGoal/importData"
+      }
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      if (this.open && this.form.id !== null) {
+        this.download('goal_management/annualSaleGoalDetails/importTemplate', {
+        }, `annualSaleGoalDetails_${new Date().getTime()}.xlsx`)
+      } else {
+        this.download('goal_management/annualSaleGoal/importTemplate', {
+        }, `annualSaleGoal_${new Date().getTime()}.xlsx`)
+      }
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
     }
   }
 };

+ 23 - 38
src/views/business/spd/goal_management/AnnualSaleGoalMerge.vue

@@ -332,9 +332,9 @@
         </el-row>
         <el-tabs v-model="activeName" @tab-click="getNewTwoArray">
           <el-tab-pane label="年销售目标合并明细" name="annualSaleGoalMergeDetails">
-            <el-table v-loading="loading" :data="annualSaleGoalMergeDetailsList">
-              <el-table-column label="序号" type="index" width="55" align="center" fixed />
-              <el-table-column label="销售组织" align="center" prop="saleOrg" width="180">
+            <el-table show-summary sum-text="小计" v-loading="loading" :data="annualSaleGoalMergeDetailsList">
+              <el-table-column label="序号" type="index" width="70" align="center" fixed />
+              <el-table-column label="销售组织" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="annualSaleGoalMergeDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
                                         referName="ORG_PARAM" disabled
@@ -343,7 +343,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
+              <el-table-column label="销售区域" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="annualSaleGoalMergeDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
                                         referName="MK_SALESAREA_PARAM" disabled
@@ -352,7 +352,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="客户" align="center" prop="custom" width="180">
+              <el-table-column label="客户" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="annualSaleGoalMergeDetailsList[scope.$index].custom" title="客户" valueKey="name"
                                         referName="CUSTOMER_PARAM" disabled
@@ -361,7 +361,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="负责人" align="center" prop="creator" width="180">
+              <el-table-column label="负责人" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="annualSaleGoalMergeDetailsList[scope.$index].creator" title="负责人" valueKey="name"
                                         referName="CONTACTS_PARAM" disabled
@@ -370,7 +370,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220">
+              <el-table-column label="一级分类" align="center" width="220">
                 <template slot-scope="scope">
                   <el-select v-model="annualSaleGoalMergeDetailsList[scope.$index].oneLevelClassify" size="mini" clearable
                              @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)"
@@ -379,7 +379,7 @@
                   </el-select>
                 </template>
               </el-table-column>
-              <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220">
+              <el-table-column label="二级分类" align="center" width="220">
                 <template slot-scope="scope">
                   <el-select v-model="annualSaleGoalMergeDetailsList[scope.$index].twoLevelClassify" size="mini" clearable
                              @focus="chooseTreeReferForDetails('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)"
@@ -453,28 +453,12 @@
                   <el-input-number @change="computeTotalDetails(scope.$index, annualSaleGoalMergeDetailsList[scope.$index])" v-model="annualSaleGoalMergeDetailsList[scope.$index].decemberGoal" :precision="2" :step="0.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(year)">
-            <el-table v-loading="loading" :data="areaDetailList">
-              <el-table-column label="序号" type="index" width="55" align="center" fixed />
-              <el-table-column label="销售组织" align="center" prop="saleOrg" width="180">
+            <el-table show-summary sum-text="小计" v-loading="loading" :data="areaDetailList">
+              <el-table-column label="序号" type="index" width="70" align="center" fixed />
+              <el-table-column label="销售组织" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="areaDetailList[scope.$index].saleOrg" title="销售组织" valueKey="name"
                                         referName="CUSTOMER_PARAM" disabled
@@ -483,7 +467,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
+              <el-table-column label="销售区域" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="areaDetailList[scope.$index].saleZone" title="销售区域" valueKey="name"
                                         referName="CUSTOMER_PARAM" disabled
@@ -492,7 +476,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="负责人" align="center" prop="creator" width="180">
+              <el-table-column label="负责人" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="areaDetailList[scope.$index].creator" title="负责人" valueKey="name"
                                         referName="CONTACTS_PARAM" disabled
@@ -569,9 +553,9 @@
             </el-table>
           </el-tab-pane>
           <el-tab-pane label="客户目标汇总(年)" name="customerGoalSum(year)">
-            <el-table v-loading="loading" :data="customerDetailList">
-              <el-table-column label="序号" type="index" width="55" align="center" fixed />
-              <el-table-column label="销售组织" align="center" prop="saleOrg" width="180">
+            <el-table show-summary sum-text="小计" v-loading="loading" :data="customerDetailList">
+              <el-table-column label="序号" type="index" width="70" align="center" fixed />
+              <el-table-column label="销售组织" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="customerDetailList[scope.$index].saleOrg" title="销售组织" valueKey="name"
                                         referName="CUSTOMER_PARAM" disabled
@@ -580,7 +564,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
+              <el-table-column label="销售区域" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="customerDetailList[scope.$index].saleZone" title="销售区域" valueKey="name"
                                         referName="CUSTOMER_PARAM" disabled
@@ -589,7 +573,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="客户" align="center" prop="custom" width="180">
+              <el-table-column label="客户" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="customerDetailList[scope.$index].custom" title="客户" valueKey="name"
                                         referName="CUSTOMER_PARAM" disabled
@@ -692,7 +676,6 @@ import {
   delAnnualSaleMergeDetails,
   getAnnualSaleMergeDetails
 } from "@/api/business/spd/goal_management/annualSaleMergeDetails"
-import deepCopy from "@gby/deep-copy";
 
 // 树形参照
 import TreeRefers from '@/components/Refers/treeRefer.vue'
@@ -965,7 +948,7 @@ export default {
       this.customerDetailList = []
       this.activeName = 'annualSaleGoalMergeDetails'
       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.creator = this.$store.state.user.nickName
@@ -1015,7 +998,7 @@ export default {
         this.form = response.data;
         this.annualSaleGoalMergeDetailsList = response.data.annualGoalMergeDetailsList
         this.open = true;
-        this.title = "修改年度销售目标明细";
+        this.title = "修改--年度销售目标合并明细";
       });
     },
     // 复制按钮操作
@@ -1029,9 +1012,10 @@ export default {
         this.form = response.data
         this.form.id = null
         this.form.code = null
-        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.goalTotal = 0
         this.open = true
       })
     },
@@ -1297,6 +1281,7 @@ export default {
         return this.$message.error('当前标签不是年销售目标合并明细')
       }
       let query = JSON.parse(JSON.stringify(this.form))
+      query.annualGoalMergeDetailsList = []
       console.log(query);
       if (query.goalCategory === null || query.goalCategory === '') {
         return this.$message.error('请输入目标分类')

+ 8 - 22
src/views/business/spd/goal_management/MonthGoalMerge.vue

@@ -201,7 +201,7 @@
       <el-table-column label="目标类型" align="center" prop="goalCategory"/>
       <el-table-column label="目标值合计" align="center" prop="goalSum"/>
       <el-table-column label="单据状态" align="center" prop="documentStatus"/>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -365,8 +365,8 @@
         </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 show-summary sum-text="小计" v-loading="loading" :data="monthGoalMergeDetailsList" @selection-change="handleSelectionChange">
+              <el-table-column label="序号" type="index" width="70" 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"
@@ -450,27 +450,11 @@
                   </el-date-picker>
                 </template>
               </el-table-column>
-              <el-table-column label="目标值" align="center" prop="totalGoal" width="220">
+              <el-table-column label="目标值" align="center" prop="goalValue" 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">
@@ -500,7 +484,7 @@
                   </el-date-picker>
                 </template>
               </el-table-column>
-              <el-table-column label="目标值" align="center" prop="totalGoal" width="220">
+              <el-table-column label="目标值" align="center" prop="goalValue" 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>
@@ -543,7 +527,7 @@
                   </el-date-picker>
                 </template>
               </el-table-column>
-              <el-table-column label="目标值" align="center" prop="totalGoal" width="220">
+              <el-table-column label="目标值" align="center" prop="goalValue" 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>
@@ -899,6 +883,7 @@ export default {
         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.goalSum = 0
         this.open = true
         this.changeGoalCategoryForm()
       })
@@ -1198,6 +1183,7 @@ export default {
         return this.$message.error('当前标签不是月销售目标合并明细')
       }
       let query = JSON.parse(JSON.stringify(this.form))
+      query.monthGoalMergeDetailsList = []
       if (query.goalCategory === null || query.goalCategory === '') {
         return this.$message.error('请输入目标分类')
       } else if (query.goalCategory === '销售区域') {

+ 121 - 19
src/views/business/spd/goal_management/MonthReturnGoal.vue

@@ -132,15 +132,13 @@
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-dropdown @command="handleCommand">
-          <el-button type="primary" size="mini" plain icon="el-icon-upload">
-            导入<i class="el-icon-arrow-down el-icon--right"></i>
-          </el-button>
-          <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item command="importModel">导入模板</el-dropdown-item>
-            <el-dropdown-item command="import">导入</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+        >导入</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-dropdown @command="handleCommand">
@@ -172,7 +170,7 @@
       <el-table-column label="目标合计" align="center" prop="goalSum"/>
       <el-table-column label="备注" align="center" prop="notes"/>
       <el-table-column label="单据状态" align="center" prop="documentStatus"/>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="140" fixed="right">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" fixed="right">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -304,9 +302,9 @@
         </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">
+            <el-table show-summary sum-text="小计" v-loading="loading" :data="monthReturnGoalDetailsList" @selection-change="handleSelectionChange">
+              <el-table-column label="序号" type="index" width="70" align="center" fixed />
+              <el-table-column label="销售组织" align="center" 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"
@@ -315,7 +313,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="销售区域" align="center" prop="saleZone" width="180" :render-header="addRedStar">
+              <el-table-column label="销售区域" align="center" 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"
@@ -324,7 +322,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="客户" align="center" prop="custom" width="180" :render-header="addRedStar">
+              <el-table-column label="客户" align="center" 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"
@@ -333,7 +331,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="部门" align="center" prop="dept" width="180" :render-header="addRedStar">
+              <el-table-column label="部门" align="center" 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"
@@ -342,7 +340,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="制单人" align="center" prop="creator" width="180" :render-header="addRedStar">
+              <el-table-column label="制单人" align="center" 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"
@@ -351,7 +349,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="月份" align="center" prop="monthly" width="250" :render-header="addRedStar">
+              <el-table-column label="月份" align="center" 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>
@@ -388,6 +386,36 @@
       </div>
     </el-drawer>
 
+    <!-- 用户导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <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"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+
   </div>
 </template>
 
@@ -404,6 +432,7 @@ import {
   getMonthReturnGoalDetails,
   delMonthReturnGoalDetails
 } from "@/api/business/spd/goal_management/monthReturnGoalDetails"
+import { getToken } from "@/utils/auth";
 
 // 树形参照
 import TreeRefers from '@/components/Refers/treeRefer.vue'
@@ -525,6 +554,21 @@ export default {
             picker.$emit('pick', [start, end]);
           }
         }]
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/mk/monthReturnGoal/importData"
       }
     }
   },
@@ -587,6 +631,27 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
+      this.queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        code: null,
+        goalName: null,
+        documentDate: null,
+        annual: null,
+        customCode: null,
+        custom: null,
+        creatorCode: null,
+        creator: null,
+        saleZoneCode: null,
+        saleZone: null,
+        deptCode: null,
+        dept: null,
+        goalSum: null,
+        notes: null,
+        documentStatus: null,
+        params: { beginTime: null, endTime: null,}
+      }
+      this.documentDateRange = null
       this.resetForm("queryForm");
       this.handleQuery();
     },
@@ -775,7 +840,7 @@ export default {
     justiceDetailsList() {
       const arr = JSON.parse(JSON.stringify(this.monthReturnGoalDetailsList))
       for (const element of arr) {
-        if (element.saleOrg === null || element.saleZone === null || element.custom === null || element.dept === null || element.creator === null || element.monthly === null || element.goalSum === null) {
+        if (element.saleOrg === null || element.saleZone === 'null' || element.custom === null || element.dept === null || element.creator === null || element.monthly === null || element.goalSum === null) {
           return false
         }
       }
@@ -796,6 +861,43 @@ export default {
         console.log('导出明细');
         this.handleExportDetails()
       }
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.open = true;
+      if (this.open && this.form.id !== null) {
+        this.upload.title = "月回款目标填报明细导入"
+        this.upload.url = process.env.VUE_APP_BASE_API + "mk/monthReturnGoalDetails/importData/" + this.form.id
+      } else {
+        this.upload.title = "月回款目标填报导入";
+        this.upload.url = process.env.VUE_APP_BASE_API + "mk/monthReturnGoal/importData"
+      }
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      if (this.open && this.form.id !== null) {
+        this.download('mk/monthReturnGoalDetails/importTemplate', {
+        }, `monthReturnGoalDetails_${new Date().getTime()}.xlsx`)
+      } else {
+        this.download('mk/monthReturnGoal/importTemplate', {
+        }, `monthReturnGoal_${new Date().getTime()}.xlsx`)
+      }
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
     }
   }
 }

+ 80 - 16
src/views/business/spd/goal_management/MonthReturnMerge.vue

@@ -177,7 +177,7 @@
     <el-table-column label="目标类型" align="center" prop="goalCategory" width="180"/>
     <el-table-column label="目标值合计" align="center" prop="goalSum" width="180"/>
     <el-table-column label="单据状态" align="center" prop="documentStatus" width="180"/>
-    <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120" fixed="right">
+    <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" fixed="right">
       <template slot-scope="scope">
         <el-button
           size="mini"
@@ -322,9 +322,9 @@
       </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 show-summary sum-text="小计" 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">
+            <el-table-column label="销售组织" align="center" width="180">
               <template slot-scope="scope">
                 <el-popover-select-v2 v-model="monthReturnMergeDetailsList[scope.$index].saleOrg" title="销售组织" valueKey="name"
                                       referName="ORG_PARAM" disabled
@@ -333,7 +333,7 @@
                 </el-popover-select-v2>
               </template>
             </el-table-column>
-            <el-table-column label="销售区域" align="center" prop="saleZone" width="180">
+            <el-table-column label="销售区域" align="center" width="180">
               <template slot-scope="scope">
                 <el-popover-select-v2 v-model="monthReturnMergeDetailsList[scope.$index].saleZone" title="销售区域" valueKey="name"
                                       referName="MK_SALESAREA_PARAM" disabled
@@ -342,7 +342,7 @@
                 </el-popover-select-v2>
               </template>
             </el-table-column>
-            <el-table-column label="客户" align="center" prop="custom" width="180">
+            <el-table-column label="客户" align="center" width="180">
               <template slot-scope="scope">
                 <el-popover-select-v2 v-model="monthReturnMergeDetailsList[scope.$index].custom" title="客户" valueKey="name"
                                       referName="CUSTOMER_PARAM" disabled
@@ -351,7 +351,7 @@
                 </el-popover-select-v2>
               </template>
             </el-table-column>
-            <el-table-column label="部门" align="center" prop="dept" width="180">
+            <el-table-column label="部门" align="center" width="180">
               <template slot-scope="scope">
                 <el-popover-select-v2 v-model="monthReturnMergeDetailsList[scope.$index].dept" title="部门" valueKey="name"
                                       referName="DEPT_PARAM" disabled
@@ -360,7 +360,7 @@
                 </el-popover-select-v2>
               </template>
             </el-table-column>
-            <el-table-column label="制单人" align="center" prop="creator" width="180">
+            <el-table-column label="制单人" align="center" width="180">
               <template slot-scope="scope">
                 <el-popover-select-v2 v-model="monthReturnMergeDetailsList[scope.$index].creator" title="制单人" valueKey="name"
                                       referName="CONTACTS_PARAM" disabled
@@ -369,13 +369,13 @@
                 </el-popover-select-v2>
               </template>
             </el-table-column>
-            <el-table-column label="月份" align="center" prop="monthly" width="250">
+            <el-table-column label="月份" align="center" 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">
+            <el-table-column label="目标值" align="center" prop="goalSum" 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>
@@ -383,14 +383,55 @@
           </el-table>
         </el-tab-pane>
         <el-tab-pane label="区域目标汇总(月回款)" name="zoneGoalSum(monthReturn)">
-          <el-table :data="zoneGoalSumList">
+          <el-table show-summary sum-text="小计" :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-column label="销售组织" align="center" 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" width="180">
+              <template slot-scope="scope">
+                <el-popover-select-v2 v-model="zoneGoalSumList[scope.$index].saleZone" title="销售区域" valueKey="name"
+                                      referName="MK_SALESAREA_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" width="180">
+              <template slot-scope="scope">
+                <el-popover-select-v2 v-model="zoneGoalSumList[scope.$index].dept" title="部门" valueKey="name"
+                                      referName="DEPT_PARAM" disabled
+                                      :dataMapping="{ deptCode: 'code', dept: 'name'}"
+                                      :source.sync="zoneGoalSumList[scope.$index]" placeholder="请输入客户">
+                </el-popover-select-v2>
+              </template>
+            </el-table-column>
+            <el-table-column label="制单人" align="center" width="180">
+              <template slot-scope="scope">
+                <el-popover-select-v2 v-model="zoneGoalSumList[scope.$index].creator" title="制单人" valueKey="name"
+                                      referName="CONTACTS_PARAM" disabled
+                                      :dataMapping="{ creatorCode: 'code', creator: 'name'}"
+                                      :source.sync="zoneGoalSumList[scope.$index]" placeholder="请输入制单人">
+                </el-popover-select-v2>
+              </template>
+            </el-table-column>
+            <el-table-column label="月份" align="center" 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="goalSum" width="220">
+              <template slot-scope="scope">
+                <el-input-number disabled @change="computeTotal" v-model="zoneGoalSumList[scope.$index].goalSum" :precision="2" :step="1" :min="0"></el-input-number>
+              </template>
+            </el-table-column>
           </el-table>
         </el-tab-pane>
       </el-tabs>
@@ -606,6 +647,28 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
+      this.queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        code: null,
+        goalName: null,
+        documentDate: null,
+        annual: null,
+        monthly: null,
+        customCode: null,
+        custom: null,
+        saleZoneCode: null,
+        saleZone: null,
+        creatorCode: null,
+        creator: null,
+        deptCode: null,
+        dept: null,
+        goalCategory: null,
+        goalSum: null,
+        documentStatus: null,
+        params: { beginTime: null, endTime: null }
+      }
+      this.documentDateRange = null
       this.resetForm("queryForm");
       this.handleQuery();
     },
@@ -666,6 +729,7 @@ export default {
         this.form = response.data
         this.form.id = null
         this.form.code = null
+        this.form.goalSum = 0
         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()

+ 105 - 31
src/views/business/spd/goal_management/MonthSaleGoal.vue

@@ -133,15 +133,13 @@
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-dropdown @command="handleCommand">
-          <el-button type="primary" size="mini" plain icon="el-icon-upload">
-            导入<i class="el-icon-arrow-down el-icon--right"></i>
-          </el-button>
-          <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item command="importModel">导入模板</el-dropdown-item>
-            <el-dropdown-item command="import">导入</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+        >导入</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-dropdown @command="handleCommand">
@@ -174,7 +172,7 @@
       <el-table-column label="目标合计" align="center" prop="goalSum"/>
       <el-table-column label="备注" align="center" prop="notes"/>
       <el-table-column label="单据状态" align="center" prop="documentStatus"/>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="140" fixed="right">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" fixed="right">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -306,9 +304,9 @@
         </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">
+            <el-table show-summary sum-text="小计" v-loading="loading" :data="monthSaleGoalDetailsList" @selection-change="handleSelectionChange">
+              <el-table-column label="序号" type="index" width="70" align="center" fixed />
+              <el-table-column label="销售组织" align="center" 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"
@@ -317,7 +315,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="销售区域" align="center" prop="saleZone" width="180" :render-header="addRedStar">
+              <el-table-column label="销售区域" align="center" 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"
@@ -326,7 +324,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="客户" align="center" prop="custom" width="180" :render-header="addRedStar">
+              <el-table-column label="客户" align="center" 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"
@@ -335,7 +333,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="部门" align="center" prop="dept" width="180" :render-header="addRedStar">
+              <el-table-column label="部门" align="center" 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"
@@ -344,7 +342,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="制单人" align="center" prop="creator" width="180" :render-header="addRedStar">
+              <el-table-column label="制单人" align="center" 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"
@@ -353,7 +351,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="一级分类" align="center" prop="oneLevelClassify" width="220" :render-header="addRedStar">
+              <el-table-column label="一级分类" align="center" 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)"
@@ -362,7 +360,7 @@
                   </el-select>
                 </template>
               </el-table-column>
-              <el-table-column label="二级分类" align="center" prop="twoLevelClassify" width="220" :render-header="addRedStar">
+              <el-table-column label="二级分类" align="center" 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)"
@@ -371,7 +369,7 @@
                   </el-select>
                 </template>
               </el-table-column>
-              <el-table-column label="物料" align="center" prop="material" width="180">
+              <el-table-column label="物料" align="center" width="180">
                 <template slot-scope="scope">
                   <el-popover-select-v2 v-model="monthSaleGoalDetailsList[scope.$index].material" title="物料" valueKey="name"
                                         referName="MATERIAL_PARAM"
@@ -380,7 +378,7 @@
                   </el-popover-select-v2>
                 </template>
               </el-table-column>
-              <el-table-column label="科室" align="center" prop="department" width="180">
+              <el-table-column label="科室" align="center" width="180">
                 <template slot-scope="scope">
                   <el-input v-model="monthSaleGoalDetailsList[scope.$index].department" placeholder="请输入科室"></el-input>
                 </template>
@@ -390,7 +388,7 @@
                   <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">
+              <el-table-column label="月份" align="center" 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>
@@ -427,6 +425,36 @@
       </div>
     </el-drawer>
 
+    <!-- 用户导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <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"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+
     <TreeRefers ref="treeDetails" @doSubmit="selectionsToInputForDetails" :single="true"/>
   </div>
 </template>
@@ -443,6 +471,7 @@ import {
   getMonthSaleGoalDetails,
   delMonthSaleGoalDetails
 } from "@/api/business/spd/goal_management/monthSaleGoalDetails"
+import { getToken } from "@/utils/auth";
 
 // 树形参照
 import TreeRefers from '@/components/Refers/treeRefer.vue'
@@ -575,7 +604,22 @@ export default {
       referCondition: { type: '', isPage: true, title: '', index: null },
       classOptions: [],
       // 子表导航名
-      activeName: 'monthSaleGoalDetails'
+      activeName: 'monthSaleGoalDetails',
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/goal_management/monthSaleGoal/importData"
+      },
     };
   },
   created() {
@@ -897,20 +941,50 @@ export default {
       }
     },
     handleCommand(command) {
-      // 执行对应的功能
-      if (command === 'importModel') {
-        // 执行选项1的功能
-        console.log('导入模板');
-      } else if (command === 'import') {
-        // 执行选项2的功能
-        console.log('导入');
-      } else if (command === 'export') {
+      if (command === 'export') {
         console.log('导出主表');
         this.handleExport()
       } else if (command === 'exportDetails') {
         console.log('导出明细');
         this.handleExportDetails()
       }
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.open = true;
+      if (this.open && this.form.id !== null) {
+        this.upload.title = "月销售目标填报明细导入"
+        this.upload.url = process.env.VUE_APP_BASE_API + "goal_management/monthSaleGoalDetails/importData/" + this.form.id
+      } else {
+        this.upload.title = "月销售目标填报导入";
+        this.upload.url = process.env.VUE_APP_BASE_API + "goal_management/monthSaleGoal/importData"
+      }
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      if (this.open && this.form.id !== null) {
+        this.download('goal_management/monthSaleGoalDetails/importTemplate', {
+        }, `monthSaleGoalDetails_${new Date().getTime()}.xlsx`)
+      } else {
+        this.download('goal_management/monthSaleGoal/importTemplate', {
+        }, `monthSaleGoal_${new Date().getTime()}.xlsx`)
+      }
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
     }
   }
 }

+ 247 - 0
src/views/purchase/DemandSummary/colTol.vue

@@ -0,0 +1,247 @@
+<template>
+  <div class="colTol">
+    <el-drawer
+      title="隐藏列"
+      :visible.sync="open"
+      direction="rtl"
+      @close='upIsShow'
+      size="20%">
+      <transition name="fade">
+        <div class="columnOption">
+          <div class="content">
+            <el-row v-for="(item, index) in arrs" :key="index" style="font-size: 14px;font-weight: bold;margin-bottom: 10px;padding: 0 20px;">
+              <el-col :span="18">
+                <span>{{item.label}}</span>
+              </el-col>
+              <el-col :span="6">
+                <el-switch size="mini" v-model="prop[item.prop]"></el-switch>
+              </el-col>
+            </el-row>
+              <!-- <el-switch v-model="prop.materialClassifyOneName">一级品类</el-switch>
+              <el-switch v-model="prop.materialCode">物料编码</el-switch>
+              <el-switch v-model="prop.materialName">品名</el-switch>
+              <el-switch v-model="prop.specification">规格</el-switch>
+              <el-switch v-model="prop.unit">单位</el-switch>
+              <el-switch v-model="prop.manufacturer">生产厂家/代理人</el-switch>
+              <el-switch v-model="prop.demandNum">需求单位数</el-switch>
+              <el-switch v-model="prop.evensalesforyear">近1月月均需求</el-switch>
+              <el-switch v-model="prop.evensalesforthrmonth">近3月月均需求</el-switch>
+              <el-switch v-model="prop.netDemandNum">总最终净需求量</el-switch>
+              <el-switch v-model="prop.totalMonthlySales">总月销量</el-switch>
+              <el-switch v-model="prop.demandCycle">需求可用周期</el-switch>
+              <el-switch v-model="prop.dullQut">呆滞量</el-switch>
+              <el-switch v-model="prop.buyPeriod">采购周期</el-switch>
+              <el-switch v-model="prop.centralPublicStock">中心公共库存</el-switch>
+              <el-switch v-model="prop.centralWarehouse">中心仓专属货位</el-switch>
+              <el-switch v-model="prop.regionPublicStock">区域分仓公共库存</el-switch>
+              <el-switch v-model="prop.eachWarehouseStock">各项目仓库存</el-switch>
+              <el-switch v-model="prop.commerceWarehouse">电商仓库</el-switch>
+              <el-switch v-model="prop.buyTransit">采购在途</el-switch>
+              <el-switch v-model="prop.lendTransit">借出在途</el-switch>
+              <el-switch v-model="prop.transferTransit">调拨在途</el-switch>
+              <el-switch v-model="prop.stockTotal">库存总计</el-switch>
+              <el-switch v-model="prop.minPackage">最小包装量</el-switch>
+              <el-switch v-model="prop.minOrder">最小订货量</el-switch>
+              <el-switch v-model="prop.minBatch">最小批量</el-switch>
+              <el-switch v-model="prop.artificialAdjust">人工调整数</el-switch>
+              <el-switch v-model="prop.modifyReason">修改原因</el-switch>
+              <el-switch v-model="prop.suggestionPurchase">建议采购量</el-switch>
+              <el-switch v-model="prop.finalBuyQty">最终采购量</el-switch>
+              <el-switch v-model="prop.materialClassifyTwoName">二级品类</el-switch>
+              <el-switch v-model="prop.materialClassifyThreeName">三级品类</el-switch>
+              <el-switch v-model="prop.materialClassifyFourName">四级品类</el-switch>
+              <el-switch v-model="prop.buyerName">采购员</el-switch>
+              <el-switch v-model="prop.purchaseOrgName">默认采购组织</el-switch>
+              <el-switch v-model="prop.validityPeriod">有效期</el-switch>
+              <el-switch v-model="prop.validityPeriodUnit">有效期单位</el-switch>
+              <el-switch v-model="prop.businessType">业务类型</el-switch>
+              <el-switch v-model="prop.safetyStock">安全库存量</el-switch>
+              <el-switch v-model="prop.billSource">单据来源</el-switch>
+              <el-switch v-model="prop.registrant">注册人</el-switch>
+              <el-switch v-model="prop.buyDiscrepancy">总需与终采差异</el-switch>
+              <el-switch v-model="prop.forecastClassification">集团预测分类</el-switch>
+              <el-switch v-model="prop.centerBinPossession">中心仓占有量</el-switch>
+              <el-switch v-model="prop.centralWarehouseAvailable">中心仓可用量</el-switch>
+              <el-switch v-model="prop.puManagerAuditor">采购经理审核人</el-switch> -->
+            </div>
+            <!-- <div class="footer">
+              <el-button size="mini" type="primary" plain @click="saveColumn"
+                >确认</el-button
+              >
+            </div> -->
+        </div>
+      </transition>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    isVisible: {
+      type: Boolean,
+      default: false
+    },
+    showColumn: {
+      type: Object,
+      default: {}
+    },
+    arrs: {
+      type: Array,
+      default: []
+    }
+  },
+  data() {
+    return {
+      open: false,
+      // 列的配置化对象,存储配置信息
+      prop: {},
+      column: {
+        status: true,
+        materialClassifyOneName: true,
+        materialCode: true,
+        materialName: true,
+        specification: true,
+        unit: true,
+        manufacturer: true,
+        demandNum: true,
+        evensalesforyear: true,
+        evensalesforthrmonth: true,
+        netDemandNum: true,
+        totalMonthlySales: true,
+        demandCycle: true,
+        dullQut: true,
+        buyPeriod: true,
+        centralPublicStock: true,
+        centralWarehouse: true,
+        regionPublicStock: true,
+        eachWarehouseStock: true,
+        commerceWarehouse: true,
+        buyTransit: true,
+        lendTransit: true,
+        transferTransit: true,
+        stockTotal: true,
+        minPackage: true,
+        minOrder: true,
+        minBatch: true,
+        artificialAdjust: true,
+        modifyReason: true,
+        suggestionPurchase: true,
+        finalBuyQty: true,
+        materialClassifyTwoName: true,
+        materialClassifyThreeName: true,
+        materialClassifyFourName: true,
+        buyerName: true,
+        purchaseOrgName: true,
+        validityPeriod: true,
+        validityPeriodUnit: true,
+        businessType: true,
+        safetyStock: true,
+        billSource: true,
+        registrant: true,
+        buyDiscrepancy: true,
+        forecastClassification: true,
+        centerBinPossession: true,
+        centralWarehouseAvailable: true,
+        puManagerAuditor: true,
+      },
+    }
+  },
+  mounted() {
+    // 发请求得到checkListInitData的列的名字
+    if(localStorage.getItem("columnSet")){
+      this.prop = JSON.parse(localStorage.getItem("columnSet"))
+    }else{
+      this.prop = {
+        status: true,
+        materialClassifyOneName: true,
+        materialCode: true,
+        materialName: true,
+        specification: true,
+        unit: true,
+        manufacturer: true,
+        demandNum: true,
+        evensalesforyear: true,
+        evensalesforthrmonth: true,
+        netDemandNum: true,
+        totalMonthlySales: true,
+        demandCycle: true,
+        dullQut: true,
+        buyPeriod: true,
+        centralPublicStock: true,
+        centralWarehouse: true,
+        regionPublicStock: true,
+        eachWarehouseStock: true,
+        commerceWarehouse: true,
+        buyTransit: true,
+        lendTransit: true,
+        transferTransit: true,
+        stockTotal: true,
+        minPackage: true,
+        minOrder: true,
+        minBatch: true,
+        artificialAdjust: true,
+        modifyReason: true,
+        suggestionPurchase: true,
+        finalBuyQty: true,
+        materialClassifyTwoName: true,
+        materialClassifyThreeName: true,
+        materialClassifyFourName: true,
+        buyerName: true,
+        purchaseOrgName: true,
+        validityPeriod: true,
+        validityPeriodUnit: true,
+        businessType: true,
+        safetyStock: true,
+        billSource: true,
+        registrant: true,
+        buyDiscrepancy: true,
+        forecastClassification: true,
+        centerBinPossession: true,
+        centralWarehouseAvailable: true,
+        puManagerAuditor: true,
+      };
+    }
+  },
+  methods: {
+    upIsShow() {
+      this.$emit('update:isVisible',false)//修改isDrawer的值
+    },
+    //设置列的 显示/隐藏
+	  changeShow(item) {
+      item.show = !item.show
+    },
+    // showColumnOption() {
+    //   this.isShowColumn = true;
+    // },
+    saveColumn() {
+      localStorage.setItem("columnSet",JSON.stringify(this.prop))
+      // this.isShowColumn = false;
+      this.upIsShow()
+    },
+  },
+  watch: {
+    isVisible: {
+      handler(newValue) {
+        this.open = newValue
+      }
+    },
+    // 监听复选框配置列所有的变化
+    prop: {
+      handler: function (newnew, oldold) {
+        console.log('新值',newnew);
+        console.log('获取到表头没有?', this.arrs)
+        this.column = newnew;
+        this.$emit('update:showColumn', this.column)
+        // 这里需要让表格重新绘制一下,否则会产生固定列错位的情况
+        this.$nextTick(() => {
+          // this.$refs.table.doLayout();
+          this.$emit('reDraw')
+        });
+      },
+      deep: true,
+      immediate: true
+    },
+  }
+}
+</script>

+ 80 - 53
src/views/purchase/DemandSummary/index.vue

@@ -233,83 +233,84 @@
           max-height="355"
           style="font-size: 12px;"
           @selection-change="handleSelectionChange"
+          ref="table"
           :key="isUpdate"
         >
           <el-table-column type="selection" width="60" fixed="left"/>
-          <el-table-column show-overflow-tooltip label="序号" type="index" align="center" width="50px" fixed="left"/>
-          <!-- <el-table-column show-overflow-tooltip label="行号" align="center" prop="rowNo"/> -->
-          <el-table-column show-overflow-tooltip label="行状态" align="center" prop="status" width="100px" :formatter="hangStatus"/>
-          <el-table-column show-overflow-tooltip label="一级品类" align="center" prop="materialClassifyOneName" width="100px"/>
-          <el-table-column show-overflow-tooltip label="物料编码" align="center" prop="materialCode" width="150px"/>
-          <el-table-column show-overflow-tooltip label="品名" align="center" prop="materialName" width="150px"/>
-          <el-table-column show-overflow-tooltip label="规格" align="center" prop="specification" width="150px"/>
-          <el-table-column show-overflow-tooltip label="单位" align="center" prop="unit"/>
-          <el-table-column show-overflow-tooltip label="生产厂家/代理人" align="center" prop="manufacturer" width="200px"/>
-          <el-table-column show-overflow-tooltip label="需求单位数" align="center" prop="demandNum" width="100px"/>
-          <el-table-column show-overflow-tooltip label="近1月月均需求" align="center" prop="evensalesforyear" width="120px"/>
-          <el-table-column show-overflow-tooltip label="近3月月均需求" align="center" prop="evensalesforthrmonth" width="120px"/>
-          <el-table-column show-overflow-tooltip label="总最终净需求量" align="center" prop="netDemandNum" width="120px"/>
-          <el-table-column show-overflow-tooltip label="总月销量" align="center" prop="totalMonthlySales"/>
-          <el-table-column show-overflow-tooltip label="需求可用周期" align="center" prop="demandCycle" width="120px"/>
-          <el-table-column show-overflow-tooltip label="呆滞量" align="center" prop="dullQut"/>
-          <el-table-column show-overflow-tooltip label="采购周期" align="center" prop="buyPeriod"/>
-          <el-table-column show-overflow-tooltip label="中心公共库存" align="center" prop="centralPublicStock" width="120px"/>
-          <el-table-column show-overflow-tooltip label="中心仓专属货位" align="center" prop="centralWarehouse" width="120px"/>
-          <el-table-column show-overflow-tooltip label="区域分仓公共库存" align="center" prop="regionPublicStock" width="150px"/>
-          <el-table-column show-overflow-tooltip label="各项目仓库存" align="center" prop="eachWarehouseStock" width="120px"/>
-          <el-table-column show-overflow-tooltip label="电商仓库" align="center" prop="commerceWarehouse"/>
-          <el-table-column show-overflow-tooltip label="采购在途" align="center" prop="buyTransit"/>
-          <el-table-column show-overflow-tooltip label="借出在途" align="center" prop="lendTransit"/>
-          <el-table-column show-overflow-tooltip label="调拨在途" align="center" prop="transferTransit"/>
-          <el-table-column show-overflow-tooltip label="库存总计" align="center" prop="stockTotal"/>
-          <el-table-column show-overflow-tooltip label="最小包装量" align="center" prop="minPackage" width="100px"/>
-          <el-table-column show-overflow-tooltip label="最小订货量" align="center" prop="minOrder" width="100px"/>
-          <el-table-column show-overflow-tooltip label="最小批量" align="center" prop="minBatch"/>
-          <el-table-column show-overflow-tooltip label="人工调整数" align="center" prop="artificialAdjust" width="100px"/>
-          <el-table-column show-overflow-tooltip label="修改原因" align="center" prop="modifyReason" width="150px">
+          <el-table-column show-overflow-tooltip  label="序号" type="index" align="center" width="50px" fixed="left"/>
+          <!-- <el-table-column show-overflow-tooltip v-if="showColumn.status" label="行号" align="center" prop="rowNo"/> -->
+          <el-table-column show-overflow-tooltip v-if="showColumn.status" label="行状态" align="center" prop="status" width="100px" :formatter="hangStatus"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.materialClassifyOneName" label="一级品类" align="center" prop="materialClassifyOneName" width="100px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.materialCode" label="物料编码" align="center" prop="materialCode" width="150px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.materialName" label="品名" align="center" prop="materialName" width="150px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.specification" label="规格" align="center" prop="specification" width="150px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.unit" label="单位" align="center" prop="unit"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.manufacturer" label="生产厂家/代理人" align="center" prop="manufacturer" width="200px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.demandNum" label="需求单位数" align="center" prop="demandNum" width="100px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.evensalesforyear" label="近1月月均需求" align="center" prop="evensalesforyear" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.evensalesforthrmonth" label="近3月月均需求" align="center" prop="evensalesforthrmonth" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.netDemandNum" label="总最终净需求量" align="center" prop="netDemandNum" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.totalMonthlySales" label="总月销量" align="center" prop="totalMonthlySales"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.demandCycle" label="需求可用周期" align="center" prop="demandCycle" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.dullQut" label="呆滞量" align="center" prop="dullQut"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.buyPeriod" label="采购周期" align="center" prop="buyPeriod"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.centralPublicStock" label="中心公共库存" align="center" prop="centralPublicStock" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.centralWarehouse" label="中心仓专属货位" align="center" prop="centralWarehouse" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.regionPublicStock" label="区域分仓公共库存" align="center" prop="regionPublicStock" width="150px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.eachWarehouseStock" label="各项目仓库存" align="center" prop="eachWarehouseStock" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.commerceWarehouse" label="电商仓库" align="center" prop="commerceWarehouse"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.buyTransit" label="采购在途" align="center" prop="buyTransit"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.lendTransit" label="借出在途" align="center" prop="lendTransit"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.transferTransit" label="调拨在途" align="center" prop="transferTransit"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.stockTotal" label="库存总计" align="center" prop="stockTotal"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.minPackage" label="最小包装量" align="center" prop="minPackage" width="100px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.minOrder" label="最小订货量" align="center" prop="minOrder" width="100px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.minBatch" label="最小批量" align="center" prop="minBatch"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.artificialAdjust" label="人工调整数" align="center" prop="artificialAdjust" width="100px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.modifyReason" label="修改原因" align="center" prop="modifyReason" width="150px">
             <template slot-scope="scope">
-                <el-input :disabled="scope.row.status !== '1'|| lineDisable || scope.row.artificialAdjust == '0'" v-model="scope.row.modifyReason"/>
+                <el-input size="mini" :disabled="scope.row.status !== '1'|| lineDisable || scope.row.artificialAdjust == '0'" v-model="scope.row.modifyReason"/>
             </template>
           </el-table-column>
-          <el-table-column show-overflow-tooltip label="建议采购量" align="center" prop="suggestionPurchase" width="100px"/>
-          <!-- <el-table-column show-overflow-tooltip label="建议净采购量" align="center" prop="suggestBuyQty" width="100px"/> -->
-          <el-table-column show-overflow-tooltip label="最终采购量" align="center" prop="finalBuyQty" width="100">
+          <el-table-column show-overflow-tooltip v-if="showColumn.suggestionPurchase" label="建议采购量" align="center" prop="suggestionPurchase" width="100px"/>
+          <!-- <el-table-column show-overflow-tooltip v-if="showColumn.status" label="建议净采购量" align="center" prop="suggestBuyQty" width="100px"/> -->
+          <el-table-column show-overflow-tooltip v-if="showColumn.finalBuyQty" label="最终采购量" align="center" prop="finalBuyQty" width="100">
             <template slot-scope="scope">
-                <el-input :disabled="scope.row.status !== '1' || lineDisable" v-model="scope.row.finalBuyQty"/>
+                <el-input size="mini" :disabled="scope.row.status !== '1' || lineDisable" v-model="scope.row.finalBuyQty"/>
             </template>
           </el-table-column>
-          <el-table-column show-overflow-tooltip label="二级品类" align="center" prop="materialClassifyTwoName" width="120px"/>
-          <el-table-column show-overflow-tooltip label="三级品类" align="center" prop="materialClassifyThreeName" width="120px"/>
-          <el-table-column show-overflow-tooltip label="四级品类" align="center" prop="materialClassifyFourName" width="120px"/>
-          <el-table-column show-overflow-tooltip label="采购员" align="center" prop="buyerName" width="150px">
+          <el-table-column show-overflow-tooltip v-if="showColumn.materialClassifyTwoName" label="二级品类" align="center" prop="materialClassifyTwoName" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.materialClassifyThreeName" label="三级品类" align="center" prop="materialClassifyThreeName" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.materialClassifyFourName" label="四级品类" align="center" prop="materialClassifyFourName" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.buyerName" label="采购员" align="center" prop="buyerName" width="150px">
             <template slot-scope="scope">
                 <el-input readonly :disabled="scope.row.status !== '1' || lineDisable" size="mini" v-model="scope.row.buyerName">
                   <el-button size="mini" :disabled="scope.row.status !== '1' || lineDisable" slot="append" icon="el-icon-more" @click="chooseSon(scope.$index, 'CONTACTS_PARAM', true, '明细采购员')"></el-button>
                 </el-input>
             </template>
           </el-table-column>
-          <el-table-column show-overflow-tooltip label="默认采购组织" align="center" prop="purchaseOrgName" width="230px">
+          <el-table-column show-overflow-tooltip v-if="showColumn.purchaseOrgName" label="默认采购组织" align="center" prop="purchaseOrgName" width="230px">
             <!-- <template slot-scope="scope">
                 <el-input readonly :disabled="scope.row.status !== '1' || lineDisable" size="mini" v-model="scope.row.purchaseOrgName">
                   <el-button size="mini" :disabled="scope.row.status !== '1' || lineDisable" slot="append" icon="el-icon-more" @click="chooseSon(scope.$index, 'ORG_PARAM', true, '明细默认采购组织')"></el-button>
                 </el-input>
             </template> -->
           </el-table-column>
-          <el-table-column show-overflow-tooltip label="有效期" align="center" prop="validityPeriod"/>
-          <el-table-column show-overflow-tooltip label="有效期单位" align="center" prop="validityPeriodUnit" width="100px"/>
-          <el-table-column show-overflow-tooltip label="业务类型" align="center" prop="businessType" :formatter="formatterBusinessType"/>
-          <el-table-column show-overflow-tooltip label="安全库存量" align="center" prop="safetyStock" width="100px"/>
-          <el-table-column show-overflow-tooltip label="单据来源" align="center" prop="billSource" :formatter="formatterSource"/>
-          <el-table-column show-overflow-tooltip label="注册人" align="center" prop="registrant" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.validityPeriod" label="有效期" align="center" prop="validityPeriod"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.validityPeriodUnit" label="有效期单位" align="center" prop="validityPeriodUnit" width="100px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.businessType" label="业务类型" align="center" prop="businessType" :formatter="formatterBusinessType"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.safetyStock" label="安全库存量" align="center" prop="safetyStock" width="100px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.billSource" label="单据来源" align="center" prop="billSource" :formatter="formatterSource"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.registrant" label="注册人" align="center" prop="registrant" width="120px"/>
           <!-- <el-table-column label="可用量" align="center" prop="qty"/> -->
-          <el-table-column show-overflow-tooltip label="总需与终采差异" align="center" prop="buyDiscrepancy" width="120px"/>
-          <el-table-column show-overflow-tooltip label="集团预测分类" align="center" prop="forecastClassification" width="120px"/>
-          <el-table-column show-overflow-tooltip label="中心仓占有量" align="center" prop="centerBinPossession" width="120px"/>
-          <el-table-column show-overflow-tooltip label="中心仓可用量" align="center" prop="centralWarehouseAvailable" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.buyDiscrepancy" label="总需与终采差异" align="center" prop="buyDiscrepancy" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.forecastClassification" label="集团预测分类" align="center" prop="forecastClassification" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.centerBinPossession" label="中心仓占有量" align="center" prop="centerBinPossession" width="120px"/>
+          <el-table-column show-overflow-tooltip v-if="showColumn.centralWarehouseAvailable" label="中心仓可用量" align="center" prop="centralWarehouseAvailable" width="120px"/>
           <!-- <el-table-column label="物料类别" align="center" prop="materialCategory" width="150px"/> -->
           <!-- <el-table-column label="业务部门" align="center" prop="departmentName" width="150px"/> -->
-          <!-- <el-table-column show-overflow-tooltip label="需求单位" align="center" prop="demandUnit"/> -->
-          <el-table-column show-overflow-tooltip label="采购经理审核人" align="center" prop="puManagerAuditor" width="120px"/>
+          <!-- <el-table-column show-overflow-tooltip v-if="showColumn.status" label="需求单位" align="center" prop="demandUnit"/> -->
+          <el-table-column show-overflow-tooltip v-if="showColumn.puManagerAuditor" label="采购经理审核人" align="center" prop="puManagerAuditor" width="120px"/>
           <el-table-column
           fixed="right"
           label="操作"
@@ -322,6 +323,10 @@
         </el-table-column>
         </el-table>
 
+        <el-button size="mini" style="position: absolute;left: 20px;bottom: 20px;" @click="tols.open = true">隐藏列</el-button>
+
+        <colTol :isVisible.sync="tols.open" @reDraw="reDraw" :showColumn.sync="showColumn" :arrs.sync="arrs"/>
+
         <el-pagination
           background
           @size-change="handleSizeChange"
@@ -347,6 +352,7 @@
 
 <script>
 import Add from './add'
+import colTol from './colTol.vue'
 import Refers from '@/components/Refers/refers.vue'
 import TreeRefers from '@/components/Refers/treeRefer.vue'
 import popDialog from '@/components/PopDialog/index.vue'
@@ -357,6 +363,7 @@ export default {
   dicts: ['sys_row_status', 'predictive_classify', 'sys_period_unit', 'sys_business', 'sys_bill_source'],
   components: {
     Add,
+    colTol,
     CollapseTransition,
     Refers,
     TreeRefers,
@@ -364,6 +371,11 @@ export default {
   },
   data() {
     return {
+      showColumn: {},
+      arrs:[],
+      tols: {
+        open: false
+      },
       hangStatus(row) {
         switch (row.status) {
           case '0':
@@ -480,6 +492,10 @@ export default {
     this.getList(this.queryParams)
   },
   methods: {
+    reDraw() {
+      this.$refs.table.doLayout();
+      console.log(111)
+    },
     // 指定列合计
     getSummaries(param) {
       const { columns, data } = param;
@@ -543,6 +559,17 @@ export default {
         if (res.code === 200) {
           this.tableList = res.rows
           this.total = res.total
+          let arrs = []
+          this.$refs.table.$children.forEach(item => {
+            if (item.label != undefined && item.prop != undefined) {
+              arrs.push({
+                label: item.label,
+                prop: item.prop
+              })
+            }
+          })
+          this.arrs = arrs
+          console.log('获取表头数据', arrs)
         }
       })
     },

+ 1 - 1
src/views/purchase/PurchaseDemandList/add.vue

@@ -419,7 +419,7 @@
       </el-table>
     </el-form>
       <div class="btn_group">
-        <el-button type="primary" size="mini"  @click="jumpOA" v-if="sonPageStu == 'check' && (row.status == '1' || row.status == '2')">跳转OA</el-button>
+        <el-button type="primary" size="mini"  @click="jumpOA" v-if="sonPageStu == 'check' && (row.status == '1' || row.status == '2')">审批</el-button>
         <el-button type="primary" size="mini"  @click="copy" v-if="sonPageStu == 'check'">复制</el-button>
         <el-button type="primary" size="mini"  @click="save" v-if="sonPageStu == 'add' || sonPageStu == 'edit'">保存</el-button>
         <el-button type="primary" size="mini"  @click="submit" v-if="sonPageStu == 'check' && (row.status == '0' || row.status == '3')">提交</el-button>

+ 0 - 2
src/views/purchase/apply/index.vue

@@ -62,7 +62,6 @@ export default {
     },
     // 查 询
     useQuery(prop, page) {
-      this.selectData = [];
       this.fetchList(prop, page);
     },
     // 重 置
@@ -73,7 +72,6 @@ export default {
     },
     // 选 择
     useSelect(prop) {
-      console.log("prop", prop);
       this.selectData = prop;
     },
     // 明 细

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

@@ -58,7 +58,6 @@ export default {
     },
     // 查 询
     useQuery(prop, page) {
-      this.selectData = [];
       this.fetchList(prop, page);
     },
     // 重 置

+ 1 - 1
src/views/purchase/contract/add/columns.js

@@ -197,7 +197,7 @@ export default function useColumns() {
       attr: { is: "el-date-picker", valueFormat: "yyyy-MM-dd" },
     },
     {
-      item: { key: "isTarget", title: "是否有指标" },
+      item: { key: "isTarget", title: "是否有指标", require: true },
       attr: { is: "el-select", dictName: "sys_yes_no" },
     },
     {

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

@@ -67,7 +67,6 @@ export default {
     },
     // 查 询
     useQuery(prop, page) {
-      this.selectData = [];
       this.fetchList(prop, page);
     },
     // 重 置

+ 1 - 1
src/views/purchase/transferOrder/add.vue

@@ -1337,7 +1337,7 @@
             (row.status == '1' || row.status == '2') &&
             row.oaId
           "
-          >跳转OA</el-button
+          >审批</el-button
         >
         <el-button
           type="primary"

+ 2 - 2
vue.config.js

@@ -37,7 +37,7 @@ module.exports = {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         // target: `http://172.16.100.107:8080/drp-admin`, //测试
-       target: `http://test-sy.derom.com/drp-admin`, //测试
+       // target: `http://test-sy.derom.com/drp-admin`, //测试
         // target: `http://release-sy.derom.com/drp-admin`, //预发
         // target: `http://sy.derom.com/drp-admin`, //生产
         // target: `http://172.16.63.202:8000/drp-admin`, // D本地
@@ -46,7 +46,7 @@ module.exports = {
         // target: `http://172.16.13.47:8000/drp-admin`, //这是一个美女的本地
         // target: `http://172.16.13.113:8000/drp-admin`, //DWT本地
         // target: `http://172.16.13.21:8000/drp-admin`, //CKF本地
-        // target: `http://172.16.13.43:8000/drp-admin`, //lz's localhost
+        target: `http://172.16.13.43:8000/drp-admin`, //lz's localhost
          // target: `http://127.0.0.1:8000/drp-admin`,
         changeOrigin: true,
         pathRewrite: {