Bladeren bron

Merge branch 'dev' into 'purchaseDev'

Dev20231225

See merge request new-business/drp-web!627
李园 1 jaar geleden
bovenliggende
commit
7d8fc0bc6a

+ 158 - 51
src/views/business/spd/target/MonthSaleGoal.vue

@@ -119,7 +119,7 @@
       <el-table-column label="销售区域" align="center" prop="saleZone" width="180" />
       <el-table-column label="制单人" align="center" prop="creator" width="180" />
       <el-table-column label="部门" align="center" prop="dept" width="180" />
-      <el-table-column label="目标合计(元)" align="center" prop="goalSum" width="180" />
+      <el-table-column label="销售目标合计(元)" align="center" prop="goalSum" width="180" />
       <el-table-column label="备注" align="center" prop="notes" width="180" />
       <el-table-column show-overflow-tooltip label="状态" align="center" width="100" prop="status">
         <template slot-scope="scope">
@@ -207,7 +207,7 @@
         </el-row>
         <el-row :gutter="20">
           <el-col :span="6">
-            <el-form-item label="目标合计(元)" prop="goalSum" label-width="120px">
+            <el-form-item label="销售目标合计(元)" prop="goalSum" label-width="150px">
               <el-input v-model="form.goalSum" placeholder="目标合计自动计算" disabled />
             </el-form-item>
           </el-col>
@@ -257,7 +257,7 @@
             </el-col>
           </el-row>
           <el-tabs v-model="activeName">
-            <el-tab-pane label="月销售目标明细" name="monthSaleGoalDetails">
+            <el-tab-pane label="月销售/月利润目标明细" name="monthSaleGoalDetails">
               <el-table max-height="560" show-summary :summary-method="getSummaries" v-loading="loading" size="mini"
                 :data="monthSaleGoalDetailsList" @selection-change="handleSelectionChange" v-horizontal-scroll>
                 <el-table-column label="序号" type="index" width="70" align="center" fixed />
@@ -302,19 +302,23 @@
                     </el-popover-select-v2>
                   </template>
                 </el-table-column> -->
-                <el-table-column label="一级分类" align="center" width="180" :render-header="addRedStar">
+                <el-table-column label="一级分类" align="center" min-width="200" :render-header="addRedStar">
                   <template slot-scope="scope">
-                    <el-input v-model="monthSaleGoalDetailsList[scope.$index].oneLevelClassify" placeholder="请输入一级分类"
-                      disabled></el-input>
+                    <el-select v-model="monthSaleGoalDetailsList[scope.$index].oneLevelClassify" clearable
+                      @focus="chooseTreeReferForMain('MATERIALCLASSIFY_PARAM', false, '一级物料分类', scope.$index)" :disabled="!isDept">
+                      <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.code" />
+                    </el-select>
                   </template>
                 </el-table-column>
-                <el-table-column label="二级分类" align="center" width="180" :render-header="addRedStar">
+                <el-table-column label="二级分类" align="center" min-width="200" :render-header="addRedStar">
                   <template slot-scope="scope">
-                    <el-input v-model="monthSaleGoalDetailsList[scope.$index].twoLevelClassify" placeholder="请输入二级分类"
-                      disabled></el-input>
+                    <el-select v-model="monthSaleGoalDetailsList[scope.$index].twoLevelClassify" clearable
+                      @focus="chooseTreeReferForMain('MATERIALCLASSIFY_PARAM', false, '二级物料分类', scope.$index)" :disabled="!isDept">
+                      <el-option v-for="item in classOptions" :key="item.id" :label="item.name" :value="item.code" />
+                    </el-select>
                   </template>
                 </el-table-column>
-                <el-table-column label="物料" align="center" width="180" :render-header="addRedStar">
+                <el-table-column label="物料" align="center" min-width="220" :render-header="addRedStarChange">
                   <template slot-scope="scope">
                     <el-tooltip class="item" effect="dark" placement="top-start">
                       <div slot="content">{{ scope.row.memo }}</div>
@@ -328,31 +332,38 @@
                     </el-tooltip>
                   </template>
                 </el-table-column>
-                <el-table-column label="科室" align="center" width="180">
+                <el-table-column label="科室" align="center" prop="department" min-width="200">
                   <template slot-scope="scope">
-                    <el-input v-model="monthSaleGoalDetailsList[scope.$index].department" placeholder="请输入科室">
-                    </el-input>
+                    <el-select v-model="monthSaleGoalDetailsList[scope.$index].department" placeholder="请选择科室">
+                      <el-option v-for="dict in dict.type.mk_bo_section" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
+                    </el-select>
                   </template>
                 </el-table-column>
-                <el-table-column label="数量" align="center" prop="num" width="220">
+                <el-table-column label="数量" align="center" prop="num" min-width="220">
                   <template slot-scope="scope">
                     <el-input-number v-model="monthSaleGoalDetailsList[scope.$index].num" :min="0"
                       @change="calculate(scope.row)"></el-input-number>
                   </template>
                 </el-table-column>
-                <el-table-column label="月份" align="center" width="250" :render-header="addRedStar">
+                <el-table-column label="月份" align="center" min-width="250">
                   <template slot-scope="scope">
-                    <el-date-picker v-model="monthSaleGoalDetailsList[scope.$index].monthly" value-format="yyyy-MM"
+                    <el-date-picker v-model="monthSaleGoalDetailsList[scope.$index].monthly" value-format="yyyy-MM" disabled
                       type="month" placeholder="选择月份">
                     </el-date-picker>
                   </template>
                 </el-table-column>
-                <el-table-column label="目标值(元)" align="center" prop="goalValue" width="220" :render-header="addRedStar">
+                <el-table-column label="销售目标值(元)" align="center" prop="goalValue" min-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" prop="profitTargetValue" min-width="220" :render-header="addRedStar" v-if="isDept">
+                  <template slot-scope="scope">
+                    <el-input-number @change="computeTotal" v-model="monthSaleGoalDetailsList[scope.$index].profitTargetValue"
+                      :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">
@@ -437,6 +448,7 @@
         <el-button type="primary" @click="dialogUpdateMoreSave">确 定</el-button>
       </div>
     </el-dialog>
+  <TreeRefers ref="treeMain" @doSubmit="selectionsToInputForMain" :single="true" />
   </div>
 </template>
 
@@ -475,7 +487,7 @@
       TreeRefers,
       ElPopoverSelectV2
     },
-    dicts: ["sys_status", "oa_templete_id"],
+    dicts: ["sys_status", "oa_templete_id", "mk_bo_section"],
     data() {
       return {
         // 遮罩层
@@ -490,7 +502,7 @@
         showSearch: false,
         // 总条数
         total: 0,
-        // 月销售目标填报表格数据
+        // 月销售/月利润目标填报表格数据
         monthSaleGoalList: [],
         monthSaleGoalDetailsList: [],
         // 弹出层标题
@@ -688,13 +700,26 @@
         }],
         materialRange: '',
         text: '',
+        // 判断操作用户是否属于湖南公司部门的标志
+        isDept: false,
+        // 物料分类数组
+        classOptions: [],
+        // 树形参照
+        referCondition: {
+          type: '',
+          isPage: true,
+          title: '',
+          index: null
+        },
+        index: null,
       };
     },
     created() {
       this.getList();
+      this.judge();
     },
     methods: {
-      /** 查询月销售目标填报列表 */
+      /** 查询月销售/月利润目标填报列表 */
       getList() {
         this.loading = true;
         listMonthSaleGoal(this.queryParams).then(response => {
@@ -790,7 +815,7 @@
         this.reset();
         this.monthSaleGoalDetailsList = []
         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()
@@ -836,7 +861,7 @@
           this.form.goalSum = this.form.goalSum.toFixed(2)
           this.monthSaleGoalDetailsList = JSON.parse(JSON.stringify(this.form.monthDetailsList))
           this.open = true;
-          this.title = "修改--月销售目标填报";
+          this.title = "修改--月销售/月利润目标填报";
         });
       },
       useDoubleClick(row) {
@@ -848,7 +873,7 @@
           this.form.goalSum = this.form.goalSum.toFixed(2)
           this.monthSaleGoalDetailsList = JSON.parse(JSON.stringify(this.form.monthDetailsList))
           this.open = true;
-          this.title = "修改--月销售目标填报";
+          this.title = "修改--月销售/月利润目标填报";
         });
       },
       // 复制按钮
@@ -869,7 +894,7 @@
             element.code = null
           }
           this.open = true;
-          this.title = "新增--月销售目标填报";
+          this.title = "新增--月销售/月利润目标填报";
         })
       },
       /** 提交按钮 */
@@ -884,10 +909,12 @@
         if (this.justiceDetailsList()) {
           return this.$message.error('子表中第' + this.text + '行有必填字段未填,或者目标值为0')
         }
-        for (let i = 0; i < this.monthSaleGoalDetailsList.length; i++) {
-          for (let j = i + 1; j < this.monthSaleGoalDetailsList.length; j++) {
-            if (this.monthSaleGoalDetailsList[i].materialCode == this.monthSaleGoalDetailsList[j].materialCode) {
-              return this.$message.error('子表存在重复物料');
+        if (!this.isDept) {
+          for (let i = 0; i < this.monthSaleGoalDetailsList.length; i++) {
+            for (let j = i + 1; j < this.monthSaleGoalDetailsList.length - i; j++) {
+              if (this.monthSaleGoalDetailsList[i].materialCode == this.monthSaleGoalDetailsList[j].materialCode) {
+                return this.$message.error('子表存在重复物料');
+              }
             }
           }
         }
@@ -895,19 +922,25 @@
           if (valid) {
             if (this.form.id != null) {
               this.form.monthDetailsList = JSON.parse(JSON.stringify(this.monthSaleGoalDetailsList))
+              this.$modal.loading("保存中...");
               updateMonthSaleGoal(this.form).then(response => {
                 this.$modal.msgSuccess("修改成功");
                 this.open = false;
                 this.getList();
+              }).finally( e =>{
+                this.$modal.closeLoading();
               });
             } else {
               this.form.status = '0'
               this.form.monthDetailsList = JSON.parse(JSON.stringify(this.monthSaleGoalDetailsList))
               console.log(this.form);
+              this.$modal.loading("保存中...");
               addMonthSaleGoal(this.form).then(response => {
                 this.$modal.msgSuccess("新增成功");
                 this.open = false;
                 this.getList();
+              }).finally( e =>{
+                this.$modal.closeLoading();
               });
             }
           }
@@ -916,7 +949,7 @@
       /** 删除按钮操作 */
       handleDelete(row) {
         const ids = row.id || this.ids;
-        this.$modal.confirm('是否确认删除月销售目标填报单据编号为"' + row.code + '"的数据项?').then(function () {
+        this.$modal.confirm('是否确认删除月销售/月利润目标填报单据编号为"' + row.code + '"的数据项?').then(function () {
           return delMonthSaleGoal(ids);
         }).then(() => {
           this.getList();
@@ -929,7 +962,7 @@
           this.computeTotal()
         } else {
           if (row.id !== null) {
-            this.$modal.confirm('是否确认删除月销售目标填报明细序号为"' + (index + 1) + '"的数据项?').then(function () {
+            this.$modal.confirm('是否确认删除月销售/月利润目标填报明细序号为"' + (index + 1) + '"的数据项?').then(function () {
               return delMonthSaleGoalDetails(row.id);
             }).then(() => {
               this.getListDetails();
@@ -1007,29 +1040,69 @@
           h('span', '' + column.label)
         ]
       },
+      // 子表table通过判断条件加必填标志
+      addRedStarChange(h, {
+        column
+      }) {
+        if (this.isDept) {
+          return[
+            h('span', '' + column.label)
+          ]
+        } else {
+        return [
+            h('span', {
+              style: 'color: #F56C6C'
+            }, '*'),
+            h('span', '' + column.label)
+          ]
+        }
+      },
       justiceDetailsList() {
         this.text = ' ';
         let isFlag = [];
         let count = 1;
         const arr = JSON.parse(JSON.stringify(this.monthSaleGoalDetailsList))
-        for (const element of arr) {
-          const flag1 = (element.saleOrg !== null) && (element.saleZone !== null) && (element.custom !== null) && (
-            element.dept !== null) && (element.creator !== null) && (element.materialCode !== null) && (element
-            .material !== null) && (element.monthly !== null) && (element.goalValue !== 0)
-          const flag2 = (element.saleOrg !== undefined) && (element.saleZone !== undefined) && (element.custom !==
-            undefined) && (element.dept !== undefined) && (element.creator !== undefined) && (element.materialCode !==
-            undefined) && (element.material !== undefined) && (element.monthly !== undefined)
-          if (flag1 && flag2) {
-            isFlag.push(true);
-          } else {
-            this.text += '[' + count + '] ';
-            isFlag.push(false);
+        if (this.isDept) {
+          for (const element of arr) {
+            const flag1 = (element.saleOrg !== null) && (element.saleZone !== null) && (element.custom !== null) && (
+              element.dept !== null) && (element.creator !== null) && (element.oneLevelClassify !== null) && (element
+              .oneLevelClassifyCode !== null) && (element.monthly !== null) && (element.goalValue !== 0);
+            const flag2 = (element.saleOrg !== undefined) && (element.saleZone !== undefined) && (element.custom !==
+              undefined) && (element.dept !== undefined) && (element.creator !== undefined) && (element.oneLevelClassify !==
+              undefined) && (element.oneLevelClassifyCode !== undefined) && (element.monthly !== undefined);
+            if (flag1 && flag2) {
+              isFlag.push(true);
+            } else {
+              this.text += '[' + count + '] ';
+              isFlag.push(false);
+            }
+            count++;
           }
-          count++;
-        }
-        for (const flag of isFlag) {
-          if (!flag) {
-            return true;
+          for (const flag of isFlag) {
+            if (!flag) {
+              return true;
+            }
+          }
+        } else {
+          for (const element of arr) {
+            const flag1 = (element.saleOrg !== null) && (element.saleZone !== null) && (element.custom !== null) && (
+              element.dept !== null) && (element.creator !== null) && (element.materialCode !== null) && (element
+              .material !== null) && (element.monthly !== null) && (element.goalValue !== 0);
+            const flag2 = (element.saleOrg !== undefined) && (element.saleZone !== undefined) && (element.custom !==
+              undefined) && (element.dept !== undefined) && (element.creator !== undefined) && (element.materialCode !==
+              undefined) && (element.material !== undefined) && (element.monthly !== undefined);
+            if (flag1 && flag2) {
+              isFlag.push(true);
+            } else {
+              this.text += '[' + count + '] ';
+              isFlag.push(false);
+            }
+            count++;
+          }
+          for (const flag of isFlag) {
+            if (!flag) {
+              return true;
+            }
           }
         }
       },
@@ -1056,11 +1129,11 @@
       handleImport() {
         this.upload.open = true;
         if (this.open) {
-          this.upload.title = "月销售目标填报明细导入"
+          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.title = "月销售/月利润目标填报导入";
           this.upload.url = process.env.VUE_APP_BASE_API + "goal_management/monthSaleGoal/importData"
         }
       },
@@ -1196,7 +1269,7 @@
       //模板下载
       handleTemplateDownload() {
         this.download('/goal_management/monthSaleGoalDetails/importTemplate', {},
-          `月销售目标填报明细导入模板_${new Date().getTime()}.xlsx`)
+          `月销售/月利润目标填报明细导入模板_${new Date().getTime()}.xlsx`)
       },
       //导入
       handleImport(file) {
@@ -1247,7 +1320,41 @@
       },
       calculate(row) {
         row.goalValue = row.num * row.price;
-      }
+      },
+      judge() {
+        this.isDept = false;
+        if (this.$store.state.user.deptName.indexOf('湖南公司') >= 0) {
+          this.isDept = true;
+        }
+      },
+      // 树形参照
+      chooseTreeReferForMain(type, isPage, title, index) {
+        this.referCondition.type = type;
+        this.referCondition.isPage = isPage;
+        this.referCondition.title = title;
+        this.index = null;
+        this.index = index;
+        this.$refs.treeMain.init(this.referCondition);
+      },
+      selectionsToInputForMain(selection) {
+        this.classOptions = selection;
+        if (this.referCondition.title === '一级物料分类') {
+          if (this.classOptions[0].code.length > 2) {
+            return this.$message.info('请在一级分类下选择');
+          }
+          this.monthSaleGoalDetailsList[this.index].oneLevelClassifyCode = selection[0].code;
+          this.monthSaleGoalDetailsList[this.index].oneLevelClassify = selection[0].name;
+        } else if (this.referCondition.title === '二级物料分类') {
+          if (this.classOptions[0].code.lastIndexOf("-") == 3 || this.classOptions[0].code.indexOf("90") == 0) {
+            this.monthSaleGoalDetailsList[this.index].oneLevelClassifyCode = selection[0].parentCode;
+            this.monthSaleGoalDetailsList[this.index].oneLevelClassify = selection[0].parentName;
+            this.monthSaleGoalDetailsList[this.index].twoLevelClassifyCode = selection[0].code;
+            this.monthSaleGoalDetailsList[this.index].twoLevelClassify = selection[0].name;
+          } else {
+            return this.$message.info('请在二级分类下选择');
+          }
+        }
+      },
     }
   }
 

+ 59 - 1
src/views/material/classify/index.vue

@@ -89,6 +89,11 @@
                   </el-select>
                 </el-form-item>
               </el-col>
+              <el-col :span="12">
+                <el-form-item label="产品线" prop="productLine" v-if="isFlag">
+                  <treeselect v-model="ruleForm.productLine" :multiple="false" :options="productOptions" :append-to-body="true" placeholder="请选择产品线" :disabled="disable" />
+                </el-form-item>
+              </el-col>
             </el-row>
             <span class="title">辅助属性</span>
             <el-row :gutter="20">
@@ -190,7 +195,10 @@ import {
   edit,
   downLoadClassify,
 } from "@/api/classify/basic";
+import Treeselect from '@riophae/vue-treeselect';
+import '@riophae/vue-treeselect/dist/vue-treeselect.css';
 export default {
+  components: { Treeselect },
   name: "classify",
   dicts: ["material_enable", "sys_assist_condtion"],
   data() {
@@ -241,6 +249,13 @@ export default {
             trigger: "blur",
           },
         ],
+        productLine: [
+          {
+            required: true,
+            message: "请输入产品线",
+            trigger: "blur",
+          }
+        ]
       },
       checkList: [],
       disable: true,
@@ -251,7 +266,46 @@ export default {
       isAdd: true,
       defaultExpanded: [],
       // 是否过滤停用
-      refreshName: false
+      refreshName: false,
+      // 生产线字段判断标志
+      isFlag: false,
+      // selectTree: [],
+      // searchForm: {
+      //   componentsName: '', //组件名称
+      //   componentsCode: '', //组件编码
+      // },
+      productOptions: [{
+        id: 1,
+        label: "介入产品线"
+      },{
+        id: 2,
+        label: "骨科产品线"
+      },{
+        id :3,
+        label: "检验产品线"
+      },{
+        id: 4,
+        label: "综合耗材产品线",
+        children: [{
+          id: 5,
+          label: "消毒管控"
+        },{
+          id: 6,
+          label: "血统"
+        },{
+          id: 7,
+          label: "麻醉"
+        },{
+          id: 8,
+          label: "护理"
+        },{
+          id: 9,
+          label: "外科"
+        }]
+      },{
+        id: 10,
+        label: "设备产线"
+      }],
     };
   },
   watch: {
@@ -284,6 +338,10 @@ export default {
         let { code, data } = res;
         if (code === 200) {
           console.log("data", data);
+          this.isFlag = false;
+          if (data.twoClass != null && data.threeClass == null) {
+            this.isFlag = true;
+          }
           this.ruleForm = data;
           this.ruleForm.isInventory = data.isInventory === "0" ? true : false;
           this.ruleForm.isProductBatch =

+ 14 - 9
src/views/purchase/PurchaseDemandList/reserved.vue

@@ -56,19 +56,23 @@
         <el-table-column show-overflow-tooltip prop="createTime" label="创建时间" width="200"></el-table-column>
       </el-table>
       <el-table style="margin-top: 50px" :data="showHistoryItems" height="300px">
-        <el-table-column show-overflow-tooltip prop="materialCode" label="物料编码" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="materialName" label="物料名称" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="unitName" label="单位名称" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="operateType" label="操作类型" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="operateBill" label="操作单据" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="operateBillcode" label="操作单据编码" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="operateBillitem" label="操作明细行" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="allotQty" label="操作数量" width="150">
+        <el-table-column prop="materialCode" label="物料编码" width="150"></el-table-column>
+        <el-table-column show-overflow-tooltip prop="materialName" label="物料名称" width="200"></el-table-column>
+        <el-table-column prop="unitName" label="单位" width="100"></el-table-column>
+        <el-table-column prop="productBatchNum" label="批号" width="100"></el-table-column>
+        <el-table-column label="操作单据" align="center" prop="operateBill"  width="100">
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.ow_operatetype" :value="scope.row.operateBill"/>
+          </template>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip prop="operateBillcode" label="操作单据编码" width="200"></el-table-column>
+        <el-table-column prop="operateBillitem" label="操作明细行号" width="150"></el-table-column>
+        <el-table-column prop="allotQty" label="操作数量" width="150">
           <template slot-scope="scope">
             {{scope.row.allotQty > 0 ? "+" + scope.row.allotQty : scope.row.allotQty}}
           </template>
         </el-table-column>
-        <el-table-column show-overflow-tooltip prop="createTime" label="操作时间" width="200"></el-table-column>
+        <el-table-column prop="createTime" label="操作时间" width="200"></el-table-column>
       </el-table>
     </el-dialog>
   </div>
@@ -78,6 +82,7 @@
 import {getDetailBySource} from '@/api/purchase/ownership.js'
 
 export default {
+  dicts: ['ow_operatetype'],
   props: {
     isVisible: {
       type: Boolean,

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

@@ -56,6 +56,7 @@
     >
       <el-table-column label="序号" type="index" width="50" align="center" fixed/>
       <el-table-column show-overflow-tooltip width="200" label="来源单据" align="center" prop="source" />
+      <el-table-column show-overflow-tooltip width="150" label="集采编号" align="center" prop="puCode" />
       <el-table-column show-overflow-tooltip width="200" label="客户" align="center" prop="customerName" />
       <el-table-column show-overflow-tooltip width="150" label="物料编码" align="center" prop="materialCode" />
       <el-table-column show-overflow-tooltip width="300" label="物料" align="center" prop="materialName" />
@@ -105,6 +106,7 @@
       >
         <el-descriptions :column="1">
           <el-descriptions-item label="单据来源">{{form.source}}</el-descriptions-item>
+          <el-descriptions-item label="集采编号">{{form.puCode}}</el-descriptions-item>
           <el-descriptions-item label="创建时间">{{form.createTime}}</el-descriptions-item>
           <el-descriptions-item label="客户">{{form.customerName}}</el-descriptions-item>
           <el-descriptions-item label="物料编码">{{form.materialCode}}</el-descriptions-item>

+ 39 - 24
src/views/purchase/ownershipClose/index.vue

@@ -28,18 +28,18 @@
       </el-row>
     </el-form>
     <div style="float:right">
-        <el-button type="primary" size="mini" @click="btnAdd">新增</el-button>
-      </div>
+      <el-button type="primary" size="mini" @click="btnAdd">新增</el-button>
+    </div>
     <el-table
       size="mini"
       v-loading="loading"
       :data="list"
       height="500px"
     >
-      <el-table-column show-overflow-tooltip width="200" label="序号" align="center" prop="id" />
-      <el-table-column show-overflow-tooltip width="200" label="一级分类名称" align="center" prop="oneClassName" />
-      <el-table-column show-overflow-tooltip width="200" label="一级分类编码" align="center" prop="oneClassCode" />
-      <el-table-column show-overflow-tooltip width="200" label="释放天数" align="center" prop="day" />
+      <el-table-column show-overflow-tooltip min-width="200" label="序号" align="center" prop="id" />
+      <el-table-column show-overflow-tooltip min-width="200" label="一级分类名称" align="center" prop="oneClassName" />
+      <el-table-column show-overflow-tooltip min-width="200" label="一级分类编码" align="center" prop="oneClassCode" />
+      <el-table-column show-overflow-tooltip min-width="200" label="释放天数" align="center" prop="day" />
       <el-table-column
         width="250"
         label="操作"
@@ -77,8 +77,9 @@
         ref="form"
         :model="form"
         label-width="80px"
+        :rules="formRules"
       >
-        <el-form-item label="一级分类">
+        <el-form-item label="一级分类" prop="oneClass">
           <el-select
           size="mini"
           v-model="form.oneClass"
@@ -94,9 +95,9 @@
           ></el-option>
         </el-select>
         </el-form-item>
-        <el-form-item label="天数">
+        <el-form-item label="天数" prop="day">
           <el-col :span="8">
-            <el-input type="number" oninput="value=value.replace(/[^0-9.]/g,'')" v-model="form.day"></el-input>
+            <el-input type="number" oninput="value=value.replace(/[^0-9.]/g,'')" v-only-number="{max:99999,min:0,precision:0}" v-model="form.day"></el-input>
           </el-col>
         </el-form-item>
       </el-form>
@@ -147,6 +148,15 @@ export default {
       },
       //一级分类列表
       oneClass:[],
+      //校验规则
+      formRules:{
+        oneClass: [
+          { required: true, message: "一级分类不能为空", trigger: "blur" },
+        ],
+        day: [
+          { required: true, message: "天数不能为空", trigger: "blur" },
+        ],
+      },
     };
   },
   async created() {
@@ -207,21 +217,26 @@ export default {
     },
     /** 提交表单 */
     submitForm() {
-      if(this.form.id){
-        update(this.form).then(response => {
-          this.$modal.msgSuccess("修改成功");
-          this.open = false;
-          this.form = {};
-          this.getList();
-        });
-      }else{
-        insert(this.form).then(response => {
-          this.$modal.msgSuccess("新增成功");
-          this.open = false;
-          this.form = {};
-          this.getList();
-        });
-      }
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if(this.form.id){
+            update(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.form = {};
+              this.getList();
+            });
+          }else{
+            insert(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.form = {};
+              this.getList();
+            });
+          }
+        }
+      });
+      
     },
     btnAdd(){
       this.open = true;

+ 41 - 24
src/views/purchase/ownershipCp/index.vue

@@ -30,12 +30,12 @@
       :data="list"
       height="500px"
     >
-      <el-table-column show-overflow-tooltip width="200" label="序号" align="center" prop="id" />
-      <el-table-column show-overflow-tooltip width="200" label="编码" align="center" prop="code" />
-      <el-table-column show-overflow-tooltip width="200" label="物料" align="center" prop="materialName" />
-      <el-table-column show-overflow-tooltip width="200" label="物料编码" align="center" prop="materialCode" />
-      <el-table-column show-overflow-tooltip width="200" label="客户" align="center" prop="customerName" />
-      <el-table-column show-overflow-tooltip width="200" label="客户编码" align="center" prop="customerCode" />
+      <el-table-column show-overflow-tooltip min-width="200" label="序号" align="center" prop="id" />
+      <el-table-column show-overflow-tooltip min-width="200" label="编码" align="center" prop="code" />
+      <el-table-column show-overflow-tooltip min-width="200" label="物料" align="center" prop="materialName" />
+      <el-table-column show-overflow-tooltip min-width="200" label="物料编码" align="center" prop="materialCode" />
+      <el-table-column show-overflow-tooltip min-width="200" label="客户" align="center" prop="customerName" />
+      <el-table-column show-overflow-tooltip min-width="200" label="客户编码" align="center" prop="customerCode" />
       <el-table-column
         width="250"
         label="操作"
@@ -73,13 +73,14 @@
         ref="form"
         :model="form"
         label-width="80px"
+        :rules="formRules"
       >
-        <el-form-item label="编码">
+        <el-form-item label="编码" prop="code">
           <el-col :span="8">
             <el-input v-model="form.code"></el-input>
           </el-col>
         </el-form-item>
-        <el-form-item label="物料">
+        <el-form-item label="物料" prop="materialName">
           <DrPopoverSelectV2
             size="mini"
             v-model="form.materialName"
@@ -93,7 +94,7 @@
           >
           </DrPopoverSelectV2>
         </el-form-item>
-        <el-form-item label="客户">
+        <el-form-item label="客户" prop="customerName">
           <DrPopoverSelectV2
             size="mini"
             v-model="form.customerName"
@@ -157,6 +158,18 @@ export default {
       // 表单参数
       form: {
       },
+      //校验规则
+      formRules:{
+        code: [
+          { required: true, message: "编码不能为空", trigger: "blur" },
+        ],
+        materialName: [
+          { required: true, message: "物料不能为空", trigger: "blur" },
+        ],
+        customerName: [
+          { required: true, message: "客户不能为空", trigger: "blur" },
+        ],
+      },
     };
   },
   async created() {
@@ -206,21 +219,25 @@ export default {
     },
     /** 提交表单 */
     submitForm() {
-      if(this.form.id){
-        update(this.form).then(response => {
-          this.$modal.msgSuccess("修改成功");
-          this.open = false;
-          this.form = {};
-          this.getList();
-        });
-      }else{
-        insert(this.form).then(response => {
-          this.$modal.msgSuccess("新增成功");
-          this.open = false;
-          this.form = {};
-          this.getList();
-        });
-      }
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if(this.form.id){
+            update(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.form = {};
+              this.getList();
+            });
+          }else{
+            insert(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.form = {};
+              this.getList();
+            });
+          }
+        }
+      });
     },
     btnAdd(){
       this.open = true;

+ 36 - 22
src/views/purchase/ownershipLot/index.vue

@@ -27,11 +27,11 @@
       :data="list"
       height="500px"
     >
-      <el-table-column show-overflow-tooltip width="200" label="序号" align="center" prop="id" />
-      <el-table-column show-overflow-tooltip width="200" label="物料" align="center" prop="materialName" />
-      <el-table-column show-overflow-tooltip width="200" label="物料编码" align="center" prop="materialCode" />
-      <el-table-column show-overflow-tooltip width="200" label="客户" align="center" prop="customerName" />
-      <el-table-column show-overflow-tooltip width="200" label="客户编码" align="center" prop="customerCode" />
+      <el-table-column show-overflow-tooltip min-width="200" label="序号" align="center" prop="id" />
+      <el-table-column show-overflow-tooltip min-width="200" label="物料" align="center" prop="materialName" />
+      <el-table-column show-overflow-tooltip min-width="200" label="物料编码" align="center" prop="materialCode" />
+      <el-table-column show-overflow-tooltip min-width="200" label="客户" align="center" prop="customerName" />
+      <el-table-column show-overflow-tooltip min-width="200" label="客户编码" align="center" prop="customerCode" />
       <el-table-column
         width="250"
         label="操作"
@@ -69,8 +69,9 @@
         ref="form"
         :model="form"
         label-width="80px"
+        :rules="formRules"
       >
-        <el-form-item label="物料">
+        <el-form-item label="物料" prop="materialName">
           <DrPopoverSelectV2
             size="mini"
             v-model="form.materialName"
@@ -84,7 +85,7 @@
           >
           </DrPopoverSelectV2>
         </el-form-item>
-        <el-form-item label="客户">
+        <el-form-item label="客户" prop="customerName">
           <DrPopoverSelectV2
             size="mini"
             v-model="form.customerName"
@@ -148,6 +149,15 @@ export default {
       // 表单参数
       form: {
       },
+      //校验规则
+      formRules:{
+        materialName: [
+          { required: true, message: "物料不能为空", trigger: "blur" },
+        ],
+        customerName: [
+          { required: true, message: "客户不能为空", trigger: "blur" },
+        ],
+      },
     };
   },
   async created() {
@@ -197,21 +207,25 @@ export default {
     },
     /** 提交表单 */
     submitForm() {
-      if(this.form.id){
-        update(this.form).then(response => {
-          this.$modal.msgSuccess("修改成功");
-          this.open = false;
-          this.form = {};
-          this.getList();
-        });
-      }else{
-        insert(this.form).then(response => {
-          this.$modal.msgSuccess("新增成功");
-          this.open = false;
-          this.form = {};
-          this.getList();
-        });
-      }
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if(this.form.id){
+            update(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.form = {};
+              this.getList();
+            });
+          }else{
+            insert(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.form = {};
+              this.getList();
+            });
+          }
+        }
+      });
     },
     btnAdd(){
       this.open = true;

+ 14 - 9
src/views/purchase/transferOrder/reserved.vue

@@ -56,19 +56,23 @@
         <el-table-column show-overflow-tooltip prop="createTime" label="创建时间" width="200"></el-table-column>
       </el-table>
       <el-table style="margin-top: 50px" :data="showHistoryItems" height="300px">
-        <el-table-column show-overflow-tooltip prop="materialCode" label="物料编码" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="materialName" label="物料名称" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="unitName" label="单位名称" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="operateType" label="操作类型" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="operateBill" label="操作单据" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="operateBillcode" label="操作单据编码" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="operateBillitem" label="操作明细行" width="150"></el-table-column>
-        <el-table-column show-overflow-tooltip prop="allotQty" label="操作数量" width="150">
+        <el-table-column prop="materialCode" label="物料编码" width="150"></el-table-column>
+        <el-table-column show-overflow-tooltip prop="materialName" label="物料名称" width="200"></el-table-column>
+        <el-table-column prop="unitName" label="单位" width="100"></el-table-column>
+        <el-table-column prop="productBatchNum" label="批号" width="100"></el-table-column>
+        <el-table-column label="操作单据" align="center" prop="operateBill"  width="100">
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.ow_operatetype" :value="scope.row.operateBill"/>
+          </template>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip prop="operateBillcode" label="操作单据编码" width="200"></el-table-column>
+        <el-table-column prop="operateBillitem" label="操作明细行号" width="150"></el-table-column>
+        <el-table-column prop="allotQty" label="操作数量" width="150">
           <template slot-scope="scope">
             {{scope.row.allotQty > 0 ? "+" + scope.row.allotQty : scope.row.allotQty}}
           </template>
         </el-table-column>
-        <el-table-column show-overflow-tooltip prop="createTime" label="操作时间" width="200"></el-table-column>
+        <el-table-column prop="createTime" label="操作时间" width="200"></el-table-column>
       </el-table>
     </el-dialog>
   </div>
@@ -78,6 +82,7 @@
 import {getDetailBySource} from '@/api/purchase/ownership.js'
 
 export default {
+  dicts: ['ow_operatetype'],
   props: {
     isVisible: {
       type: Boolean,