Преглед на файлове

Merge branch 'purchaseDev' of http://172.16.100.139/new-business/drp-web into purchaseDev

002390 преди 1 година
родител
ревизия
2631ab949d

+ 7 - 0
src/api/purchase/DemandSummary.js

@@ -23,6 +23,13 @@ export function auditSummary(id) {
     method: 'get',
   })
 }
+// 采购需求汇总审核
+export function cancelAudits(id) {
+  return request({
+    url: `/pu/demand/item/summary/cancel/audit/${id}`,
+    method: 'get',
+  })
+}
 // 采购需求汇总确认
 export function confirmSummary(data) {
   return request({

+ 1 - 0
src/views/business/spd/bo/basic/index.vue

@@ -382,6 +382,7 @@
                 rows="2"
                 autosize
                 v-model="form.boContent"
+                placeholder="客户存在什么需求,需求(如客户希望我司提供耗材/设备/SPD/打包耗材/工程商机服务,最好填写客户需要的的物料名称和物料品牌,大概需要多少数量,客户预计什么是时候要)"
               >
               </el-input>
             </el-form-item>

+ 59 - 78
src/views/business/spd/bo/behavior/behaviorList.vue

@@ -34,8 +34,8 @@
           <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.assist"/>
         </template>
       </el-table-column>
-      <el-table-column label="协助内容" align="center" prop="assistContent" />
-      <el-table-column label="洽谈内容" align="center" prop="content" />
+      <el-table-column show-overflow-tooltip label="协助内容" align="center" prop="assistContent" />
+      <el-table-column show-overflow-tooltip label="洽谈内容" align="center" prop="content" />
       <el-table-column label="行动类型" align="center" prop="type">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.mk_bo_behavior_type" :value="scope.row.type"/>
@@ -46,8 +46,8 @@
             <dict-tag :options="dict.type.mk_bo_behavior_goal" :value="scope.row.purpose"/>
         </template>
       </el-table-column>
-      <el-table-column label="销售组织" align="center" prop="salesOrgName"/>
-      <el-table-column label="部门" align="center" prop="deptName"/>
+      <el-table-column show-overflow-tooltip label="销售组织" align="center" prop="salesOrgName"/>
+      <el-table-column show-overflow-tooltip label="部门" align="center" prop="deptName"/>
       <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -71,21 +71,22 @@
 
     <!-- 添加或修改行动对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px" :disabled="this.operatingState == 'Browse'">
+      <el-form size="mini" ref="form" :model="form" :rules="rules" label-width="80px" :disabled="this.operatingState == 'Browse'">
         <el-divider content-position="left">
           <dev style="width: 50px; height: 40px; font-size: 18px">基本信息</dev>
         </el-divider>
         <el-row>
           <el-col :span="8">
             <el-form-item label="行动类型" prop="type">
-              <el-select v-model="form.type" placeholder="请输入行动类型">
+              <el-input :value="dict.label" v-for="dict in dict.type.mk_bo_behavior_type" v-if="dict.value == form.type" readonly/>
+              <!-- <el-select v-model="form.type" placeholder="请输入行动类型">
                 <el-option
                   v-for="dict in dict.type.mk_bo_behavior_type"
                   :key="dict.value"
                   :label="dict.label"
                   :value="dict.value"
                 ></el-option>
-              </el-select>
+              </el-select> -->
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -102,19 +103,23 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="客户" prop="customerName">
-              <el-input v-model="form.customerName" placeholder="请输入客户" disabled/>
+              <el-input v-model="form.customerName" readonly/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="联系人" prop="linkmanName">
-              <el-input v-model="form.linkmanName" placeholder="请输入联系人" >
-                <el-button slot="append" icon="el-icon-more" @click="refereContact"></el-button>
-              </el-input>
+              <dr-popover-select v-model="form.linkmanName" title="联系人" type="LINKMAN_PARAM" :dataMapping="{
+                  linkman: 'id',
+                  linkmanName: 'name',
+                }" :source.sync="form"
+                :queryParams="additionalCondition"
+              >
+              </dr-popover-select>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="拜访目的" prop="purpose">
-              <el-select v-model="form.purpose" placeholder="请输入拜访目的">
+              <el-select v-model="form.purpose" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_behavior_goal"
                   :key="dict.value"
@@ -128,7 +133,7 @@
         <el-row>
           <el-col  :span="8">
             <el-form-item label="拜访效果" prop="result">
-              <el-select v-model="form.result" placeholder="请输入拜访效果">
+              <el-select v-model="form.result" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_behavior_res"
                   :key="dict.value"
@@ -140,7 +145,7 @@
           </el-col>
           <el-col  :span="8">
             <el-form-item label="是否上级协助" prop="assist">
-              <el-select v-model="form.assist" placeholder="请输入是否上级协助">
+              <el-select v-model="form.assist" placeholder="">
                 <el-option
                   v-for="dict in dict.type.sys_yes_no"
                   :key="dict.value"
@@ -152,33 +157,36 @@
           </el-col>
           <el-col  :span="8">
             <el-form-item label="协助内容" prop="assistContent" v-show="form.assist == 'Y'" :rules="form.assist == 'Y' ? rules.assistContent : [{require: false}]">
-              <el-input v-model="form.assistContent" placeholder="请输入协助内容" />
+              <el-input v-model="form.assistContent" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="6">
             <el-form-item label="销售区域" prop="marketingAreaName">
-              <el-input v-model="form.marketingAreaName" placeholder="请输入销售区域">
-                <el-button slot="append" icon="el-icon-more" @click="refereSaleaea"></el-button>
-              </el-input>
+              <dr-popover-select v-model="form.marketingAreaName" title="销售区域" type="MK_SALESAREA_PARAM" :dataMapping="{
+                  marketingArea: 'id',
+                  marketingAreaName: 'name',
+                }" :source.sync="form"
+              >
+              </dr-popover-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col  :span="8">
             <el-form-item label="销售组织" prop="salesOrgName">
-              <el-input v-model="form.salesOrgName" placeholder="请输入销售组织" :disabled="true"/>
+              <el-input v-model="form.salesOrgName" readonly/>
             </el-form-item>
           </el-col>
           <el-col  :span="8">
              <el-form-item label="部门" prop="deptName">
-              <el-input v-model="form.deptName" placeholder="请输入部门" :disabled="true"/>
+              <el-input v-model="form.deptName" readonly/>
             </el-form-item>
           </el-col>
           <el-col  :span="8">
             <el-form-item label="负责人" prop="staffName">
-              <el-input v-model="form.staffName" placeholder="请输入负责人" :disabled="true"/>
+              <el-input v-model="form.staffName" readonly/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -218,50 +226,35 @@
           <el-divider content-position="left">
             <dev style="width: 50px; height: 40px; font-size: 18px">其它信息</dev>
           </el-divider>
-          <el-form :inline="true" label-position="right" :model="form">
-            <el-row>
-              <el-col :span="6">
-                <el-form-item label="创建人">
-                  <el-input v-model="form.createByName" size="small" readonly></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="6">
-                <el-form-item label="创建时间">
-                  <el-input v-model="form.createTime" size="small" readonly></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="6">
-                <el-form-item label="修改人">
-                  <el-input v-model="form.updateByName" size="small" readonly></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="6">
-                <el-form-item label="修改时间">
-                  <el-input v-model="form.updateTime" size="small" readonly></el-input>
-                </el-form-item>
-              </el-col>
-            </el-row>
-          </el-form>
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="创建人">
+                <el-input v-model="form.createByName" size="small" readonly></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="创建时间">
+                <el-input v-model="form.createTime" size="small" readonly></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="修改人">
+                <el-input v-model="form.updateByName" size="small" readonly></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="修改时间">
+                <el-input v-model="form.updateTime" size="small" readonly></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
         </div>
       </el-form>
       <div slot="footer">
-        <el-button type="primary" @click="submitForm" v-if="this.operatingState != 'Browse'" :disabled="submitButtonEditStatus">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
+        <el-button size="mini" type="primary" @click="submitForm" v-if="this.operatingState != 'Browse'" :disabled="submitButtonEditStatus">确 定</el-button>
+        <el-button size="mini" @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-    <!-- 联系人参照 -->
-    <ContactRef
-      ref="contactSelect"
-      @doSubmit="contactSelectionsToInput"
-      :single="true"
-      :outerQueryParams="this.bo"
-    />
-    <!-- 销售区域参照 -->
-    <SaleaeaRef
-      ref="saleaeaSelect"
-      @doSubmit="saleaeaSelectionsToInput"
-      :single="true"
-    />
   </div>
 </template>
 
@@ -514,24 +507,12 @@ export default {
         }
       });
     },
-    // 触发联系人参照列表
-    refereContact() {
-      this.$refs.contactSelect.init()
-    },
-    //联系人参照列表选择后
-    contactSelectionsToInput (selections) {
-      console.log('selections',selections);
-      this.form.linkman = selections[0].id;
-      this.form.linkmanName = selections[0].name;
-    },
-    // 触发销售区域参照列表
-    refereSaleaea() {
-      this.$refs.saleaeaSelect.init()
-    },
-    //销售区域参照列表选择后
-    saleaeaSelectionsToInput (selections) {
-      this.form.marketingArea = selections[0].id;
-      this.form.marketingAreaName = selections[0].name;
+    additionalCondition(){
+      return {
+        parame:{
+          customer: this.form.customer ? this.form.customer : 'xxx'
+        }
+      }
     },
   }
 };

+ 46 - 3
src/views/business/spd/bo/behavior/index.vue

@@ -1,14 +1,54 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="任务" prop="taskCode">
+      <el-form-item label="任务编码" prop="taskCode">
         <el-input
           v-model="queryParams.taskCode"
-          placeholder="请输入任务编码"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="客户名称" prop="customerName">
+        <el-input
+          v-model="queryParams.customerName"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门" prop="deptName">
+        <el-input
+          v-model="queryParams.deptName"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="执行人" prop="staffName">
+        <el-input
+          v-model="queryParams.staffName"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="执行时间">
+        <el-date-picker
+          size="mini"
+          v-model="dateRange"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item size="mini" label="拜访目的" prop="purpose">
+        <el-select v-model="queryParams.purpose" placeholder="" clearable>
+          <el-option
+            v-for="dict in dict.type.mk_bo_behavior_goal"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -306,6 +346,8 @@ export default {
         tenantId: null,
         revision: null,
       },
+      // 查询日期范围
+      dateRange: [],
       // 表单参数
       form: {},
     };
@@ -317,7 +359,7 @@ export default {
     /** 查询行动列表 */
     getList() {
       this.loading = true;
-      listBehavior(this.queryParams).then(response => {
+      listBehavior(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
         this.behaviorList = response.rows;
         this.total = response.total;
         this.loading = false;
@@ -380,6 +422,7 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.dateRange = [];
       this.handleQuery();
     },
   }

+ 23 - 30
src/views/business/spd/bo/contact/contactList.vue

@@ -85,23 +85,18 @@
         </el-divider>
         <el-row>
           <el-col :span="8">
-            <el-form-item label="商机id" prop="boId" v-if="source == 'Contact'">
-              <el-input v-model="form.boId" placeholder="请输入商机id" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
             <el-form-item label="编码" prop="code">
-              <el-input v-model="form.code" placeholder="系统自动生成编码" :disabled = "true"/>
+              <el-input v-model="form.code" placeholder="系统自动生成编码" readonly/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="姓名" prop="name">
-              <el-input v-model="form.name" placeholder="请输入姓名" />
+              <el-input v-model="form.name" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="性别" prop="gander">
-              <el-select v-model="form.gander" placeholder="请输入性别">
+              <el-select v-model="form.gander" placeholder="">
                 <el-option
                   v-for="dict in dict.type.sys_user_sex"
                   :key="dict.value"
@@ -115,14 +110,12 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="所属客户" prop="customerName">
-              <el-input v-model="form.customerName" placeholder="请输入所属客户" disabled>
-                <el-button slot="append" icon="el-icon-more" @click="refereCustomer" disabled></el-button>
-              </el-input>
+              <el-input v-model="form.customerName" readonly/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="联系人分类" prop="contactClassification">
-              <el-select v-model="form.contactClassification" placeholder="请输入联系人分类">
+              <el-select v-model="form.contactClassification" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_contact_type"
                   :key="dict.value"
@@ -138,7 +131,7 @@
                 v-model="form.birthday"
                 type="date"
                 value-format="yyyy-MM-dd"
-                placeholder="请选择生日">
+              >
               </el-date-picker>
             </el-form-item>
           </el-col>
@@ -146,17 +139,17 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="籍贯" prop="birthplace">
-              <el-input v-model="form.birthplace" placeholder="请输入籍贯" />
+              <el-input v-model="form.birthplace" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="兴趣爱好" prop="hobby">
-              <el-input v-model="form.hobby" placeholder="请输入业务爱好" />
+              <el-input v-model="form.hobby" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="状态" prop="state">
-              <el-select v-model="form.state" placeholder="请输入状态">
+              <el-select v-model="form.state" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_contact_state"
                   :key="dict.value"
@@ -184,7 +177,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="任职科室" prop="section">
-              <el-select v-model="form.section" placeholder="请输入任职科室">
+              <el-select v-model="form.section" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_section"
                   :key="dict.value"
@@ -196,7 +189,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="职务" prop="position">
-              <el-select v-model="form.position" placeholder="请输入职务">
+              <el-select v-model="form.position" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_position"
                   :key="dict.value"
@@ -210,7 +203,7 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="职称" prop="jobTitle">
-              <el-select v-model="form.jobTitle" placeholder="请输入职称">
+              <el-select v-model="form.jobTitle" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_job_title"
                   :key="dict.value"
@@ -222,7 +215,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="决策力" prop="power">
-              <el-select v-model="form.power" placeholder="请输入决策力">
+              <el-select v-model="form.power" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_power"
                   :key="dict.value"
@@ -234,7 +227,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="支持度" prop="support">
-              <el-select v-model="form.support" placeholder="请输入支持度">
+              <el-select v-model="form.support" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_support"
                   :key="dict.value"
@@ -248,7 +241,7 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="擅长领域" prop="fieldExpertise">
-              <el-select v-model="form.fieldExpertise" placeholder="请输入擅长领域">
+              <el-select v-model="form.fieldExpertise" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_field_expertise"
                   :key="dict.value"
@@ -260,7 +253,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="关键决策人" prop="decisionMaker">
-              <el-select v-model="form.decisionMaker" placeholder="请输入关键决策人">
+              <el-select v-model="form.decisionMaker" placeholder="">
                 <el-option
                   v-for="dict in dict.type.sys_yes_no"
                   :key="dict.value"
@@ -279,29 +272,29 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="联系电话" prop="telephone">
-              <el-input v-model="form.telephone" placeholder="请输入联系电话" />
+              <el-input v-model="form.telephone" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="微信" prop="mail">
-              <el-input v-model="form.mail" placeholder="请输入微信" />
+              <el-input v-model="form.mail" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="家庭地址" prop="address">
-              <el-input v-model="form.address" placeholder="请输入家庭地址" />
+              <el-input v-model="form.address" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="8">
             <el-form-item label="最佳拜访时间" prop="visitTime">
-              <el-input v-model="form.visitTime" placeholder="请选择最佳拜访时间" />
+              <el-input v-model="form.visitTime" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="最佳拜访地点" prop="visitPlace">
-              <el-input v-model="form.visitPlace" placeholder="请输入最佳拜访地点" />
+              <el-input v-model="form.visitPlace" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -309,10 +302,10 @@
         </el-row>
         <el-tabs v-model="activeName" @tab-click="handleClick" v-if="this.operatingState != 'Insert'">
           <el-tab-pane label="学历信息" name="first">
-            <EducationList  :key="timer" :source="'ContactList'" :supForm="this.form" />
+            <EducationList  :key="timer" :supForm="this.form" />
           </el-tab-pane>
           <el-tab-pane label="社会关系" name="second">
-            <RelationshipList :key="timer" :source="'ContactList'" :supForm="this.form" />
+            <RelationshipList :key="timer" :supForm="this.form" />
           </el-tab-pane>
         </el-tabs>
         <div class="md-auditInfo">

+ 48 - 49
src/views/business/spd/bo/contact/index.vue

@@ -108,17 +108,17 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="编码" prop="code">
-              <el-input v-model="form.code" placeholder="系统自动生成编码" :disabled = "true"/>
+              <el-input v-model="form.code" placeholder="系统自动生成编码" readonly/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="姓名" prop="name">
-              <el-input v-model="form.name" placeholder="请输入姓名" />
+              <el-input v-model="form.name" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="性别" prop="gander">
-              <el-select v-model="form.gander" placeholder="请输入性别">
+              <el-select v-model="form.gander" placeholder="">
                 <el-option
                   v-for="dict in dict.type.sys_user_sex"
                   :key="dict.value"
@@ -141,7 +141,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="联系人分类" prop="contactClassification">
-              <el-select v-model="form.contactClassification" placeholder="请输入联系人分类">
+              <el-select v-model="form.contactClassification" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_contact_type"
                   :key="dict.value"
@@ -156,8 +156,7 @@
               <el-date-picker clearable
                 v-model="form.birthday"
                 type="date"
-                value-format="yyyy-MM-dd"
-                placeholder="请选择生日">
+                value-format="yyyy-MM-dd">
               </el-date-picker>
             </el-form-item>
           </el-col>
@@ -165,17 +164,17 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="籍贯" prop="birthplace">
-              <el-input v-model="form.birthplace" placeholder="请输入籍贯" />
+              <el-input v-model="form.birthplace" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="兴趣爱好" prop="hobby">
-              <el-input v-model="form.hobby" placeholder="请输入业务爱好" />
+              <el-input v-model="form.hobby" placeholder="" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="状态" prop="state">
-              <el-select v-model="form.state" placeholder="请输入状态">
+              <el-select v-model="form.state" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_contact_state"
                   :key="dict.value"
@@ -203,7 +202,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="任职科室" prop="section">
-              <el-select v-model="form.section" placeholder="请输入任职科室">
+              <el-select v-model="form.section" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_section"
                   :key="dict.value"
@@ -215,7 +214,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="职务" prop="position">
-              <el-select v-model="form.position" placeholder="请输入职务">
+              <el-select v-model="form.position" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_position"
                   :key="dict.value"
@@ -229,7 +228,7 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="职称" prop="jobTitle">
-              <el-select v-model="form.jobTitle" placeholder="请输入职称">
+              <el-select v-model="form.jobTitle" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_job_title"
                   :key="dict.value"
@@ -241,7 +240,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="决策力" prop="power">
-              <el-select v-model="form.power" placeholder="请输入决策力">
+              <el-select v-model="form.power" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_power"
                   :key="dict.value"
@@ -253,7 +252,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="支持度" prop="support">
-              <el-select v-model="form.support" placeholder="请输入支持度">
+              <el-select v-model="form.support" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_support"
                   :key="dict.value"
@@ -267,7 +266,7 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="擅长领域" prop="fieldExpertise">
-              <el-select v-model="form.fieldExpertise" placeholder="请输入擅长领域">
+              <el-select v-model="form.fieldExpertise" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_field_expertise"
                   :key="dict.value"
@@ -279,7 +278,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="关键决策人" prop="decisionMaker">
-              <el-select v-model="form.decisionMaker" placeholder="请输入关键决策人">
+              <el-select v-model="form.decisionMaker" placeholder="">
                 <el-option
                   v-for="dict in dict.type.sys_yes_no"
                   :key="dict.value"
@@ -298,29 +297,29 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="联系电话" prop="telephone">
-              <el-input v-model="form.telephone" placeholder="请输入联系电话" />
+              <el-input v-model="form.telephone" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="微信" prop="mail">
-              <el-input v-model="form.mail" placeholder="请输入微信" />
+              <el-input v-model="form.mail" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="家庭地址" prop="address">
-              <el-input v-model="form.address" placeholder="请输入家庭地址" />
+              <el-input v-model="form.address" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="8">
             <el-form-item label="最佳拜访时间" prop="visitTime">
-              <el-input v-model="form.visitTime" placeholder="请选择最佳拜访时间" />
+              <el-input v-model="form.visitTime" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="最佳拜访地点" prop="visitPlace">
-              <el-input v-model="form.visitPlace" placeholder="请输入最佳拜访地点" />
+              <el-input v-model="form.visitPlace" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -411,44 +410,45 @@ export default {
       form: {},
       // 表单校验
       rules: {
-        area: [
-          { required: true, message: "销售区域不能为空", trigger: "blur" }
-        ],
-        organization: [
-          { required: true, message: "销售组织不能为空", trigger: "blur" }
-        ],
-        address: [
-          { required: true, message: "家庭地址不能为空", trigger: "blur" }
+        name: [
+          { required: true, message: "姓名不能为空", trigger: "blur" }
         ],
-        telephone: [
-          { required: true, message: "联系电话不能为空", trigger: "blur" }
+        gander: [
+          { required: true, message: "性别不能为空", trigger: "blur" }
         ],
-        decisionMaker: [
-          { required: true, message: "关键决策人不能为空", trigger: "blur" }
+        customerName: [
+          { required: true, message: "所属客户名称不能为空", trigger: "blur" }
         ],
-        power: [
-          { required: true, message: "决策力不能为空", trigger: "blur" }
+        state: [
+          { required: true, message: "状态不能为空", trigger: "blur" }
         ],
-        jobTitle: [
-          { required: true, message: "职称不能为空", trigger: "blur" }
+        section: [
+          { required: true, message: "任职科室不能为空", trigger: "blur" }
         ],
         position: [
           { required: true, message: "职务不能为空", trigger: "blur" }
         ],
-        section: [
-          { required: true, message: "任职科室不能为空", trigger: "blur" }
-        ],
-        customerName: [
-          { required: true, message: "所属客户名称不能为空", trigger: "blur" }
+        jobTitle: [
+          { required: true, message: "职称不能为空", trigger: "blur" }
         ],
-        gander: [
-          { required: true, message: "性别不能为空", trigger: "blur" }
+        power: [
+          { required: true, message: "决策力不能为空", trigger: "blur" }
         ],
-        name: [
-          { required: true, message: "姓名不能为空", trigger: "blur" }
+        decisionMaker: [
+          { required: true, message: "关键决策人不能为空", trigger: "blur" }
         ],
-        code: [
-          { required: true, message: "编号不能为空", trigger: "blur" }
+        telephone: [
+          { required: true, message: "联系电话不能为空", trigger: "blur" },
+          {
+            validator: function(rule, value, callback) {
+              if (/^1[34578]\d{9}$/.test(value) == false) {
+                callback(new Error("手机号格式错误"));
+              } else {
+                callback();
+              }
+            },
+            trigger: "blur"
+          }
         ],
       },
       //重新加载子组件参数
@@ -521,7 +521,6 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
-      this.timer = new Date().getTime();
       this.getList();
     },
     /** 重置按钮操作 */

+ 3 - 7
src/views/business/spd/bo/education/educationList.vue

@@ -134,7 +134,7 @@ import { listEducation, getEducation, delEducation, addEducation, updateEducatio
 
 export default {
   name: "EducationList",
-  props:["source","supForm"],
+  props:["supForm"],
   dicts: ['mk_bo_education'],
   data() {
     return {
@@ -208,9 +208,7 @@ export default {
     };
   },
   created() {
-    if(this.source == 'ContactList'){
-      this.queryParams.contactId = this.supForm.id;
-    }
+    this.queryParams.contactId = this.supForm.id;
     this.getList();
   },
   methods: {
@@ -267,9 +265,7 @@ export default {
     handleAdd() {
       this.operatingState = "Insert";
       this.reset();
-      if(this.source == 'ContactList'){
-        this.form.contactId = this.supForm.id;
-      }
+      this.form.contactId = this.supForm.id;
       this.open = true;
       this.title = "添加联系人学历信息";
     },

+ 3 - 8
src/views/business/spd/bo/relationship/relationshipList.vue

@@ -125,7 +125,7 @@ import { listRelationship, getRelationship, delRelationship, addRelationship, up
 
 export default {
   name: "RelationshipList",
-  props:["source","supForm"],
+  props:["supForm"],
   dicts: ['mk_bo_relationship'],
   data() {
     return {
@@ -189,9 +189,7 @@ export default {
     };
   },
   created() {
-    if(this.source == 'ContactList'){
-      this.queryParams.contactId = this.supForm.id;
-    }
+    this.queryParams.contactId = this.supForm.id;
     this.getList();
   },
   methods: {
@@ -249,10 +247,7 @@ export default {
     handleAdd() {
       this.operatingState = "Insert";
       this.reset();
-      if(this.source == 'ContactList'){
-        console.log('this.form.contactId',this.form.contactId);
-        this.form.contactId = this.supForm.id;
-      }
+      this.form.contactId = this.supForm.id;
       this.open = true;
       this.title = "添加联系人社会关系";
     },

+ 29 - 1
src/views/business/spd/bo/task/index.vue

@@ -153,7 +153,7 @@
           <span>{{ parseTime(scope.row.deadlineTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="任务内容" align="center" prop="content" />
+      <el-table-column show-overflow-tooltip label="任务内容" align="center" prop="content" />
       <el-table-column
         width="250"
         label="操作"
@@ -270,6 +270,7 @@
             <el-form-item label="任务编码" prop="code">
               <el-input
                 v-model="form.code"
+                placeholder="系统自动生成编码"
                 :disabled="true"
               />
             </el-form-item>
@@ -521,6 +522,33 @@ export default {
       },
       // 表单校验
       rules: {
+        customerName: [
+          { required: true, message: "客户不能为空", trigger: "blur" },
+        ],
+        name: [
+          { required: true, message: "任务名称不能为空", trigger: "blur" },
+        ],
+        state: [
+          { required: true, message: "任务状态不能为空", trigger: "blur" },
+        ],
+        type: [
+          { required: true, message: "任务类型不能为空", trigger: "blur" },
+        ],
+        linkmanName: [
+          { required: true, message: "联系人不能为空", trigger: "blur" },
+        ],
+        staffName: [
+          { required: true, message: "负责人不能为空", trigger: "blur" },
+        ],
+        startTime: [
+          { required: true, message: "开始时间不能为空", trigger: ["blur", "change"] },
+        ],
+        deadlineTime: [
+          { required: true, message: "截止时间不能为空", trigger: ["blur", "change"] },
+        ],
+        content: [
+          { required: true, message: "任务内容不能为空", trigger: "blur" },
+        ],
       },
       //重新加载子组件参数
       timer: '',

+ 36 - 53
src/views/business/spd/bo/task/taskList.vue

@@ -149,41 +149,21 @@
             <el-form-item label="商机名称" prop="boName">
               <el-input
                 v-model="form.boName"
-                placeholder="请输入商机名称"
-                :disabled="this.source == 'BoDetails'"
+                readonly
               />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item
-              label="商机阶段"
-              prop="boStage"
-              v-if="source == 'Task'"
-            >
-              <el-select v-model="form.boStage" placeholder="请输入商机阶段">
-                <el-option
-                  v-for="dict in dict.type.mk_bo_stage"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
+            <el-form-item label="商机阶段" prop="boStage">
+              <el-input :value="dict.label" v-for="dict in dict.type.mk_bo_stage" v-if="dict.value == form.boStage" readonly/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="客户" prop="customerName">
               <el-input
                 v-model="form.customerName"
-                placeholder="请输入客户"
-                :disabled="this.source == 'BoDetails'"
-              >
-                <el-button
-                  slot="append"
-                  icon="el-icon-more"
-                  @click="refereCustomer"
-                  :disabled="this.source == 'BoDetails'"
-                ></el-button>
-              </el-input>
+                readonly
+              />
             </el-form-item>
           </el-col>
         </el-row>
@@ -194,13 +174,13 @@
               <el-input
                 v-model="form.code"
                 placeholder="系统自动生成编码"
-                :disabled="true"
+                readonly
               />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="任务名称" prop="name">
-              <el-input v-model="form.name" placeholder="请输入任务名称" />
+              <el-input v-model="form.name" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -224,7 +204,6 @@
                 v-model="form.startTime"
                 type="date"
                 value-format="yyyy-MM-dd"
-                placeholder="请选开始时间"
                 :picker-options="editStartOptions"
               >
               </el-date-picker>
@@ -237,7 +216,6 @@
                 v-model="form.deadlineTime"
                 type="date"
                 value-format="yyyy-MM-dd"
-                placeholder="请选择截止时间"
                 :picker-options="editStopOptions"
               >
               </el-date-picker>
@@ -245,7 +223,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="任务类型" prop="type">
-              <el-select v-model="form.type" placeholder="请选择任务类型">
+              <el-select v-model="form.type" placeholder="">
                 <el-option
                   v-for="dict in dict.type.mk_bo_tasktype"
                   :key="dict.value"
@@ -259,39 +237,36 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="联系人" prop="linkmanName">
-              <el-input v-model="form.linkmanName">
-                <el-button
-                  slot="append"
-                  icon="el-icon-more"
-                  @click="refereContact"
-                ></el-button>
-              </el-input>
+              <dr-popover-select
+                v-model="form.linkmanName"
+                title="联系人选择"
+                type="LINKMAN_PARAM"
+                :dataMapping="{
+                  linkman: 'id',
+                  linkmanName: 'name',
+                }"
+                :source.sync="form"
+                :queryParams="additionalCondition"
+              >
+              </dr-popover-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="8">
             <el-form-item label="销售组织" prop="salesOrgName">
-              <el-input v-model="form.salesOrgName" :disabled="true">
-                <el-button
-                  slot="append"
-                  icon="el-icon-more"
-                  @click="refereOrg"
-                  :disabled="true"
-                ></el-button>
-              </el-input>
+              <el-input
+                v-model="form.salesOrgName"
+                readonly
+              />
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="部门" prop="deptName">
-              <el-input v-model="form.deptName" :disabled="true">
-                <el-button
-                  slot="append"
-                  icon="el-icon-more"
-                  @click="refereDept"
-                  :disabled="true"
-                ></el-button>
-              </el-input>
+              <el-input
+                v-model="form.deptName"
+                readonly
+              />
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -676,6 +651,14 @@ export default {
         })
         .catch(() => {});
     },
+    //联系人弹窗附加查询条件
+    additionalCondition(){
+      return {
+        parame:{
+          customer: this.form.customer
+        }
+      }
+    },
     // 触发员工参照列表
     refereStaff() {
       this.$refs.staffSelect.init();

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

@@ -222,6 +222,7 @@
           <el-button type="success" size="mini" v-if="!lineDisable" @click="saveList">保存</el-button>
           <el-button type="primary" size="mini" v-if="lineDisable" @click="confirms">确认</el-button>
           <el-button type="primary" size="mini" v-if="lineDisable" @click="cancels">取消</el-button>
+          <!-- <el-button type="primary" size="mini" v-if="lineDisable" @click="cancelAudit">取消审批</el-button> -->
           <el-button type="primary" size="mini" v-if="lineDisable" @click="audits">审核</el-button>
           <el-button type="primary" size="mini" v-if="lineDisable" @click="closeLine">行关闭</el-button>
 
@@ -374,7 +375,7 @@ import popDialog from '@/components/PopDialog/index.vue'
 import CollapseTransition from '@/components/MyCollapse/collapse.vue'
 // 用于物料参照框数据
 import {getRefer} from '@/api/purchase/basic.js'
-import {getSummaryList, auditSummary, confirmSummary , cancelSummary , shutDownSummary, editSummaryList, exportList, exportItems } from '@/api/purchase/DemandSummary.js'
+import {getSummaryList, auditSummary, cancelAudits, confirmSummary , cancelSummary , shutDownSummary, editSummaryList, exportList, exportItems } from '@/api/purchase/DemandSummary.js'
 export default {
   name: 'demandSummary',
   dicts: ['sys_row_status', 'predictive_classify', 'sys_period_unit', 'sys_business', 'sys_bill_source'],
@@ -699,6 +700,19 @@ export default {
         })
       }
     },
+    cancelAudit() {
+      if(this.ids.length == 0) {
+        this.$modal.notifyWarning("请选中至少一条数据");
+      } else {
+        let param = this.ids.join()
+        cancelAudits(param).then(res => {
+          if (res.code === 200) {
+            this.$modal.notifySuccess("审核成功");
+            this.getList(this.queryParams)
+          }
+        })
+      }
+    },
     audits() {
       if(this.ids.length == 0) {
         this.$modal.notifyWarning("请选中至少一条数据");

+ 189 - 191
src/views/purchase/PurchaseDemandList/add.vue

@@ -166,12 +166,10 @@
         </div>
       </div>
 
-      <el-table
+      <ux-grid
           v-loading="loading"
           :data="basicForm.puDemandItemList"
-          fit
           border
-          highlight-current-row
           :cell-style="{ borderColor: '#c0c0c0' }"
           :header-cell-style="{ borderColor: '#c0c0c0' }"
           class="exporttable"
@@ -179,48 +177,49 @@
           max-height="410"
           style="font-size: 12px;"
           @selection-change="handleSelectionChange"
-          @row-click="rowSelect"
           :cell-class-name="cellClassName"
-          :row-key="getRowKeys"
           ref="table"
-          v-el-table-infinite-scroll="load"
-          :infinite-scroll-disabled="loadDisabled"
+          :rules="tableRules"
+          show-header-overflow="tooltip"
+          show-overflow="tooltip"
+          keep-source
+          beautifyTable
+          :checkbox-config="{highlight: true, trigger: 'row'}"
+          :edit-config="{trigger: 'click', mode: 'row'}"
+          :validConfig="{autoPos: true}">
         >
-          <el-table-column show-overflow-tooltip type="selection" :reserve-selection="true" 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" fixed="left">
-            <template slot-scope="scope">
-              {{ scope.row.rowNo = scope.$index + 1 + "0" }}
+          <ux-table-column resizable type="checkbox" fixed="left"/>
+          <ux-table-column resizable title="序号" type="index" align="center" width="50px"/>
+          <ux-table-column resizable title="行号" align="center" field="rowNo" width="50px">
+            <template v-slot:edit="scope">
+              {{ scope.row.rowNo = scope.rowIndex + 1 + "0" }}
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="默认采购组织" align="center"  prop="purOrgName" width="200px"/>
-          <el-table-column show-overflow-tooltip label="需求客户" align="center"  prop="demandCustomerName" width="180px"/>
-          <el-table-column show-overflow-tooltip label="行状态" align="center" prop="status" :formatter="hangStatus" width="100px"/>
-          <el-table-column show-overflow-tooltip label="物料编码" align="center" prop="materialCode" width="220px" :render-header="addRedStar" fixed="left">
-            <template slot-scope="scope">
-              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'materialCode'" :show-message="false" :rules="{ required: true, message: '请选择物料编码', trigger: 'blur' }">
-                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.materialCode" @paste.native="pasteMe($event, scope, scope.$index)">
-                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseMaterial(scope.$index)"></el-button>
+          </ux-table-column>
+          <ux-table-column resizable title="默认采购组织" align="center" field="purOrgName" width="100px"/>
+          <ux-table-column resizable title="需求客户" align="center" field="demandCustomerName" width="100px"/>
+          <ux-table-column resizable title="行状态" align="center" field="status" :formatter="hangStatus" width="100px"/>
+          <ux-table-column resizable title="物料编码" align="center" field="materialCode" width="150px" :render-header="addRedStar" :edit-render="{autofocus: '.el-input__inner'}">
+            <template v-slot:edit="scope">
+                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.materialCode" @paste.native="pasteMe($event, scope, scope.rowIndex)">
+                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseMaterial(scope.rowIndex)"></el-button>
                 </el-input>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="物料名称" align="center"  prop="materialName" width="200px" fixed="left"/>
-          <el-table-column show-overflow-tooltip label="规格" align="center"  prop="specification" />
-          <el-table-column show-overflow-tooltip label="型号" align="center"  prop="model"/>
-          <el-table-column show-overflow-tooltip label="单位" align="center"  prop="unitName"/>
-          <el-table-column show-overflow-tooltip label="生产厂家/代理人" align="center"  prop="manufacturerName" width="230px"/>
-          <el-table-column show-overflow-tooltip label="最小包装" align="center"  prop="minPackage" width="100px"/>
-          <el-table-column show-overflow-tooltip label="实际(业务)需求量" align="center"  prop="qty" width="150px" :render-header="addRedStar">
-            <template slot-scope="scope">
-              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'qty'" :show-message="false" :rules="{ required: true, message: '请填写实际(业务)需求量', trigger: 'blur' }">
-                <el-input type="number" min="0" clearable :disabled="sonDisable" size="mini" v-model="scope.row.qty" @input="getYLSL(scope)" @paste.native="pasteMe($event, scope, scope.$index)"/>
-              </el-form-item>
+          </ux-table-column>
+          <ux-table-column resizable title="物料名称" align="center"  field="materialName" width="100px"/>
+          <ux-table-column resizable title="规格" align="center"  field="specification" width="50px"/>
+          <ux-table-column resizable title="型号" align="center"  field="model" width="50px"/>
+          <ux-table-column resizable title="单位" align="center"  field="unitName" width="50px"/>
+          <ux-table-column resizable title="生产厂家/代理人" align="center"  field="manufacturerName" width="100px"/>
+          <ux-table-column resizable title="最小包装" align="center"  field="minPackage" width="80px"/>
+          <ux-table-column resizable title="月均销量" align="center"  field="averageQtyMonth" width="80px"/>
+          <ux-table-column resizable title="需求可用周期" align="center"  field="demandPeriod" width="80px"/>
+          <ux-table-column resizable title="实际(业务)需求量" align="center"  field="qty" width="150px" :render-header="addRedStar" edit-render>
+            <template v-slot:edit="scope">
+                <el-input type="number" min="0" clearable :disabled="sonDisable" size="mini" v-model="scope.row.qty" @input="getYLSL(scope)" @paste.native="pasteMe($event, scope, scope.rowIndex)"/>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="紧急标识" align="center" prop="isUrgency" width="100px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
+          </ux-table-column>
+          <ux-table-column resizable title="紧急标识" align="center" field="isUrgency" width="100px" edit-render>
+            <template v-slot:edit="scope">
                 <el-switch
                   v-model="scope.row.isUrgency"
                   :disabled="sonDisable"
@@ -229,48 +228,39 @@
                   active-color="#13ce66"
                   inactive-color="#a1a3a9">
                 </el-switch>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="收货仓库" align="center"  prop="deliveryWarehouseName" width="200px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
-                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryWarehouseName" @clear="clearHang(scope.$index, '选择收货仓库')">
-                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseCangKu(scope.$index, 'WAREHOUSE_PARAM', true, '选择收货仓库', scope.row.puOrg)"></el-button>
+            <template v-slot="{ row }">{{ row.isUrgency == 'Y' ? '是' : '否' }}</template>
+          </ux-table-column>
+          <ux-table-column resizable title="收货仓库" align="center"  field="deliveryWarehouseName" width="200px" edit-render>
+            <template v-slot:edit="scope">
+                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryWarehouseName" @clear="clearHang(scope.rowIndex, '选择收货仓库')">
+                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseCangKu(scope.rowIndex, 'WAREHOUSE_PARAM', true, '选择收货仓库', scope.row.puOrg)"></el-button>
                 </el-input>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="收货货位" align="center"  prop="deliveryAllocationName" width="200px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
-                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryAllocationName" @clear="clearHang(scope.$index, '选择收货货位')">
-                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="choosehuoWei(scope.$index, 'ALLOCATION_PARAM', true, '选择收货货位', scope.row.deliveryWarehouse)"></el-button>
+          </ux-table-column>
+          <ux-table-column resizable title="收货货位" align="center"  field="deliveryAllocationName" width="200px" edit-render>
+            <template v-slot:edit="scope">
+                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryAllocationName" @clear="clearHang(scope.rowIndex, '选择收货货位')">
+                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="choosehuoWei(scope.rowIndex, 'ALLOCATION_PARAM', true, '选择收货货位', scope.row.deliveryWarehouse)"></el-button>
                 </el-input>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="月均销量" align="center"  prop="averageQtyMonth" width="100px"/>
-          <el-table-column show-overflow-tooltip label="需求可用周期" align="center"  prop="demandPeriod" width="120px"/>
-          <el-table-column show-overflow-tooltip label="业务备注" align="center"  prop="remark" width="150px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
+          </ux-table-column>
+          <ux-table-column resizable title="业务备注" align="center"  field="remark" width="150px" edit-render>
+            <template v-slot:edit="scope">
                 <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.remark"/>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="物料一级分类" align="center" prop="materialClassifyOneName" width="150px"/>
-          <el-table-column show-overflow-tooltip label="物料二级分类" align="center" prop="materialClassifyTwoName" width="150px"/>
-          <el-table-column show-overflow-tooltip label="物料三级分类" align="center" prop="materialClassifyThreeName" width="150px"/>
-          <el-table-column show-overflow-tooltip label="物料四级分类" align="center" prop="materialClassifyFourName" width="150px"/>
-          <el-table-column show-overflow-tooltip label="最小批量" align="center"  prop="minBatch" width="100px"/>
-          <el-table-column show-overflow-tooltip label="最小订货量" align="center"  prop="minOrderQty" width="120px"/>
-          <el-table-column show-overflow-tooltip label="采购员" align="center" prop="buyerName" width="100px"/>
-          <!-- <el-table-column show-overflow-tooltip label="采购员" align="center"  prop="buyer"/> -->
-          <el-table-column show-overflow-tooltip label="采购周期" align="center"  prop="puPeriod" width="120px"/>
-          <el-table-column show-overflow-tooltip label="交货日期" align="center"  prop="deliveryDate" width="230px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
+          </ux-table-column>
+          <ux-table-column resizable title="物料一级分类" align="center" field="materialClassifyOneName" width="100px"/>
+          <ux-table-column resizable title="物料二级分类" align="center" field="materialClassifyTwoName" width="100px"/>
+          <ux-table-column resizable title="物料三级分类" align="center" field="materialClassifyThreeName" width="100px"/>
+          <ux-table-column resizable title="物料四级分类" align="center" field="materialClassifyFourName" width="100px"/>
+          <ux-table-column resizable title="最小批量" align="center"  field="minBatch" width="100px"/>
+          <ux-table-column resizable title="最小订货量" align="center"  field="minOrderQty" width="100px"/>
+          <ux-table-column resizable title="采购员" align="center" field="buyerName" width="100px"/>
+          <!-- <ux-table-column resizable title="采购员" align="center"  field="buyer"/> -->
+          <ux-table-column resizable title="采购周期" align="center" field="puPeriod" width="100px"/>
+          <ux-table-column resizable title="交货日期" align="center" field="deliveryDate" width="230px" edit-render>
+            <template v-slot:edit="scope">
                 <el-date-picker
                   v-model="scope.row.deliveryDate"
                   :disabled="sonDisable"
@@ -281,38 +271,32 @@
                   :picker-options="pickerOptionsEnd"
                   placeholder="选择日期">
                 </el-date-picker>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="有效期" align="center"  prop="expiry" width="100px"/>
-          <el-table-column show-overflow-tooltip label="有效期单位" align="center"  prop="expiryUnit" width="100px"/>
-          <el-table-column show-overflow-tooltip label="安全库存" align="center"  prop="safeStock" width="100px"/>
-          <el-table-column show-overflow-tooltip label="注册人" align="center"  prop="registrant" width="100px"/>
-          <el-table-column show-overflow-tooltip label="预留比例" align="center" prop="reservedProportion" width="120px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
+          </ux-table-column>
+          <ux-table-column resizable title="有效期" align="center"  field="expiry" width="100px"/>
+          <ux-table-column resizable title="有效期单位" align="center"  field="expiryUnit" width="100px"/>
+          <ux-table-column resizable title="安全库存" align="center"  field="safeStock" width="100px"/>
+          <ux-table-column resizable title="注册人" align="center"  field="registrant" width="100px"/>
+          <ux-table-column resizable title="预留比例" align="center" field="reservedProportion" width="120px" edit-render>
+            <template v-slot:edit="scope">
                 <el-select clearable :disabled="sonDisable" size="mini" v-model="scope.row.reservedProportion" @change="getYLSL(scope)" @clear="cleanYLSL(scope)">
                   <el-option v-for=" dict in dict.type.sys_reserve_ratio" :key="dict.value" :label="dict.label" :value="dict.value">
                   </el-option>
                 </el-select>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="预留周期" align="center" prop="reservedPeriod" width="120px">
-            <template slot-scope="scope">
-              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'reservedPeriod'" :rules="{ required: scope.row.reservedProportion && scope.row.reservedProportion !== '' , message: '请填写预留周期', trigger: 'blur' }">
+          </ux-table-column>
+          <ux-table-column resizable title="预留周期" align="center" field="reservedPeriod" width="120px" edit-render>
+            <template v-slot:edit="scope">
                 <el-input type="number" min="0" clearable :disabled="sonDisable" size="mini" v-model="scope.row.reservedPeriod"></el-input>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="预留数量" align="center"  prop="reservedQty" width="120px"/>
-          <el-table-column show-overflow-tooltip label="集团预测分类" align="center"  prop="forecastClassify" width="120px"/>
-          <el-table-column show-overflow-tooltip label="近一月需求" align="center"  prop="onemonthAvgVolume" width="100px"/>
-          <el-table-column show-overflow-tooltip label="近三月需求" align="center"  prop="threemonthAvgVolume" width="100px"/>
-          <el-table-column show-overflow-tooltip label="采购在途" align="center"  prop="puFreight" width="100px"/>
-          <el-table-column show-overflow-tooltip label="补单标识" align="center"  prop="isReplenishment" width="100px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
+          </ux-table-column>
+          <ux-table-column resizable title="预留数量" align="center"  field="reservedQty" width="120px"/>
+          <ux-table-column resizable title="集团预测分类" align="center"  field="forecastClassify" width="120px"/>
+          <ux-table-column resizable title="近一月需求" align="center"  field="onemonthAvgVolume" width="100px"/>
+          <ux-table-column resizable title="近三月需求" align="center"  field="threemonthAvgVolume" width="100px"/>
+          <ux-table-column resizable title="采购在途" align="center"  field="puFreight" width="100px"/>
+          <ux-table-column resizable title="补单标识" align="center"  field="isReplenishment" width="100px" edit-render>
+            <template v-slot:edit="scope">
                 <el-switch
                   v-model="scope.row.isReplenishment"
                   disabled
@@ -321,25 +305,22 @@
                   active-color="#13ce66"
                   inactive-color="#a1a3a9">
                 </el-switch>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="补单供应商" align="center"  prop="additionalSupplierName" width="200px" :render-header="anotherRedStar">
-            <template slot-scope="scope">
-              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'additionalSupplierName'" :rules="{ required: isBDXQ, message: '请选择补单供应商', trigger: 'blur' }">
-                <el-input clearable :disabled="sonDisable || BDZT" size="mini" v-model="scope.row.additionalSupplierName" @clear="clearHang(scope.$index, '选择补单供应商')" @paste.native="pasteMe($event, scope, scope.$index)">
-                  <el-button size="mini" :disabled="sonDisable || BDZT" slot="append" icon="el-icon-more" @click="chooseDept(scope.$index, 'SUPPLIER_PARAM', true, '选择补单供应商')"></el-button>
+            <template v-slot="{ row }">{{ row.isReplenishment == 'Y' ? '是' : '否' }}</template>
+          </ux-table-column>
+          <ux-table-column resizable title="补单供应商" align="center"  field="additionalSupplierName" width="200px" :render-header="anotherRedStar" edit-render>
+            <template v-slot:edit="scope">
+                <el-input clearable :disabled="sonDisable || BDZT" size="mini" v-model="scope.row.additionalSupplierName" @clear="clearHang(scope.rowIndex, '选择补单供应商')" @paste.native="pasteMe($event, scope, scope.rowIndex)">
+                  <el-button size="mini" :disabled="sonDisable || BDZT" slot="append" icon="el-icon-more" @click="chooseDept(scope.rowIndex, 'SUPPLIER_PARAM', true, '选择补单供应商')"></el-button>
                 </el-input>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="末级供应库存组织" align="center" prop="lastStockOrgName" width="180px"></el-table-column>
-          <el-table-column show-overflow-tooltip label="末级供应仓库" align="center"  prop="lastWarehouseName" width="150px"/>
-          <el-table-column show-overflow-tooltip label="末级供应货位" align="center"  prop="lastAllocationName" width="150px"/>
-          <el-table-column show-overflow-tooltip label="中心仓可用量" align="center"  prop="centralWarehouseQty" width="120px"/>
-          <el-table-column show-overflow-tooltip label="调拨状态" align="center"  prop="statusAllot" width="100px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
+          </ux-table-column>
+          <ux-table-column resizable title="末级供应库存组织" align="center" field="lastStockOrgName" width="180px"></ux-table-column>
+          <ux-table-column resizable title="末级供应仓库" align="center"  field="lastWarehouseName" width="150px"/>
+          <ux-table-column resizable title="末级供应货位" align="center"  field="lastAllocationName" width="150px"/>
+          <ux-table-column resizable title="中心仓可用量" align="center"  field="centralWarehouseQty" width="120px"/>
+          <ux-table-column resizable title="调拨状态" align="center"  field="statusAllot" width="100px" edit-render>
+            <template v-slot:edit="scope">
                 <el-switch
                   v-model="scope.row.statusAllot"
                   :disabled="sonDisable"
@@ -348,42 +329,38 @@
                   active-color="#13ce66"
                   inactive-color="#a1a3a9">
                 </el-switch>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="调拨单号" align="center"  prop="allotCode"></el-table-column>
-          <el-table-column show-overflow-tooltip label="调拨占有量" align="center"  prop="allotQty" width="100px"/>
-          <el-table-column show-overflow-tooltip label="最终净需求量" align="center"  prop="resDemandQty" width="120px"/>
-          <el-table-column show-overflow-tooltip label="最终采购执行数量" align="center"  prop="executeQty" width="150px">
-            <template slot-scope="scope">
+            <template v-slot="{ row }">{{ row.statusAllot == 'Y' ? '是' : '否' }}</template>
+          </ux-table-column>
+          <ux-table-column resizable title="调拨单号" align="center"  field="allotCode"></ux-table-column>
+          <ux-table-column resizable title="调拨占有量" align="center"  field="allotQty" width="100px"/>
+          <ux-table-column resizable title="最终净需求量" align="center"  field="resDemandQty" width="120px"/>
+          <ux-table-column resizable title="最终采购执行数量" align="center"  field="executeQty" width="150px">
+            <template v-slot:edit="scope">
               {{ scope.row.executeQty ? scope.row.executeQty : 0 }}
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="收货地址" align="center"  prop="deliveryAddressName" width="200px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
-                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryAddressName" @clear="clearHang(scope.$index, '选择收货地址')" @paste.native="pasteMe($event, scope, scope.$index)">
-                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseDept(scope.$index, 'ADDRESS_PARAM', true, '选择收货地址')"></el-button>
+          </ux-table-column>
+          <ux-table-column resizable title="收货地址" align="center"  field="deliveryAddressName" width="200px" edit-render>
+            <template v-slot:edit="scope">
+                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryAddressName" @clear="clearHang(scope.rowIndex, '选择收货地址')" @paste.native="pasteMe($event, scope, scope.rowIndex)">
+                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseDept(scope.rowIndex, 'ADDRESS_PARAM', true, '选择收货地址')"></el-button>
                 </el-input>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="联系人" align="center"  prop="contacts"/>
-          <el-table-column show-overflow-tooltip label="联系人电话" align="center"  prop="contactsPhone" width="150px"/>
-          <el-table-column show-overflow-tooltip label="详细地址" align="center"  prop="address" width="200px"/>
-          <el-table-column show-overflow-tooltip label="价格类型" align="center"  prop="priceType" width="120px">
-            <template slot-scope="scope">
-              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'priceType'" :show-message="false" :rules="{ required: true, message: '请选择价格类型', trigger: 'blur' }">
+          </ux-table-column>
+          <ux-table-column resizable title="联系人" align="center"  field="contacts" width="100px"/>
+          <ux-table-column resizable title="联系人电话" align="center"  field="contactsPhone" width="150px"/>
+          <ux-table-column resizable title="详细地址" align="center"  field="address" width="150px"/>
+          <ux-table-column resizable title="价格类型" align="center"  field="priceType" width="120px" edit-render>
+            <template v-slot:edit="scope">
                 <el-select clearable :disabled="sonDisable" size="mini" v-model="scope.row.priceType">
                   <el-option v-for=" dict in dict.type.sys_price_type" :key="dict.value" :label="dict.label" :value="dict.value">
                   </el-option>
                 </el-select>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <el-table-column show-overflow-tooltip label="是否客户指定" align="center"  prop="isCustomerSpecified" width="120px">
-            <template slot-scope="scope">
-              <el-form-item class="hang">
+            <template v-slot="{ row }">{{ row.priceType == 'order' ? '订货价' : row.priceType == 'consignment' ? '寄售价' :  row.priceType == 'adjusted' ? '调货价' : ''}}</template>
+          </ux-table-column>
+          <ux-table-column resizable title="是否客户指定" align="center"  field="isCustomerSpecified" width="120px" edit-render>
+            <template v-slot:edit="scope">
                 <el-switch
                   v-model="scope.row.isCustomerSpecified"
                   disabled
@@ -392,11 +369,11 @@
                   active-color="#13ce66"
                   inactive-color="#a1a3a9">
                 </el-switch>
-              </el-form-item>
             </template>
-          </el-table-column>
-          <!-- <el-table-column show-overflow-tooltip label="批号锁定标识" align="center" prop="isBatchLock" width="100px">
-            <template slot-scope="scope">
+            <template v-slot="{ row }">{{ row.isCustomerSpecified == 'Y' ? '是' : '否' }}</template>
+          </ux-table-column>
+          <!-- <ux-table-column resizable title="批号锁定标识" align="center" field="isBatchLock" width="100px">
+            <template v-slot:edit="scope">
               <el-form-item class="hang">
                   <el-switch
                     v-model="scope.row.isBatchLock"
@@ -408,20 +385,21 @@
                   </el-switch>
               </el-form-item>
             </template>
-          </el-table-column> -->
-          <el-table-column show-overflow-tooltip label="采购备注" align="center"  prop="updateCause" width="150px"/>
-          <el-table-column show-overflow-tooltip label="可用量" align="center"  prop="availableQty"/>
+          </ux-table-column> -->
+          <ux-table-column resizable title="采购备注" align="center"  field="updateCause" width="100px"/>
+          <ux-table-column resizable title="可用量" align="center"  field="availableQty" width="100px"/>
 
-          <el-table-column
+          <ux-table-column
             fixed="right"
-            label="操作"
+            title="操作"
+            width="100px"
             align="center"
             >
           <template slot-scope="scope">
-            <el-button type="text" size="mini" :disabled="sonDisable" @click="delLine(scope.$index, scope.row)">删除</el-button>
+            <el-button type="text" size="mini" :disabled="sonDisable" @click="delLine(scope.rowIndex, scope.row)">删除</el-button>
           </template>
-        </el-table-column>
-      </el-table>
+        </ux-table-column>
+      </ux-grid>
     </el-form>
       <div class="btn_group">
         <el-button type="primary" size="mini"  @click="jumpOA" v-if="sonPageStu == 'check' && (row.status == '1' || row.status == '2') && basicForm.flowId">流程跳转</el-button>
@@ -530,6 +508,7 @@ import {getRefer} from '@/api/purchase/basic.js'
 // 明细行选择物料参照
 import popDialog from '@/components/PopDialog/index.vue'
 import ElTableInfiniteScroll from "el-table-infinite-scroll";
+import 'regenerator-runtime/runtime'
 export default {
   directives: {
     "el-table-infinite-scroll": ElTableInfiniteScroll,
@@ -743,6 +722,11 @@ export default {
       loadDisabled: true,
       page: 0,
       total: 5,
+      // 表格校验规则
+      tableRules: {
+        materialCode : [{required: true, message: '物料编码必填'}],
+        qty: [{required: true, message: '实际业务需求量必填'}],
+      },
     }
   },
   created() {
@@ -863,7 +847,7 @@ export default {
       }
     },
     hangStatus(row) {
-      switch (row.status) {
+      switch (row.row.status) {
         case '0':
           return '需补货'
         case '1':
@@ -977,37 +961,55 @@ export default {
       if(this.basicForm.puDemandItemList.length !== 0) {
         this.$refs['basic'].validate((valid, obj) => {
           if(valid) {
-            this.$modal.loading("保存中...");
-            if(this.sonPageStu == 'add') {
-              this.handleData()
-              addDemand(this.basicForm).then(res => {
-                console.log(333)
-                if (res.code === 200) {
-                  this.$modal.notifySuccess(res.msg);
-                  this.$modal.closeLoading();
-                  this.back()
-                }
-              }).catch(err => {
-                this.$modal.closeLoading();
-              })
-            } else if (this.sonPageStu == 'edit') {
-              let list = []
-              list.push(...this.basicForm.puDemandItemList, ...this.delDemandItemList)
-              // 深拷贝一下参数对象
-              let param = JSON.parse(JSON.stringify(this.basicForm))
-              console.log('深拷贝对象',param);
-              param.puDemandItemList = list
-              // this.basicForm.puDemandItemList.push(...this.delDemandItemList)
-              editDemand(param).then(res => {
-                if (res.code === 200) {
-                  this.$modal.notifySuccess(res.msg);
-                  this.$modal.closeLoading();
-                  this.back()
+            // 加上表格校验
+              this.$refs.table.fullValidate().then(data=> {
+              if(!data) {
+                this.$modal.loading("保存中...");
+                if(this.sonPageStu == 'add') {
+                  this.handleData()
+                  addDemand(this.basicForm).then(res => {
+                    if (res.code === 200) {
+                      this.$modal.notifySuccess(res.msg);
+                      this.$modal.closeLoading();
+                      this.back()
+                    }
+                  }).catch(err => {
+                    this.$modal.closeLoading();
+                  })
+                } else if (this.sonPageStu == 'edit') {
+                  let list = []
+                  list.push(...this.basicForm.puDemandItemList, ...this.delDemandItemList)
+                  // 深拷贝一下参数对象
+                  let param = JSON.parse(JSON.stringify(this.basicForm))
+                  console.log('深拷贝对象',param);
+                  param.puDemandItemList = list
+                  // this.basicForm.puDemandItemList.push(...this.delDemandItemList)
+                  editDemand(param).then(res => {
+                    if (res.code === 200) {
+                      this.$modal.notifySuccess(res.msg);
+                      this.$modal.closeLoading();
+                      this.back()
+                    }
+                  }).catch(err => {
+                    this.$modal.closeLoading();
+                  })
                 }
-              }).catch(err => {
-                this.$modal.closeLoading();
-              })
-            }
+              } else {
+                let masStr = ''
+                Object.values(data).forEach(errList => {
+                    console.log('data',data)
+                    console.log(errList)
+                    errList.forEach(params => {
+                        let { rowIndex, column, rules } = params
+                        rules.forEach(rule => {
+                            masStr += `第 ${rowIndex + 1} 行${rule.message};`
+                        })
+                        this.$refs.table.$el.querySelector(`.elx-body--row:nth-of-type(${rowIndex+1})`).style.background = '#f34b4bb8'
+                    })
+                })
+                this.$modal.notifyError(masStr);
+              }
+            })
           } else {
             // 校验加弹窗
             const jiaoyan = []
@@ -1105,7 +1107,7 @@ export default {
     },
     // 单元格标红
     cellClassName({row, column, rowIndex, columnIndex}) {
-      if(this.basicForm.isCustomerSpecified == 'N' && column.label == '需求可用周期' && Number(row.demandPeriod) > 1.5 && Number(row.qty) > Number(row.minOrderQty)) {
+      if(this.basicForm.isCustomerSpecified == 'N' && column.title == "需求可用周期" && Number(row.demandPeriod) > 1.5 && Number(row.qty) > Number(row.minOrderQty)) {
         return 'success-row';
       }
     },
@@ -1766,10 +1768,6 @@ export default {
         }
       })
     },
-    // 解决表格选中了又自动取消的问题
-    getRowKeys(row) {
-      return row.id
-    },
   }
 }
 </script>
@@ -1799,11 +1797,11 @@ export default {
 //   padding-top: 0;
 //   top: 70%
 // }
-.el-table ::v-deep .success-row {
-  background: #f11616;
+::v-deep .elx-body--row .success-row {
+  background-color: #f11616!important;
 }
-::v-deep .el-table__row > td {
-  border-right: none;
+::v-deep .uxbeautifyTableClass .elx-table--header-wrapper {
+  color: #606266;
 }
 .pltzTxt{
   text-align: right;

+ 187 - 173
src/views/purchase/PurchaseDemandList/add_bak (2).vue → src/views/purchase/PurchaseDemandList/add_bak.vue

@@ -166,10 +166,12 @@
         </div>
       </div>
 
-      <ux-grid
+      <el-table
           v-loading="loading"
           :data="basicForm.puDemandItemList"
+          fit
           border
+          highlight-current-row
           :cell-style="{ borderColor: '#c0c0c0' }"
           :header-cell-style="{ borderColor: '#c0c0c0' }"
           class="exporttable"
@@ -177,49 +179,48 @@
           max-height="410"
           style="font-size: 12px;"
           @selection-change="handleSelectionChange"
+          @row-click="rowSelect"
           :cell-class-name="cellClassName"
+          :row-key="getRowKeys"
           ref="table"
-          :rules="tableRules"
-          show-header-overflow="tooltip"
-          show-overflow="tooltip"
-          keep-source
-          beautifyTable
-          :checkbox-config="{highlight: true, trigger: 'row'}"
-          :edit-config="{trigger: 'click', mode: 'row'}"
-          :validConfig="{autoPos: true}">
+          v-el-table-infinite-scroll="load"
+          :infinite-scroll-disabled="loadDisabled"
         >
-          <ux-table-column resizable type="checkbox" fixed="left"/>
-          <ux-table-column resizable title="序号" type="index" align="center" width="50px"/>
-          <ux-table-column resizable title="行号" align="center" field="rowNo" width="50px">
-            <template v-slot:edit="scope">
-              {{ scope.row.rowNo = scope.rowIndex + 1 + "0" }}
+          <el-table-column show-overflow-tooltip type="selection" :reserve-selection="true" 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" fixed="left">
+            <template slot-scope="scope">
+              {{ scope.row.rowNo = scope.$index + 1 + "0" }}
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="默认采购组织" align="center" field="purOrgName" width="100px"/>
-          <ux-table-column resizable title="需求客户" align="center" field="demandCustomerName" width="100px"/>
-          <ux-table-column resizable title="行状态" align="center" field="status" :formatter="hangStatus" width="100px"/>
-          <ux-table-column resizable title="物料编码" align="center" field="materialCode" width="100px" :render-header="addRedStar" :edit-render="{autofocus: '.el-input__inner'}">
-            <template v-slot:edit="scope">
-                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.materialCode" @paste.native="pasteMe($event, scope, scope.rowIndex)">
-                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseMaterial(scope.rowIndex)"></el-button>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="默认采购组织" align="center"  prop="purOrgName" width="200px"/>
+          <el-table-column show-overflow-tooltip label="需求客户" align="center"  prop="demandCustomerName" width="180px"/>
+          <el-table-column show-overflow-tooltip label="行状态" align="center" prop="status" :formatter="hangStatus" width="100px"/>
+          <el-table-column show-overflow-tooltip label="物料编码" align="center" prop="materialCode" width="220px" :render-header="addRedStar" fixed="left">
+            <template slot-scope="scope">
+              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'materialCode'" :show-message="false" :rules="{ required: true, message: '请选择物料编码', trigger: 'blur' }">
+                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.materialCode" @paste.native="pasteMe($event, scope, scope.$index)">
+                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseMaterial(scope.$index)"></el-button>
                 </el-input>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="物料名称" align="center"  field="materialName" width="200px"/>
-          <ux-table-column resizable title="规格" align="center"  field="specification" />
-          <ux-table-column resizable title="型号" align="center"  field="model"/>
-          <ux-table-column resizable title="单位" align="center"  field="unitName"/>
-          <ux-table-column resizable title="生产厂家/代理人" align="center"  field="manufacturerName" width="230px"/>
-          <ux-table-column resizable title="最小包装" align="center"  field="minPackage" width="100px"/>
-          <ux-table-column resizable title="月均销量" align="center"  field="averageQtyMonth" width="100px"/>
-          <ux-table-column resizable title="需求可用周期" align="center"  field="demandPeriod" width="120px"/>
-          <ux-table-column resizable title="实际(业务)需求量" align="center"  field="qty" width="150px" :render-header="addRedStar" edit-render>
-            <template v-slot:edit="scope">
-                <el-input type="number" min="0" clearable :disabled="sonDisable" size="mini" v-model="scope.row.qty" @input="getYLSL(scope)" @paste.native="pasteMe($event, scope, scope.rowIndex)"/>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="物料名称" align="center"  prop="materialName" width="200px" fixed="left"/>
+          <el-table-column show-overflow-tooltip label="规格" align="center"  prop="specification" />
+          <el-table-column show-overflow-tooltip label="型号" align="center"  prop="model"/>
+          <el-table-column show-overflow-tooltip label="单位" align="center"  prop="unitName"/>
+          <el-table-column show-overflow-tooltip label="生产厂家/代理人" align="center"  prop="manufacturerName" width="230px"/>
+          <el-table-column show-overflow-tooltip label="最小包装" align="center"  prop="minPackage" width="100px"/>
+          <el-table-column show-overflow-tooltip label="实际(业务)需求量" align="center"  prop="qty" width="150px" :render-header="addRedStar">
+            <template slot-scope="scope">
+              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'qty'" :show-message="false" :rules="{ required: true, message: '请填写实际(业务)需求量', trigger: 'blur' }">
+                <el-input type="number" min="0" clearable :disabled="sonDisable" size="mini" v-model="scope.row.qty" @input="getYLSL(scope)" @paste.native="pasteMe($event, scope, scope.$index)"/>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="紧急标识" align="center" field="isUrgency" width="100px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="紧急标识" align="center" prop="isUrgency" width="100px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
                 <el-switch
                   v-model="scope.row.isUrgency"
                   :disabled="sonDisable"
@@ -228,38 +229,48 @@
                   active-color="#13ce66"
                   inactive-color="#a1a3a9">
                 </el-switch>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="收货仓库" align="center"  field="deliveryWarehouseName" width="200px" edit-render>
-            <template v-slot:edit="scope">
-                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryWarehouseName" @clear="clearHang(scope.rowIndex, '选择收货仓库')">
-                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseCangKu(scope.rowIndex, 'WAREHOUSE_PARAM', true, '选择收货仓库', scope.row.puOrg)"></el-button>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="收货仓库" align="center"  prop="deliveryWarehouseName" width="200px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryWarehouseName" @clear="clearHang(scope.$index, '选择收货仓库')">
+                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseCangKu(scope.$index, 'WAREHOUSE_PARAM', true, '选择收货仓库', scope.row.puOrg)"></el-button>
                 </el-input>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="收货货位" align="center"  field="deliveryAllocationName" width="200px" edit-render>
-            <template v-slot:edit="scope">
-                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryAllocationName" @clear="clearHang(scope.rowIndex, '选择收货货位')">
-                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="choosehuoWei(scope.rowIndex, 'ALLOCATION_PARAM', true, '选择收货货位', scope.row.deliveryWarehouse)"></el-button>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="收货货位" align="center"  prop="deliveryAllocationName" width="200px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryAllocationName" @clear="clearHang(scope.$index, '选择收货货位')">
+                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="choosehuoWei(scope.$index, 'ALLOCATION_PARAM', true, '选择收货货位', scope.row.deliveryWarehouse)"></el-button>
                 </el-input>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="业务备注" align="center"  field="remark" width="150px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="月均销量" align="center"  prop="averageQtyMonth" width="100px"/>
+          <el-table-column show-overflow-tooltip label="需求可用周期" align="center"  prop="demandPeriod" width="120px"/>
+          <el-table-column show-overflow-tooltip label="业务备注" align="center"  prop="remark" width="150px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
                 <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.remark"/>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="物料一级分类" align="center" field="materialClassifyOneName" width="150px"/>
-          <ux-table-column resizable title="物料二级分类" align="center" field="materialClassifyTwoName" width="150px"/>
-          <ux-table-column resizable title="物料三级分类" align="center" field="materialClassifyThreeName" width="150px"/>
-          <ux-table-column resizable title="物料四级分类" align="center" field="materialClassifyFourName" width="150px"/>
-          <ux-table-column resizable title="最小批量" align="center"  field="minBatch" width="100px"/>
-          <ux-table-column resizable title="最小订货量" align="center"  field="minOrderQty" width="120px"/>
-          <ux-table-column resizable title="采购员" align="center" field="buyerName" width="100px"/>
-          <!-- <ux-table-column resizable title="采购员" align="center"  field="buyer"/> -->
-          <ux-table-column resizable title="采购周期" align="center"  field="puPeriod" width="120px"/>
-          <ux-table-column resizable title="交货日期" align="center"  field="deliveryDate" width="230px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="物料一级分类" align="center" prop="materialClassifyOneName" width="150px"/>
+          <el-table-column show-overflow-tooltip label="物料二级分类" align="center" prop="materialClassifyTwoName" width="150px"/>
+          <el-table-column show-overflow-tooltip label="物料三级分类" align="center" prop="materialClassifyThreeName" width="150px"/>
+          <el-table-column show-overflow-tooltip label="物料四级分类" align="center" prop="materialClassifyFourName" width="150px"/>
+          <el-table-column show-overflow-tooltip label="最小批量" align="center"  prop="minBatch" width="100px"/>
+          <el-table-column show-overflow-tooltip label="最小订货量" align="center"  prop="minOrderQty" width="120px"/>
+          <el-table-column show-overflow-tooltip label="采购员" align="center" prop="buyerName" width="100px"/>
+          <!-- <el-table-column show-overflow-tooltip label="采购员" align="center"  prop="buyer"/> -->
+          <el-table-column show-overflow-tooltip label="采购周期" align="center"  prop="puPeriod" width="120px"/>
+          <el-table-column show-overflow-tooltip label="交货日期" align="center"  prop="deliveryDate" width="230px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
                 <el-date-picker
                   v-model="scope.row.deliveryDate"
                   :disabled="sonDisable"
@@ -270,32 +281,38 @@
                   :picker-options="pickerOptionsEnd"
                   placeholder="选择日期">
                 </el-date-picker>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="有效期" align="center"  field="expiry" width="100px"/>
-          <ux-table-column resizable title="有效期单位" align="center"  field="expiryUnit" width="100px"/>
-          <ux-table-column resizable title="安全库存" align="center"  field="safeStock" width="100px"/>
-          <ux-table-column resizable title="注册人" align="center"  field="registrant" width="100px"/>
-          <ux-table-column resizable title="预留比例" align="center" field="reservedProportion" width="120px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="有效期" align="center"  prop="expiry" width="100px"/>
+          <el-table-column show-overflow-tooltip label="有效期单位" align="center"  prop="expiryUnit" width="100px"/>
+          <el-table-column show-overflow-tooltip label="安全库存" align="center"  prop="safeStock" width="100px"/>
+          <el-table-column show-overflow-tooltip label="注册人" align="center"  prop="registrant" width="100px"/>
+          <el-table-column show-overflow-tooltip label="预留比例" align="center" prop="reservedProportion" width="120px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
                 <el-select clearable :disabled="sonDisable" size="mini" v-model="scope.row.reservedProportion" @change="getYLSL(scope)" @clear="cleanYLSL(scope)">
                   <el-option v-for=" dict in dict.type.sys_reserve_ratio" :key="dict.value" :label="dict.label" :value="dict.value">
                   </el-option>
                 </el-select>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="预留周期" align="center" field="reservedPeriod" width="120px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="预留周期" align="center" prop="reservedPeriod" width="120px">
+            <template slot-scope="scope">
+              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'reservedPeriod'" :rules="{ required: scope.row.reservedProportion && scope.row.reservedProportion !== '' , message: '请填写预留周期', trigger: 'blur' }">
                 <el-input type="number" min="0" clearable :disabled="sonDisable" size="mini" v-model="scope.row.reservedPeriod"></el-input>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="预留数量" align="center"  field="reservedQty" width="120px"/>
-          <ux-table-column resizable title="集团预测分类" align="center"  field="forecastClassify" width="120px"/>
-          <ux-table-column resizable title="近一月需求" align="center"  field="onemonthAvgVolume" width="100px"/>
-          <ux-table-column resizable title="近三月需求" align="center"  field="threemonthAvgVolume" width="100px"/>
-          <ux-table-column resizable title="采购在途" align="center"  field="puFreight" width="100px"/>
-          <ux-table-column resizable title="补单标识" align="center"  field="isReplenishment" width="100px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="预留数量" align="center"  prop="reservedQty" width="120px"/>
+          <el-table-column show-overflow-tooltip label="集团预测分类" align="center"  prop="forecastClassify" width="120px"/>
+          <el-table-column show-overflow-tooltip label="近一月需求" align="center"  prop="onemonthAvgVolume" width="100px"/>
+          <el-table-column show-overflow-tooltip label="近三月需求" align="center"  prop="threemonthAvgVolume" width="100px"/>
+          <el-table-column show-overflow-tooltip label="采购在途" align="center"  prop="puFreight" width="100px"/>
+          <el-table-column show-overflow-tooltip label="补单标识" align="center"  prop="isReplenishment" width="100px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
                 <el-switch
                   v-model="scope.row.isReplenishment"
                   disabled
@@ -304,21 +321,25 @@
                   active-color="#13ce66"
                   inactive-color="#a1a3a9">
                 </el-switch>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="补单供应商" align="center"  field="additionalSupplierName" width="200px" :render-header="anotherRedStar" edit-render>
-            <template v-slot:edit="scope">
-                <el-input clearable :disabled="sonDisable || BDZT" size="mini" v-model="scope.row.additionalSupplierName" @clear="clearHang(scope.rowIndex, '选择补单供应商')" @paste.native="pasteMe($event, scope, scope.rowIndex)">
-                  <el-button size="mini" :disabled="sonDisable || BDZT" slot="append" icon="el-icon-more" @click="chooseDept(scope.rowIndex, 'SUPPLIER_PARAM', true, '选择补单供应商')"></el-button>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="补单供应商" align="center"  prop="additionalSupplierName" width="200px" :render-header="anotherRedStar">
+            <template slot-scope="scope">
+              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'additionalSupplierName'" :rules="{ required: isBDXQ, message: '请选择补单供应商', trigger: 'blur' }">
+                <el-input clearable :disabled="sonDisable || BDZT" size="mini" v-model="scope.row.additionalSupplierName" @clear="clearHang(scope.$index, '选择补单供应商')" @paste.native="pasteMe($event, scope, scope.$index)">
+                  <el-button size="mini" :disabled="sonDisable || BDZT" slot="append" icon="el-icon-more" @click="chooseDept(scope.$index, 'SUPPLIER_PARAM', true, '选择补单供应商')"></el-button>
                 </el-input>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="末级供应库存组织" align="center" field="lastStockOrgName" width="180px"></ux-table-column>
-          <ux-table-column resizable title="末级供应仓库" align="center"  field="lastWarehouseName" width="150px"/>
-          <ux-table-column resizable title="末级供应货位" align="center"  field="lastAllocationName" width="150px"/>
-          <ux-table-column resizable title="中心仓可用量" align="center"  field="centralWarehouseQty" width="120px"/>
-          <ux-table-column resizable title="调拨状态" align="center"  field="statusAllot" width="100px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="末级供应库存组织" align="center" prop="lastStockOrgName" width="180px"></el-table-column>
+          <el-table-column show-overflow-tooltip label="末级供应仓库" align="center"  prop="lastWarehouseName" width="150px"/>
+          <el-table-column show-overflow-tooltip label="末级供应货位" align="center"  prop="lastAllocationName" width="150px"/>
+          <el-table-column show-overflow-tooltip label="中心仓可用量" align="center"  prop="centralWarehouseQty" width="120px"/>
+          <el-table-column show-overflow-tooltip label="调拨状态" align="center"  prop="statusAllot" width="100px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
                 <el-switch
                   v-model="scope.row.statusAllot"
                   :disabled="sonDisable"
@@ -327,36 +348,42 @@
                   active-color="#13ce66"
                   inactive-color="#a1a3a9">
                 </el-switch>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="调拨单号" align="center"  field="allotCode"></ux-table-column>
-          <ux-table-column resizable title="调拨占有量" align="center"  field="allotQty" width="100px"/>
-          <ux-table-column resizable title="最终净需求量" align="center"  field="resDemandQty" width="120px"/>
-          <ux-table-column resizable title="最终采购执行数量" align="center"  field="executeQty" width="150px">
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="调拨单号" align="center"  prop="allotCode"></el-table-column>
+          <el-table-column show-overflow-tooltip label="调拨占有量" align="center"  prop="allotQty" width="100px"/>
+          <el-table-column show-overflow-tooltip label="最终净需求量" align="center"  prop="resDemandQty" width="120px"/>
+          <el-table-column show-overflow-tooltip label="最终采购执行数量" align="center"  prop="executeQty" width="150px">
+            <template slot-scope="scope">
               {{ scope.row.executeQty ? scope.row.executeQty : 0 }}
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="收货地址" align="center"  field="deliveryAddressName" width="200px" edit-render>
-            <template v-slot:edit="scope">
-                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryAddressName" @clear="clearHang(scope.rowIndex, '选择收货地址')" @paste.native="pasteMe($event, scope, scope.rowIndex)">
-                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseDept(scope.rowIndex, 'ADDRESS_PARAM', true, '选择收货地址')"></el-button>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="收货地址" align="center"  prop="deliveryAddressName" width="200px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.deliveryAddressName" @clear="clearHang(scope.$index, '选择收货地址')" @paste.native="pasteMe($event, scope, scope.$index)">
+                  <el-button size="mini" :disabled="sonDisable" slot="append" icon="el-icon-more" @click="chooseDept(scope.$index, 'ADDRESS_PARAM', true, '选择收货地址')"></el-button>
                 </el-input>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="联系人" align="center"  field="contacts"/>
-          <ux-table-column resizable title="联系人电话" align="center"  field="contactsPhone" width="150px"/>
-          <ux-table-column resizable title="详细地址" align="center"  field="address" width="200px"/>
-          <ux-table-column resizable title="价格类型" align="center"  field="priceType" width="120px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="联系人" align="center"  prop="contacts"/>
+          <el-table-column show-overflow-tooltip label="联系人电话" align="center"  prop="contactsPhone" width="150px"/>
+          <el-table-column show-overflow-tooltip label="详细地址" align="center"  prop="address" width="200px"/>
+          <el-table-column show-overflow-tooltip label="价格类型" align="center"  prop="priceType" width="120px">
+            <template slot-scope="scope">
+              <el-form-item class="hang" :prop="'puDemandItemList.' + scope.$index + '.' + 'priceType'" :show-message="false" :rules="{ required: true, message: '请选择价格类型', trigger: 'blur' }">
                 <el-select clearable :disabled="sonDisable" size="mini" v-model="scope.row.priceType">
                   <el-option v-for=" dict in dict.type.sys_price_type" :key="dict.value" :label="dict.label" :value="dict.value">
                   </el-option>
                 </el-select>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <ux-table-column resizable title="是否客户指定" align="center"  field="isCustomerSpecified" width="120px" edit-render>
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="是否客户指定" align="center"  prop="isCustomerSpecified" width="120px">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
                 <el-switch
                   v-model="scope.row.isCustomerSpecified"
                   disabled
@@ -365,10 +392,11 @@
                   active-color="#13ce66"
                   inactive-color="#a1a3a9">
                 </el-switch>
+              </el-form-item>
             </template>
-          </ux-table-column>
-          <!-- <ux-table-column resizable title="批号锁定标识" align="center" field="isBatchLock" width="100px">
-            <template v-slot:edit="scope">
+          </el-table-column>
+          <!-- <el-table-column show-overflow-tooltip label="批号锁定标识" align="center" prop="isBatchLock" width="100px">
+            <template slot-scope="scope">
               <el-form-item class="hang">
                   <el-switch
                     v-model="scope.row.isBatchLock"
@@ -380,21 +408,20 @@
                   </el-switch>
               </el-form-item>
             </template>
-          </ux-table-column> -->
-          <ux-table-column resizable title="采购备注" align="center"  field="updateCause" width="150px"/>
-          <ux-table-column resizable title="可用量" align="center"  field="availableQty"/>
+          </el-table-column> -->
+          <el-table-column show-overflow-tooltip label="采购备注" align="center"  prop="updateCause" width="150px"/>
+          <el-table-column show-overflow-tooltip label="可用量" align="center"  prop="availableQty"/>
 
-          <ux-table-column
+          <el-table-column
             fixed="right"
-            title="操作"
-            width="100px"
+            label="操作"
             align="center"
             >
           <template slot-scope="scope">
-            <el-button type="text" size="mini" :disabled="sonDisable" @click="delLine(scope.rowIndex, scope.row)">删除</el-button>
+            <el-button type="text" size="mini" :disabled="sonDisable" @click="delLine(scope.$index, scope.row)">删除</el-button>
           </template>
-        </ux-table-column>
-      </ux-grid>
+        </el-table-column>
+      </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') && basicForm.flowId">流程跳转</el-button>
@@ -503,7 +530,6 @@ import {getRefer} from '@/api/purchase/basic.js'
 // 明细行选择物料参照
 import popDialog from '@/components/PopDialog/index.vue'
 import ElTableInfiniteScroll from "el-table-infinite-scroll";
-import 'regenerator-runtime/runtime'
 export default {
   directives: {
     "el-table-infinite-scroll": ElTableInfiniteScroll,
@@ -717,11 +743,6 @@ export default {
       loadDisabled: true,
       page: 0,
       total: 5,
-      // 表格校验规则
-      tableRules: {
-        materialCode : [{required: true, message: '物料编码必填'}],
-        qty: [{required: true, message: '实际业务需求量必填'}],
-      },
     }
   },
   created() {
@@ -842,7 +863,7 @@ export default {
       }
     },
     hangStatus(row) {
-      switch (row.row.status) {
+      switch (row.status) {
         case '0':
           return '需补货'
         case '1':
@@ -956,44 +977,37 @@ export default {
       if(this.basicForm.puDemandItemList.length !== 0) {
         this.$refs['basic'].validate((valid, obj) => {
           if(valid) {
-            // 加上表格校验
-              this.$refs.table.fullValidate().then(data=> {
-              if(!data) {
-                this.$modal.loading("保存中...");
-                if(this.sonPageStu == 'add') {
-                  this.handleData()
-                  addDemand(this.basicForm).then(res => {
-                    console.log(333)
-                    if (res.code === 200) {
-                      this.$modal.notifySuccess(res.msg);
-                      this.$modal.closeLoading();
-                      this.back()
-                    }
-                  }).catch(err => {
-                    this.$modal.closeLoading();
-                  })
-                } else if (this.sonPageStu == 'edit') {
-                  let list = []
-                  list.push(...this.basicForm.puDemandItemList, ...this.delDemandItemList)
-                  // 深拷贝一下参数对象
-                  let param = JSON.parse(JSON.stringify(this.basicForm))
-                  console.log('深拷贝对象',param);
-                  param.puDemandItemList = list
-                  // this.basicForm.puDemandItemList.push(...this.delDemandItemList)
-                  editDemand(param).then(res => {
-                    if (res.code === 200) {
-                      this.$modal.notifySuccess(res.msg);
-                      this.$modal.closeLoading();
-                      this.back()
-                    }
-                  }).catch(err => {
-                    this.$modal.closeLoading();
-                  })
+            this.$modal.loading("保存中...");
+            if(this.sonPageStu == 'add') {
+              this.handleData()
+              addDemand(this.basicForm).then(res => {
+                console.log(333)
+                if (res.code === 200) {
+                  this.$modal.notifySuccess(res.msg);
+                  this.$modal.closeLoading();
+                  this.back()
                 }
-              } else {
-                this.$modal.notifyError('校验不通过');
-              }
-            })
+              }).catch(err => {
+                this.$modal.closeLoading();
+              })
+            } else if (this.sonPageStu == 'edit') {
+              let list = []
+              list.push(...this.basicForm.puDemandItemList, ...this.delDemandItemList)
+              // 深拷贝一下参数对象
+              let param = JSON.parse(JSON.stringify(this.basicForm))
+              console.log('深拷贝对象',param);
+              param.puDemandItemList = list
+              // this.basicForm.puDemandItemList.push(...this.delDemandItemList)
+              editDemand(param).then(res => {
+                if (res.code === 200) {
+                  this.$modal.notifySuccess(res.msg);
+                  this.$modal.closeLoading();
+                  this.back()
+                }
+              }).catch(err => {
+                this.$modal.closeLoading();
+              })
+            }
           } else {
             // 校验加弹窗
             const jiaoyan = []
@@ -1091,7 +1105,7 @@ export default {
     },
     // 单元格标红
     cellClassName({row, column, rowIndex, columnIndex}) {
-      if(this.basicForm.isCustomerSpecified == 'N' && column.title == "需求可用周期" && Number(row.demandPeriod) > 1.5 && Number(row.qty) > Number(row.minOrderQty)) {
+      if(this.basicForm.isCustomerSpecified == 'N' && column.label == '需求可用周期' && Number(row.demandPeriod) > 1.5 && Number(row.qty) > Number(row.minOrderQty)) {
         return 'success-row';
       }
     },
@@ -1785,11 +1799,11 @@ export default {
 //   padding-top: 0;
 //   top: 70%
 // }
-::v-deep .elx-body--row .success-row {
-  background-color: #f11616!important;
+.el-table ::v-deep .success-row {
+  background: #f11616;
 }
-::v-deep .uxbeautifyTableClass .elx-table--header-wrapper {
-  color: #606266;
+::v-deep .el-table__row > td {
+  border-right: none;
 }
 .pltzTxt{
   text-align: right;

+ 103 - 83
src/views/purchase/transferOrder/add.vue

@@ -286,7 +286,7 @@
             
             <el-table
               v-loading="loading"
-              :data="materialInfo"
+              :data="basicForm.materialInfo"
               fit
               border
               max-height="280"
@@ -316,9 +316,10 @@
                 align="center"
                 prop="materialCode"
                 width="200px"
+                :render-header="addRedStar"
               >
                 <template slot-scope="scope">
-                  <el-form-item class="hang" :prop="'materialInfo.' + scope.$index + '.materialCode'" :rules="basicForm.materialCode">
+                  <el-form-item class="hang" :prop="'materialInfo.' + scope.$index + '.materialCode'" :show-message="false" :rules="{ required: true, message: '请选择物料', trigger: 'blur' }">
                     <el-input
                       clearable
                       :disabled="sonDisable"
@@ -397,9 +398,11 @@
                 align="center"
                 prop="qty"
                 width="150px"
+                :render-header="addRedStar"
               >
                 <template slot-scope="scope">
-                  <el-form-item class="hang">
+
+                  <el-form-item class="hang" :prop="'materialInfo.' + scope.$index + '.qty'" :show-message="false" :rules="{ required: true, message: '请填写数量', trigger: 'blur' }">
                     <el-input
                       type="number"
                       min="0"
@@ -502,9 +505,10 @@
                 align="center"
                 prop="storageDeptName"
                 width="220px"
+                :render-header="addRedStar"
               >
                 <template slot-scope="scope">
-                  <el-form-item class="hang">
+                  <el-form-item class="hang" :prop="'materialInfo.' + scope.$index + '.storageDeptName'" :show-message="false" :rules="{ required: true, message: '请填写调入部门', trigger: 'blur' }">
                     <el-input
                       clearable
                       :disabled="sonDisable || isOrg"
@@ -648,9 +652,10 @@
                 align="center"
                 prop="allotDate"
                 width="230px"
+                :render-header="addRedStar"
               >
                 <template slot-scope="scope">
-                  <el-form-item class="hang">
+                  <el-form-item class="hang" :prop="'materialInfo.' + scope.$index + '.allotDate'" :show-message="false" :rules="{ required: true, message: '请填写调拨日期', trigger: 'blur' }">
                     <el-date-picker
                       ref="findDate"
                       v-model="scope.row.allotDate"
@@ -1481,6 +1486,7 @@ export default {
         createByName: "",
         updateByName: "",
         delFlag: "",
+        materialInfo: [],
       },
       referCondition: {
         type: "",
@@ -1532,11 +1538,8 @@ export default {
         deliveryDept:[
           { required: true, message: "调出部门不能为空", trigger: "blur" },
         ],
-        materialCode:[
-          { required: true, message: "明细物料不能为空", trigger: "blur" },
-        ],
       },
-      materialInfo: [],
+      // materialInfo: [],
       receiveInfo: [],
       priceList: [],
       resultList: [],
@@ -1568,7 +1571,7 @@ export default {
   methods: {
     // 改变单据日期时清空子表的调拨日期
     changeBillDate() {
-      this.materialInfo.forEach((item) => {
+      this.basicForm.materialInfo.forEach((item) => {
         item.allotDate = null;
       });
     },
@@ -1593,7 +1596,7 @@ export default {
     controlDCHW() {
       console.log("🚀 ~ file: add.vue:735 调出货位");
       this.isDCCk = true;
-      this.materialInfo.forEach((item) => {
+      this.basicForm.materialInfo.forEach((item) => {
         item.deliveryAllocation = null;
         item.deliveryAllocationName = null;
       });
@@ -1601,7 +1604,7 @@ export default {
     controlDRHW() {
       console.log("🚀 ~ file: add.vue:735 调入货位");
       this.isDRCk = true;
-      this.materialInfo.forEach((item) => {
+      this.basicForm.materialInfo.forEach((item) => {
         item.storageAllocation = null;
         item.storageAllocationName = null;
       });
@@ -1610,7 +1613,7 @@ export default {
     getZSL(scope) {
       scope.row.qty = scope.row.mainQty;
       let sum = 0
-      this.materialInfo.forEach(item => {
+      this.basicForm.materialInfo.forEach(item => {
         sum += Number(item.qty)
         this.basicForm.qty = sum
       })
@@ -1618,7 +1621,7 @@ export default {
     getSL(scope) {
       scope.row.mainQty = scope.row.qty;
       let sum = 0
-      this.materialInfo.forEach(item => {
+      this.basicForm.materialInfo.forEach(item => {
         sum += Number(item.qty)
         this.basicForm.qty = sum
       })
@@ -1642,8 +1645,8 @@ export default {
       this.basicForm.storageCode = "";
       this.basicForm.deliveryCode = "";
       // 复制新增把id,编码,创建人置为空,子表去掉id
-      if (this.materialInfo.length !== 0) {
-        this.materialInfo.forEach((item) => {
+      if (this.basicForm.materialInfo.length !== 0) {
+        this.basicForm.materialInfo.forEach((item) => {
           if (item.deliveryCode) {
             item.deliveryCode = "";
           }
@@ -1689,7 +1692,7 @@ export default {
     },
     submit() {
       this.$modal.loading("提交中...");
-      this.basicForm.stAllotMaterialList = this.materialInfo;
+      this.basicForm.stAllotMaterialList = this.basicForm.materialInfo;
       this.basicForm.stAllotReceiveDeliverList = this.receiveInfo;
       this.basicForm.stAllotReceiveExecuteList = this.priceList;
       this.basicForm.stAllotReceiveExpenseList = this.resultList;
@@ -1708,9 +1711,9 @@ export default {
     save() {
       this.$refs["basic"].validate(async (valid, obj) => {
           if (valid) {
-              if (this.materialInfo.length !== 0) {
+              if (this.basicForm.materialInfo.length !== 0) {
                 if (this.sonPageStu == "add") {
-                  this.basicForm.stAllotMaterialList = this.materialInfo;
+                  this.basicForm.stAllotMaterialList = this.basicForm.materialInfo;
                   this.basicForm.stAllotReceiveDeliverList = this.receiveInfo;
                   this.basicForm.stAllotReceiveExecuteList = this.priceList;
                   this.basicForm.stAllotReceiveExpenseList = this.resultList;
@@ -1727,7 +1730,7 @@ export default {
                       this.$modal.closeLoading();
                     });
                 } else if (this.sonPageStu == "edit") {
-                  this.basicForm.stAllotMaterialList = this.materialInfo;
+                  this.basicForm.stAllotMaterialList = this.basicForm.materialInfo;
                   this.basicForm.stAllotReceiveDeliverList = this.receiveInfo;
                   this.basicForm.stAllotReceiveExecuteList = this.priceList;
                   this.basicForm.stAllotReceiveExpenseList = this.resultList;
@@ -1748,6 +1751,7 @@ export default {
                 this.$modal.notifyWarning("明细行不能为空");
               }
           } else {
+            console.log("obj",obj);
             const jiaoyan = []
             for(let key in obj) {
               jiaoyan.push(obj[key][0].message);
@@ -1771,7 +1775,7 @@ export default {
       getOrderDetail(row.id).then((res) => {
         if (res.code === 200) {
           this.basicForm = res.data;
-          this.materialInfo = res.data.stAllotMaterialList;
+          this.basicForm.materialInfo = res.data.stAllotMaterialList;
           this.receiveInfo = res.data.stAllotReceiveDeliverList;
           this.priceList = res.data.stAllotReceiveExecuteList;
           this.resultList = res.data.stAllotReceiveExpenseList;
@@ -1861,7 +1865,7 @@ export default {
           this.chuHouseOptions = res.rows;
         }
         if (type == "UNIT_PARAM") {
-          this.materialInfo[this.tableIndex].unitCode = res.rows[0].code;
+          this.basicForm.materialInfo[this.tableIndex].unitCode = res.rows[0].code;
         }
       });
     },
@@ -1915,15 +1919,24 @@ export default {
         customerLogisticName: null,
         delFlag: 0,
       };
-      this.materialInfo.push(newLine);
+      this.basicForm.materialInfo.push(newLine);
     },
-    delLine($index) {
-      console.log("删除行:", $index);
-      this.materialInfo = this.materialInfo.map((item, index) => ({
-        ...item,
-        delFlag: index === $index ? "2" : item.delFlag,
-      }));
-      console.log("看看列表", this.materialInfo);
+    delLine(index,row) {
+      // this.basicForm.materialInfo = this.basicForm.materialInfo.map((item, index) => ({
+      //   ...item,
+      //   delFlag: index === $index ? "2" : item.delFlag,
+      // }));
+
+      if (row.id) {
+        this.basicForm.materialInfo.forEach(e => {
+          if(e.id == row.id){
+            e.delFlag = '2'
+          }
+        });
+      }else{
+        this.basicForm.materialInfo.splice(index, 1);
+      }
+
     },
     //
     rowClassName(prop) {
@@ -1988,7 +2001,7 @@ export default {
         this.basicForm.storageWarehouseName = selection[0].name;
         console.log("1111", selection[0].csFlag);
         // 清空调入货位
-        this.materialInfo.forEach((item) => {
+        this.basicForm.materialInfo.forEach((item) => {
           item.storageAllocation = null;
           item.storageAllocationName = null;
         });
@@ -2005,7 +2018,7 @@ export default {
         this.basicForm.deliveryWarehouseName = selection[0].name;
         console.log("2222", selection[0].csFlag);
         // 清空调出货位
-        this.materialInfo.forEach((item) => {
+        this.basicForm.materialInfo.forEach((item) => {
           item.deliveryAllocation = null;
           item.deliveryAllocationName = null;
         });
@@ -2016,22 +2029,29 @@ export default {
         }
       }
       if (this.referCondition.title == "调出货位") {
-        this.materialInfo[this.tableIndex].deliveryAllocationName =
+        this.basicForm.materialInfo[this.tableIndex].deliveryAllocationName =
           selection[0].name;
-        this.materialInfo[this.tableIndex].deliveryAllocation = selection[0].id;
+        this.basicForm.materialInfo[this.tableIndex].deliveryAllocation = selection[0].id;
       }
       if (this.referCondition.title == "调入货位") {
-        this.materialInfo[this.tableIndex].storageAllocationName =
+        this.basicForm.materialInfo[this.tableIndex].storageAllocationName =
           selection[0].name;
-        this.materialInfo[this.tableIndex].storageAllocation = selection[0].id;
+        this.basicForm.materialInfo[this.tableIndex].storageAllocation = selection[0].id;
       }
       if (this.referCondition.title == "调入部门") {
-        this.materialInfo[this.tableIndex].storageDeptName = selection[0].name;
-        this.materialInfo[this.tableIndex].storageDept = selection[0].id;
+        this.basicForm.materialInfo[this.tableIndex].storageDeptName = selection[0].name;
+        this.basicForm.materialInfo[this.tableIndex].storageDept = selection[0].id;
       }
       // 控制先选调出库存组织和调入库存组织再选调出部门和调入调出仓库
       this.controlCk();
     },
+    // 必选标识
+    addRedStar(h, { column }) {
+      return [
+        h('span', { style: 'color: #F56C6C' }, '*'),
+        h('span', ' ' + column.label)
+      ];
+    },
     // 调出库存组织清空相关数据
     clearDCZZ() {
       // 清空调出仓库,部门
@@ -2041,7 +2061,7 @@ export default {
       this.basicForm.deliveryDept = "";
       this.basicForm.deliveryDeptName = "";
       // 清空调出货位且禁用
-      this.materialInfo.forEach((item) => {
+      this.basicForm.materialInfo.forEach((item) => {
         item.deliveryAllocation = null;
         item.deliveryAllocationName = null;
       });
@@ -2062,12 +2082,12 @@ export default {
       this.basicForm.storageWarehouse = "";
       this.basicForm.storageWarehouseName = "";
       // 清空调入部门
-      this.materialInfo.forEach((item) => {
+      this.basicForm.materialInfo.forEach((item) => {
         item.storageDept = null;
         item.storageDeptName = null;
       });
       // 清空调入货位且禁用
-      this.materialInfo.forEach((item) => {
+      this.basicForm.materialInfo.forEach((item) => {
         item.storageAllocation = null;
         item.storageAllocationName = null;
       });
@@ -2107,22 +2127,22 @@ export default {
     selectMaterial(selection) {
       console.log("选中的物料", selection);
       // 先清空通用名,调入调出结算规则明细
-      this.materialInfo[this.tableIndex].ruleDetail = ''
-      this.materialInfo[this.tableIndex].commonCode = ''
-      this.materialInfo[this.tableIndex].material = selection[0].id;
-      this.materialInfo[this.tableIndex].materialCode = selection[0].code;
-      this.materialInfo[this.tableIndex].materialName = selection[0].name;
-      this.materialInfo[this.tableIndex].specification = selection[0].specification;
-      this.materialInfo[this.tableIndex].model = selection[0].model;
-      this.materialInfo[this.tableIndex].originPlace = selection[0].originPlace;
-      this.materialInfo[this.tableIndex].originPlaceName = selection[0].originPlaceName;
-      this.materialInfo[this.tableIndex].unit = selection[0].unitId;
-      this.materialInfo[this.tableIndex].mainUnit = selection[0].unitId;
-      this.materialInfo[this.tableIndex].unitName = selection[0].unitIdName;
-      this.materialInfo[this.tableIndex].mainUnitName = selection[0].unitIdName;
-      this.materialInfo[this.tableIndex].manufacturer = selection[0].manufacturerIdName;
-      this.materialInfo[this.tableIndex].marketingApprovalPersonal = selection[0].registrant;
-      this.materialInfo[this.tableIndex].production = selection[0].productionPermit;
+      this.basicForm.materialInfo[this.tableIndex].ruleDetail = ''
+      this.basicForm.materialInfo[this.tableIndex].commonCode = ''
+      this.basicForm.materialInfo[this.tableIndex].material = selection[0].id;
+      this.basicForm.materialInfo[this.tableIndex].materialCode = selection[0].code;
+      this.basicForm.materialInfo[this.tableIndex].materialName = selection[0].name;
+      this.basicForm.materialInfo[this.tableIndex].specification = selection[0].specification;
+      this.basicForm.materialInfo[this.tableIndex].model = selection[0].model;
+      this.basicForm.materialInfo[this.tableIndex].originPlace = selection[0].originPlace;
+      this.basicForm.materialInfo[this.tableIndex].originPlaceName = selection[0].originPlaceName;
+      this.basicForm.materialInfo[this.tableIndex].unit = selection[0].unitId;
+      this.basicForm.materialInfo[this.tableIndex].mainUnit = selection[0].unitId;
+      this.basicForm.materialInfo[this.tableIndex].unitName = selection[0].unitIdName;
+      this.basicForm.materialInfo[this.tableIndex].mainUnitName = selection[0].unitIdName;
+      this.basicForm.materialInfo[this.tableIndex].manufacturer = selection[0].manufacturerIdName;
+      this.basicForm.materialInfo[this.tableIndex].marketingApprovalPersonal = selection[0].registrant;
+      this.basicForm.materialInfo[this.tableIndex].production = selection[0].productionPermit;
       // 根据物料单位id查询单位code
       this.reBackRefer("UNIT_PARAM", selection[0].unitId);
     },
@@ -2131,8 +2151,8 @@ export default {
       this.tableIndex = index;
       this.referCondition.orgId = this.basicForm.deliveryInventoryOrg;
       this.referCondition.materialCode =
-      this.materialInfo[this.tableIndex].materialCode;
-      this.referCondition.unitId = this.materialInfo[this.tableIndex].unit;
+      this.basicForm.materialInfo[this.tableIndex].materialCode;
+      this.referCondition.unitId = this.basicForm.materialInfo[this.tableIndex].unit;
       this.referCondition.warehouseId = this.basicForm.deliveryWarehouse;
       this.$refs.batchRefer.init(this.referCondition);
     },
@@ -2173,7 +2193,7 @@ export default {
       if (val == "调入仓库") {
         this.basicForm.storageWarehouse = "";
         this.basicForm.storageWarehouseName = "";
-        this.materialInfo.forEach((item) => {
+        this.basicForm.materialInfo.forEach((item) => {
           item.storageAllocation = null;
           item.storageAllocationName = null;
         });
@@ -2192,35 +2212,35 @@ export default {
     // 明细选择框清空
     cleanMx(index, val) {
       if (val == "物料编码") {
-        this.materialInfo[index].material = "";
-        this.materialInfo[index].materialCode = "";
-        this.materialInfo[index].materialName = "";
-        this.materialInfo[index].specification = "";
-        this.materialInfo[index].model = "";
-        this.materialInfo[index].originPlace = "";
-        this.materialInfo[index].originPlaceName = "";
-        this.materialInfo[index].unit = "";
-        this.materialInfo[index].mainUnit = "";
-        this.materialInfo[index].unitName = "";
-        this.materialInfo[index].mainUnitName = "";
-        this.materialInfo[index].manufacturer = "";
-        this.materialInfo[index].ruleDetail = ''
-        this.materialInfo[index].commonCode = ''
-        this.materialInfo[index].marketingApprovalPersonal = "";
-        this.materialInfo[index].production = "";
-        this.materialInfo[index].unitCode = "";
+        this.basicForm.materialInfo[index].material = "";
+        this.basicForm.materialInfo[index].materialCode = "";
+        this.basicForm.materialInfo[index].materialName = "";
+        this.basicForm.materialInfo[index].specification = "";
+        this.basicForm.materialInfo[index].model = "";
+        this.basicForm.materialInfo[index].originPlace = "";
+        this.basicForm.materialInfo[index].originPlaceName = "";
+        this.basicForm.materialInfo[index].unit = "";
+        this.basicForm.materialInfo[index].mainUnit = "";
+        this.basicForm.materialInfo[index].unitName = "";
+        this.basicForm.materialInfo[index].mainUnitName = "";
+        this.basicForm.materialInfo[index].manufacturer = "";
+        this.basicForm.materialInfo[index].ruleDetail = ''
+        this.basicForm.materialInfo[index].commonCode = ''
+        this.basicForm.materialInfo[index].marketingApprovalPersonal = "";
+        this.basicForm.materialInfo[index].production = "";
+        this.basicForm.materialInfo[index].unitCode = "";
       }
       if (val == "调出货位") {
-        this.materialInfo[index].deliveryAllocationName = "";
-        this.materialInfo[index].deliveryAllocation = "";
+        this.basicForm.materialInfo[index].deliveryAllocationName = "";
+        this.basicForm.materialInfo[index].deliveryAllocation = "";
       }
       if (val == "调入部门") {
-        this.materialInfo[index].storageDeptName = "";
-        this.materialInfo[index].storageDept = "";
+        this.basicForm.materialInfo[index].storageDeptName = "";
+        this.basicForm.materialInfo[index].storageDept = "";
       }
       if (val == "调入货位") {
-        this.materialInfo[index].storageAllocationName = "";
-        this.materialInfo[index].storageAllocation = "";
+        this.basicForm.materialInfo[index].storageAllocationName = "";
+        this.basicForm.materialInfo[index].storageAllocation = "";
       }
     },
     jumpOA() {