From acdff03246ce648082192dfb069c3a006a7fbee6 Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期三, 09 八月 2023 18:46:06 +0800
Subject: [PATCH] 客户管理模块 批量删除、推进、跟进接口联调

---
 src/api/client/followupRecords.js                              |    5 
 src/views/client/client/index.vue                              |  135 +++++--
 src/views/client/salesLead/AdvanceDialog.vue                   |  223 ++++++++++++
 src/components/makepager/PublicFunctionBtnView.vue             |   14 
 src/api/client/client.js                                       |    5 
 src/api/client/salesLead.js                                    |   14 
 src/views/client/client/DetailClientManage.vue                 |   81 +++-
 src/components/makepager/SearchCommonView.vue                  |   29 +
 src/views/client/salesLead/AddSalesLeadDialog.vue              |   29 -
 src/views/client/client/AddClientManageDialog.vue              |  104 +++--
 src/views/client/contacts/index.vue                            |  101 ++++-
 src/views/client/salesLead/DetailSalesLead.vue                 |   22 
 src/views/other/commonDialog/HighViewScopeDialog.vue           |   14 
 src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue |   12 
 src/views/client/salesLead/index.vue                           |  136 ++++++-
 src/api/client/contacts.js                                     |    5 
 src/views/client/followupRecords/index.vue                     |   61 ++-
 src/views/client/contacts/DetailContacts.vue                   |   34 
 18 files changed, 761 insertions(+), 263 deletions(-)

diff --git a/src/api/client/client.js b/src/api/client/client.js
index fdd0751..24473aa 100644
--- a/src/api/client/client.js
+++ b/src/api/client/client.js
@@ -19,8 +19,9 @@
 // 鍒犻櫎瀹㈡埛绠$悊
 export function getDeleteClient(data) {
   return request({
-    url: "/api/client/delete/" + data.id,
-    method: "delete"
+    url: "/api/client/delete",
+    method: "delete",
+    data
   })
 }
 // 鏇存柊瀹㈡埛绠$悊
diff --git a/src/api/client/contacts.js b/src/api/client/contacts.js
index 0aba282..3c4932f 100644
--- a/src/api/client/contacts.js
+++ b/src/api/client/contacts.js
@@ -19,8 +19,9 @@
 // 鍒犻櫎鑱旂郴浜�
 export function getDeleteContact(data) {
   return request({
-    url: "/api/contact/delete/" + data.id,
-    method: "delete"
+    url: "/api/contact/delete",
+    method: "delete",
+    data
   })
 }
 // 鏇存柊鑱旂郴浜�
diff --git a/src/api/client/followupRecords.js b/src/api/client/followupRecords.js
index 804778a..a2af2ab 100644
--- a/src/api/client/followupRecords.js
+++ b/src/api/client/followupRecords.js
@@ -19,8 +19,9 @@
 // 鍒犻櫎璺熻繘璁板綍
 export function getDeleteFollowRecord(data) {
   return request({
-    url: "/api/followRecord/delete/" + data.id,
-    method: "delete"
+    url: "/api/followRecord/delete",
+    method: "delete",
+    data
   })
 }
 // 鏇存柊璺熻繘璁板綍
diff --git a/src/api/client/salesLead.js b/src/api/client/salesLead.js
index 1926fc9..4e6ee0a 100644
--- a/src/api/client/salesLead.js
+++ b/src/api/client/salesLead.js
@@ -19,8 +19,9 @@
 // 鍒犻櫎閿�鍞嚎绱�
 export function getDeleteSalesLeads(data) {
   return request({
-    url: "/api/salesLeads/delete/" + data.id,
-    method: "delete"
+    url: "/api/salesLeads/delete",
+    method: "delete",
+    data
   })
 }
 // 鏇存柊閿�鍞嚎绱�
@@ -32,6 +33,15 @@
   })
 }
 
+// 鎺ㄨ繘閿�鍞嚎绱�
+export function pushSalesSources(data) {
+  return request({
+    url: "/api/salesLeads/push",
+    method: "post",
+    data
+  })
+}
+
 // 鍟嗘満鏉ユ簮鍒楄〃
 export function getSalesSourcesList() {
   return request({
diff --git a/src/components/makepager/PublicFunctionBtnView.vue b/src/components/makepager/PublicFunctionBtnView.vue
index e7d3b84..3036c9e 100644
--- a/src/components/makepager/PublicFunctionBtnView.vue
+++ b/src/components/makepager/PublicFunctionBtnView.vue
@@ -3,12 +3,14 @@
     <div class="btn-list">
       <el-button size="small" type="text" class="blue" @click="addBtnClick">鏂板缓</el-button>
       <!-- <el-button v-if="receive" size="small" type="text" class="gray" @click="receiveBtnClick">棰嗗彇</el-button> -->
-      <el-button v-if="allocation" size="small" type="text" class="gray" @click="allocationBtnClick">鍒嗛厤</el-button>
+      <el-button v-if="allocation" size="small" type="text" class="gray" @click="allocationBtnClick" disabled
+        >鍒嗛厤</el-button
+      >
       <el-button v-if="deleteButton" size="small" type="text" class="gray" @click="deleteBtnClick">鍒犻櫎</el-button>
       <!-- <el-button v-if="submitApproval" size="small" type="text" class="gray width64" @click="submitApprovalBtnClick"
         >鎻愪氦瀹℃壒
       </el-button> -->
-      <el-button v-if="duplicateCheck" size="small" type="text" class="gray" @click="duplicateCheckBtnClick"
+      <el-button v-if="duplicateCheck" size="small" type="text" class="gray" @click="duplicateCheckBtnClick" disabled
         >鏌ラ噸</el-button
       >
       <!-- <el-button v-if="importButton" size="small" type="text" class="gray" @click="importBtnClick">瀵煎叆</el-button>
@@ -153,9 +155,13 @@
     // 棰嗗彇
     receiveBtnClick() {},
     // 鍒嗛厤
-    allocationBtnClick() {},
+    allocationBtnClick() {
+      this.$emit("allocationBtnClick")
+    },
     // 鍒犻櫎
-    deleteBtnClick() {},
+    deleteBtnClick() {
+      this.$emit("batchDelete")
+    },
     // 鎻愪氦瀹℃壒
     submitApprovalBtnClick() {},
     // 鏌ラ噸
diff --git a/src/components/makepager/SearchCommonView.vue b/src/components/makepager/SearchCommonView.vue
index 3ba9a99..ed2292d 100644
--- a/src/components/makepager/SearchCommonView.vue
+++ b/src/components/makepager/SearchCommonView.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="search-list">
     <div class="search-top">
-      <div class="query-class">
+      <!-- <div class="query-class">
         <div class="query-class-title">鏌ヨ鍒嗙被</div>
         <el-select v-model="queryClassValue" placeholder="璇烽�夋嫨" class="query-class-sel" size="mini">
           <el-option v-for="item in queryClassOptions" :key="item.value" :label="item.label" :value="item.value">
@@ -10,15 +10,21 @@
         <div class="query-class-btn" @click="queryClassClick">
           <i class="el-icon-setting"></i>
         </div>
-      </div>
+      </div> -->
       <div class="search">
         <el-input placeholder="璇疯緭鍏ュ唴瀹�" v-model="searchInput" class="input-with-select" clearable>
           <el-select v-model="searchSelValue" slot="prepend" placeholder="璇烽�夋嫨" class="search-sel">
             <el-option v-for="item in searchOptions" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
-          <i slot="suffix" class="el-icon-search" style="cursor: pointer" @click="searchClick"></i>
+          <!-- <i slot="suffix" class="el-icon-search" style="cursor: pointer" @click="searchClick"></i> -->
         </el-input>
+      </div>
+      <div class="btn">
+        <el-button type="primary" size="mini" @click="searchClick" icon="el-icon-search" style="margin-right: 5px"
+          >鎼滅储</el-button
+        >
+        <el-button size="mini" icon="el-icon-refresh-left" @click="resetClick">閲嶇疆</el-button>
       </div>
       <!-- <div class="other-search">
         <div class="other-search-high" @click="highSearchClick">
@@ -35,7 +41,7 @@
         </div>
       </div> -->
     </div>
-    <div v-if="isTileSearch" class="search-bottom">
+    <!-- <div v-if="isTileSearch" class="search-bottom">
       <el-table :data="tileSearchData" style="width: 100%">
         <el-table-column prop="selField" label="閫夋嫨瀛楁" width="430">
           <template slot-scope="scope">
@@ -82,7 +88,7 @@
           <el-button size="small">鍙栨秷</el-button>
         </div>
       </div>
-    </div>
+    </div> -->
     <!-- 鏌ヨ鍒嗙被寮圭獥 -->
     <QueryClassSettingDialog v-if="queryClassSetConfig.visible" :editCommonConfig="queryClassSetConfig" />
   </div>
@@ -105,7 +111,7 @@
     },
     searchSel: {
       type: String,
-      default: "1"
+      default: "name"
     },
     searchOptions: {
       type: Array,
@@ -159,7 +165,12 @@
       }
     },
     searchClick() {
-      console.log("sssssssssss")
+      this.$emit("searchClick", this.searchSelValue, this.searchInput)
+    },
+    resetClick() {
+      this.searchSelValue = this.searchSel
+      this.searchInput = ""
+      this.$emit("resetClick")
     },
     // 楂樼骇鏌ユ壘
     highSearchClick() {},
@@ -194,6 +205,7 @@
   color: #333;
   .search-top {
     display: flex;
+    align-items: center;
     .query-class {
       display: flex;
       height: 60px;
@@ -220,6 +232,9 @@
         margin-top: 7px;
       }
     }
+    .btn {
+      margin-left: 10px;
+    }
     .other-search {
       display: flex;
       height: 60px;
diff --git a/src/views/client/client/AddClientManageDialog.vue b/src/views/client/client/AddClientManageDialog.vue
index c262d24..7200b7d 100644
--- a/src/views/client/client/AddClientManageDialog.vue
+++ b/src/views/client/client/AddClientManageDialog.vue
@@ -5,6 +5,8 @@
       :visible.sync="editConfig.visible"
       :width="dialogWidth"
       :before-close="handleClose"
+      append-to-body
+      custom-class="iframe-dialog"
     >
       <el-form
         ref="form"
@@ -475,7 +477,7 @@
       <div slot="footer" class="dialog-footer">
         <!-- <el-button type="primary" size="small" @click="editConfig.visible = false">淇濆苟鎻愪氦瀹℃壒</el-button> -->
         <el-button type="primary" size="small" @click="saveClick('form')">淇濆瓨</el-button>
-        <el-button size="small" @click="editConfig.visible = false">鍙栨秷</el-button>
+        <el-button size="small" @click="handleClose">鍙栨秷</el-button>
       </div>
     </el-dialog>
   </div>
@@ -492,6 +494,7 @@
         return {
           visible: false,
           title: "鏂板缓",
+          isSalesOpportunity: false,
           infomation: {}
         }
       }
@@ -546,7 +549,6 @@
     getCommonData() {
       getAllData()
         .then((res) => {
-          console.log(res)
           this.memberOptions = res.data.member
           this.clientSourceOptions = res.data.client_origin
           this.clientStatusOptions = res.data.client_status
@@ -567,6 +569,9 @@
     },
     handleClose() {
       this.editConfig.visible = false
+      if (this.editConfig.title === "鏂板缓" && this.editConfig.infomation.sales_leads_id) {
+        this.$parent.handleClose()
+      }
     },
     // 淇濆瓨
     saveClick(formName) {
@@ -585,7 +590,13 @@
                     message: "娣诲姞鎴愬姛",
                     type: "success"
                   })
-                  this.$parent.getData()
+                  if (this.editConfig.isSalesOpportunity) {
+                    this.$emit("salesOpportunityClick", this.editConfig.infomation)
+                  } else if (this.editConfig.title === "鏂板缓" && this.editConfig.infomation.sales_leads_id) {
+                    this.$parent.handleClose()
+                  } else {
+                    this.$parent.getData()
+                  }
                 }
               })
               .catch((err) => {
@@ -657,7 +668,8 @@
         registration_time: data.registration_time || "",
         remark: data.remark || "",
         representative: data.representative || "",
-        service_member_id: data.service_member_id || 0
+        service_member_id: data.service_member_id || 0,
+        sales_leads_id: data.sales_leads_id || 0
       }
       return params
     },
@@ -677,54 +689,56 @@
 
 <!-- Add "scoped" attribute to limit CSS to this component only -->
 <style lang="scss" scoped>
-.add-client-manage {
-  .basic-info {
-    .basic-info-title {
-      background-color: #f4f8fe;
-      padding-left: 10px;
-      font-size: 15px;
-      font-weight: bold;
-      color: #666;
-      height: 42px;
-      line-height: 42px;
-    }
-    .basic-info-view {
-      margin-top: 10px;
-      padding-right: 40px;
-      .custom-name,
-      .common-select {
+::v-deep {
+  .iframe-dialog .el-dialog__body {
+    .basic-info {
+      .basic-info-title {
+        background-color: #f4f8fe;
+        padding-left: 10px;
+        font-size: 15px;
+        font-weight: bold;
+        color: #666;
+        height: 42px;
+        line-height: 42px;
+      }
+      .basic-info-view {
+        margin-top: 10px;
+        padding-right: 40px;
+        .custom-name,
+        .common-select {
+          display: flex;
+          .common-select-btn {
+            margin-left: 5px;
+            font-size: 18px;
+            cursor: pointer;
+          }
+        }
+        .common-select {
+          .common-select-sel {
+            width: 270px;
+          }
+        }
+      }
+      .annex-view {
         display: flex;
-        .common-select-btn {
-          margin-left: 5px;
-          font-size: 18px;
-          cursor: pointer;
-        }
-      }
-      .common-select {
-        .common-select-sel {
-          width: 270px;
+        color: #6166d3;
+        .setFormat {
+          margin-left: 10px;
         }
       }
     }
-    .annex-view {
+    .unflod-collapse {
       display: flex;
+      height: 30px;
+      justify-content: center;
+      align-items: center;
       color: #6166d3;
-      .setFormat {
-        margin-left: 10px;
-      }
     }
-  }
-  .unflod-collapse {
-    display: flex;
-    height: 30px;
-    justify-content: center;
-    align-items: center;
-    color: #6166d3;
-  }
-  .dialog-footer {
-    background-color: #f5f5f5;
-    height: 55px;
-    line-height: 55px;
+    .dialog-footer {
+      background-color: #f5f5f5;
+      height: 55px;
+      line-height: 55px;
+    }
   }
 }
 </style>
diff --git a/src/views/client/client/DetailClientManage.vue b/src/views/client/client/DetailClientManage.vue
index 388075c..428d650 100644
--- a/src/views/client/client/DetailClientManage.vue
+++ b/src/views/client/client/DetailClientManage.vue
@@ -154,7 +154,7 @@
                 <li>
                   <div class="left remark">
                     <div class="content-title">{{ "澶囨敞锛�" }}</div>
-                    <div class="content-data">{{ "澶囨敞鍐呭" }}</div>
+                    <div class="content-data">{{ detailConfig.infomation.remark }}</div>
                   </div>
                 </li>
               </ul>
@@ -247,35 +247,35 @@
     }
   },
   created() {
-    this.setData()
+    this.setData(this.detailConfig.infomation)
   },
   mounted() {},
   methods: {
-    setData() {
+    setData(item) {
       this.basicInfoList = [
         {
           leftStr: "瀹㈡埛鍚嶇О",
-          leftValue: this.detailConfig.infomation.client_name,
+          leftValue: item.client_name,
           rightStr: "瀹㈡埛缂栧彿",
-          rightValue: this.detailConfig.infomation.number
+          rightValue: item.number
         },
         {
           leftStr: "瀹㈡埛鐘舵��",
-          leftValue: this.detailConfig.infomation.contact_name,
+          leftValue: item.client_status,
           rightStr: "閿�鍞礋璐d汉",
-          rightValue: this.detailConfig.infomation.contact_position
+          rightValue: item.member_id
         },
         {
           leftStr: "瀹㈡埛绫诲瀷",
-          leftValue: this.detailConfig.infomation.contact_phone,
+          leftValue: item.client_type.name,
           rightStr: "瀹㈡埛鏉ユ簮",
-          rightValue: "鏂板缓"
+          rightValue: item.client_origin.name
         },
         {
           leftStr: "閲嶈绾у埆",
-          leftValue: this.detailConfig.infomation.sales_sources_id,
+          leftValue: item.client_level,
           rightStr: "鍏捣鐘舵��",
-          rightValue: this.detailConfig.infomation.member_id
+          rightValue: ""
         },
         {
           leftStr: "鎵�灞炲叕娴�",
@@ -287,13 +287,13 @@
           leftStr: "绛惧埌",
           leftValue: "",
           rightStr: "涓嬫鍥炶鏃ユ湡",
-          rightValue: ""
+          rightValue: this.processTime(item.next_visit_time)
         },
         {
           leftStr: "鍒涘缓鏃堕棿",
           leftValue: "",
           rightStr: "鏈�鏅氭湇鍔″埌鏈熸棩",
-          rightValue: ""
+          rightValue: this.processTime(item.latest_service_time)
         },
         {
           leftStr: "鍒涘缓浜�",
@@ -305,9 +305,9 @@
       this.contactList = [
         {
           leftStr: "鑱旂郴浜哄鍚�",
-          leftValue: "",
+          leftValue: item.contact_name,
           rightStr: "鑱旂郴浜烘墜鏈�",
-          rightValue: ""
+          rightValue: item.contact_phone
         },
         {
           leftStr: "鑱旂郴浜鸿亴鍔�",
@@ -339,25 +339,25 @@
       this.businessInfoList = [
         {
           leftStr: "鎵�灞炶涓�",
-          leftValue: "",
+          leftValue: item.Industry.name,
           rightStr: "娉曞畾浠h〃浜�",
-          rightValue: ""
+          rightValue: item.representative
         },
         {
           leftStr: "娉ㄥ唽鏃堕棿",
-          leftValue: "",
+          leftValue: this.processTime(item.registration_time),
           rightStr: "娉ㄥ唽璧勯噾",
-          rightValue: ""
+          rightValue: item.RegisteredCapital.name
         },
         {
           leftStr: "鍏徃鎬ц川",
-          leftValue: "",
+          leftValue: item.EnterpriseNature.name,
           rightStr: "瀹㈡埛瑙勬ā",
-          rightValue: ""
+          rightValue: item.EnterpriseScale.name
         },
         {
           leftStr: "缁忚惀鑼冨洿",
-          leftValue: "",
+          leftValue: item.business_scope,
           rightStr: "",
           rightValue: ""
         }
@@ -365,19 +365,19 @@
       this.addressInfoList = [
         {
           leftStr: "鍥藉",
-          leftValue: "",
+          leftValue: item.Country.name,
           rightStr: "鐪佷唤",
-          rightValue: ""
+          rightValue: item.Province.name
         },
         {
           leftStr: "鍩庡競",
-          leftValue: "",
+          leftValue: item.City.name,
           rightStr: "鍖哄煙",
-          rightValue: ""
+          rightValue: item.Region.name
         },
         {
           leftStr: "璇︾粏鍦板潃",
-          leftValue: "",
+          leftValue: item.detail_address,
           rightStr: "",
           rightValue: ""
         }
@@ -408,6 +408,33 @@
       } else if (value === "annex") {
         this.isAnnexExpand = !this.isAnnexExpand
       }
+    },
+    // 澶勭悊鏃堕棿
+    processTime(dateTime) {
+      return this.dateFormat("YYYY-mm-dd HH:MM:SS", dateTime) === "1900-01-01 08:00:00"
+        ? "--"
+        : this.dateFormat("YYYY-mm-dd HH:MM:SS", dateTime)
+    },
+    // 鏃堕棿鏄剧ず
+    dateFormat(fmt, date) {
+      let ret = ""
+      date = new Date(date)
+      const opt = {
+        "Y+": date.getFullYear().toString(), // 骞�
+        "m+": (date.getMonth() + 1).toString(), // 鏈�
+        "d+": date.getDate().toString(), // 鏃�
+        "H+": date.getHours().toString(), // 鏃�
+        "M+": date.getMinutes().toString(), // 鍒�
+        "S+": date.getSeconds().toString() // 绉�
+        // 鏈夊叾浠栨牸寮忓寲瀛楃闇�姹傚彲浠ョ户缁坊鍔狅紝蹇呴』杞寲鎴愬瓧绗︿覆
+      }
+      for (let k in opt) {
+        ret = new RegExp("(" + k + ")").exec(fmt)
+        if (ret) {
+          fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0"))
+        }
+      }
+      return fmt
     }
   }
 }
diff --git a/src/views/client/client/index.vue b/src/views/client/client/index.vue
index c6688f2..63111a9 100644
--- a/src/views/client/client/index.vue
+++ b/src/views/client/client/index.vue
@@ -2,14 +2,14 @@
   <div class="custom-manage">
     <div class="tab-view">
       <el-tabs v-model="activeName" @tab-click="tabsClick">
-        <el-tab-pane label="鍏ㄩ儴(鍚墍鏈夊叕娴�)" name="first"></el-tab-pane>
-        <el-tab-pane label="鍏ㄩ儴(鍚叕娴�)" name="second"></el-tab-pane>
-        <el-tab-pane label="鍏ㄩ儴(涓嶅惈鍏捣)" name="third"></el-tab-pane>
-        <el-tab-pane label="鍏捣宸插垎閰�" name="fourth"></el-tab-pane>
-        <el-tab-pane label="鍏湭鍒嗛厤" name="aaa"></el-tab-pane>
+        <el-tab-pane label="鍏ㄩ儴(鍚墍鏈夊叕娴�)" name="first" disabled></el-tab-pane>
+        <el-tab-pane label="鍏ㄩ儴(鍚叕娴�)" name="second" disabled></el-tab-pane>
+        <el-tab-pane label="鍏ㄩ儴(涓嶅惈鍏捣)" name="third" disabled></el-tab-pane>
+        <el-tab-pane label="鍏捣宸插垎閰�" name="fourth" disabled></el-tab-pane>
+        <el-tab-pane label="鍏湭鍒嗛厤" name="aaa" disabled></el-tab-pane>
       </el-tabs>
       <div class="sel-gonghai">
-        <el-select v-model="gonghaiValue" placeholder="璇烽�夋嫨" class="query-class-sel" size="mini">
+        <el-select v-model="gonghaiValue" placeholder="璇烽�夋嫨" class="query-class-sel" size="mini" disabled>
           <el-option v-for="item in gonghaiOptions" :key="item.value" :label="item.label" :value="item.value">
           </el-option>
         </el-select>
@@ -23,6 +23,8 @@
         ref="searchCommonView"
         :query-class-options="queryClassOptions"
         :search-options="searchOptions"
+        @searchClick="searchClick"
+        @resetClick="resetClick"
       />
       <div class="btn-pager">
         <PublicFunctionBtnView
@@ -31,6 +33,7 @@
           :map-button="true"
           :statistics="true"
           :operates-list="operatesList"
+          @batchDelete="delClick"
         />
         <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
       </div>
@@ -41,14 +44,15 @@
       :table-list="tableList"
       @selClientClick="selClientClick"
       @selContactsClick="selContactsClick"
+      @getSelectArray="getSelectArray"
     >
       <template slot="tableButton">
-        <el-table-column label="鎿嶄綔" width="180">
+        <el-table-column label="鎿嶄綔" width="150">
           <template slot-scope="scope">
-            <el-button type="text" size="small">鍙樻洿鍏捣</el-button>
+            <el-button type="text" size="small" disabled>鍙樻洿鍏捣</el-button>
             <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button>
-            <el-button type="text" size="small">璺熻繘</el-button>
-            <el-button @click="delClick(scope.row.id)" type="text" size="small">鍒犻櫎</el-button>
+            <el-button @click="followupClick(scope.row)" type="text" size="small">璺熻繘</el-button>
+            <!-- <el-button @click="delClick(scope.row.id)" type="text" size="small">鍒犻櫎</el-button> -->
           </template>
         </el-table-column>
       </template>
@@ -59,6 +63,8 @@
     <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
     <!-- 鑱旂郴浜鸿鎯� -->
     <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" />
+    <!-- 鏂板缓/缂栬緫璺熻繘璁板綍 -->
+    <AddFollowupRecordsDialog v-if="editFollowupConfig.visible" :edit-contacts-config="editFollowupConfig" />
   </div>
 </template>
 
@@ -66,6 +72,7 @@
 import AddClientManageDialog from "@/views/client/client/AddClientManageDialog"
 import { getClientList, getDeleteClient } from "@/api/client/client"
 import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import AddFollowupRecordsDialog from "@/views/client/followupRecords/AddFollowupRecordsDialog"
 
 export default {
   name: "CustomManage",
@@ -74,13 +81,10 @@
   components: {
     AddClientManageDialog,
     DetailContacts: () => import("@/views/client/contacts/DetailContacts"),
-    DetailClientManage: () => import("@/views/client/client/DetailClientManage")
+    DetailClientManage: () => import("@/views/client/client/DetailClientManage"),
+    AddFollowupRecordsDialog
   },
-  computed: {
-    searchCommonHeight() {
-      return this.$refs.searchCommonView.offsetHeight
-    }
-  },
+  computed: {},
   data() {
     return {
       tableList: {},
@@ -119,6 +123,13 @@
       clientDeail: {
         visible: false,
         infomation: {}
+      },
+      search_map: {},
+      selValueList: [],
+      editFollowupConfig: {
+        visible: false,
+        title: "鏂板缓",
+        infomation: {}
       }
     }
   },
@@ -132,11 +143,11 @@
         tableInfomation: [],
         tableColumn: [
           { label: "瀹㈡埛鍚嶇О", prop: "name", min: 100, isClientClick: true }, // 瀹㈡埛鍚嶇О
-          { label: "閿�鍞礋璐d汉", prop: "member_id" }, // 閿�鍞礋璐d汉
-          { label: "閲嶈绾у埆", prop: "client_level_id" }, // 閲嶈绾у埆
+          { label: "閿�鍞礋璐d汉", prop: "member_name" }, // 閿�鍞礋璐d汉
+          { label: "閲嶈绾у埆", prop: "client_level" }, // 閲嶈绾у埆
           { label: "涓嬫鍥炶鏃ユ湡", prop: "next_visit_time", isTime: true, min: 90 }, // 涓嬫鍥炶鏃ユ湡
           { label: "璇︾粏鍦板潃", prop: "detail_address", min: 200 }, // 璇︾粏鍦板潃
-          { label: "瀹㈡埛鐘舵��", prop: "client_status_id" }, // 瀹㈡埛鐘舵��
+          { label: "瀹㈡埛鐘舵��", prop: "client_status" }, // 瀹㈡埛鐘舵��
           { label: "鑱旂郴浜哄鍚�", prop: "contact_name", isContactClick: true }, // 鑱旂郴浜哄鍚�
           { label: "鎵嬫満鍙风爜", prop: "contact_phone" } // 鎵嬫満鍙风爜
         ]
@@ -144,14 +155,15 @@
       this.searchOptions = []
       for (let i = 0; i < this.tableList.tableColumn.length; i++) {
         const label = this.tableList.tableColumn[i].label
-        this.searchOptions.push({ value: (i + 1).toString(), label: label })
+        const value = this.tableList.tableColumn[i].prop
+        this.searchOptions.push({ value: value, label: label })
       }
     },
     // 璇锋眰鏁版嵁
     async getData() {
       this.loading = true
       await getClientList({
-        keyword: "",
+        search_map: this.search_map,
         page: this.pagerOptions.currPage,
         pageSize: this.pagerOptions.pageSize
       })
@@ -173,7 +185,9 @@
                 return {
                   ...item,
                   contact_name: contact_name,
-                  contact_phone: contact_phone
+                  contact_phone: contact_phone,
+                  client_level: item.client_level.name,
+                  client_status: item.client_status.name
                 }
               })
               this.tableList.tableInfomation = list || []
@@ -195,6 +209,18 @@
     tabsClick(tab, event) {
       console.log(tab, event)
     },
+    // 鎼滅储
+    searchClick(val, content) {
+      console.log(val, content)
+      this.search_map = {
+        [val]: content
+      }
+      this.getData()
+    },
+    resetClick() {
+      this.search_map = {}
+      this.getData()
+    },
     // 鏂板缓
     addBtnClick() {
       this.editConfig.visible = true
@@ -214,7 +240,6 @@
           }
         })
       }
-      console.log(contactObj)
       this.editConfig.infomation = {
         ...row,
         contact_wechat: contactObj.length > 0 ? contactObj.wechat : "",
@@ -222,27 +247,35 @@
       }
     },
     // 鍒犻櫎
-    delClick(id) {
-      this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function () {
-          return getDeleteClient({ id: id })
+    delClick() {
+      if (this.selValueList && this.selValueList.length > 0) {
+        this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
         })
-        .then((response) => {
-          if (response.code === 200) {
-            this.$message.success("鍒犻櫎鎴愬姛")
-            this.getData()
-          } else {
-            this.$message.warning("鍒犻櫎澶辫触")
-          }
-        })
-        .catch(function () {})
+          .then(() => {
+            getDeleteClient({ ids: this.selValueList }).then((response) => {
+              if (response.code === 200) {
+                this.$message.success("鍒犻櫎鎴愬姛")
+                this.getData()
+              } else {
+                this.$message.warning("鍒犻櫎澶辫触")
+              }
+            })
+          })
+          .catch(() => {})
+      } else {
+        this.$message.warning("璇疯嚦灏戦�夋嫨涓�鏉¤褰�")
+      }
     },
     getSelectArray(val) {
       console.log(val)
+      this.selValueList = []
+      const list = val.map((item) => {
+        return item.id
+      })
+      this.selValueList = list
     },
     // 瀹㈡埛鍚嶇О璇︽儏
     selClientClick(row) {
@@ -254,7 +287,27 @@
     selContactsClick(row) {
       console.log(row)
       this.contactsDeail.visible = true
-      this.contactsDeail.infomation = { ...row }
+      let contact = {}
+      if (row.contacts.length !== 0) {
+        for (let i = 0; i < row.contacts.length; i++) {
+          if (row.contacts[i].is_first) {
+            contact = row.contacts[i]
+          }
+        }
+      }
+      this.contactsDeail.infomation = { ...contact, Client: { name: row.name } }
+    },
+    // 璺熻繘
+    followupClick(row) {
+      console.log(row)
+      this.editFollowupConfig.visible = true
+      this.editFollowupConfig.title = "鏂板缓"
+      this.editFollowupConfig.infomation = {
+        ...row,
+        client_name: row.name,
+        number: "",
+        next_follow_time: row.next_visit_time
+      }
     }
   }
 }
diff --git a/src/views/client/contacts/DetailContacts.vue b/src/views/client/contacts/DetailContacts.vue
index 18907ff..38a94bb 100644
--- a/src/views/client/contacts/DetailContacts.vue
+++ b/src/views/client/contacts/DetailContacts.vue
@@ -83,7 +83,7 @@
                 <li>
                   <div class="left remark">
                     <div class="content-title">{{ "澶囨敞锛�" }}</div>
-                    <div class="content-data">{{ "澶囨敞鍐呭" }}</div>
+                    <div class="content-data">{{ detailConfig.infomation.desc }}</div>
                   </div>
                 </li>
               </ul>
@@ -154,41 +154,41 @@
     }
   },
   created() {
-    this.setData()
+    this.setData(this.detailConfig.infomation)
   },
   mounted() {},
   methods: {
-    setData() {
+    setData(item) {
       this.basicInfoList = [
         {
           leftStr: "鑱旂郴浜哄鍚�",
-          leftValue: "",
+          leftValue: item.name,
           rightStr: "鑱旂郴浜虹紪鍙�",
-          rightValue: ""
+          rightValue: item.number
         },
         {
           leftStr: "瀹㈡埛鍚嶇О",
-          leftValue: "",
+          leftValue: item.Client.name,
           rightStr: "鎵嬫満",
-          rightValue: ""
+          rightValue: item.phone
         },
         {
           leftStr: "鑱屽姟",
-          leftValue: "",
+          leftValue: item.position,
           rightStr: "閿�鍞礋璐d汉",
-          rightValue: ""
+          rightValue: item.member_id
         },
         {
           leftStr: "棣栬鑱旂郴浜�",
-          leftValue: "",
+          leftValue: item.is_first,
           rightStr: "寰俊鍙�",
-          rightValue: ""
+          rightValue: item.wechat
         },
         {
           leftStr: "鐢熸棩",
-          leftValue: "",
+          leftValue: item.birthday,
           rightStr: "鑱旂郴浜篍mail",
-          rightValue: ""
+          rightValue: item.email
         },
         {
           leftStr: "绛惧埌",
@@ -206,15 +206,15 @@
       this.addressInfoList = [
         {
           leftStr: "鍥藉",
-          leftValue: "",
+          leftValue: item.Country.name,
           rightStr: "鐪佷唤",
-          rightValue: ""
+          rightValue: item.Province.name
         },
         {
           leftStr: "鍩庡競",
-          leftValue: "",
+          leftValue: item.City.name,
           rightStr: "鍖哄煙",
-          rightValue: ""
+          rightValue: item.Region.name
         },
         {
           leftStr: "閭紪",
diff --git a/src/views/client/contacts/index.vue b/src/views/client/contacts/index.vue
index ec669d5..014eb51 100644
--- a/src/views/client/contacts/index.vue
+++ b/src/views/client/contacts/index.vue
@@ -11,7 +11,7 @@
         :search-options="searchOptions"
       />
       <div class="btn-pager">
-        <PublicFunctionBtnView :operates-list="operatesList" :allocation="false" />
+        <PublicFunctionBtnView :operates-list="operatesList" :allocation="false" @batchDelete="delClick" />
         <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
       </div>
     </div>
@@ -21,13 +21,14 @@
       :table-list="tableList"
       @selContactsClick="selContactsClick"
       @selClientClick="selClientClick"
+      @getSelectArray="getSelectArray"
     >
       <template slot="tableButton">
-        <el-table-column label="鎿嶄綔" width="120" fixed="right">
+        <el-table-column label="鎿嶄綔" width="90" fixed="right">
           <template slot-scope="scope">
             <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button>
-            <el-button type="text" size="small">璺熻繘</el-button>
-            <el-button @click="delClick(scope.row.id)" type="text" size="small">鍒犻櫎</el-button>
+            <el-button @click="followupClick(scope.row)" type="text" size="small">璺熻繘</el-button>
+            <!-- <el-button @click="delClick(scope.row.id)" type="text" size="small">鍒犻櫎</el-button> -->
           </template>
         </el-table-column>
       </template>
@@ -38,6 +39,8 @@
     <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" />
     <!-- 瀹㈡埛璇︽儏 -->
     <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
+    <!-- 鏂板缓/缂栬緫璺熻繘璁板綍 -->
+    <AddFollowupRecordsDialog v-if="editFollowupConfig.visible" :edit-contacts-config="editFollowupConfig" />
   </div>
 </template>
 
@@ -45,6 +48,7 @@
 import AddContactsDialog from "@/views/client/contacts/AddContactsDialog"
 import { getContactList, getDeleteContact } from "@/api/client/contacts"
 import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import AddFollowupRecordsDialog from "@/views/client/followupRecords/AddFollowupRecordsDialog"
 export default {
   name: "ContactsView",
   props: {
@@ -57,7 +61,8 @@
   components: {
     AddContactsDialog,
     DetailContacts: () => import("@/views/client/contacts/DetailContacts"),
-    DetailClientManage: () => import("@/views/client/client/DetailClientManage")
+    DetailClientManage: () => import("@/views/client/client/DetailClientManage"),
+    AddFollowupRecordsDialog
   },
   computed: {},
   data() {
@@ -94,6 +99,12 @@
       clientDeail: {
         visible: false,
         infomation: {}
+      },
+      selValueList: [],
+      editFollowupConfig: {
+        visible: false,
+        title: "鏂板缓",
+        infomation: {}
       }
     }
   },
@@ -118,7 +129,8 @@
       this.searchOptions = []
       for (let i = 0; i < this.tableList.tableColumn.length; i++) {
         const label = this.tableList.tableColumn[i].label
-        this.searchOptions.push({ value: (i + 1).toString(), label: label })
+        const value = this.tableList.tableColumn[i].prop
+        this.searchOptions.push({ value: value, label: label })
       }
     },
     // 璇锋眰鏁版嵁
@@ -170,27 +182,52 @@
       this.editConfig.infomation = { ...row }
     },
     // 鍒犻櫎
-    delClick(id) {
-      this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function () {
-          return getDeleteContact({ id: id })
+    delClick() {
+      // this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
+      //   confirmButtonText: "纭畾",
+      //   cancelButtonText: "鍙栨秷",
+      //   type: "warning"
+      // })
+      //   .then(function () {
+      //     return getDeleteContact({ id: id })
+      //   })
+      //   .then((response) => {
+      //     if (response.code === 200) {
+      //       this.$message.success("鍒犻櫎鎴愬姛")
+      //       this.getData()
+      //     } else {
+      //       this.$message.warning("鍒犻櫎澶辫触")
+      //     }
+      //   })
+      //   .catch(function () {})
+      if (this.selValueList && this.selValueList.length > 0) {
+        this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
         })
-        .then((response) => {
-          if (response.code === 200) {
-            this.$message.success("鍒犻櫎鎴愬姛")
-            this.getData()
-          } else {
-            this.$message.warning("鍒犻櫎澶辫触")
-          }
-        })
-        .catch(function () {})
+          .then(() => {
+            getDeleteContact({ ids: this.selValueList }).then((response) => {
+              if (response.code === 200) {
+                this.$message.success("鍒犻櫎鎴愬姛")
+                this.getData()
+              } else {
+                this.$message.warning("鍒犻櫎澶辫触")
+              }
+            })
+          })
+          .catch(() => {})
+      } else {
+        this.$message.warning("璇疯嚦灏戦�夋嫨涓�鏉¤褰�")
+      }
     },
     getSelectArray(val) {
       console.log(val)
+      this.selValueList = []
+      const list = val.map((item) => {
+        return item.id
+      })
+      this.selValueList = list
     },
     // 鑱旂郴浜鸿鎯�
     selContactsClick(row) {
@@ -202,7 +239,23 @@
     selClientClick(row) {
       console.log(row)
       this.clientDeail.visible = true
-      this.clientDeail.infomation = { ...row, client_name: row.Client.name }
+      this.clientDeail.infomation = {
+        ...row.Client,
+        client_name: row.Client.name,
+        client_level: row.Client.client_level.name,
+        client_status: row.Client.client_status.name
+      }
+    },
+    // 璺熻繘
+    followupClick(row) {
+      console.log(row)
+      this.editFollowupConfig.visible = true
+      this.editFollowupConfig.title = "鏂板缓"
+      this.editFollowupConfig.infomation = {
+        ...row,
+        client_name: row.Client.name,
+        number: ""
+      }
     }
   }
 }
diff --git a/src/views/client/followupRecords/index.vue b/src/views/client/followupRecords/index.vue
index 24a3a97..a9486b0 100644
--- a/src/views/client/followupRecords/index.vue
+++ b/src/views/client/followupRecords/index.vue
@@ -11,7 +11,7 @@
         :search-options="searchOptions"
       />
       <div class="btn-pager">
-        <PublicFunctionBtnView :statistics="true" :operates-list="operatesList" />
+        <PublicFunctionBtnView :statistics="true" :operates-list="operatesList" @batchDelete="delClick" />
         <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
       </div>
     </div>
@@ -22,12 +22,13 @@
       :select-box="!isDetail"
       @selContactsClick="selContactsClick"
       @selClientClick="selClientClick"
+      @getSelectArray="getSelectArray"
     >
       <template slot="tableButton">
-        <el-table-column label="鎿嶄綔" width="120" fixed="right">
+        <el-table-column label="鎿嶄綔" width="60" fixed="right">
           <template slot-scope="scope">
             <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button>
-            <el-button @click="delClick(scope.row.id)" type="text" size="small">鍒犻櫎</el-button>
+            <!-- <el-button @click="delClick(scope.row.id)" type="text" size="small">鍒犻櫎</el-button> -->
           </template>
         </el-table-column>
       </template>
@@ -101,7 +102,8 @@
       clientDeail: {
         visible: false,
         infomation: {}
-      }
+      },
+      selValueList: []
     }
   },
   created() {
@@ -181,39 +183,52 @@
       this.editConfig.infomation = { ...row, sale_chance_name: "", sales_leads_name: "" }
     },
     // 鍒犻櫎
-    delClick(id) {
-      this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function () {
-          return getDeleteFollowRecord({ id: id })
+    delClick() {
+      if (this.selValueList && this.selValueList.length > 0) {
+        this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
         })
-        .then((response) => {
-          if (response.code === 200) {
-            this.$message.success("鍒犻櫎鎴愬姛")
-            this.getData()
-          } else {
-            this.$message.warning("鍒犻櫎澶辫触")
-          }
-        })
-        .catch(function () {})
+          .then(() => {
+            getDeleteFollowRecord({ ids: this.selValueList }).then((response) => {
+              if (response.code === 200) {
+                this.$message.success("鍒犻櫎鎴愬姛")
+                this.getData()
+              } else {
+                this.$message.warning("鍒犻櫎澶辫触")
+              }
+            })
+          })
+          .catch(() => {})
+      } else {
+        this.$message.warning("璇疯嚦灏戦�夋嫨涓�鏉¤褰�")
+      }
     },
     getSelectArray(val) {
       console.log(val)
+      this.selValueList = []
+      const list = val.map((item) => {
+        return item.id
+      })
+      this.selValueList = list
     },
     // 鑱旂郴浜鸿鎯�
     selContactsClick(row) {
       console.log(row)
       this.contactsDeail.visible = true
-      this.contactsDeail.infomation = { ...row }
+      this.contactsDeail.infomation = { ...row.contact, Client: { name: row.client_name } }
     },
     // 瀹㈡埛鍚嶇О璇︽儏
     selClientClick(row) {
       console.log(row)
       this.clientDeail.visible = true
-      this.clientDeail.infomation = { ...row }
+      this.clientDeail.infomation = {
+        ...row.client,
+        client_name: row.client.name,
+        client_level: row.client.client_level.name,
+        client_status: row.client.client_status.name
+      }
     }
   }
 }
diff --git a/src/views/client/salesLead/AddSalesLeadDialog.vue b/src/views/client/salesLead/AddSalesLeadDialog.vue
index 69e2c71..4c9ec58 100644
--- a/src/views/client/salesLead/AddSalesLeadDialog.vue
+++ b/src/views/client/salesLead/AddSalesLeadDialog.vue
@@ -87,7 +87,7 @@
               <el-col :span="12">
                 <el-form-item label="璐熻矗浜�" prop="member_id">
                   <el-select v-model="editConfig.infomation.member_id" placeholder="璇烽�夋嫨" size="mini">
-                    <el-option v-for="item in ownerOptions" :key="item.id" :label="item.username" :value="item.id">
+                    <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :value="item.id">
                     </el-option>
                   </el-select>
                 </el-form-item>
@@ -244,11 +244,7 @@
     }
   },
   components: { EditDropdownDialog },
-  computed: {
-    searchCommonHeight() {
-      return this.$refs.searchCommonView.offsetHeight
-    }
-  },
+  computed: {},
   data() {
     return {
       dialogWidth: "80%",
@@ -269,7 +265,7 @@
         ]
       },
       businessSourceOptions: [],
-      ownerOptions: [],
+      memberOptions: [],
       countryOptions: [], // 鍥藉
       provinceOptions: [], // 鐪佷唤
       cityOptions: [], // 鍩庡競
@@ -286,9 +282,7 @@
   created() {
     this.getCommonData()
   },
-  mounted() {
-    this.setData()
-  },
+  mounted() {},
   methods: {
     getCommonData() {
       getAllData()
@@ -299,7 +293,7 @@
           this.provinceOptions = res.data.province
           this.cityOptions = res.data.city
           this.regionOptions = res.data.region
-          this.ownerOptions = res.data.member
+          this.memberOptions = res.data.member
         })
         .catch((err) => {
           console.log(err)
@@ -382,19 +376,6 @@
     editDropdownBox() {
       this.editDropdownConfig.editVisible = true
       this.editDropdownConfig.title = "鍟嗘満鏉ユ簮"
-    },
-    // 鏁版嵁澶勭悊
-    setData() {
-      this.editConfig.infomation.city_id =
-        this.editConfig.infomation.city_id === 0 ? "" : this.editConfig.infomation.city_id
-      this.editConfig.infomation.member_id =
-        this.editConfig.infomation.member_id === 0 ? "" : this.editConfig.infomation.member_id
-      this.editConfig.infomation.province_id =
-        this.editConfig.infomation.province_id === 0 ? "" : this.editConfig.infomation.province_id
-      this.editConfig.infomation.region_id =
-        this.editConfig.infomation.region_id === 0 ? "" : this.editConfig.infomation.region_id
-      this.editConfig.infomation.country_id =
-        this.editConfig.infomation.country_id === 0 ? "" : this.editConfig.infomation.country_id
     },
     // 鎵嬫満鍙疯緭鍏�
     confirmPhone(value) {
diff --git a/src/views/client/salesLead/AdvanceDialog.vue b/src/views/client/salesLead/AdvanceDialog.vue
new file mode 100644
index 0000000..849f044
--- /dev/null
+++ b/src/views/client/salesLead/AdvanceDialog.vue
@@ -0,0 +1,223 @@
+<template>
+  <div class="advance">
+    <el-dialog
+      :title="'鎺ㄨ繘'"
+      append-to-body
+      :visible.sync="commonConfig.visible"
+      :width="dialogWidth"
+      :before-close="handleClose"
+      custom-class="advance-dialog"
+    >
+      <div class="content">
+        <el-radio-group v-model="radio">
+          <div class="one">
+            <el-radio :label="1">
+              <span>鎺ㄨ繘鍒颁笅涓�闃舵</span>
+              <el-select v-model="value1" size="mini" disabled>
+                <el-option v-for="(item, index) in options" :key="index" :label="item" :value="item"></el-option>
+              </el-select>
+            </el-radio>
+          </div>
+          <div class="two">
+            <el-radio :label="2">
+              <span>鎺ㄨ繘鍒版寚瀹氶樁娈�</span>
+              <el-select v-model="value" size="mini" @change="designatedStageClick">
+                <el-option v-for="(item, index) in options" :key="index" :label="item" :value="item"></el-option>
+              </el-select>
+              <div v-if="value === '澶辫触鍏抽棴'" class="reason">
+                <div class="label"><span style="color: red">*</span>鍘熷洜</div>
+                <el-input class="input" type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" v-model="reason"></el-input>
+              </div>
+            </el-radio>
+          </div>
+        </el-radio-group>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" size="small" @click="saveClick()">鎺ㄨ繘</el-button>
+        <el-button size="small" @click="commonConfig.visible = false">鍙栨秷</el-button>
+      </div>
+      <!-- 鏂板缓/缂栬緫瀹㈡埛绠$悊 -->
+      <AddClientManageDialog
+        v-if="editConfig.visible"
+        :edit-client-manage-config="editConfig"
+        @salesOpportunityClick="salesOpportunityClick"
+      />
+      <!-- 鏂板缓/缂栬緫閿�鍞満浼� -->
+      <AddSalesOpportunityDialog v-if="editOpportunityConfig.visible" :edit-common-config="editOpportunityConfig" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { pushSalesSources } from "@/api/client/salesLead"
+import AddClientManageDialog from "@/views/client/client/AddClientManageDialog"
+import AddSalesOpportunityDialog from "@/views/sales/salesOpportunity/AddSalesOpportunityDialog"
+export default {
+  name: "AdvanceDialog",
+  props: {
+    advanceConfig: {
+      type: Object,
+      default: () => {
+        return {
+          visible: false,
+          infomation: {}
+        }
+      }
+    }
+  },
+  components: { AddClientManageDialog, AddSalesOpportunityDialog },
+  computed: {},
+  data() {
+    return {
+      dialogWidth: "25%",
+      radio: 1,
+      commonConfig: this.advanceConfig,
+      value1: "",
+      value: "",
+      options: [],
+      reason: "",
+      editConfig: {
+        visible: false,
+        title: "鏂板缓",
+        isSalesOpportunity: false,
+        infomation: {}
+      },
+      editOpportunityConfig: {
+        visible: false,
+        title: "鏂板缓",
+        infomation: {}
+      }
+    }
+  },
+  watch: {},
+  created() {
+    this.setData(this.advanceConfig.infomation.sales_status)
+  },
+  methods: {
+    setData(status) {
+      if (status === 1) {
+        this.options = ["鏂板缓", "澶辫触鍏抽棴", "鍗囩骇鍒板鎴�", "鍗囩骇鍒板鎴峰拰閿�鍞満浼�"]
+        this.value = "澶辫触鍏抽棴"
+        this.value1 = "澶辫触鍏抽棴"
+      } else if (status === -1) {
+        this.options = ["鏂板缓", "璺熻繘涓�", "鍗囩骇鍒板鎴�", "鍗囩骇鍒板鎴峰拰閿�鍞満浼�"]
+        this.value = "鍗囩骇鍒板鎴�"
+        this.value1 = "鍗囩骇鍒板鎴�"
+      } else {
+        this.options = ["璺熻繘涓�", "澶辫触鍏抽棴", "鍗囩骇鍒板鎴�", "鍗囩骇鍒板鎴峰拰閿�鍞満浼�"]
+        this.value = "璺熻繘涓�"
+        this.value1 = "璺熻繘涓�"
+      }
+    },
+    handleClose() {
+      this.commonConfig.visible = false
+      if (this.value === "鍗囩骇鍒板鎴峰拰閿�鍞満浼�") {
+        this.$parent.getData()
+      }
+    },
+    designatedStageClick(val) {
+      console.log(val)
+      this.radio = 2
+    },
+    saveClick() {
+      console.log(this.value)
+      if (this.value === "璺熻繘涓�") {
+        // val === '鏂板缓' ||
+        this.pushSalesSources(1)
+      } else if (this.value === "澶辫触鍏抽棴") {
+        if (this.reason.length > 0) {
+          this.pushSalesSources(-1)
+        } else {
+          this.$message.warning("鍘熷洜涓嶈兘涓虹┖")
+        }
+      } else if (this.value === "鍗囩骇鍒板鎴�") {
+        this.$confirm('鍗囩骇鍚庡皢杞叆"瀹㈡埛绠$悊"妯″潡, 鏄惁缁х画?', "鎻愮ず", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
+        })
+          .then(() => {
+            this.editConfig.visible = true
+            this.editConfig.title = "鏂板缓"
+            this.editConfig.infomation = {
+              ...this.commonConfig.infomation,
+              sales_leads_id: this.commonConfig.infomation.id
+            }
+          })
+          .catch(() => {})
+      } else if (this.value === "鍗囩骇鍒板鎴峰拰閿�鍞満浼�") {
+        this.$confirm('鍗囩骇鍚庡皢杞叆"瀹㈡埛绠$悊"鍜�"閿�鍞満浼�"妯″潡, 鏄惁缁х画?', "鎻愮ず", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
+        })
+          .then(() => {
+            this.editConfig.visible = true
+            this.editConfig.title = "鏂板缓"
+            this.editConfig.isSalesOpportunity = true
+            this.editConfig.infomation = {
+              ...this.commonConfig.infomation,
+              sales_leads_id: this.commonConfig.infomation.id
+            }
+          })
+          .catch(() => {})
+      }
+    },
+    // 鎺ㄨ繘鎺ュ彛
+    async pushSalesSources(step) {
+      await pushSalesSources({
+        id: this.commonConfig.infomation.id,
+        reason: this.reason,
+        step: step
+      }).then((res) => {
+        console.log(res)
+        this.$message.success("鎺ㄨ繘鎴愬姛")
+        this.handleClose()
+        this.$parent.getData()
+      })
+    },
+    // 閿�鍞満浼�
+    salesOpportunityClick(item) {
+      console.log(item)
+      this.editOpportunityConfig.visible = true
+      this.editOpportunityConfig.title = "鏂板缓"
+      this.editOpportunityConfig.infomation = { client_name: item.name }
+    }
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style lang="scss" scoped>
+::v-deep {
+  .advance-dialog .el-dialog__body {
+    padding: 10px 20px;
+    .content {
+      .el-select {
+        margin-left: 10px;
+      }
+      .two {
+        margin-top: 15px;
+        .reason {
+          display: flex;
+          margin-top: 10px;
+          align-items: center;
+          .label {
+            width: 122px;
+            text-align: right;
+          }
+          .input {
+            margin-left: 10px;
+            width: 195px;
+          }
+        }
+      }
+    }
+    .dialog-footer {
+      background-color: #f5f5f5;
+      height: 55px;
+      line-height: 55px;
+    }
+  }
+}
+</style>
diff --git a/src/views/client/salesLead/DetailSalesLead.vue b/src/views/client/salesLead/DetailSalesLead.vue
index b5b4d88..f10ef5c 100644
--- a/src/views/client/salesLead/DetailSalesLead.vue
+++ b/src/views/client/salesLead/DetailSalesLead.vue
@@ -31,11 +31,11 @@
                 <li v-for="(item, i) in basicInfoList" :key="i">
                   <div class="left">
                     <div class="content-title">{{ item.leftStr + "锛�" }}</div>
-                    <div class="content-data">{{ item.leftValue }}</div>
+                    <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div>
                   </div>
-                  <div class="right">
+                  <div v-if="item.rightStr && item.rightStr.length > 0" class="right">
                     <div class="content-title">{{ item.rightStr }}</div>
-                    <div class="content-data">{{ item.rightValue }}</div>
+                    <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div>
                   </div>
                 </li>
               </ul>
@@ -53,11 +53,11 @@
                 <li v-for="(item, i) in dynamicInfoList" :key="i">
                   <div class="left">
                     <div class="content-title">{{ item.leftStr + "锛�" }}</div>
-                    <div class="content-data">{{ item.leftValue }}</div>
+                    <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div>
                   </div>
-                  <div class="right">
+                  <div v-if="item.rightStr && item.rightStr.length > 0" class="right">
                     <div class="content-title">{{ item.rightStr }}</div>
-                    <div class="content-data">{{ item.rightValue }}</div>
+                    <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div>
                   </div>
                 </li>
               </ul>
@@ -75,11 +75,11 @@
                 <li v-for="(item, i) in addressInfoList" :key="i">
                   <div class="left">
                     <div class="content-title">{{ item.leftStr + "锛�" }}</div>
-                    <div class="content-data">{{ item.leftValue }}</div>
+                    <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div>
                   </div>
-                  <div class="right">
-                    <div class="content-title">{{ item.rightStr }}</div>
-                    <div class="content-data">{{ item.rightValue }}</div>
+                  <div v-if="item.rightStr && item.rightStr.length > 0" class="right">
+                    <div class="content-title">{{ item.rightStr + "锛�" }}</div>
+                    <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div>
                   </div>
                 </li>
               </ul>
@@ -97,7 +97,7 @@
                 <li>
                   <div class="left remark">
                     <div class="content-title">{{ "澶囨敞锛�" }}</div>
-                    <div class="content-data">{{ "澶囨敞鍐呭" }}</div>
+                    <div class="content-data">{{ detailConfig.desc }}</div>
                   </div>
                 </li>
               </ul>
diff --git a/src/views/client/salesLead/index.vue b/src/views/client/salesLead/index.vue
index 565eae5..ad1e2e0 100644
--- a/src/views/client/salesLead/index.vue
+++ b/src/views/client/salesLead/index.vue
@@ -3,22 +3,32 @@
     <div class="top">
       <SearchCommonView
         ref="searchCommonView"
-        :query-class-options="queryClassOptions"
         :search-options="searchOptions"
+        @searchClick="searchClick"
+        @resetClick="resetClick"
       />
       <div class="btn-pager">
-        <PublicFunctionBtnView :operates-list="operatesList" />
+        <PublicFunctionBtnView
+          :operates-list="operatesList"
+          @batchDelete="delClick"
+          @allocationBtnClick="allocationBtnClick"
+        />
         <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
       </div>
     </div>
-    <TableCommonView ref="tableListRef" :table-list="tableList" @selSalesLeadClick="selSalesLeadClick">
+    <TableCommonView
+      ref="tableListRef"
+      :table-list="tableList"
+      @selSalesLeadClick="selSalesLeadClick"
+      @getSelectArray="getSelectArray"
+    >
       <template slot="tableButton">
-        <el-table-column label="鎿嶄綔" width="160">
+        <el-table-column label="鎿嶄綔" width="120">
           <template slot-scope="scope">
             <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button>
-            <el-button type="text" size="small">璺熻繘</el-button>
-            <el-button type="text" size="small">鎺ㄨ繘</el-button>
-            <el-button @click="delClick(scope.row.id)" type="text" size="small">鍒犻櫎</el-button>
+            <el-button @click="followupClick(scope.row)" type="text" size="small">璺熻繘</el-button>
+            <el-button @click="advanceClick(scope.row)" type="text" size="small">鎺ㄨ繘</el-button>
+            <!-- <el-button @click="delClick(scope.row.id)" type="text" size="small">鍒犻櫎</el-button> -->
           </template>
         </el-table-column>
       </template>
@@ -29,6 +39,12 @@
     <ImportFileDialog v-if="importConfig.visible" :import-file-config="importConfig" />
     <!-- 璇︽儏 -->
     <DetailSalesLead v-if="salesLeadDeail.visible" :sales-lead-detail="salesLeadDeail" />
+    <!-- 鏂板缓/缂栬緫璺熻繘璁板綍 -->
+    <AddFollowupRecordsDialog v-if="editConfig.visible" :edit-contacts-config="editConfig" />
+    <!-- 鎺ㄨ繘 -->
+    <AdvanceDialog v-if="advanceConfig.visible" :advance-config="advanceConfig" />
+    <!-- 鍒嗛厤 -->
+    <HighViewScopeDialog v-if="highViewScopeConfig.visible" :editCommonConfig="highViewScopeConfig" />
   </div>
 </template>
 
@@ -38,6 +54,9 @@
 import ImportFileDialog from "@/views/other/commonDialog/ImportFileDialog"
 import { getSalesLeadsList, getDeleteSalesLeads } from "@/api/client/salesLead"
 import DetailSalesLead from "@/views/client/salesLead/DetailSalesLead"
+import AddFollowupRecordsDialog from "@/views/client/followupRecords/AddFollowupRecordsDialog"
+import AdvanceDialog from "@/views/client/salesLead/AdvanceDialog"
+import HighViewScopeDialog from "@/views/other/commonDialog/HighViewScopeDialog"
 
 export default {
   name: "SalesLead",
@@ -45,13 +64,17 @@
   components: {
     AddSalesLeadDialog,
     ImportFileDialog,
-    DetailSalesLead
+    DetailSalesLead,
+    AddFollowupRecordsDialog,
+    AdvanceDialog,
+    HighViewScopeDialog
   },
   mixins: [pageMixin],
   computed: {},
   data() {
     return {
       tableList: {},
+      selValueList: [],
       queryClassOptions: [
         { value: "1", label: "鍏ㄩ儴" },
         { value: "2", label: "骞垮憡瀹d紶" },
@@ -82,6 +105,21 @@
       salesLeadDeail: {
         visible: false,
         infomation: {}
+      },
+      editConfig: {
+        visible: false,
+        title: "鏂板缓",
+        infomation: {}
+      },
+      advanceConfig: {
+        visible: false,
+        sales_status: 1
+      },
+      search_map: {},
+      highViewScopeConfig: {
+        // 鍒嗛厤
+        visible: false,
+        infomation: {}
       }
     }
   },
@@ -107,13 +145,14 @@
       this.searchOptions = []
       for (let i = 0; i < this.tableList.tableColumn.length; i++) {
         const label = this.tableList.tableColumn[i].label
-        this.searchOptions.push({ value: (i + 1).toString(), label: label })
+        const value = this.tableList.tableColumn[i].prop
+        this.searchOptions.push({ value: value, label: label })
       }
     },
     // 璇锋眰鏁版嵁
     async getData() {
       await getSalesLeadsList({
-        keyword: "",
+        search_map: this.search_map,
         page: this.pagerOptions.currPage,
         pageSize: this.pagerOptions.pageSize
       })
@@ -132,6 +171,18 @@
           console.log(err)
         })
     },
+    // 鎼滅储
+    searchClick(val, content) {
+      console.log(val, content)
+      this.search_map = {
+        [val]: content
+      }
+      this.getData()
+    },
+    resetClick() {
+      this.search_map = {}
+      this.getData()
+    },
     // 鏂板缓
     addBtnClick() {
       this.editSalesLeadConfig.visible = true
@@ -145,39 +196,68 @@
       this.editSalesLeadConfig.title = "缂栬緫"
       this.editSalesLeadConfig.infomation = { ...row, businessStatus: "鏂板缓" }
     },
+    // 璺熻繘
+    followupClick(row) {
+      this.editConfig.visible = true
+      this.editConfig.title = "鏂板缓"
+      this.editConfig.infomation = { sales_leads_name: row.name }
+    },
     // 瀵煎叆
     importClitk() {
       this.importConfig.visible = true
       this.importConfig.title = "閿�鍞嚎绱�"
     },
+    // 鍒嗛厤
+    allocationBtnClick() {
+      if (this.selValueList && this.selValueList.length > 0) {
+        this.highViewScopeConfig.visible = true
+      } else {
+        this.$message.warning("璇疯嚦灏戦�夋嫨涓�鏉¤褰�")
+      }
+    },
     // 鍒犻櫎
-    delClick(id) {
-      this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(function () {
-          return getDeleteSalesLeads({ id: id })
+    delClick() {
+      if (this.selValueList && this.selValueList.length > 0) {
+        this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning"
         })
-        .then((response) => {
-          if (response.code === 200) {
-            this.$message.success("鍒犻櫎鎴愬姛")
-            this.getData()
-          } else {
-            this.$message.warning("鍒犻櫎澶辫触")
-          }
-        })
-        .catch(function () {})
+          .then(() => {
+            console.log("dddd")
+            getDeleteSalesLeads({ ids: this.selValueList }).then((response) => {
+              if (response.code === 200) {
+                this.$message.success("鍒犻櫎鎴愬姛")
+                this.getData()
+              } else {
+                this.$message.warning("鍒犻櫎澶辫触")
+              }
+            })
+          })
+          .catch(() => {})
+      } else {
+        this.$message.warning("璇疯嚦灏戦�夋嫨涓�鏉¤褰�")
+      }
     },
     getSelectArray(val) {
-      console.log(val)
+      this.selValueList = []
+      const list = val.map((item) => {
+        return item.id
+      })
+      this.selValueList = list
     },
     // 璇︽儏
     selSalesLeadClick(row) {
       console.log(row)
       this.salesLeadDeail.visible = true
       this.salesLeadDeail.infomation = { ...row }
+    },
+    // 鎺ㄨ繘
+    advanceClick(row) {
+      console.log(row)
+      this.advanceConfig.visible = true
+      this.advanceConfig.sales_status = row.sales_status
+      this.advanceConfig.infomation = { ...row }
     }
   }
 }
diff --git a/src/views/other/commonDialog/HighViewScopeDialog.vue b/src/views/other/commonDialog/HighViewScopeDialog.vue
index ad23916..8a88786 100644
--- a/src/views/other/commonDialog/HighViewScopeDialog.vue
+++ b/src/views/other/commonDialog/HighViewScopeDialog.vue
@@ -6,12 +6,12 @@
       :width="dialogWidth"
       :before-close="handleClose"
     >
-      <div class="view-sel-bg">
+      <!-- <div class="view-sel-bg">
         <div class="title">鏌ヨ閫夋嫨</div>
         <el-input v-model="searchInput" size="mini" placeholder="璇疯緭鍏ヨ鏌ユ壘鐨勬垚鍛�"></el-input>
         <el-checkbox v-model="resignMember">鏄剧ず绂昏亴鎴愬憳</el-checkbox>
         <el-checkbox v-model="defaultCollapse">瀛愰儴闂ㄩ粯璁ゆ敹璧�</el-checkbox>
-      </div>
+      </div> -->
       <div class="view-tree">
         <el-tree
           :data="data"
@@ -22,6 +22,10 @@
           highlight-current
           :props="defaultProps"
           :filter-node-method="filterNode"
+          @check="handleCheckChange"
+          :default-checked-keys="[id]"
+          :check-strictly="true"
+          :check-on-click-node="true"
         >
         </el-tree>
       </div>
@@ -139,6 +143,12 @@
     filterNode(value, data) {
       if (!value) return true
       return data.label.indexOf(value) !== -1
+    },
+    handleCheckChange(node, list) {
+      this.id = node.id
+      if (list.checkedKeys.length === 2) {
+        this.$refs.tree.setCheckedKeys([node.id])
+      }
     }
   }
 }
diff --git a/src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue b/src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue
index e86938c..61fd54a 100644
--- a/src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue
+++ b/src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue
@@ -497,7 +497,7 @@
 
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" size="small" @click="saveClick('form')">淇濆瓨</el-button>
-        <el-button size="small" @click="editConfig.visible = false">鍙栨秷</el-button>
+        <el-button size="small" @click="handleClose">鍙栨秷</el-button>
       </div>
       <!-- 閫夋嫨瀹㈡埛 -->
       <SelectClientDialog
@@ -615,6 +615,10 @@
     },
     handleClose() {
       this.editConfig.visible = false
+      console.log(this.editConfig.infomation.client_name)
+      if (this.editConfig.title === "鏂板缓" && this.editConfig.infomation.client_name) {
+        this.$parent.handleClose()
+      }
     },
     // 淇濆瓨
     saveClick(formName) {
@@ -633,7 +637,11 @@
                     message: "娣诲姞鎴愬姛",
                     type: "success"
                   })
-                  this.$parent.getData()
+                  if (this.editConfig.title === "鏂板缓" && this.editConfig.infomation.client_name) {
+                    this.$parent.handleClose()
+                  } else {
+                    this.$parent.getData()
+                  }
                 }
               })
               .catch((err) => {

--
Gitblit v1.8.0