Răsfoiți Sursa

feature(bug、优化):
1、升级字段验证
2、项目创建修改移除跟进计划
3、督办事项来源改下拉选
4、合并客户优化显示

ZZH-wl 2 ani în urmă
părinte
comite
fc6a42c489

+ 11 - 7
src/views/customer/components/Merge.vue

@@ -20,10 +20,11 @@
         <li :class="{ differ: flag.custName }">目标客户</li>
         <li :class="{ differ: flag.abbrName }">助记名</li>
         <li :class="{ differ: flag.custIndustry }">客户类型</li>
-        <li :class="{ differ: flag.custLevel }">客户级别</li>
         <li :class="{ differ: flag.source }">客户来源</li>
         <li :class="{ differ: flag.followUpDate }">下次联系时间</li>
-        <li :class="{ differ: flag.custLocation }">所在地区</li>
+        <li :class="{ differ: flag.custProvince }">所在省</li>
+        <li :class="{ differ: flag.custCity }">所在市</li>
+        <li :class="{ differ: flag.custRegion }">所在区</li>
         <li :class="{ differ: flag.custAddress }">详细地址</li>
         <li :class="{ differ: flag.remark }">备注</li>
         <li :class="{ differ: flag.salesName }">客户归属</li>
@@ -38,9 +39,6 @@
         <li>
           <el-radio v-model="form.custIndustry" :label="item.custIndustry" />
         </li>
-        <li>
-          <el-radio v-model="form.custLevel" :label="item.custLevel" />
-        </li>
         <li>
           <el-radio v-model="form.source" :label="item.source" />
         </li>
@@ -48,7 +46,13 @@
           <el-radio v-model="form.followUpDate" :label="item.followUpDate" />
         </li>
         <li>
-          <el-radio v-model="form.custLocation" :label="item.custLocation" />
+          <el-radio v-model="form.custProvince" :label="item.custProvince" />
+        </li>
+        <li>
+          <el-radio v-model="form.custCity" :label="item.custCity" />
+        </li>
+        <li>
+          <el-radio v-model="form.custRegion" :label="item.custRegion" />
         </li>
         <li>
           <el-radio v-model="form.custAddress" :label="item.custAddress" />
@@ -162,7 +166,7 @@
   }
 
   .merge {
-    height: 411px;
+    height: 450px;
     overflow: auto;
     display: flex;
 

+ 3 - 1
src/views/customer/follow.vue

@@ -35,7 +35,7 @@
         <el-input v-model.number="queryForm.targetName" placeholder="跟进对象" />
       </el-col>
       <el-col :span="4">
-        <el-input v-model="queryForm.managerId" placeholder="跟进人" />
+        <el-input v-model="queryForm.createdName" placeholder="跟进人" />
       </el-col>
       <el-col :span="4">
         <el-button icon="el-icon-plus" type="primary" @click="search">查询</el-button>
@@ -131,6 +131,7 @@
           custName: '',
           targetType: '',
           targetName: '',
+          createdName: '',
           targetId: '',
           managerId: '',
           daysBeforeToday: 20,
@@ -208,6 +209,7 @@
           custName: '',
           targetType: '',
           targetName: '',
+          createdName: '',
           targetId: '',
           managerId: '',
           daysBeforeToday: 20,

+ 14 - 1
src/views/plat/task/components/TaskAdd.vue

@@ -37,7 +37,9 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="督办事项来源" prop="source">
-            <el-input v-model="form.source" placeholder="请输入督办事项来源" />
+            <el-select v-model="form.source" placeholder="请选择督办事项来源" style="width: 100%">
+              <el-option v-for="item in sourceOptions" :key="item.key" :label="item.value" :value="item.key" />
+            </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="24">
@@ -222,6 +224,7 @@
         property: '',
         label: '',
         ids: [],
+        sourceOptions: [],
       }
     },
     watch: {
@@ -229,7 +232,17 @@
         this.$emit('update:selfVisible', val)
       },
     },
+    mounted() {
+      this.getOptions()
+    },
     methods: {
+      getOptions() {
+        Promise.all([this.getDicts('plat_task_source')])
+          .then(([source]) => {
+            this.sourceOptions = source.data.values || []
+          })
+          .catch((err) => console.log(err))
+      },
       // 关联类型变化
       targetTypeChange() {
         this.targets.splice(0, this.targets.length)

+ 15 - 25
src/views/plat/task/detail.vue

@@ -60,7 +60,7 @@
               <span v-show="theTask.targetType == '40'">回款</span>
             </el-descriptions-item> -->
             <el-descriptions-item content-class-name="my-content" label="督办事项来源" label-class-name="my-label">
-              {{ theTask.source }}
+              {{ selectDictLabel(sourceOptions, theTask.source) }}
             </el-descriptions-item>
           </el-descriptions>
         </header>
@@ -88,9 +88,10 @@
               </el-table-column>
               <el-table-column align="center" label="附件" prop="progFile">
                 <template #default="{ row }">
-                  <el-upload action="#" :http-request="uploadrequest" :show-file-list="false">
+                  <el-upload action="#" :disabled="type !== '1'" :http-request="uploadrequest" :show-file-list="false">
                     <el-button
                       v-permissions="['plat:task:enclosure:add']"
+                      :disabled="type !== '1'"
                       size="mini"
                       style="margin-left: 10px"
                       slot="trigger"
@@ -100,7 +101,6 @@
                     </el-button>
                     <el-button
                       v-show="row.progFile"
-                      v-permissions="['plat:task:enclosure:look']"
                       size="mini"
                       style="margin-left: 10px"
                       @click="showFile(row.progFile)">
@@ -157,32 +157,16 @@
             @click="changeStatus(20, '20')">
             提交
           </el-button>
-          <el-button
-            v-show="theTask.step === 30 && type == 1"
-            v-permissions="['plat:task:detail:adopt']"
-            type="primary"
-            @click="changeStatus(30, '30')">
+          <el-button v-show="theTask.step === 30 && type == 1" type="primary" @click="changeStatus(30, '30')">
             审批通过
           </el-button>
-          <el-button
-            v-show="theTask.step === 30 && type == 1"
-            v-permissions="['plat:task:detail:return']"
-            type="danger"
-            @click="changeStatus(30, '40')">
+          <el-button v-show="theTask.step === 30 && type == 1" type="danger" @click="changeStatus(30, '40')">
             审批退回
           </el-button>
-          <el-button
-            v-show="theTask.step === 40 && type == 1"
-            v-permissions="['plat:task:detail:adopt']"
-            type="primary"
-            @click="changeStatus(40, '30')">
+          <el-button v-show="theTask.step === 40 && type == 1" type="primary" @click="changeStatus(40, '30')">
             审批通过
           </el-button>
-          <el-button
-            v-show="theTask.step === 40 && type == 1"
-            v-permissions="['plat:task:detail:return']"
-            type="danger"
-            @click="changeStatus(40, '40')">
+          <el-button v-show="theTask.step === 40 && type == 1" type="danger" @click="changeStatus(40, '40')">
             审批退回
           </el-button>
           <el-button @click="$router.go(-1)">返回</el-button>
@@ -226,6 +210,7 @@
         // 督办进展
         progressList: [],
         // 日志
+        sourceOptions: [],
         logList: [],
         theTask: {},
         typeMap: {},
@@ -269,14 +254,19 @@
       },
       // 初始化数据
       async initData() {
-        const [err, [type, user]] = await to(
-          Promise.all([dictApi.getDictDataList({ dictType: 'task_type' }), userApi.getList()])
+        const [err, [type, source, user]] = await to(
+          Promise.all([
+            dictApi.getDictDataList({ dictType: 'task_type' }),
+            this.getDicts('plat_task_source'),
+            userApi.getList(),
+          ])
         )
         if (err) return
         this.types = type.data.list
         for (let type of this.types) {
           this.typeMap[type.dictValue] = type.dictLabel
         }
+        this.sourceOptions = source.data.values || []
         this.users = user.data.list
         for (let user of this.users) {
           this.userMap[user.id] = user.nickName

+ 7 - 0
src/views/plat/task/index.vue

@@ -92,6 +92,9 @@
               <span v-if="item.prop === 'taskType'">
                 {{ typeMap[row.taskType] }}
               </span>
+              <span v-else-if="item.prop === 'source'">
+                {{ selectDictLabel(sourceOptions, row.source) }}
+              </span>
               <span v-else-if="item.prop === 'taskStatus'">
                 <span v-if="row.taskStatus === '10'">发起</span>
                 <span v-if="row.taskStatus === '20'">进行中</span>
@@ -183,6 +186,7 @@
         // 类型信息
         typeMap: {},
         types: [],
+        sourceOptions: [],
         // 自定义列表
         checkList: [],
         columns: [
@@ -364,6 +368,9 @@
           .catch((err) => {
             console.error(err)
           })
+        this.getDicts('plat_task_source').then((response) => {
+          this.sourceOptions = response.data.values || []
+        })
       },
       // 显示详情数据
       showDetail(row) {

+ 14 - 6
src/views/proj/business/components/BusinessGradation.vue

@@ -32,7 +32,7 @@
               :disabled="type === 'up' && ['10', '20', '30'].includes(businessInfo.nboType)"
               label="C"
               value="30" />
-            <el-option v-if="type === 'down'" label="储备" value="50" />
+            <!--            <el-option v-if="type === 'down'" label="储备" value="50" />-->
           </el-select>
         </el-form-item>
         <!--   C-B     项目预算 经销商/代理商 技术支持时间 技术支持人员 技术支持内容 总部对接人 项目预算期限 资金来源 产品/方案满足情况-->
@@ -225,6 +225,10 @@
         if (!value && this.type === 'down') callback(new Error('不能为空'))
         else callback()
       }
+      const validateNboBudget = (rule, value, callback) => {
+        if (parseInt(value) <= 0) callback(new Error())
+        else callback()
+      }
       return {
         title: '项目',
         type: '',
@@ -255,11 +259,19 @@
           dealerSalesId: undefined,
           dealerSalesName: undefined,
           accendant: undefined,
+          projConversionReason: undefined,
           remark: undefined,
         },
         rules: {
           nboType: [{ required: true, trigger: ['blur', 'change'], message: '请选择项目类别' }],
-          nboBudget: [{ required: true, trigger: ['blur', 'change'], message: '请输入项目预算' }],
+          nboBudget: [
+            { required: true, trigger: ['blur', 'change'], message: '请输入项目预算' },
+            {
+              validator: validateNboBudget,
+              trigger: ['blur', 'change'],
+              message: '项目预算应大于0',
+            },
+          ],
           // distributorName: [{ required: true, trigger: ['blur', 'change'], message: '请选择经销商/代理商' }],
           technicalSupportName: [
             { validator: validateTechnicalSupport, trigger: ['blur', 'change'], message: '请输入技术支持人员' },
@@ -329,10 +341,6 @@
         this.form.id = this.busId
         this.form = Object.assign(this.form, this.businessInfo)
         this.form.nboType = undefined
-        this.form.technicalSupportName = undefined
-        this.form.technicalSupportContent = undefined
-        this.form.technicalSupportTime = undefined
-        this.form.remark = undefined
         this.form.isAdoptDashoo = '20'
         this.customerInfo = { custId: this.form.custId, custName: this.form.custName }
         this.queryContact = { custId: this.form.custId, isDecision: '10' }