ソースを参照

feature(项目):项目详情及升级功能优化

ZZH-wl 2 年 前
コミット
79f80a1ee0

+ 4 - 4
src/views/customer/detail.vue

@@ -434,7 +434,7 @@
     <!-- 跟进详情 -->
     <FollowDetail ref="followDetail" />
     <!-- 添加项目 -->
-    <Businessedit ref="businessedit" :cust-info="custInfo" @fetch-data="getBusiness" />
+    <Businessadd ref="businessadd" :cust-info="custInfo" @fetch-data="getBusiness" />
     <!-- 领取客户 -->
     <Pick ref="pick" />
     <!-- 招标信息 -->
@@ -463,7 +463,7 @@
   import Shift from './components/Shift'
   import ToOpen from './components/ToOpen'
   import FollowDetail from './components/FollowDetail'
-  import Businessedit from '../proj/business/components/BusinessEdit'
+  import Businessadd from '../proj/business/components/BusinessAdd'
   import Pick from './components/Pick'
   import Bid from './components/Bid'
   import InvoiceHeader from './components/InvoiceHeader'
@@ -483,7 +483,7 @@
       InvoiceHeader,
       ToOpen,
       FollowDetail,
-      Businessedit,
+      Businessadd,
       closeLoopDialog,
     },
     data() {
@@ -865,7 +865,7 @@
           custId: parseInt(this.id),
           custName: this.detail.custName,
         }
-        this.$refs.businessedit.dialogFormVisible = true
+        this.$refs.businessadd.showEdit({})
       },
       getBusiness() {
         if (this.activeName == 'item') {

+ 117 - 114
src/views/proj/business/components/BusinessEdit.vue

@@ -7,44 +7,27 @@
     width="60%"
     @close="close">
     <el-steps :active="activeSteps" align-center style="margin: -15px 0 15px 0">
-      <el-step title="修改项目" />
-      <el-step title="添加产品" />
+      <el-step title="修改项目"/>
+      <el-step title="添加产品"/>
     </el-steps>
 
     <el-form ref="form" :model="form" :rules="rules">
       <el-row v-if="activeSteps === 1" :gutter="20">
         <el-col :span="8">
           <el-form-item label="关联客户" prop="custName">
-            <el-input v-model="form.custName" disabled readonly />
+            <el-input v-model="form.custName" disabled readonly/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="产品线" prop="productLine">
             <el-select v-model="form.productLine" placeholder="请选择" style="width: 100%" @change="changeProductLine">
-              <el-option v-for="item in productLineOptions" :key="item.key" :label="item.value" :value="item.key" />
+              <el-option v-for="item in productLineOptions" :key="item.key" :label="item.value" :value="item.key"/>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="项目名称" prop="nboName">
-            <el-input v-model="form.nboName" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="项目来源" prop="nboSource">
-            <el-select v-model="form.nboSource" clearable placeholder="项目来源" style="width: 100%">
-              <el-option v-for="dict in nboSourceOptions" :key="dict.key" :label="dict.value" :value="dict.key" />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col v-if="form.nboSource === '80'" :span="8">
-          <el-form-item label="招标信息" prop="bidInfo">
-            <el-input
-              v-model="form.bidInfo"
-              :disabled="!isBid"
-              readonly
-              suffix-icon="el-icon-search"
-              @focus="handleSelectCustomerBid" />
+            <el-input v-model="form.nboName"/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
@@ -54,9 +37,24 @@
               :disabled="form.id > 0"
               readonly
               suffix-icon="el-icon-search"
-              @focus="handleSelectSale" />
+              @focus="handleSelectSale"/>
           </el-form-item>
         </el-col>
+        <el-col :span="8">
+          <el-form-item label="是否大项目" prop="isBig">
+            <el-select v-model="form.isBig" placeholder="请选择" style="width: 100%">
+              <el-option v-for="item in yesOrNoOptions" :key="item.key" :label="item.value" :value="item.key"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="项目预算" prop="nboBudget">
+            <amount-input v-model.trim="form.nboBudget" placeholder="请输入金额"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <h2 v-if="activeSteps === 1">渠道信息</h2>
+      <el-row v-if="activeSteps === 1" :gutter="20">
         <el-col :span="8">
           <el-form-item label="销售模式" prop="salesModel">
             <el-select
@@ -65,13 +63,13 @@
               placeholder="销售模式"
               style="width: 100%"
               @change="changeSalesModel">
-              <el-option v-for="dict in salesModelOptions" :key="dict.key" :label="dict.value" :value="dict.key" />
+              <el-option v-for="dict in salesModelOptions" :key="dict.key" :label="dict.value" :value="dict.key"/>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item
-            label="经销商/代理商"
+            label="渠道名称"
             prop="distributorName"
             :required="form.salesModel && form.salesModel !== '10'">
             <el-input
@@ -79,28 +77,7 @@
               :disabled="form.salesModel === '10'"
               readonly
               suffix-icon="el-icon-search"
-              @focus="handleSelectDistributor" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="是否大项目" prop="isBig">
-            <el-select v-model="form.isBig" placeholder="请选择" style="width: 100%">
-              <el-option v-for="item in yesOrNoOptions" :key="item.key" :label="item.value" :value="item.key" />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <!--        <el-col :span="8">-->
-        <!--          <el-form-item label="项目类别" prop="nboType">-->
-        <!--            <el-select v-model="form.nboType" placeholder="请选择" style="width: 100%">-->
-        <!--              <el-option label="C类" value="30" />-->
-        <!--              <el-option label="储备" value="50" />-->
-        <!--            </el-select>-->
-        <!--          </el-form-item>-->
-        <!--        </el-col>-->
-        <!--   C => B     -->
-        <el-col :span="8">
-          <el-form-item label="项目预算" prop="nboBudget">
-            <amount-input v-model.trim="form.nboBudget" placeholder="请输入金额" />
+              @focus="handleSelectDistributor"/>
           </el-form-item>
         </el-col>
         <div v-if="form.salesModel !== '10'">
@@ -110,15 +87,42 @@
                 v-model="form.dealerSalesName"
                 readonly
                 suffix-icon="el-icon-search"
-                @focus="handleSelectDistributorContact" />
+                @focus="handleSelectDistributorContact"/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="渠道销售电话/微信" prop="dealerSalesContact">
-              <el-input v-model="form.dealerSalesContact" />
+              <el-input v-model="form.dealerSalesContact"/>
             </el-form-item>
           </el-col>
         </div>
+      </el-row>
+      <h2 v-if="activeSteps === 1">项目信息</h2>
+      <el-row v-if="activeSteps === 1" :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="项目来源" prop="nboSource">
+            <el-select v-model="form.nboSource" clearable placeholder="项目来源" style="width: 100%">
+              <el-option v-for="dict in nboSourceOptions" :key="dict.key" :label="dict.value" :value="dict.key"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col v-if="form.nboSource === '80'" :span="8">
+          <el-form-item label="招标信息" prop="bidInfo">
+            <el-input
+              v-model="form.bidInfo"
+              :disabled="!isBid"
+              readonly
+              suffix-icon="el-icon-search"
+              @focus="handleSelectCustomerBid"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="采购方式" prop="purchasingWay">
+            <el-select v-model="form.purchasingWay" placeholder="请选择" style="width: 100%">
+              <el-option v-for="item in purchasingWayOptions" :key="item.key" :label="item.value" :value="item.key"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
         <!--        <el-col :span="8">-->
         <!--          <el-form-item-->
         <!--            label="报价单"-->
@@ -134,16 +138,9 @@
         <!--          </el-form-item>-->
         <!--        </el-col>-->
         <!--   B => A     -->
-        <el-col :span="8">
-          <el-form-item label="采购方式" prop="purchasingWay">
-            <el-select v-model="form.purchasingWay" placeholder="请选择" style="width: 100%">
-              <el-option v-for="item in purchasingWayOptions" :key="item.key" :label="item.value" :value="item.key" />
-            </el-select>
-          </el-form-item>
-        </el-col>
         <el-col :span="8">
           <el-form-item label="资金来源" prop="capitalSource">
-            <el-input v-model="form.capitalSource" />
+            <el-input v-model="form.capitalSource"/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
@@ -153,17 +150,17 @@
               placeholder="选择日期"
               style="width: 100%"
               type="datetime"
-              value-format="yyyy-MM-dd HH:mm:ss" />
+              value-format="yyyy-MM-dd HH:mm:ss"/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="客户决策人" prop="makerName">
-            <el-input v-model="form.makerName" />
+            <el-input v-model="form.makerName"/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="客户决策部门" prop="makerDept">
-            <el-input v-model="form.makerDept" />
+            <el-input v-model="form.makerDept"/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
@@ -172,22 +169,22 @@
               v-model="form.contactName"
               readonly
               suffix-icon="el-icon-search"
-              @focus="handleSelectCustomerContact" />
+              @focus="handleSelectCustomerContact"/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="客户联系人电话/微信" prop="contactTelephone">
-            <el-input v-model="form.contactTelephone" />
+            <el-input v-model="form.contactTelephone"/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="竞争公司" prop="competitor">
-            <el-input v-model="form.competitor" />
+            <el-input v-model="form.competitor"/>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="客户倾向厂家" prop="customerIntentionFactory">
-            <el-input v-model="form.customerIntentionFactory" />
+            <el-input v-model="form.customerIntentionFactory"/>
           </el-form-item>
         </el-col>
         <!--        <el-col :span="8">-->
@@ -212,9 +209,12 @@
         <!--            </el-upload>-->
         <!--          </el-form-item>-->
         <!--        </el-col>-->
+      </el-row>
+      <h2 v-if="activeSteps === 1">其他信息</h2>
+      <el-row v-if="activeSteps === 1" :gutter="20">
         <el-col :span="24">
           <el-form-item label="备注信息" prop="remark">
-            <el-input v-model="form.remark" placeholder="请输入备注信息" rows="3" show-word-limit type="textarea" />
+            <el-input v-model="form.remark" placeholder="请输入备注信息" rows="3" show-word-limit type="textarea"/>
           </el-form-item>
         </el-col>
       </el-row>
@@ -225,7 +225,7 @@
             ref="productTable"
             :product-data="productData"
             @changeProductData="changeProductData"
-            @delProductData="delProductData" />
+            @delProductData="delProductData"/>
         </el-col>
       </el-row>
     </el-form>
@@ -235,30 +235,30 @@
       <el-button v-if="activeSteps === 2" :loading="loading" type="primary" @click="save">提 交</el-button>
     </div>
     <!-- 选择客户弹窗 -->
-    <select-customer ref="selectCustomer" @save="selectCustomer" />
+    <select-customer ref="selectCustomer" @save="selectCustomer"/>
     <!-- 选择客户联系人弹窗 -->
     <select-customer-contact
       ref="selectCustomerContact"
       :default-customer="customerInfo"
       :query-params="queryCustomerContact"
-      @save="selectCustomerContact" />
+      @save="selectCustomerContact"/>
     <!-- 选择客户招标信息弹窗 -->
-    <select-customer-bid ref="selectCustomerBid" :query-params="queryCustomerContact" @save="selectCustomerBid" />
+    <select-customer-bid ref="selectCustomerBid" :query-params="queryCustomerContact" @save="selectCustomerBid"/>
     <!-- 选择销售工程师弹窗 -->
     <select-user
       ref="selectSales"
       :query-params="{ roles: ['SalesEngineer', 'ProductLineManager'] }"
-      @save="selectSales" />
+      @save="selectSales"/>
     <!-- 选择经销商弹窗 -->
-    <select-distributor ref="selectDistributor" @save="selectDistributor" />
+    <select-distributor ref="selectDistributor" @save="selectDistributor"/>
     <!-- 选择渠道销售人员弹窗 -->
     <select-distributor-contact
       ref="selectDistributorContact"
       :default-dist="distInfo"
       :query-params="queryDistContact"
-      @save="selectDistributorContact" />
+      @save="selectDistributorContact"/>
     <!-- 选择产品弹窗 -->
-    <select-product ref="selectProduct" multiple @save="selectProduct" />
+    <select-product ref="selectProduct" multiple @save="selectProduct"/>
   </el-dialog>
 </template>
 
@@ -343,42 +343,43 @@
           followContent: undefined,
         },
         rules: {
-          custName: [{ required: true, trigger: ['blur', 'change'], message: '请选择关联客户' }],
-          productLine: [{ required: true, trigger: ['blur', 'change'], message: '请选择产品线' }],
-          nboName: [{ required: true, trigger: ['blur', 'change'], message: '请输入项目名称' }],
-          nboSource: [{ required: true, trigger: ['blur', 'change'], message: '请选择项目来源' }],
-          bidInfo: [{ required: true, trigger: ['blur', 'change'], message: '请选择招标信息' }],
-          saleName: [{ required: true, trigger: ['blur', 'change'], message: '请选择销售工程师' }],
-          salesModel: [{ required: true, trigger: ['blur', 'change'], message: '请选择销售模式' }],
-          distributorName: [
-            { validator: validateDistributor, trigger: ['blur', 'change'], message: '请选择经销商/代理商' },
-          ],
-          isBig: [{ required: true, trigger: ['blur', 'change'], message: '请选择是否大项目' }],
+          // custName: [{ required: true, trigger: ['blur', 'change'], message: '请选择关联客户' }],
+          // productLine: [{ required: true, trigger: ['blur', 'change'], message: '请选择产品线' }],
+          // nboName: [{ required: true, trigger: ['blur', 'change'], message: '请输入项目名称' }],
+          // nboSource: [{ required: true, trigger: ['blur', 'change'], message: '请选择项目来源' }],
+          // bidInfo: [{ required: true, trigger: ['blur', 'change'], message: '请选择招标信息' }],
+          // saleName: [{ required: true, trigger: ['blur', 'change'], message: '请选择销售工程师' }],
+          // salesModel: [{ required: true, trigger: ['blur', 'change'], message: '请选择销售模式' }],
+          // distributorName: [
+          //   { validator: validateDistributor, trigger: ['blur', 'change'], message: '请选择经销商/代理商' },
+          // ],
+          // isBig: [{ required: true, trigger: ['blur', 'change'], message: '请选择是否大项目' }],
+          //
+          // nboType: [{ required: true, trigger: ['blur', 'change'], message: '请选择项目类别' }],
+          // // C => B
+          // nboBudget: [
+          //   { required: true, trigger: ['blur', 'change'], message: '请输入项目预算' },
+          //   // { validator: validateNboBudget, trigger: ['blur', 'change'], message: '项目预算应大于0' },
+          // ],
+          // dealerSalesId: [{ required: true, trigger: ['blur', 'change'], message: '请选择渠道销售' }],
+          // dealerSalesName: [{ required: true, trigger: ['blur', 'change'], message: '请选择项渠道销售人员' }],
+          // dealerSalesContact: [{ required: true, trigger: ['blur', 'change'], message: '请输入渠道销售电话/微信' }],
+          // estTransPrice: [{ required: true, trigger: ['blur', 'change'], message: '请选择预计出货金额' }],
+          // // quotationFile: [{ required: true, trigger: ['blur', 'change'], message: '请选择报价单' }],
+          // products: [{ required: true, trigger: ['blur', 'change'], message: '请选择产品' }],
+          // // B => A
+          // purchasingWay: [{ required: true, trigger: ['blur', 'change'], message: '请选择采购方式' }],
+          // capitalSource: [{ required: true, trigger: ['blur', 'change'], message: '请输入资金来源' }],
+          // planPurchaseTime: [{ required: true, trigger: ['blur', 'change'], message: '请选择计划采购时间' }],
+          // contactId: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户联系人' }],
+          // contactName: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户联系人姓名' }],
+          // contactTelephone: [{ required: true, trigger: ['blur', 'change'], message: '请输入客户联系人电话/微信' }],
+          // makerId: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户决策人' }],
+          // makerName: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户决策人姓名' }],
+          // makerDept: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户决策部门' }],
+          // customerIntentionFactory: [{ required: true, trigger: ['blur', 'change'], message: '请输入客户倾向厂家' }],
+          // competitor: [{ required: true, trigger: ['blur', 'change'], message: '请输入竞争公司' }],
 
-          nboType: [{ required: true, trigger: ['blur', 'change'], message: '请选择项目类别' }],
-          // C => B
-          nboBudget: [
-            { required: true, trigger: ['blur', 'change'], message: '请输入项目预算' },
-            // { validator: validateNboBudget, trigger: ['blur', 'change'], message: '项目预算应大于0' },
-          ],
-          dealerSalesId: [{ required: true, trigger: ['blur', 'change'], message: '请选择渠道销售' }],
-          dealerSalesName: [{ required: true, trigger: ['blur', 'change'], message: '请选择项渠道销售人员' }],
-          dealerSalesContact: [{ required: true, trigger: ['blur', 'change'], message: '请输入渠道销售电话/微信' }],
-          estTransPrice: [{ required: true, trigger: ['blur', 'change'], message: '请选择预计出货金额' }],
-          // quotationFile: [{ required: true, trigger: ['blur', 'change'], message: '请选择报价单' }],
-          products: [{ required: true, trigger: ['blur', 'change'], message: '请选择产品' }],
-          // B => A
-          purchasingWay: [{ required: true, trigger: ['blur', 'change'], message: '请选择采购方式' }],
-          capitalSource: [{ required: true, trigger: ['blur', 'change'], message: '请输入资金来源' }],
-          planPurchaseTime: [{ required: true, trigger: ['blur', 'change'], message: '请选择计划采购时间' }],
-          contactId: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户联系人' }],
-          contactName: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户联系人姓名' }],
-          contactTelephone: [{ required: true, trigger: ['blur', 'change'], message: '请输入客户联系人电话/微信' }],
-          makerId: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户决策人' }],
-          makerName: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户决策人姓名' }],
-          makerDept: [{ required: true, trigger: ['blur', 'change'], message: '请选择客户决策部门' }],
-          customerIntentionFactory: [{ required: true, trigger: ['blur', 'change'], message: '请输入客户倾向厂家' }],
-          competitor: [{ required: true, trigger: ['blur', 'change'], message: '请输入竞争公司' }],
           // isAdoptDashoo: [{ required: true, trigger: ['blur', 'change'], message: '请选择是或否' }],
           // dashooParamFile: [{ validator: validateAdoptDashoo, trigger: ['blur', 'change'], message: '请选择上传文件' }],
         },
@@ -412,7 +413,8 @@
         this.customerInfo = val
       },
     },
-    created() {},
+    created() {
+    },
     mounted() {
       this.getOptions()
     },
@@ -603,7 +605,7 @@
         this.productData = this.productData.filter((item) => item.prodId !== data.prodId)
       },
       async getProductData(busId) {
-        const { data } = await businessApi.getProductByBusinessId({ id: busId })
+        const {data} = await businessApi.getProductByBusinessId({id: busId})
         if (data) {
           this.productData = data
         }
@@ -614,7 +616,7 @@
         if (bid) {
           this.canSelectBid = false
           this.isBid = true
-          this.selectCustomer([{ id: bid.custId, custName: bid.cuctName }])
+          this.selectCustomer([{id: bid.custId, custName: bid.cuctName}])
           this.selectCustomerBid([bid])
         } else {
           this.canSelectBid = true
@@ -633,9 +635,9 @@
             this.isBid = true
           }
           this.queryCustomerContact.custId = this.form.custId
-          this.customerInfo = { custId: this.form.custId, custName: this.form.custName }
-          this.queryDistContact = { distId: this.form.distributorId }
-          this.distInfo = { distId: this.form.distributorId, distName: this.form.distributorName }
+          this.customerInfo = {custId: this.form.custId, custName: this.form.custName}
+          this.queryDistContact = {distId: this.form.distributorId}
+          this.distInfo = {distId: this.form.distributorId, distName: this.form.distributorName}
           this.getProductData(row.id)
         }
         this.$nextTick(() => this.$refs['form'].clearValidate())
@@ -685,6 +687,7 @@
   .el-form-item--small.el-form-item {
     margin-bottom: 10px;
   }
+
   .el-col-8 {
     height: 75px;
   }

+ 1 - 2
src/views/proj/business/components/BusinessGradation.vue

@@ -266,7 +266,6 @@
   import SelectDistributorContact from '@/components/select/SelectDistributorContact'
   import ProductTable from '@/views/proj/business/components/ProductTable.vue'
   import SelectProduct from '@/components/select/SelectProduct'
-  import {nextTick} from "vue";
 
   export default {
     name: 'BusinessGradation',
@@ -544,7 +543,7 @@
         this.type = type
         this.form.isAdoptDashoo = '20'
         this.customerInfo = { custId: this.form.custId, custName: this.form.custName }
-        this.queryCustomerContact = { custId: this.form.custId, isDecision: '10' }
+        this.queryCustomerContact = { custId: this.form.custId }
         this.distInfo = { distId: this.form.distributorId, distName: this.form.distributorName }
         this.queryDistContact = { distId: this.form.distributorId }
         this.productData = this.form.products || []