소스 검색

营销商机页面优化;

001295 1 년 전
부모
커밋
370582a075

+ 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();
     },
   }

+ 21 - 28
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">

+ 28 - 27
src/views/business/spd/bo/contact/index.vue

@@ -411,44 +411,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"
+          }
         ],
       },
       //重新加载子组件参数

+ 28 - 0
src/views/business/spd/bo/task/index.vue

@@ -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();

+ 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() {