Просмотр исходного кода

站点设置查重规则,销售线索新增领域

qymljy 3 лет назад
Родитель
Сommit
bfc6b6dee7
30 измененных файлов с 1244 добавлено и 109 удалено
  1. 5 2
      src/Form/projectChange/add.vue
  2. 6 3
      src/Form/projectChange/edit.vue
  3. 36 1
      src/HDrpManagement/projectChange/index.vue
  4. 1 1
      src/HDrpManagement/projectChange/modules/detail.vue
  5. 37 1
      src/HDrpManagement/publicCustomer/index.vue
  6. 1 1
      src/HDrpManagement/publicCustomer/modules/detail.vue
  7. 1 1
      src/HManagement/clueManage/clue_private/index.vue
  8. 40 13
      src/HManagement/clueManage/clue_private/modules/add.vue
  9. 8 0
      src/HManagement/clueManage/clue_private/modules/detail.vue
  10. 35 11
      src/HManagement/clueManage/clue_private/modules/edit.vue
  11. 1 1
      src/HManagement/clueManage/clue_public/index.vue
  12. 40 13
      src/HManagement/clueManage/clue_public/modules/add.vue
  13. 8 0
      src/HManagement/clueManage/clue_public/modules/detail.vue
  14. 34 9
      src/HManagement/clueManage/clue_public/modules/edit.vue
  15. 33 5
      src/HManagement/clueManage/m_activity/modules/addClue.vue
  16. 32 6
      src/HManagement/clueManage/m_activity/modules/editClue.vue
  17. 99 3
      src/HManagement/siteManage/securityConfig/index.vue
  18. 191 0
      src/HManagement/siteManage/securityConfig/modules/customerCheckRule.vue
  19. 273 0
      src/HManagement/siteManage/securityConfig/modules/projectCheckRule.vue
  20. 103 0
      src/HManagement/siteManage/securityConfig/modules/projectReportRule.vue
  21. 1 1
      src/SDrpManagement/salerPrivatecustomer/detail/customerDetail.vue
  22. 35 0
      src/SDrpManagement/salerPrivatecustomer/index.vue
  23. 40 13
      src/SManagement/orderclue/components/add.vue
  24. 40 13
      src/SManagement/orderclue/components/edit.vue
  25. 8 4
      src/SManagement/orderclue_detail/components/changeProject.vue
  26. 10 1
      src/SManagement/orderclue_detail/index.vue
  27. 36 0
      src/components/duplicatesCheck/projectChangeCheck.vue
  28. 36 0
      src/components/duplicatesCheck/projectCheck.vue
  29. 25 2
      src/components/duplicatesData/duplicatesCustomer.vue
  30. 29 4
      src/components/duplicatesData/duplicatesProject.vue

+ 5 - 2
src/Form/projectChange/add.vue

@@ -169,7 +169,7 @@ export default {
   components:{duplicateCheck},
   data(){
     var begdateTime = (rule,value,callback) =>{
-      console.log(value,this.form.enddate_due)
+      this.$refs.form.validateField('enddate_due')
       if (this.form.enddate_due !== ''){
         if (value > this.form.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -181,12 +181,14 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.form.begdate_due !== ''){
+      if (value && this.form.begdate_due !== '' ){
         if (value < this.form.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
+      }else if (value && this.form.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
       }else {
         callback();
       }
@@ -264,6 +266,7 @@ export default {
   methods:{
     /*省市县*/
     cascaderChange (val) {
+      this.form.province = val[0]
       /*console.log(val)
       this.form = Object.assign({},this.form,{province:val[0],city:val[1],county:val[2]})
       console.log(this.form)*/

+ 6 - 3
src/Form/projectChange/edit.vue

@@ -169,24 +169,27 @@ export default {
   props:['data','btnType'],
   data(){
     var begdateTime = (rule,value,callback) =>{
-      console.log(value,this.form.enddate_due)
+      this.$refs.form.validateField('enddate_due')
       if (this.form.enddate_due !== ''){
         if (value > this.form.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
         }else {
+          this.$refs.form.validateField('enddate_due')
           callback();
         }
-      }else {
+      } else {
         callback();
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.form.begdate_due !== ''){
+      if (value && this.form.begdate_due !== '' ){
         if (value < this.form.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
+      }else if (value && this.form.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
       }else {
         callback();
       }

+ 36 - 1
src/HDrpManagement/projectChange/index.vue

@@ -105,6 +105,17 @@
             </el-option>
           </el-select>
         </div>
+        <div  class="mt-10">
+          <label class="search__label">标签:</label>
+          <el-select  class="inline-16" v-model="selectParam.tag" size="small" placeholder="请选择" @change="selectChange" clearable>
+            <el-option
+                v-for="item in option.tagData"
+                :key="item.tag"
+                :label="item.tag"
+                :value="item.tag">
+            </el-option>
+          </el-select>
+        </div>
         <div class="mt-10">
           <label class="search__label" >创建日期:</label>
           <el-date-picker
@@ -213,7 +224,8 @@ export default {
         ],
         stageList:[
 
-        ]
+        ],
+        tagData:[],
       },
       brandSelect:[],
       tradefieldSelect:[],
@@ -229,6 +241,7 @@ export default {
         stagename:'',
         brandname:"",
         tradefield:"",
+        tag:""
       },
     }
   },
@@ -238,6 +251,7 @@ export default {
     this.getSysetms()
     this.queryUserInfo()
     this.stageData()
+    this.tagList()
   },
   methods: {
     /* 获取联系人:负责人列表 */
@@ -339,6 +353,27 @@ export default {
       console.log(JSON.parse(window.sessionStorage.getItem('userInfo')));
 
     },
+    /*标签列表*/
+    async tagList(){
+      const res = await this.$api.requested({
+        "id":20221013104401,
+        "content":{
+          "isExport":1,
+          "pageNumber":1,
+          "pageSize":100,
+          "sys_systemtagid":1,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      this.option.tagData = this.unique(res.data)
+    },
+    /*去重*/
+    unique(arr) {
+      const res = new Map();
+      return arr.filter((arr) => !res.has(arr.tag) && res.set(arr.tag, 1));
+    },
     /*获取阶段*/
     async stageData(){
       const res = await this.$api.requested({

+ 1 - 1
src/HDrpManagement/projectChange/modules/detail.vue

@@ -19,7 +19,7 @@
       <!-- 此区域提供了自定义操作按钮 -->
       <putPeople class="inline-16" @putSuccess="putSuccess" v-if="flagTag !== ''" :rowData="mainData" :flagTag="flagTag" :disabled="mainData.disabled"/>
       <recovery class="inline-16" v-if="tool.checkAuth($route.name,'recovery')  && mainData.status === '已失败'" :rowData="mainData" :disabled="mainData.disabled" @onRecovery="onSuccess"></recovery>
-      <duplicatesProject class="inline-16" :data="mainData" v-if="tagFlag"></duplicatesProject>
+      <duplicatesProject class="inline-16" :data="mainData" v-if="tagFlag && tool.checkAuth($route.name,'queryDuplicates') "></duplicatesProject>
       <finish class="inline-16" v-if="tool.checkAuth($route.name,'finish')  && mainData.status === '跟进中'" :disabled="mainData.disabled" @onFinish="onSuccess"></finish>
       <Del class="inline-16" :id="mainData.sa_projectid" :nameId="20221020144302" :rowData="mainData" nameKey="sa_projectids" v-if="tool.checkAuth($route.name,'toVoid') " :disabled="mainData.disabled" @deleteSuccess="deleteSuccess"/>
     </div>

+ 37 - 1
src/HDrpManagement/publicCustomer/index.vue

@@ -98,6 +98,17 @@
             </el-option>
           </el-select>
         </div>
+        <div  class="mt-10">
+          <label class="search__label">标签:</label>
+          <el-select  class="inline-16" v-model="selectParam.tag" size="small" placeholder="请选择" @change="selectChange" clearable>
+            <el-option
+                v-for="item in option.tagData"
+                :key="item.tag"
+                :label="item.tag"
+                :value="item.tag">
+            </el-option>
+          </el-select>
+        </div>
       <div  class="mt-10">
         <label class="search__label">创建时间:</label>
         <el-date-picker
@@ -185,6 +196,7 @@ export default {
         typeData:[],
         gradeData:[],
         industryData:[],
+        tagData:[],
         status:[
           {
             value:'潜在'
@@ -217,7 +229,8 @@ export default {
         industry:'',
         startdate: "",
         enddate: "",
-        tradingstatus:''
+        tradingstatus:'',
+        tag:''
       },
       dateSelect:'',
       selectCustomer:[]
@@ -229,6 +242,7 @@ export default {
       customerLead:() => this.customerLead,
       arealist:() => this.arealist,
       publicList:() => this.publicList
+
     }
   },
   components:{statusChange,importCustomer},
@@ -355,6 +369,27 @@ export default {
       })
       this.option.industryData = res.data
     },
+    /*标签列表*/
+    async tagList(){
+      const res = await this.$api.requested({
+        "id":20221013104401,
+        "content":{
+          "isExport":1,
+          "pageNumber":1,
+          "pageSize":100,
+          "sys_systemtagid":2,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      this.option.tagData = this.unique(res.data)
+    },
+    /*去重*/
+    unique(arr) {
+      const res = new Map();
+      return arr.filter((arr) => !res.has(arr.tag) && res.set(arr.tag, 1));
+    },
     selectChange(){
       if (this.dateSelect !== '' && this.dateSelect !== null){
         this.selectParam.startdate = this.dateSelect[0]
@@ -421,6 +456,7 @@ export default {
     this.industryList()
     this.queryPublicPool()
     this.queryCustomerGrade()
+    this.tagList()
   },
   mounted() {
 

+ 1 - 1
src/HDrpManagement/publicCustomer/modules/detail.vue

@@ -25,7 +25,7 @@
         <div class="inline-16" v-if="tool.checkAuth($route.name,'distribution') && length === 0">
           <distribution  :data="mainData"  @setSuccess="onSuccess"></distribution>
         </div>
-        <duplicatesCustomer class="inline-16" v-if="tagFlag" :data="mainData"></duplicatesCustomer>
+        <duplicatesCustomer class="inline-16" v-if="tagFlag && tool.checkAuth($route.name,'queryDuplicates')" :data="mainData"></duplicatesCustomer>
 <!--        <div class="inline-16" v-if="tool.checkAuth($route.name,'toVoid')">
           <to_void  :id="mainData.sa_customersid"  @toVoidSuccess="onSuccess"></to_void>
         </div>-->

+ 1 - 1
src/HManagement/clueManage/clue_private/index.vue

@@ -17,7 +17,7 @@
       @listCreate="list"
       @listData="listdata"
     >
-      <div slot="titleRight" style="display:flex;margin-left:10px">
+      <div slot="titleRight" >
         <!-- <distribution class="inline-16" v-if="tool.checkAuth($route.name,'distributionAgent')" @onSuccess="$refs.basicLayout.listData()"></distribution> -->
         <distributionSaler v-if="tool.checkAuth($route.name,'distributionSaler')" @onSuccess="$refs.basicLayout.listData()"></distributionSaler>
       </div>

+ 40 - 13
src/HManagement/clueManage/clue_private/modules/add.vue

@@ -5,10 +5,10 @@
       <div class="drawer__panel">
         <el-row :gutter="10">
         <el-form :model="param.content" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm"
-                 label-position="right">
+                 label-position="right" size="small">
           <el-col :span="20">
             <el-form-item label="客户名称:" prop="enterprisename">
-              <el-input v-model="param.content.enterprisename" size="small" placeholder="请填写客户名称"></el-input>
+              <el-input v-model="param.content.enterprisename"  placeholder="请填写客户名称"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="4">
@@ -19,24 +19,24 @@
           </el-col>
           <el-col :span="24">
             <el-form-item label="联系人:" prop="name">
-              <el-input v-model="param.content.name" size="small" placeholder="请填写联系人"></el-input>
+              <el-input v-model="param.content.name"  placeholder="请填写联系人"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="24">
             <el-form-item label="联系方式:" prop="phonenumber">
-              <el-input v-model="param.content.phonenumber" size="small" placeholder="请填写手机号"></el-input>
+              <el-input v-model="param.content.phonenumber"  placeholder="请填写手机号"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="24">
             <el-form-item label="省市县:" prop="province">
-              <el-cascader size="small" class="width-240" v-model="param.content.province" :options="_arealist"
+              <el-cascader  class="width-240" v-model="param.content.province" :options="_arealist"
                            @change="cascaderChange" ref="cascader">
               </el-cascader>
             </el-form-item>
           </el-col>
           <el-col :span="24">
             <el-form-item label="地址:" prop="address">
-              <el-input v-model="param.content.address" size="small" placeholder="请填写地址"></el-input>
+              <el-input v-model="param.content.address"  placeholder="请填写地址"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="24">
@@ -91,18 +91,30 @@
                   v-model="activityVisible"
                   width="400">
                 <selectActivity ref="member" :radio="true" @onSelect="centerChange" @onCancel="activityVisible = false"></selectActivity>
-                <el-input readonly type="text" slot="reference" size="small" @focus="activityVisible=true" v-model="param.content.campaign_name" placeholder="请选择市场活动"></el-input>
+                <el-input readonly type="text" slot="reference"  @focus="activityVisible=true" v-model="param.content.campaign_name" placeholder="请选择市场活动"></el-input>
               </el-popover>
             </el-form-item>
           </el-col>
+          <el-col :span="24">
+            <el-form-item label="领域:" prop="tradefield">
+              <el-select v-model="param.content.tradefield" placeholder="请选择领域" style="width: 100%">
+                <el-option
+                    v-for="item in tradefieldSelect"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
           <el-col :span="24">
             <el-form-item label="来源:" prop="cluesource">
-              <el-input v-model="param.content.cluesource" size="small" placeholder="请填写来源"></el-input>
+              <el-input v-model="param.content.cluesource"  placeholder="请填写来源"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="24">
             <el-form-item label="线索概况:" prop="notes">
-              <el-input type="textarea" v-model="param.content.notes" size="small" placeholder="请填写线索概况"></el-input>
+              <el-input type="textarea" v-model="param.content.notes"  placeholder="请填写线索概况"></el-input>
             </el-form-item>
           </el-col>
         </el-form>
@@ -123,6 +135,7 @@ export default {
   components: {selectActivity,businessMessage},
   data () {
     var begdateTime = (rule,value,callback) =>{
+      this.$refs.ruleForm.validateField('enddate_due')
       if (this.param.content.enddate_due !== ''){
         if (value > this.param.content.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -134,13 +147,15 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.param.content.begdate_due !== ''){
+      if (value && this.param.content.begdate_due !== ''){
         if (value < this.param.content.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
-      }  else {
+      }  else if (value && this.param.content.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
+      }else {
         callback();
       }
     }
@@ -173,6 +188,7 @@ export default {
             "totalinvestment": '', //总投资额(百万)
             "begdate_due": "", //预计开工时间
             "enddate_due": "", //预计完工时间
+            "tradefield":""
           }
       },
       rules: {
@@ -186,9 +202,13 @@ export default {
         enddate_due:[
           { required: false, validator: enddateTime, trigger: 'change' }
         ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'}
+        ],
       },
       areaSelectResult:'',
-      options: []
+      options: [],
+      tradefieldSelect:[],
     }
   },
   props:{
@@ -210,6 +230,7 @@ export default {
   methods: {
     onShow () {
       this.drawer = true
+      this.queryTradefield()
     },
     addOrdercule() {
       if (this.param.content.begdate_due !== ''){
@@ -275,7 +296,13 @@ export default {
       this.param.content.address = val.address
       this.areaSelectResult = [val.regProvince,val.regCity,val.regArea]
       this.param.content.province = [val.regProvince,val.regCity,val.regArea]
-    }
+    },
+    /*获取领域*/
+    queryTradefield(){
+      this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
+        this.tradefieldSelect = res.data
+      })
+    },
   }
 }
 

+ 8 - 0
src/HManagement/clueManage/clue_private/modules/detail.vue

@@ -186,6 +186,10 @@ export default {
           label:'市场活动',
           value:this.mainData.campaign_name
         },
+        {
+          label:'领域',
+          value:this.mainData.tradefield
+        },
         {
           label:'负责人',
           value:this.mainData.allocationstatus === '已分配'?this.mainData.leader[0].name:'--'
@@ -292,6 +296,10 @@ export default {
             label:'市场活动',
             value:this.mainData.campaign_name
           },
+          {
+            label:'领域',
+            value:this.mainData.tradefield
+          },
           {
             label:'来源',
             value:this.mainData.cluesource

+ 35 - 11
src/HManagement/clueManage/clue_private/modules/edit.vue

@@ -4,10 +4,10 @@
     <el-drawer title="编辑线索" :show-close="false" append-to-body :visible.sync="dialogFormVisible" size="800px" @close="onClose">
       <div class="drawer__panel">
         <el-row :gutter="10">
-          <el-form :model="form" :rules="rules" label-position="right" label-width="120px" size="small">
+          <el-form :model="form" :rules="rules" ref="form" label-position="right" label-width="120px" size="small">
             <el-col :span="20">
               <el-form-item label="客户名称:" prop="enterprisename">
-                <el-input v-model="form.enterprisename" size="small" placeholder="请填写客户名称"></el-input>
+                <el-input v-model="form.enterprisename"  placeholder="请填写客户名称"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="4">
@@ -15,12 +15,12 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系人:" prop="name">
-                <el-input v-model="form.name" size="small" placeholder="请填写联系人"></el-input>
+                <el-input v-model="form.name"  placeholder="请填写联系人"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系方式:" prop="phonenumber">
-                <el-input v-model="form.phonenumber" size="small" placeholder="请填写手机号"></el-input>
+                <el-input v-model="form.phonenumber"  placeholder="请填写手机号"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
@@ -91,10 +91,22 @@
                     v-model="activityVisible"
                     width="400">
                   <selectActivity ref="member" :radio="true" @onSelect="centerChange" @onCancel="activityVisible = false"></selectActivity>
-                  <el-input readonly type="text" slot="reference" size="small" @focus="activityVisible=true" v-model="form.campaign_name" placeholder="请填写市场活动"></el-input>
+                  <el-input readonly type="text" slot="reference"  @focus="activityVisible=true" v-model="form.campaign_name" placeholder="请填写市场活动"></el-input>
                 </el-popover>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="领域:" prop="tradefield">
+                <el-select v-model="form.tradefield" placeholder="请选择领域" style="width: 100%">
+                  <el-option
+                      v-for="item in tradefieldSelect"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="来源:">
                 <el-input v-model="form.cluesource" autocomplete="off" placeholder="请填写来源"></el-input>
@@ -124,7 +136,7 @@ export default {
   components: {selectActivity,businessMessage},
   data () {
     var begdateTime = (rule,value,callback) =>{
-      console.log(value,this.form.enddate_due)
+
       if (this.form.enddate_due !== ''){
         if (value > this.form.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -136,13 +148,15 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.form.begdate_due !== ''){
+      if (value && this.form.begdate_due !== ''){
         if (value < this.form.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
-      }  else {
+      }  else if (value && this.form.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
+      }else {
         callback();
       }
     }
@@ -167,6 +181,7 @@ export default {
         "cluesource": "",
         "sat_campaignid":0,//活动id,当活动id大于0是默认业务员创建
         "isprivate":1,//0表示公海,1表示私域
+        "tradefield":""
       },
       arealist:[],
       rules: {
@@ -180,7 +195,11 @@ export default {
         enddate_due:[
           { required: false, validator: enddateTime, trigger: 'change' }
         ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'}
+        ],
       },
+      tradefieldSelect:[],
     }
   },
   methods:{
@@ -191,8 +210,7 @@ export default {
       this.form.enterprisename = this.data.enterprisename_customer
       this.form.totalinvestment !== 0 ? this.form.totalinvestment =  this.tool.formatAmount(this.form.totalinvestment,2): this.form.totalinvestment =''
       this.form.costofconstruction !== 0 ? this.form.costofconstruction =  this.tool.formatAmount(this.form.costofconstruction,2): this.form.costofconstruction =''
-      console.log(this.form);
-      
+      this.queryTradefield()
     },
     async onSubmit () {
       if (this.form.begdate_due !== ''){
@@ -249,7 +267,13 @@ export default {
       this.dialogFormVisible = false
       this.activityVisible = false
       this.$refs.businessMessage.businessShow = false
-    }
+    },
+    /*获取领域*/
+    queryTradefield(){
+      this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
+        this.tradefieldSelect = res.data
+      })
+    },
   },
   mounted () {
   }

+ 1 - 1
src/HManagement/clueManage/clue_public/index.vue

@@ -17,7 +17,7 @@
     <div slot="custom" style="display:flex">
 
     </div>
-      <div slot="titleRight" style="display:flex;margin-left:10px">
+      <div slot="titleRight" >
         <!-- <distribution class="inline-16" v-if="tool.checkAuth($route.name,'distribution')" @onSuccess="$refs.basicLayout.listData()"></distribution> -->
         <distributionSaler v-if="tool.checkAuth($route.name,'distributionSaler')" @onSuccess="$refs.basicLayout.listData()"></distributionSaler>
       </div>

+ 40 - 13
src/HManagement/clueManage/clue_public/modules/add.vue

@@ -5,10 +5,10 @@
       <div class="drawer__panel">
         <el-row :gutter="10">
           <el-form :model="param.content" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm"
-                   label-position="right">
+                   label-position="right" size="small">
             <el-col :span="20">
               <el-form-item label="客户名称:" prop="enterprisename">
-                <el-input v-model="param.content.enterprisename" size="small" placeholder="请填写客户名称"></el-input>
+                <el-input v-model="param.content.enterprisename"  placeholder="请填写客户名称"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="4">
@@ -18,24 +18,24 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系人:" prop="name">
-                <el-input v-model="param.content.name" size="small" placeholder="请填写联系人"></el-input>
+                <el-input v-model="param.content.name"  placeholder="请填写联系人"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系方式:" prop="phonenumber">
-                <el-input v-model="param.content.phonenumber" size="small" placeholder="请填写手机号"></el-input>
+                <el-input v-model="param.content.phonenumber"  placeholder="请填写手机号"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="省市县:" prop="province">
-                <el-cascader size="small" class="width-240" v-model="param.content.province" :options="basicData.data().areaData"
+                <el-cascader  class="width-240" v-model="param.content.province" :options="basicData.data().areaData"
                              @change="cascaderChange" ref="cascader">
                 </el-cascader>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="地址:" prop="address">
-                <el-input v-model="param.content.address" size="small" placeholder="请填写地址"></el-input>
+                <el-input v-model="param.content.address"  placeholder="请填写地址"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
@@ -90,18 +90,30 @@
                     v-model="activityVisible"
                     width="400">
                   <selectActivity ref="member" :radio="true" @onSelect="centerChange" @onCancel="activityVisible = false"></selectActivity>
-                  <el-input readonly type="text" slot="reference" size="small" @focus="activityVisible=true" v-model="param.content.campaign_name" placeholder="请填写市场活动"></el-input>
+                  <el-input readonly type="text" slot="reference"  @focus="activityVisible=true" v-model="param.content.campaign_name" placeholder="请填写市场活动"></el-input>
                 </el-popover>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="领域:" prop="tradefield">
+                <el-select v-model="param.content.tradefield" placeholder="请选择领域" style="width: 100%" >
+                  <el-option
+                      v-for="item in tradefieldSelect"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="来源:" prop="cluesource">
-                <el-input v-model="param.content.cluesource" size="small" placeholder="请填写来源"></el-input>
+                <el-input v-model="param.content.cluesource"  placeholder="请填写来源"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="线索概况:" prop="notes">
-                <el-input type="textarea" v-model="param.content.notes" size="small" placeholder="请填写线索概况"></el-input>
+                <el-input type="textarea" v-model="param.content.notes"  placeholder="请填写线索概况"></el-input>
               </el-form-item>
             </el-col>
           </el-form>
@@ -122,6 +134,7 @@ export default {
   components: {selectActivity,businessMessage},
   data () {
     var begdateTime = (rule,value,callback) =>{
+      this.$refs.ruleForm.validateField('enddate_due')
       if (this.param.content.enddate_due !== ''){
         if (value > this.param.content.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -133,13 +146,15 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.param.content.begdate_due !== ''){
+      if (value && this.param.content.begdate_due !== ''){
         if (value < this.param.content.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
-      }  else {
+      }  else if (value && this.param.content.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
+      }else {
         callback();
       }
     }
@@ -171,6 +186,7 @@ export default {
           "totalinvestment": '', //总投资额(百万)
           "begdate_due": "", //预计开工时间
           "enddate_due": "", //预计完工时间
+          "tradefield":""
         }
       },
       rules: {
@@ -184,9 +200,13 @@ export default {
         enddate_due:[
           { required: false, validator: enddateTime, trigger: 'change' }
         ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'}
+        ],
       },
       areaSelectResult:'',
-      options: []
+      options: [],
+      tradefieldSelect:[],
     }
   },
   props:{
@@ -197,6 +217,7 @@ export default {
   methods: {
     onShow () {
       this.drawer = true
+      this.queryTradefield()
     },
     addOrdercule() {
       if (this.param.content.begdate_due !== ''){
@@ -263,7 +284,13 @@ export default {
       this.param.content.address = val.address
       this.areaSelectResult = [val.regProvince,val.regCity,val.regArea]
       this.param.content.province = [val.regProvince,val.regCity,val.regArea]
-    }
+    },
+    /*获取领域*/
+    queryTradefield(){
+      this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
+        this.tradefieldSelect = res.data
+      })
+    },
   }
 }
 

+ 8 - 0
src/HManagement/clueManage/clue_public/modules/detail.vue

@@ -196,6 +196,10 @@ export default {
           label:'市场活动',
           value:this.mainData.campaign_name
         },
+        {
+          label:'领域',
+          value:this.mainData.tradefield
+        },
         {
           label:'所属业务员',
           value:this.mainData.enterprisename
@@ -270,6 +274,10 @@ export default {
             label:'市场活动',
             value:this.mainData.campaign_name
           },
+          {
+            label:'领域',
+            value:this.mainData.tradefield
+          },
           {
             label:'来源',
             value:this.mainData.cluesource

+ 34 - 9
src/HManagement/clueManage/clue_public/modules/edit.vue

@@ -7,7 +7,7 @@
           <el-form :model="form" :rules="rule" ref="form" label-position="right" label-width="120px" size="small">
             <el-col :span="20">
               <el-form-item label="客户名称:" prop="enterprisename">
-                <el-input v-model="form.enterprisename" size="small" placeholder="请填写客户名称"></el-input>
+                <el-input v-model="form.enterprisename" placeholder="请填写客户名称"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="4">
@@ -17,7 +17,7 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系人:" prop="name">
-                <el-input v-model="form.name" size="small" placeholder="请填写联系人"></el-input>
+                <el-input v-model="form.name"  placeholder="请填写联系人"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
@@ -93,10 +93,22 @@
                     v-model="activityVisible"
                     width="400">
                   <selectActivity ref="member" :radio="true" @onSelect="centerChange" @onCancel="activityVisible = false"></selectActivity>
-                  <el-input readonly type="text" slot="reference" size="small" @focus="activityVisible=true" v-model="form.campaign_name" placeholder="请填写市场活动"></el-input>
+                  <el-input readonly type="text" slot="reference"  @focus="activityVisible=true" v-model="form.campaign_name" placeholder="请填写市场活动"></el-input>
                 </el-popover>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="领域:" prop="tradefield">
+                <el-select v-model="form.tradefield" placeholder="请选择领域" style="width: 100%">
+                  <el-option
+                      v-for="item in tradefieldSelect"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="来源:" prop="cluesource">
                 <el-input v-model="form.cluesource" autocomplete="off" placeholder="请填写来源"></el-input>
@@ -104,7 +116,7 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="线索概况:">
-                <el-input v-model="form.notes" type="textarea" :rows="4" autocomplete="off" placeholder="请填写线索概况"></el-input>
+                <el-input v-model="form.notes" type="textarea"  autocomplete="off" placeholder="请填写线索概况"></el-input>
               </el-form-item>
             </el-col>
           </el-form>
@@ -127,7 +139,7 @@ export default {
   props:['data','type'],
   data () {
     var begdateTime = (rule,value,callback) =>{
-      console.log(value,this.form.enddate_due)
+      this.$refs.form.validateField('enddate_due')
       if (this.form.enddate_due !== ''){
         if (value > this.form.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -139,13 +151,15 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.form.begdate_due !== ''){
+      if (value && this.form.begdate_due !== ''){
         if (value < this.form.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
-      }  else {
+      }  else if (value && this.form.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
+      }else {
         callback();
       }
     }
@@ -168,9 +182,13 @@ export default {
         enddate_due:[
           { required: false, validator: enddateTime, trigger: 'change' }
         ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'}
+        ],
       },
       form:{},
-      arealist:[]
+      arealist:[],
+      tradefieldSelect:[],
     }
   },
   methods:{
@@ -181,6 +199,7 @@ export default {
       this.form.enterprisename = this.data.enterprisename_customer
       this.form.totalinvestment !== 0 ? this.form.totalinvestment =  this.tool.formatAmount(this.form.totalinvestment,2): this.form.totalinvestment =''
       this.form.costofconstruction !== 0 ? this.form.costofconstruction =  this.tool.formatAmount(this.form.costofconstruction,2): this.form.costofconstruction =''
+      this.queryTradefield()
     },
     async onSubmit () {
       if (this.form.begdate_due !== ''){
@@ -238,7 +257,13 @@ export default {
       this.dialogFormVisible = false
       this.$refs.businessMessage.businessShow = false
       this.activityVisible = false
-    }
+    },
+    /*获取领域*/
+    queryTradefield(){
+      this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
+        this.tradefieldSelect = res.data
+      })
+    },
   },
   mounted () {
     

+ 33 - 5
src/HManagement/clueManage/m_activity/modules/addClue.vue

@@ -7,6 +7,7 @@
       size="800px"
       direction="rtl"
       :show-close="false"
+      @close="drawer = false,$refs.form.resetFields()"
       append-to-body>
       <div class="drawer__panel">
         <el-row :gutter="20">
@@ -96,6 +97,18 @@
                 <el-input disabled type="text" size="small" v-model="activityName"></el-input>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="领域:" prop="tradefield">
+                <el-select v-model="form.tradefield" placeholder="请选择领域" style="width: 100%">
+                  <el-option
+                      v-for="item in tradefieldSelect"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="来源:" prop="cluesource">
                 <el-input v-model="form.cluesource" placeholder="请填写来源"></el-input>
@@ -106,6 +119,7 @@
                 <el-input v-model="form.notes" placeholder="请填写线索概况"></el-input>
               </el-form-item>
             </el-col>
+
           </el-form>
         </el-row>
       </div>
@@ -126,7 +140,7 @@ export default {
   components: {selectActivity,businessMessage},
   data () {
     var begdateTime = (rule,value,callback) =>{
-      console.log(value,this.form.enddate_due)
+      this.$refs.form.validateField('enddate_due')
       if (this.form.enddate_due !== ''){
         if (value > this.form.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -138,13 +152,15 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.form.begdate_due !== ''){
+      if (value && this.form.begdate_due !== ''){
         if (value < this.form.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
-      }  else {
+      }  else if (value && this.form.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
+      }else {
         callback();
       }
     }
@@ -176,6 +192,7 @@ export default {
         "totalinvestment": '', //总投资额(百万)
         "begdate_due": "", //预计开工时间
         "enddate_due": "", //预计完工时间
+        "tradefield":""
       },
       rules:{
         phonenumber:[
@@ -189,14 +206,19 @@ export default {
         enddate_due:[
           { required: false, validator: enddateTime, trigger: 'change' }
         ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'}
+        ],
       },
-      options:[]
+      options:[],
+      tradefieldSelect:[],
     }
   },
   methods:{
     onShow () {
       this.drawer = true
       this.activityName = this.data.name
+      this.queryTradefield()
     },
     add () {
       if (this.form.begdate_due !== ''){
@@ -257,7 +279,13 @@ export default {
       this.form.enterprisename = val.companyName
       this.form.address = val.address
       this.form.province = [val.regProvince,val.regCity,val.regArea]
-    }
+    },
+    /*获取领域*/
+    queryTradefield(){
+      this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
+        this.tradefieldSelect = res.data
+      })
+    },
   }
 }
 

+ 32 - 6
src/HManagement/clueManage/m_activity/modules/editClue.vue

@@ -94,6 +94,18 @@
               <el-input disabled type="text" size="small" v-model="form.campaign_name"></el-input>
             </el-form-item>
           </el-col>
+          <el-col :span="24">
+            <el-form-item label="领域:" prop="tradefield">
+              <el-select v-model="form.tradefield" placeholder="请选择领域" style="width: 100%">
+                <el-option
+                    v-for="item in tradefieldSelect"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
           <el-col :span="24">
             <el-form-item label="来源" prop="cluesource">
               <el-input v-model="form.cluesource" placeholder="请输入来源"></el-input>
@@ -104,6 +116,7 @@
               <el-input v-model="form.notes" placeholder="请输入备注"></el-input>
             </el-form-item>
           </el-col>
+
         </el-form>
       </div>
       <div class="fixed__btn__panel">
@@ -121,6 +134,7 @@ export default {
   components: {selectActivity,businessMessage},
   data () {
     var begdateTime = (rule,value,callback) =>{
+      this.$refs.form.validateField('enddate_due')
       if (this.form.enddate_due !== ''){
         if (value > this.form.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -132,13 +146,15 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.form.begdate_due !== ''){
+      if (value && this.form.begdate_due !== ''){
         if (value < this.form.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
-      }  else {
+      }  else if (value && this.form.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
+      }else {
         callback();
       }
     }
@@ -163,6 +179,7 @@ export default {
         "cluesource": "",
         "sat_campaignid":0,//活动id,当活动id大于0是默认业务员创建
         "isprivate":0,//0表示公海,1表示私域
+        "tradefield":""
       },
       rules:{
         phonenumber:[
@@ -176,8 +193,12 @@ export default {
         enddate_due:[
           { required: false, validator: enddateTime, trigger: 'change' }
         ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'}
+        ],
       },
-      options:[]
+      options:[],
+      tradefieldSelect:[],
     }
   },
   props:['data','disabled'],
@@ -190,8 +211,7 @@ export default {
       this.form.sat_campaignid = this.$route.query.id
       this.form.totalinvestment !== 0 ? this.form.totalinvestment =  this.tool.formatAmount(this.form.totalinvestment,2): this.form.totalinvestment =''
       this.form.costofconstruction !== 0 ? this.form.costofconstruction =  this.tool.formatAmount(this.form.costofconstruction,2): this.form.costofconstruction =''
-      console.log(this.form);
-      
+      this.queryTradefield()
     },
     add () {
       if (this.form.begdate_due !== ''){
@@ -250,7 +270,13 @@ export default {
     onClose(){
       this.drawer = false
       this.$refs.businessMessage.businessShow = false
-    }
+    },
+    /*获取领域*/
+    queryTradefield(){
+      this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
+        this.tradefieldSelect = res.data
+      })
+    },
   }
 }
 

+ 99 - 3
src/HManagement/siteManage/securityConfig/index.vue

@@ -46,7 +46,7 @@
             <p class="explain-tips">当前设置:{{productImage.length === 0 ? '还未上传产品默认图':'已上传产品默认图'}}</p>
           </div>
         </div>
-        <productImage @setProductImage="queryProductImage"></productImage>
+        <productImage  @setProductImage="queryProductImage"></productImage>
       </div>
     </div>
     <div class="panel" style="margin-bottom:16px">
@@ -61,6 +61,78 @@
         <login-select v-if="tool.checkAuth($route.name,'loginType')" @setLogin="querySite_Parameter"></login-select>
       </div>
     </div>
+    <div class="panel" style="margin-bottom:16px">
+      <div class="flex-align-center flex-between">
+        <div class="flex-align-stretch">
+          <img width="72" height="72" src="../../../assets/icons/customerRule.png" alt="">
+          <div class="text-panel">
+            <p class="explain-title">客户查重规则</p>
+            <p class="explain-tips">当前设置:第一层
+              <span v-for="(item,index) in customerRule.fields1">
+                <span v-if="index === customerRule.fields1.length -1">{{item}}</span>
+                <span v-else>{{item + ','}}</span>
+              </span>
+              ,第二层
+              <span v-for="(item,index) in customerRule.fields2">
+                <span v-if="index === customerRule.fields2.length -1">{{item}}</span>
+                <span v-else>{{item + ','}}</span>
+              </span>
+              ,第三层
+              <span v-for="(item,index) in customerRule.fields3">
+                <span v-if="index === customerRule.fields3.length -1">{{item}}</span>
+                <span v-else>{{item + ','}}</span>
+              </span>
+            </p>
+          </div>
+        </div>
+        <customerCheckRule v-if="tool.checkAuth($route.name,'customerCheckRule')" @queryRule="queryRule"></customerCheckRule>
+      </div>
+    </div>
+    <div class="panel" style="margin-bottom:16px">
+      <div class="flex-align-center flex-between">
+        <div class="flex-align-stretch">
+          <img width="72" height="72" src="../../../assets/icons/projectRule.png" alt="">
+          <div class="text-panel">
+            <p class="explain-title">项目查重规则</p>
+            <p class="explain-tips">当前设置:第一层
+              <span v-for="(item,index) in projectRule.fields1">
+                <span v-if="index === projectRule.fields1.length -1">{{item}}</span>
+                <span v-else>{{item + ','}}</span>
+              </span>
+              ,第二层
+              <span v-for="(item,index) in projectRule.fields2">
+                <span v-if="index === projectRule.fields2.length -1">{{item}}</span>
+                <span v-else>{{item + ','}}</span>
+              </span>
+              ,第三层
+              <span v-for="(item,index) in projectRule.fields3">
+                <span v-if="index === projectRule.fields3.length -1">{{item}}</span>
+                <span v-else>{{item + ','}}</span>
+              </span>
+              ,保护期:<span>{{projectprotectionperiod}}</span>
+            </p>
+          </div>
+        </div>
+        <projectCheckRule v-if="tool.checkAuth($route.name,'projectCheckRule')"  @queryRule="queryRule"></projectCheckRule>
+      </div>
+    </div>
+    <div class="panel" style="margin-bottom:16px">
+      <div class="flex-align-center flex-between">
+        <div class="flex-align-stretch">
+          <img width="72" height="72" src="../../../assets/icons/projectReportRule.png" alt="">
+          <div class="text-panel">
+            <p class="explain-title">项目报备规则</p>
+            <p class="explain-tips">当前设置:
+              <span v-for="(item,index) in projectReportRule">
+                <span v-if="index === projectReportRule.length -1">{{item}}</span>
+                <span v-else>{{item + ','}}</span>
+              </span>
+            </p>
+          </div>
+        </div>
+        <projectReportRule v-if="tool.checkAuth($route.name,'projectReportRule')"  @queryRule="queryRule"></projectReportRule>
+      </div>
+    </div>
     <div class="container normal-panel" style="display:flex;justify-content:space-around;border-bottom:none">
       <el-descriptions title="广告位管理"></el-descriptions>
     </div>
@@ -84,6 +156,11 @@ import loginSelect from './modules/loginSelect.vue'
 import messageTips from '../messageSendtype/index.vue'
 import advertisementMag from '../advertisement_mag/index'
 
+import customerCheckRule from "@/HManagement/siteManage/securityConfig/modules/customerCheckRule";
+import projectCheckRule from "@/HManagement/siteManage/securityConfig/modules/projectCheckRule";
+import projectReportRule from "@/HManagement/siteManage/securityConfig/modules/projectReportRule";
+import {log} from "@antv/g2plot/lib/utils";
+
 export default {
   components:{
     setPassword,
@@ -92,14 +169,21 @@ export default {
     basicInfo,
     productImage,
     messageTips,
-    advertisementMag
+    advertisementMag,
+    customerCheckRule,
+    projectCheckRule,
+    projectReportRule
   },
   data () {
     return {
       basicInfo:{},
       obj:{},
       watermarkImage:{},
-      productImage:{}
+      productImage:{},
+      customerRule:{},
+      projectRule:{},
+      projectReportRule:{},
+      projectprotectionperiod:''
     }
   },
   computed:{
@@ -171,6 +255,17 @@ export default {
         length:res.data.length,
         image:res.data.length !== 0 ? res.data[0].url: ''
       }
+    },
+    /*查重规则*/
+    async queryRule(){
+      const res = await this.$api.requested({
+        "id": "20230410090502",
+        "content": {},
+      })
+      this.customerRule = res.data.custcheckrule
+      this.projectRule = res.data.projectcheckrule
+      this.projectprotectionperiod = res.data.projectprotectionperiod
+      this.projectReportRule = res.data.projectcheckfields
     }
   },
   mounted () {
@@ -178,6 +273,7 @@ export default {
     this.querySite_Parameter()
     this.queryEnterpriseWatermark()
     this.queryProductImage()
+    this.queryRule()
   }
 }
 

+ 191 - 0
src/HManagement/siteManage/securityConfig/modules/customerCheckRule.vue

@@ -0,0 +1,191 @@
+<template>
+  <div>
+    <el-button size="small" style="width:120px" type="primary" @click="querySite_Parameter">设 置</el-button>
+    <el-dialog title="客户查重规则" append-to-body :visible.sync="dialogEditVisible" width="860px">
+      <el-row :gutter="16">
+        <el-col :span="24" style="margin-top: -20px">
+          <span style="color: red">注意:每层的查重条件可多选字段</span>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <div style="width: 50px" class="inline-16">
+            第一层:
+          </div>
+          <div style="width: 580px;" class="inline-16" >
+            <el-select v-model="fields1" multiple placeholder="请选择字段" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in options"
+                  :key="item.column_name"
+                  :label="item.column_name"
+                  :value="item.column_name">
+                <span style="float: left">{{ item.column_name }}</span>
+                <span style="float: right; color: #8492a6; font-size: 12px">{{ item.column_comment?item.column_comment:'' }}</span>
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 100px;" class="inline-16" >
+            <el-select v-model="relation" placeholder="请选择" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in relations"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 50px" class="inline-16">
+            关系
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <div style="width: 50px" class="inline-16">
+            第二层:
+          </div>
+          <div style="width: 580px;" class="inline-16" >
+            <el-select v-model="fields2" multiple placeholder="请选择字段" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in options"
+                  :key="item.column_name"
+                  :label="item.column_name"
+                  :value="item.column_name">
+                <span style="float: left">{{ item.column_name }}</span>
+                <span style="float: right; color: #8492a6; font-size: 12px">{{ item.column_comment?item.column_comment:'' }}</span>
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 100px;" class="inline-16" >
+            <el-select v-model="relation" placeholder="请选择" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in relations"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 50px" class="inline-16">
+            关系
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <div style="width: 50px" class="inline-16">
+            第三层:
+          </div>
+          <div style="width: 580px;" class="inline-16" >
+            <el-select v-model="fields3" multiple placeholder="请选择字段" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in options"
+                  :key="item.column_name"
+                  :label="item.column_name"
+                  :value="item.column_name">
+                <span style="float: left">{{ item.column_name }}</span>
+                <span style="float: right; color: #8492a6; font-size: 12px">{{ item.column_comment?item.column_comment:'' }}</span>
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 100px;" class="inline-16" >
+            <el-select v-model="relation" placeholder="请选择" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in relations"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 50px" class="inline-16">
+            关系
+          </div>
+        </el-col>
+      </el-row>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogEditVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning"  class="normal-btn-width btn-warning" @click="onSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "customerCheckRule",
+  data(){
+    return {
+      dialogEditVisible:false,
+      options: [],
+      fields1: [],
+      fields2: [],
+      fields3: [],
+      relations: [{
+        value:'并且',
+        label: '并且'
+      }],
+      relation:''
+    }
+  },
+  methods:{
+    querySite_Parameter(){
+      this.dialogEditVisible = true
+      this.relation = this.relations[0].value
+      this.queryTable()
+      this.queryRule()
+    },
+    async queryTable(){
+      const res = await this.$api.requested({
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 50,
+          "typename": "tablecolumnselect",
+          "parameter": {
+            "table_name": "sa_customers"
+          }
+        }
+      })
+      this.options = res.data
+    },
+    async onSubmit(){
+      const res = await this.$api.requested({
+        "id": "20230408091602",
+        "content": {
+          "custcheckrule": {
+            "fields1": this.fields1,
+            "factor1": "and",
+            "fields2":this.fields2,
+            "factor2": "and",
+            "fields3":this.fields3,
+            "factor3": "and"
+          }
+        },
+      })
+      this.tool.showMessage(res,()=>{
+        this.$emit('queryRule')
+        this.dialogEditVisible = false
+        this.fields1 = []
+        this.fields2 = []
+        this.fields3 = []
+      })
+    },
+    onClose(){
+      this.dialogEditVisible = false
+      this.fields1 = []
+      this.fields2 = []
+      this.fields3 = []
+    },
+    /*查重规则*/
+    async queryRule(){
+      const res = await this.$api.requested({
+        "id": "20230410090502",
+        "content": {},
+      })
+      this.fields1 = res.data.custcheckrule.fields1
+      this.fields2 = res.data.custcheckrule.fields2
+      this.fields3 = res.data.custcheckrule.fields3
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 273 - 0
src/HManagement/siteManage/securityConfig/modules/projectCheckRule.vue

@@ -0,0 +1,273 @@
+<template>
+  <div>
+    <el-button size="small" style="width:120px" type="primary" @click="querySite_Parameter">设 置</el-button>
+    <el-dialog title="客户查重规则" append-to-body :visible.sync="dialogEditVisible" width="860px">
+      <el-row :gutter="16">
+        <el-col :span="24" style="margin-top: -20px">
+          <span style="color: red">注意:每层的查重条件可多选字段</span>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <div style="width: 50px" class="inline-16">
+            第一层:
+          </div>
+          <div style="width: 580px;" class="inline-16" >
+            <el-select v-model="fields1" multiple placeholder="请选择字段" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in options"
+                  :key="item.column_name"
+                  :label="item.column_name"
+                  :value="item.column_name">
+                <span style="float: left">{{ item.column_name }}</span>
+                <span style="float: right; color: #8492a6; font-size: 12px">{{ item.column_comment?item.column_comment:'' }}</span>
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 100px;" class="inline-16" >
+            <el-select v-model="relation" placeholder="请选择" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in relations"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 50px" class="inline-16">
+            关系
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <div style="width: 50px" class="inline-16">
+            第二层:
+          </div>
+          <div style="width: 580px;" class="inline-16" >
+            <el-select v-model="fields2" multiple placeholder="请选择字段" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in options"
+                  :key="item.column_name"
+                  :label="item.column_name"
+                  :value="item.column_name">
+                <span style="float: left">{{ item.column_name }}</span>
+                <span style="float: right; color: #8492a6; font-size: 12px">{{ item.column_comment?item.column_comment:'' }}</span>
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 100px;" class="inline-16" >
+            <el-select v-model="relation" placeholder="请选择" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in relations"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 50px" class="inline-16">
+            关系
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <div style="width: 50px" class="inline-16">
+            第三层:
+          </div>
+          <div style="width: 580px;" class="inline-16" >
+            <el-select v-model="fields3" multiple placeholder="请选择字段" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in options"
+                  :key="item.column_name"
+                  :label="item.column_name"
+                  :value="item.column_name">
+                <span style="float: left">{{ item.column_name }}</span>
+                <span style="float: right; color: #8492a6; font-size: 12px">{{ item.column_comment?item.column_comment:'' }}</span>
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 100px;" class="inline-16" >
+            <el-select v-model="relation" placeholder="请选择" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in relations"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 50px" class="inline-16">
+            关系
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <span >项目报备成功保护期设置:</span>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <div style="width: 50px" class="inline-16">
+            保护期:
+          </div>
+          <div style="width: 580px;" class="inline-16" >
+            <el-select v-model="projectprotectionperiod"  placeholder="请选择" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in monthOption"
+                  :key="item.value"
+                  :label="item.value"
+                  :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <div style="width: 50px" class="inline-16">
+            个月
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <span style="color: red">项目保护期设为0,则不管控保护期;为1-12,则为保护期限;</span>
+        </el-col>
+      </el-row>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogEditVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning"  class="normal-btn-width btn-warning" @click="onSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "customerCheckRule",
+  data(){
+    return {
+      dialogEditVisible:false,
+      monthOption:[
+        {
+          value:'0',
+          label: '0'
+        },
+        {
+          value:'1',
+          label: '1'
+        },
+        {
+          value:'2',
+          label: '2'
+        },
+        {
+          value:'3',
+          label: '3'
+        },
+        {
+          value:'4',
+          label: '4'
+        },
+        {
+          value:'5',
+          label: '5'
+        },
+        {
+          value:'6',
+          label: '6'
+        },
+        {
+          value:'7',
+          label: '7'
+        },
+        {
+          value:'8',
+          label: '8'
+        },
+        {
+          value:'9',
+          label: '9'
+        },
+        {
+          value:'10',
+          label: '10'
+        },
+        {
+          value:'11',
+          label: '11'
+        },
+        {
+          value:'12',
+          label: '12'
+        }
+      ],
+      projectprotectionperiod:'0',
+      options: [],
+      fields1: [],
+      fields2: [],
+      fields3: [],
+      relations: [{
+        value:'并且',
+        label: '并且'
+      }],
+      relation:''
+    }
+  },
+  methods:{
+    querySite_Parameter(){
+      this.dialogEditVisible = true
+      this.relation = this.relations[0].value
+      this.queryTable()
+      this.queryRule()
+    },
+    async queryTable(){
+      const res = await this.$api.requested({
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 50,
+          "typename": "tablecolumnselect",
+          "parameter": {
+            "table_name": "sa_project"
+          }
+        }
+      })
+      this.options = res.data
+    },
+    async onSubmit(){
+      const res = await this.$api.requested({
+        "id": "20230408091702",
+        "content": {
+          "projectcheckrule": {
+            "fields1": this.fields1,
+            "factor1": "and",
+            "fields2":this.fields2,
+            "factor2": "and",
+            "fields3":this.fields3,
+            "factor3": "and"
+          },
+          "projectprotectionperiod":this.projectprotectionperiod
+        },
+      })
+      this.tool.showMessage(res,()=>{
+        this.$emit('queryRule')
+        this.dialogEditVisible = false
+        this.fields1 = []
+        this.fields2 = []
+        this.fields3 = []
+        this.projectprotectionperiod = 0
+      })
+    },
+    onClose(){
+      this.dialogEditVisible = false
+      this.fields1 = []
+      this.fields2 = []
+      this.fields3 = []
+    },
+    /*查重规则*/
+    async queryRule(){
+      const res = await this.$api.requested({
+        "id": "20230410090502",
+        "content": {},
+      })
+      this.fields1 = res.data.projectcheckrule.fields1
+      this.fields2 = res.data.projectcheckrule.fields2
+      this.fields3 = res.data.projectcheckrule.fields3
+      this.projectprotectionperiod= res.data.projectprotectionperiod
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 103 - 0
src/HManagement/siteManage/securityConfig/modules/projectReportRule.vue

@@ -0,0 +1,103 @@
+<template>
+  <div>
+    <el-button size="small" style="width:120px" type="primary" @click="querySite_Parameter">设 置</el-button>
+    <el-dialog title="项目报备规则" append-to-body :visible.sync="dialogEditVisible" width="860px">
+      <el-row :gutter="16">
+        <el-col :span="24" style="margin-top: -20px">
+          <span >以下字段需在提交报备时做完整性检测,可多选:</span>
+        </el-col>
+        <el-col :span="24" style="margin-top: 20px">
+          <div style="width: 780px;" class="inline-16" >
+            <el-select v-model="projectcheckfields" multiple placeholder="请选择字段" style="width: 100%"  size="mini">
+              <el-option
+                  v-for="item in options"
+                  :key="item.column_name"
+                  :label="item.column_name"
+                  :value="item.column_name">
+                <span style="float: left">{{ item.column_name }}</span>
+                <span style="float: right; color: #8492a6; font-size: 12px">{{ item.column_comment?item.column_comment:'' }}</span>
+              </el-option>
+            </el-select>
+          </div>
+        </el-col>
+      </el-row>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogEditVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning"  class="normal-btn-width btn-warning" @click="onSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "customerCheckRule",
+  data(){
+    return {
+      dialogEditVisible:false,
+      options: [],
+      projectcheckfields:[],
+      fields1: [],
+      fields2: [],
+      fields3: [],
+      relations: [{
+        value:'并且',
+        label: '并且'
+      }],
+      relation:''
+    }
+  },
+  methods:{
+    querySite_Parameter(){
+      this.dialogEditVisible = true
+      this.relation = this.relations[0].value
+      this.queryTable()
+      this.queryRule()
+    },
+    async queryTable(){
+      const res = await this.$api.requested({
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 50,
+          "typename": "tablecolumnselect",
+          "parameter": {
+            "table_name": "sa_project"
+          }
+        }
+      })
+      this.options = res.data
+    },
+    async onSubmit(){
+      const res = await this.$api.requested({
+        "id": "20230408091802",
+        "content": {
+          "projectcheckfields": this.projectcheckfields
+        },
+      })
+      this.tool.showMessage(res,()=>{
+        this.$emit('queryRule')
+        this.dialogEditVisible = false
+        this.projectcheckfields = []
+      })
+    },
+    onClose(){
+      this.dialogEditVisible = false
+      this.projectcheckfields = []
+    },
+    /*查重规则*/
+    async queryRule(){
+      const res = await this.$api.requested({
+        "id": "20230410090502",
+        "content": {},
+      })
+      this.projectcheckfields = res.data.projectcheckfields
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 1 - 1
src/SDrpManagement/salerPrivatecustomer/detail/customerDetail.vue

@@ -23,7 +23,7 @@
         <statusChange class="inline-16" v-if="tool.checkAuth($route.name,'statusChange')" :disabled="mainData.disabled" :id="mainData.sa_customersid"  @statusChangeSuccess="statusChangeSuccess"></statusChange>
         <share class="inline-16" v-if="tool.checkAuth($route.name,'share') && mainData.sourcepoolname === ''" :disabled="mainData.disabled" :id="mainData.sa_customersid" @onshow="onSuccess" @shareSuccess="onSuccess"></share>
         <toBack class="inline-16" v-if="tool.checkAuth($route.name,'back') && mainData.sa_customerpoolid_source !== 0" :disabled="mainData.disabled" :data="mainData" @backSuccess="onSuccess"></toBack>
-        <duplicatesCustomer class="inline-16" v-if="tagFlag" :data="mainData"></duplicatesCustomer>
+        <duplicatesCustomer class="inline-16" v-if="tagFlag && tool.checkAuth($route.name,'queryDuplicates')" :data="mainData"></duplicatesCustomer>
         <to_void class="inline-16" v-if="tool.checkAuth($route.name,'toVoid')" :id="mainData.sa_customersid" :disabled="mainData.disabled" @onshow="onSuccess" @toVoidSuccess="onSuccess"></to_void>
         <recovery class="inline-16" v-if="tool.checkAuth($route.name,'recovery') && mainData.sa_customerpoolid_source !== 0 " :data="mainData" @onshow="onSuccess" @backSuccess="onSuccess"></recovery>
 

+ 35 - 0
src/SDrpManagement/salerPrivatecustomer/index.vue

@@ -98,6 +98,17 @@
             </el-option>
           </el-select>
         </div>
+        <div  class="mt-10">
+          <label class="search__label">标签:</label>
+          <el-select  class="inline-16" v-model="selectParam.tag" size="small" placeholder="请选择" @change="selectChange" clearable>
+            <el-option
+                v-for="item in option.tagData"
+                :key="item.tag"
+                :label="item.tag"
+                :value="item.tag">
+            </el-option>
+          </el-select>
+        </div>
         <div  class="mt-10">
           <label class="search__label" >创建时间:</label>
           <el-date-picker
@@ -181,6 +192,7 @@ export default {
         customerClassification:[],
         customerGrade:[],
         industryData:[],
+        tagData:[],
         status:[
           {
             value:'潜在'
@@ -213,6 +225,7 @@ export default {
         startdate:'',
         enddate:'',
         tradingstatus:'',
+        tag:''
 
       },
       dateSelect:''
@@ -223,6 +236,7 @@ export default {
     this.gradeList()
     this.queryCustomerGrade()
     this.industryList()
+    this.tagList()
   },
   methods:{
     list (param) {
@@ -316,6 +330,27 @@ export default {
       })
       this.option.industryData = res.data
     },
+    /*标签列表*/
+    async tagList(){
+      const res = await this.$api.requested({
+        "id":20221013104401,
+        "content":{
+          "isExport":1,
+          "pageNumber":1,
+          "pageSize":100,
+          "sys_systemtagid":2,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      this.option.tagData = this.unique(res.data)
+    },
+    /*去重*/
+    unique(arr) {
+      const res = new Map();
+      return arr.filter((arr) => !res.has(arr.tag) && res.set(arr.tag, 1));
+    },
     selectChange(){
       this.tabIndex = this.value
       if (this.dateSelect !== '' && this.dateSelect !== null){

+ 40 - 13
src/SManagement/orderclue/components/add.vue

@@ -5,10 +5,10 @@
       <div class="drawer__panel">
         <el-row :gutter="10">
           <el-form :model="param.content" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm"
-                   label-position="right">
+                   label-position="right" size="small">
             <el-col :span="20">
               <el-form-item label="客户名称:" prop="enterprisename">
-                <el-input v-model="param.content.enterprisename" size="small" placeholder="请填写客户名称"></el-input>
+                <el-input v-model="param.content.enterprisename"  placeholder="请填写客户名称"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="4">
@@ -18,24 +18,24 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系人:" prop="name">
-                <el-input v-model="param.content.name" size="small" placeholder="请填写联系人"></el-input>
+                <el-input v-model="param.content.name"  placeholder="请填写联系人"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系方式:" prop="phonenumber">
-                <el-input v-model="param.content.phonenumber" size="small" placeholder="请填写手机号"></el-input>
+                <el-input v-model="param.content.phonenumber"  placeholder="请填写手机号"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="省市县:" prop="province">
-                <el-cascader size="small" class="width-240" v-model="param.content.province" :options="_arealist"
+                <el-cascader  class="width-240" v-model="param.content.province" :options="_arealist"
                              @change="cascaderChange" ref="cascader">
                 </el-cascader>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="地址" prop="address">
-                <el-input v-model="param.content.address" size="small" placeholder="请填写地址"></el-input>
+                <el-input v-model="param.content.address"  placeholder="请填写地址"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
@@ -90,18 +90,30 @@
                     v-model="activityVisible"
                     width="400">
                   <selectActivity ref="member" :radio="true" @onSelect="centerChange" @onCancel="activityVisible = false"></selectActivity>
-                  <el-input readonly type="text" slot="reference" size="small" @focus="activityVisible=true" v-model="param.content.campaign_name" placeholder="请选择市场活动"></el-input>
+                  <el-input readonly type="text" slot="reference"  @focus="activityVisible=true" v-model="param.content.campaign_name" placeholder="请选择市场活动"></el-input>
                 </el-popover>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="领域:" prop="tradefield">
+                <el-select v-model="param.content.tradefield" placeholder="请选择领域" style="width: 100%">
+                  <el-option
+                      v-for="item in tradefieldSelect"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="来源:" prop="cluesource">
-                <el-input v-model="param.content.cluesource" size="small" placeholder="请填写来源"></el-input>
+                <el-input v-model="param.content.cluesource"  placeholder="请填写来源"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="线索概况:" prop="notes">
-                <el-input type="textarea" v-model="param.content.notes" size="small" placeholder="请填写线索概况"></el-input>
+                <el-input type="textarea" v-model="param.content.notes"  placeholder="请填写线索概况"></el-input>
               </el-form-item>
             </el-col>
           </el-form>
@@ -122,6 +134,7 @@ export default {
   components: {selectActivity,businessMessage},
   data () {
     var begdateTime = (rule,value,callback) =>{
+      this.$refs.ruleForm.validateField('enddate_due')
       if (this.param.content.enddate_due !== ''){
         if (value > this.param.content.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -133,13 +146,15 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.param.content.begdate_due !== ''){
+      if (value && this.param.content.begdate_due !== ''){
         if (value < this.param.content.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
-      }  else {
+      }  else if (value && this.param.content.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
+      }else {
         callback();
       }
     }
@@ -173,6 +188,7 @@ export default {
           "totalinvestment": '', //总投资额(百万)
           "begdate_due": "", //预计开工时间
           "enddate_due": "", //预计完工时间
+          "tradefield":""
         }
       },
       rules: {
@@ -186,9 +202,13 @@ export default {
         enddate_due:[
           { required: false, validator: enddateTime, trigger: 'change' }
         ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'}
+        ],
       },
       areaSelectResult:'',
-      options: []
+      options: [],
+      tradefieldSelect:[],
     }
   },
   props:{
@@ -210,6 +230,7 @@ export default {
   methods: {
     onShow () {
       this.drawer = true
+      this.queryTradefield()
     },
     addOrdercule() {
       if (this.param.content.begdate_due !== ''){
@@ -307,7 +328,13 @@ export default {
       this.areaSelectResult = [val.regProvince,val.regCity,val.regArea]
       this.param.content.province = [val.regProvince,val.regCity,val.regArea]
       console.log(this.param)
-    }
+    },
+    /*获取领域*/
+    queryTradefield(){
+      this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
+        this.tradefieldSelect = res.data
+      })
+    },
   }
 }
 

+ 40 - 13
src/SManagement/orderclue/components/edit.vue

@@ -5,10 +5,10 @@
       <div class="drawer__panel">
         <el-row :gutter="10">
           <el-form :model="param" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm"
-                   label-position="right">
+                   label-position="right" size="small">
             <el-col :span="20">
               <el-form-item label="客户名称:" prop="enterprisename">
-                <el-input v-model="param.enterprisename" size="small" placeholder="请填写客户名称"></el-input>
+                <el-input v-model="param.enterprisename"  placeholder="请填写客户名称"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="4">
@@ -18,24 +18,24 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系人:" prop="name">
-                <el-input v-model="param.name" size="small" placeholder="请填写联系人"></el-input>
+                <el-input v-model="param.name"  placeholder="请填写联系人"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="联系方式:" prop="phonenumber">
-                <el-input v-model="param.phonenumber" size="small" placeholder="请填写手机号"></el-input>
+                <el-input v-model="param.phonenumber"  placeholder="请填写手机号"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="省市县:" prop="province">
-                <el-cascader size="mini" class="width-240" v-model="param.province" :options="arealist()"
+                <el-cascader  class="width-240" v-model="param.province" :options="arealist()"
                              @change="cascaderChange">
                 </el-cascader>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="地址:" prop="address">
-                <el-input v-model="param.address" size="mini" placeholder="请填写地址"></el-input>
+                <el-input v-model="param.address"  placeholder="请填写地址"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
@@ -90,18 +90,30 @@
                     v-model="activityVisible"
                     width="400">
                   <selectActivity ref="member" :radio="true" @onSelect="centerChange" @onCancel="activityVisible = false"></selectActivity>
-                  <el-input readonly type="text" slot="reference" size="small" @focus="activityVisible=true" v-model="param.campaign_name" placeholder="请选择市场活动"></el-input>
+                  <el-input readonly type="text" slot="reference"  @focus="activityVisible=true" v-model="param.campaign_name" placeholder="请选择市场活动"></el-input>
                 </el-popover>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="领域:" prop="tradefield">
+                <el-select v-model="param.tradefield" placeholder="请选择领域" style="width: 100%">
+                  <el-option
+                      v-for="item in tradefieldSelect"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="来源:" prop="cluesource">
-                <el-input v-model="param.cluesource" size="mini" placeholder="请填写来源"></el-input>
+                <el-input v-model="param.cluesource"  placeholder="请填写来源"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item label="线索概况:" prop="notes">
-                <el-input type="textarea" v-model="param.notes" size="mini" placeholder="请填写线索概况"></el-input>
+                <el-input type="textarea" v-model="param.notes"  placeholder="请填写线索概况"></el-input>
               </el-form-item>
             </el-col>
           </el-form>
@@ -123,6 +135,7 @@ export default {
   components: {selectActivity,businessMessage},
   data () {
     var begdateTime = (rule,value,callback) =>{
+      this.$refs.ruleForm.validateField('enddate_due')
       if (this.param.enddate_due !== ''){
         if (value > this.param.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -134,13 +147,15 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.param.begdate_due !== ''){
+      if (value && this.param.begdate_due !== ''){
         if (value < this.param.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
-      }  else {
+      }  else if (value && this.param.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
+      }else {
         callback();
       }
     }
@@ -170,6 +185,7 @@ export default {
         "totalinvestment": '', //总投资额(百万)
         "begdate_due": "", //预计开工时间
         "enddate_due": "", //预计完工时间
+        "tradefield":""
       },
       rules: {
         phonenumber: [
@@ -182,10 +198,14 @@ export default {
         enddate_due:[
           { required: false, validator: enddateTime, trigger: 'change' }
         ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'}
+        ],
       },
       areaSelectResult: '',
       options: [],
-      isHandle:''
+      isHandle:'',
+      tradefieldSelect:[],
     }
   },
   props: {
@@ -223,6 +243,7 @@ export default {
       this.areaSelectResult = this.param.province
       this.param.totalinvestment !== 0 ? this.param.totalinvestment =  this.tool.formatAmount(this.param.totalinvestment,2): this.param.totalinvestment =''
       this.param.costofconstruction !== 0 ? this.param.costofconstruction =  this.tool.formatAmount(this.param.costofconstruction,2): this.param.costofconstruction =''
+      this.queryTradefield()
     },
     handleClose () {
       this.drawer = false
@@ -294,7 +315,13 @@ export default {
     onClose(){
       this.$refs.businessMessage.businessShow = false
       this.drawer = false
-    }
+    },
+    /*获取领域*/
+    queryTradefield(){
+      this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
+        this.tradefieldSelect = res.data
+      })
+    },
   },
 }
 

+ 8 - 4
src/SManagement/orderclue_detail/components/changeProject.vue

@@ -168,7 +168,7 @@ export default {
   components:{duplicateCheck},
   data(){
     var begdateTime = (rule,value,callback) =>{
-      console.log(value,this.form.enddate_due)
+      this.$refs.form.validateField('enddate_due')
       if (this.form.enddate_due !== ''){
         if (value > this.form.enddate_due){
           callback(new Error('预计开工时间不能晚于预计完工时间'))
@@ -180,12 +180,14 @@ export default {
       }
     }
     var enddateTime = (rule,value,callback) =>{
-      if (this.form.begdate_due !== ''){
+      if (value && this.form.begdate_due !== ''){
         if (value < this.form.begdate_due){
           callback(new Error('预计完工时间不能早于预计开工时间'))
         }else {
           callback();
         }
+      }else if (value && this.form.begdate_due === '') {
+        callback(new Error('预计完工时间不能早于预计开工时间'))
       }else {
         callback();
       }
@@ -234,7 +236,7 @@ export default {
           { required: true, message: '输入项目编号', trigger: 'blur'}
         ],*/
         projecttype:[
-          { required: true, message: '请选择项目类型', trigger: 'blur'}
+          { required: true, message: '请选择项目类型', trigger: 'change'}
         ],
         sys_enterpriseid:[
           { required: true, message: '请选择企业', trigger: 'blur'},
@@ -249,7 +251,7 @@ export default {
           { required: true, message: '请选择当前项目模板', trigger: 'blur'}
         ],*/
         province:[
-          { required: true, message: '请选择项目地址', trigger: 'blur'}
+          { required: true, message: '请选择省市县', trigger: 'change'}
         ],
         begdate_due:[
           { required: false, validator: begdateTime, trigger: 'change' }
@@ -283,9 +285,11 @@ export default {
     },
     /*省市县*/
     cascaderChange (val) {
+      this.form.province = val[0]
       /*console.log(val)
       this.form = Object.assign({},this.form,{province:val[0],city:val[1],county:val[2]})
       console.log(this.form)*/
+
       if (val.length === 1)
         return this.form = Object.assign({},this.form,{province:val[0],city:'',county:''})
 

+ 10 - 1
src/SManagement/orderclue_detail/index.vue

@@ -23,8 +23,9 @@
           @updataList="queryMainData" 
           :teamList="teamList()"  
           v-if="userInfo.isAuth == 1 ? mainData.status == '待跟进' || mainData.status == '跟进中' : ''"></move> -->
-        <changeProject v-if="mainData.isproject == 0 && tool.checkAuth($route.name,'changeProject')" :data="mainData" :disabled="!isHandle" class="inline-16" @onChangeProject="queryMainData($route.query.id)"/>
+
         <changeCustomer v-if="mainData.iscustomer == 0 && tool.checkAuth($route.name,'changeCutomer')" :data="mainData" :disabled="!isHandle" class="inline-16" @onChangeCustomer="onChangeCustomer"></changeCustomer>
+        <changeProject v-if="mainData.isproject == 0 && tool.checkAuth($route.name,'changeProject')" :data="mainData" :disabled="!isHandle" class="inline-16" @onChangeProject="queryMainData($route.query.id)"/>
         <el-button :type="!isHandle || mainData.status === '已无效'?'':'primary'" v-if="tool.checkAuth($route.name,'goBack') && mainData.status != '已转化' && mainData.isprivate !== 1" :disabled="!isHandle || mainData.status === '已无效'" class="inline-16" size="mini" @click="goBack">退 回</el-button>
         <noNull v-if="tool.checkAuth($route.name,'noNull') && mainData.status != '已转化' " class="inline-16" :data="mainData" :disabled="!isHandle" @onSuccess="$store.dispatch('changeDetailDrawer',false);$router.replace('/orderclue')" :id="mainData.sat_orderclueid"/>
         <Del v-if="tool.checkAuth($route.name,'toVoid') && mainData.status != '已转化'" class="inline-16" :data="mainData" :disabled="!isHandle" :idName="20221123193702" @onSuccess="$store.dispatch('changeDetailDrawer',false);$router.replace('/orderclue')" :id="mainData.sat_orderclueid" idKey="sat_orderclueids"/>
@@ -170,6 +171,10 @@ export default {
           label:'市场活动',
           value:this.mainData.campaign_name
         },
+        {
+          label:'领域',
+          value:this.mainData.tradefield
+        },
         {
           label:'负责人',
           value:this.mainData.leader.length > 0 && this.mainData.leader[0].name
@@ -261,6 +266,10 @@ export default {
             label:'市场活动',
             value:this.mainData.campaign_name
           },
+          {
+            label:'领域',
+            value:this.mainData.tradefield
+          },
           {
             label:'来源',
             value:this.mainData.cluesource

+ 36 - 0
src/components/duplicatesCheck/projectChangeCheck.vue

@@ -110,6 +110,42 @@ export default {
       });
     },
     async onSubmit(){
+      if (this.data.signdate_due !== ''){
+        const data = new Date(this.data.signdate_due)
+        console.log(data.getFullYear())
+        console.log(data.getMonth()+1)
+        if (data.getMonth() +1 < 10){
+          this.data.signdate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
+        }else {
+          this.data.signdate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
+        }
+      }else {
+        this.data.signdate_due = ''
+      }
+      if (this.data.begdate_due !== ''){
+        const data = new Date(this.data.begdate_due)
+        console.log(data.getFullYear())
+        console.log(data.getMonth()+1)
+        if (data.getMonth() +1 < 10){
+          this.data.begdate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
+        }else {
+          this.data.begdate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
+        }
+      }else {
+        this.data.begdate_due = ''
+      }
+      if (this.data.enddate_due !== ''){
+        const data = new Date(this.data.enddate_due)
+        console.log(data.getFullYear())
+        console.log(data.getMonth()+1)
+        if (data.getMonth() +1 < 10){
+          this.data.enddate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
+        }else {
+          this.data.enddate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
+        }
+      }else {
+        this.data.enddate_due = ''
+      }
       console.log(this.data,'data')
       const res = await this.$api.requested({
         "id": 20221124154902,

+ 36 - 0
src/components/duplicatesCheck/projectCheck.vue

@@ -109,6 +109,42 @@ export default {
       });
     },
     async onSubmit(){
+      if (this.data.signdate_due !== ''){
+        const data = new Date(this.data.signdate_due)
+        console.log(data.getFullYear())
+        console.log(data.getMonth()+1)
+        if (data.getMonth() +1 < 10){
+          this.data.signdate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
+        }else {
+          this.data.signdate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
+        }
+      }else {
+        this.data.signdate_due = ''
+      }
+      if (this.data.begdate_due !== ''){
+        const data = new Date(this.data.begdate_due)
+        console.log(data.getFullYear())
+        console.log(data.getMonth()+1)
+        if (data.getMonth() +1 < 10){
+          this.data.begdate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
+        }else {
+          this.data.begdate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
+        }
+      }else {
+        this.data.begdate_due = ''
+      }
+      if (this.data.enddate_due !== ''){
+        const data = new Date(this.data.enddate_due)
+        console.log(data.getFullYear())
+        console.log(data.getMonth()+1)
+        if (data.getMonth() +1 < 10){
+          this.data.enddate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
+        }else {
+          this.data.enddate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
+        }
+      }else {
+        this.data.enddate_due = ''
+      }
       const res = await this.$api.requested({
         "id": 20221020144202,
         "content": this.data

+ 25 - 2
src/components/duplicatesData/duplicatesCustomer.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" type="primary" @click="queryData">查看重复</el-button>
+    <el-button size="mini" type="primary" @click="queryRule">查看重复</el-button>
     <el-dialog title="重复客户" :visible.sync="dialogTableVisible" append-to-body width="1000px">
       <tableLayout :layout="tablecols"   :data="list" :opwidth="200" height="calc(100vh - 550px)" :width="true" :custom="true">
         <template v-slot:customcol="scope">
@@ -59,11 +59,23 @@ export default {
           "taxno":"",
           "address":""
         },
-      }
+      },
+      fields1:[],
+      fields2:[],
+      fields3:[],
     }
   },
   methods:{
     async queryData(){
+      this.fields1.forEach(item=>{
+        this.param.content[item] = this.data[item] || ""
+      })
+      this.fields2.forEach(item=>{
+        this.param.content[item] = this.data[item] || ""
+      })
+      this.fields3.forEach(item=>{
+        this.param.content[item] = this.data[item] || ""
+      })
       this.param.content.sa_customersid = this.data.sa_customersid
       this.param.content.enterprisename = this.data.enterprisename
       this.param.content.taxno = this.data.taxno
@@ -84,6 +96,17 @@ export default {
       this.param.content.pageNumber = val
       this.queryData()
     },
+    /*查询规则*/
+    async queryRule(){
+      const res = await this.$api.requested({
+        "id": "20230410090502",
+        "content": {},
+      })
+      this.fields1 = res.data.custcheckrule.fields1
+      this.fields2 = res.data.custcheckrule.fields2
+      this.fields3 = res.data.custcheckrule.fields3
+      this.queryData()
+    }
   },
   mounted() {
 

+ 29 - 4
src/components/duplicatesData/duplicatesProject.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" type="primary" @click="queryData">查看重复</el-button>
+    <el-button size="mini" type="primary" @click="onShow">查看重复</el-button>
     <el-dialog title="重复项目" :visible.sync="dialogTableVisible" append-to-body width="1000px">
       <tableLayout :layout="tablecols"   :data="list" :opwidth="200" height="calc(100vh - 550px)" :width="true" :custom="true">
         <template v-slot:customcol="scope">
@@ -57,14 +57,28 @@ export default {
           "projectname":"",
           "address":""
         },
-      }
+      },
+      fields1:[],
+      fields2:[],
+      fields3:[],
     }
   },
   methods:{
+    onShow(){
+      this.queryRule()
+      // this.queryData()
+    },
     async queryData(){
+      this.fields1.forEach(item=>{
+        this.param.content[item] = this.data[item] || ""
+      })
+      this.fields2.forEach(item=>{
+        this.param.content[item] = this.data[item] || ""
+      })
+      this.fields3.forEach(item=>{
+        this.param.content[item] = this.data[item] || ""
+      })
       this.param.content.sa_projectid = this.data.sa_projectid
-      this.param.content.projectname = this.data.projectname
-      this.param.content.address = this.data.address
       const res = await this.$api.requested(this.param)
       this.list = res.data
       this.dialogTableVisible = true
@@ -79,6 +93,17 @@ export default {
       this.param.content.pageNumber = val
       this.queryData()
     },
+    /*查询规则*/
+    async queryRule(){
+      const res = await this.$api.requested({
+        "id": "20230410090502",
+        "content": {},
+      })
+      this.fields1 = res.data.projectcheckrule.fields1
+      this.fields2 = res.data.projectcheckrule.fields2
+      this.fields3 = res.data.projectcheckrule.fields3
+      this.queryData()
+    }
   },
   created() {
     this.tablecols = this.tool.tabelCol(this.$route.name).duplicatesProjectTable.tablecols