duanshenglang 2 周之前
父節點
當前提交
838abb107f
共有 9 個文件被更改,包括 1714 次插入39 次删除
  1. 210 0
      lottery/complaint.html
  2. 267 0
      lottery/complaintContent.html
  3. 二進制
      lottery/img/to-icon.png
  4. 17 1
      lottery/index.html
  5. 287 0
      lottery/intentionClient.html
  6. 305 0
      lottery/intentionDetail.html
  7. 48 38
      lottery/jxs.html
  8. 318 0
      lottery/timeOut.html
  9. 262 0
      lottery/toFollowUpClient.html

+ 210 - 0
lottery/complaint.html

@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport"
+    content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no, viewport-fit=cover" />
+  <title>投诉客户列表</title>
+  <!--引入 element-ui 的样式,-->
+  <link rel="stylesheet"
+    href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742018383195/element-ui.css">
+  <!-- 必须先引入vue,  后使用element-ui -->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
+  <!-- 引入element 的组件库-->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017747738/element-ui.js"></script>
+  <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
+  <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
+  <!-- <script src="js/vconsole.min.js"></script>
+  <script>
+		  var vConsole = new window.VConsole();
+		</script> -->
+</head>
+<style>
+  body {
+    margin: 0;
+    padding: 0;
+  }
+
+  .box {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+    background: #FAFAFA;
+  }
+
+  .page4 {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+  }
+  .client_list {
+    padding: 15px 10px;
+    height: 100%;
+    overflow: auto;
+    box-sizing: border-box;
+  }
+  .client_item {
+    width: 100%;
+    background: #FFFFFF;
+    border-radius: 10px;
+    padding: 10px;
+    box-sizing: border-box;
+    margin-bottom: 15px;
+  }
+  .client_head {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-bottom: 10px;
+    font-weight: 500;
+    font-size: 14px;
+    color: #222222;
+  }
+  .client_status {
+    font-weight: 400;
+    font-size: 12px;
+  }
+  .client_content {
+    background: #FAFAFA;
+    border-radius: 10px;
+    padding: 10px;
+    font-weight: 400;
+    font-size: 12px;
+    color: #999999;
+    line-height: 23px;
+    text-overflow: -o-ellipsis-lastline;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+    overflow: hidden;
+    box-sizing: border-box;
+    height: 60px;
+  }
+</style>
+
+<body>
+  <div id="box" class="box">
+    <!-- 数据查看 -->
+    <div class="page4">
+      <div class="client_list">
+        <div class="client_item" v-for="(item, index) in complaintList" :key="index" @click="handleComplaint(item)">
+          <div class="client_head">
+            <div>{{item.clientName}}</div>
+            <div class="client_status" :style="{color: item.notifyStatus === 2 ? '#FF4E4E' : '#CCCCCC'}">{{item.notifyStatus === 2 ? '已处理' : '未处理'}}</div>
+          </div>
+          <div class="client_content">{{item.sentimentReason}}</div>
+        </div>
+      </div>
+    </div>
+  </div>
+</body>
+<script>
+  new Vue({
+    el: '#box',
+    data() {
+      return {
+        httpUrl: '',
+        bId: null,
+        env: '',
+        memberId: null,
+        corpId: null,
+        complaintList: [],
+      }
+    },
+    created() {
+      this.bId = this.getQueryParam('bId')
+      this.env = this.getQueryParam('env')
+
+      if (!this.env || this.env === 'prod') {
+        this.httpUrl = 'https://wlapi.wefanbot.com'
+      } else {
+        this.httpUrl = 'http://test.wefanbot.com:18993'
+      }
+      if (this.getQueryParam('memberId')) {
+        // 已授权
+        this.memberId = this.getQueryParam('memberId')
+        this.corpId = this.getQueryParam('corpId')
+        this.executeDetail()
+      } else {
+        // 授权
+        this.getAuth()
+      }
+    },
+    methods: {
+      getAuth() {
+        fetch(this.httpUrl + `/p/insuite/p/getRedirectUri?env=${this.env}&bId=${this.bId}`)
+          .then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              window.location.replace(data)
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+      },
+      executeDetail() {
+        fetch(this.httpUrl + `/scrm/v1/wxc-sentiment-session/p/findTouSuListByPage`, {
+          method: 'post',
+          body: JSON.stringify({
+            memberId: this.memberId,
+            corpId: this.corpId,
+            page: 1,
+            pageCount: 1000,
+          }),
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        })
+          .then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              this.complaintList = data.records
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+      },
+      handleComplaint(item) {
+        const data = {
+          httpUrl: this.httpUrl,
+          corpId: this.corpId,
+          bId: this.bId,
+          id: item.id,
+          externalUserid: item.externalUseridOuter,
+          clientName: item.clientName,
+          sentimentReason: item.sentimentReason,
+          type: item.type,
+          chatId: item.type ? item.chatId : '',
+          notifyStatus: item.notifyStatus
+        }
+        window.name = JSON.stringify(data)
+        window.location.href = `complaintContent.html`
+      },
+      // 截取url中的数据
+      getQueryParam(paramName) {
+        // 获取当前URL的查询字符串部分  
+        const queryString = window.location.search;
+        // 创建一个URLSearchParams对象  
+        const urlParams = new URLSearchParams(queryString);
+        // 返回指定参数的值,如果不存在则返回null  
+        return urlParams.get(paramName);
+      },
+    }
+  })   
+</script>
+
+</html>

+ 267 - 0
lottery/complaintContent.html

@@ -0,0 +1,267 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport"
+    content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no, viewport-fit=cover" />
+  <title>投诉内容</title>
+  <!--引入 element-ui 的样式,-->
+  <link rel="stylesheet"
+    href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742018383195/element-ui.css">
+  <!-- 必须先引入vue,  后使用element-ui -->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
+  <!-- 引入element 的组件库-->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017747738/element-ui.js"></script>
+  <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
+  <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
+  <!-- <script src="js/vconsole.min.js"></script>
+  <script>
+    var vConsole = new window.VConsole();
+  </script> -->
+</head>
+<style>
+  body {
+    margin: 0;
+    padding: 0;
+  }
+
+  .box {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+    background: #FAFAFA;
+  }
+
+  .page4 {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+  }
+  .client_data {
+    padding: 15px;
+    box-sizing: border-box;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+  }
+  .client_head {
+    font-weight: 500;
+    font-size: 14px;
+    color: #222222;
+    line-height: 20px;
+    margin-bottom: 10px;
+  }
+  .client_content {
+    background: #FFFFFF;
+    border-radius: 10px;
+    padding: 12px 10px;
+    font-weight: 400;
+    font-size: 14px;
+    color: #999999;
+    height: 100%;
+    overflow: auto;
+    margin-bottom: 10px;
+  }
+  .follow_btn {
+    background: #1677FF;
+    border-radius: 15px;
+    font-weight: 500;
+    font-size: 14px;
+    color: #FFFFFF;
+    padding: 15px 0;
+    text-align: center;
+  }
+</style>
+
+<body>
+  <div id="box" class="box">
+    <!-- 数据查看 -->
+    <div class="page4">
+      <div class="client_data">
+        <div class="client_head">{{clientName}}</div>
+        <div class="client_content">{{sentimentReason}}</div>
+        <div class="follow_btn" @click="toComfirm">去处理</div>
+      </div>
+    </div>
+  </div>
+</body>
+<script>
+  new Vue({
+    el: '#box',
+    data() {
+      return {
+        httpUrl: '',
+        bId: null,
+        corpId: null,
+        id: null,
+        externalUserid: null,
+        clientName: null,
+        sentimentReason: null,
+        type: null,
+        chatId: null,
+        notifyStatus: null
+      }
+    },
+    created() {
+      const data = JSON.parse(window.name)
+      this.httpUrl = data.httpUrl,
+      this.corpId = data.corpId,
+      this.bId = data.bId,
+      this.id = data.id,
+      this.externalUserid = data.externalUserid,
+      this.clientName = data.clientName,
+      this.sentimentReason = data.sentimentReason,
+      this.type = Number(data.type),
+      this.chatId = Number(data.type) ? data.chatId : '',
+      this.notifyStatus = Number(data.notifyStatus)
+      this.getQyWxSign()
+    },
+    methods: {
+      toComfirm() {
+        if (this.notifyStatus === 2) {
+          if (this.type === 1) {
+            this.toFollowGroup()
+          } else {
+            this.toFollowClient()
+          }
+        } else {
+        fetch(this.httpUrl + `/scrm/v1/wxc-sentiment-session/p/tousuReadComfirm`, {
+          method: 'post',
+          body: JSON.stringify({
+            id: this.id,
+            corpId: this.corpId,
+          }),
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        }).then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              if (this.type === 1) {
+                this.toFollowGroup()
+              } else {
+                this.toFollowClient()
+              }
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+      },
+      getQyWxSign() {
+        fetch(this.httpUrl + '/scrm/v1/wxcp-corp/p/getAgentConfig', {
+          method: 'post',
+          body: JSON.stringify({
+            bid: this.bId,
+            url: window.location.href,
+          }),
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        }).then(res => {
+          return res.json()
+        }).then(result => {
+          let { data, code, msg } = result
+          if (code === 1) {
+            wx.config({
+              beta: true,
+              debug: false,
+              appId: data.corpid, // 必填,企业号的唯一标识,此处填写企业号corpid
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['checkJsApi', 'openEnterpriseChat'] // 必填,需要使用的JS接口列表
+            })
+            wx.agentConfig({
+              corpid: data.corpid,
+              agentid: data.agentId,
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['openEnterpriseChat'], // 必填,需要使用的JS接口列表
+              success: function (res) {
+                // 回调
+                console.log('agentConfig成功', res);
+
+              },
+              fail: function (res) {
+                if (res.errMsg.indexOf('function not exist') > -1) {
+                  alert('版本过低请升级');
+                }
+              },
+              complete: function (res) {
+                // 回调
+                console.log('complete', res);
+              }
+            });
+
+          } else {
+            this.$message({
+              message: msg,
+              type: 'warning'
+            })
+          }
+        })
+      },
+      toFollowClient() {
+        wx.openEnterpriseChat({
+          externalUserIds: this.externalUserid, // 参与会话的外部联系人列表,格式为userId1;userId2;…,用分号隔开。
+          groupName: "",  // 会话名称。单聊时该参数传入空字符串""即可。
+          chatId: "",
+          success: function (res) {
+            var chatId = res.chatId; //返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
+            // 回调
+            console.log('打开客户成功', res)
+
+          },
+          fail: function (res) {
+            // 回调
+            if (res.errMsg.indexOf('function not exist') > -1) {
+              alert('版本过低请升级');
+            }
+            console.log('失败', res);
+          },
+          complete: function (res) {
+            // 回调
+            console.log('完成', res);
+          }
+        })
+      },
+      toFollowGroup() {
+        wx.openEnterpriseChat({
+          groupName: "",  // 会话名称。单聊时该参数传入空字符串""即可。
+          chatId: this.chatId,
+          success: function (res) {
+            var chatId = res.chatId; //返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
+            // 回调
+            console.log('打开客户群聊成功', res)
+
+          },
+          fail: function (res) {
+            // 回调
+            if (res.errMsg.indexOf('function not exist') > -1) {
+              alert('版本过低请升级');
+            }
+            console.log('失败', res);
+          },
+          complete: function (res) {
+            // 回调
+            console.log('完成', res);
+          }
+        });
+      },
+    }
+  })   
+</script>
+
+</html>

二進制
lottery/img/to-icon.png


+ 17 - 1
lottery/index.html

@@ -3,7 +3,7 @@
 
 <head>
 	<meta charset="utf-8">
-	<title>活动</title>
+	<title>详情</title>
 	<meta name="viewport"
 		content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
 	<!--引入 element-ui 的样式,-->
@@ -188,6 +188,22 @@
 							var currentQueryParams = window.location.search;
 							window.location.replace('jxsLogin.html' + currentQueryParams)
 						}
+					} else if (this.h5Type == 41) {
+						// 投诉客户列表
+						var currentQueryParams = window.location.search;
+						window.location.replace('complaint.html' + currentQueryParams)
+					} else if (this.h5Type == 42) {
+						// 待跟进客户列表
+						var currentQueryParams = window.location.search;
+						window.location.replace('toFollowUpClient.html' + currentQueryParams)
+					} else if (this.h5Type == 43) {
+						// 超时消息列表
+						var currentQueryParams = window.location.search;
+						window.location.replace('timeOut.html' + currentQueryParams)
+					} else if (this.h5Type == 44) {
+						// 意向客户列表
+						var currentQueryParams = window.location.search;
+						window.location.replace('intentionClient.html' + currentQueryParams)
 					} else if (!this.h5Type && this.bId) {
 						this.getAuth()
 					}

+ 287 - 0
lottery/intentionClient.html

@@ -0,0 +1,287 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport"
+    content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no, viewport-fit=cover" />
+  <title>意向客户列表</title>
+  <!--引入 element-ui 的样式,-->
+  <link rel="stylesheet"
+    href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742018383195/element-ui.css">
+  <!-- 必须先引入vue,  后使用element-ui -->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
+  <!-- 引入element 的组件库-->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017747738/element-ui.js"></script>
+  <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
+  <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
+  <!-- <script src="js/vconsole.min.js"></script>
+  <script>
+    var vConsole = new window.VConsole();
+  </script> -->
+</head>
+<style>
+  body {
+    margin: 0;
+    padding: 0;
+  }
+
+  .box {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+    background: #FAFAFA;
+  }
+
+  .page4 {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+  }
+
+  .client_list {
+    padding: 15px 10px;
+    height: 100%;
+    overflow: auto;
+    box-sizing: border-box;
+  }
+
+  .client_item {
+    width: 100%;
+    background: #FFFFFF;
+    border-radius: 10px;
+    padding: 20px 10px;
+    box-sizing: border-box;
+    margin-bottom: 15px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+
+  .client_head {
+    font-weight: 400;
+    font-size: 14px;
+    color: #222222;
+  }
+
+  .client_right {
+    display: flex;
+    align-items: center;
+    font-weight: 400;
+    font-size: 14px;
+    color: #999999;
+    margin-right: 8px;
+  }
+  .intention_tag1 {
+    width: 68px;
+    border-radius: 5px;
+    color: #1677FF;
+    border: 1px solid #1677FF;
+    padding: 4px 0;
+    text-align: center;
+    font-weight: 400;
+    font-size: 12px;
+    background: rgba(186,215,255,0.1);
+    margin-left: 8px;
+  }
+  .intention_tag2 {
+    width: 68px;
+    border-radius: 5px;
+    color: #899EB2;
+    border: 1px solid #C4CFDA;
+    padding: 4px 0;
+    text-align: center;
+    font-weight: 400;
+    font-size: 12px;
+    background: rgba(196,207,218,0.1);
+    margin-left: 8px;
+  }
+  .to_iocn {
+    width: 14px;
+    height: 14px;
+    margin-left: 5px;
+  }
+</style>
+
+<body>
+  <div id="box" class="box">
+    <!-- 数据查看 -->
+    <div class="page4">
+      <div class="client_list">
+        <div class="client_item" v-for="(item, index) in intentionList" :key="index" @click="handleTimeOut(item)">
+          <div class="client_head">{{item.clientName}}</div>
+          <div class="client_right" v-if="item.intentionGroup">
+            <span v-for="(k, kIndex) in item.intentionGroup.nameList.slice(0, 2)" :key="kIndex" :class="item.groupId === 1 ? 'intention_tag1' : 'intention_tag2'">{{k}}</span>
+            <img class="to_iocn" src="./img/to-icon.png" alt="">
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</body>
+<script>
+  new Vue({
+    el: '#box',
+    data() {
+      return {
+        httpUrl: '',
+        bId: null,
+        env: '',
+        memberId: null,
+        corpId: null,
+        intentionList: [],
+      }
+    },
+    created() {
+      this.bId = this.getQueryParam('bId')
+      this.env = this.getQueryParam('env')
+
+      if (!this.env || this.env === 'prod') {
+        this.httpUrl = 'https://wlapi.wefanbot.com'
+      } else {
+        this.httpUrl = 'http://test.wefanbot.com:18993'
+      }
+      if (this.getQueryParam('memberId')) {
+        // 已授权
+        this.memberId = this.getQueryParam('memberId')
+        this.corpId = this.getQueryParam('corpId')
+        this.executeDetail()
+      } else {
+        // 授权
+        this.getAuth()
+      }
+    },
+    methods: {
+      getAuth() {
+        fetch(this.httpUrl + `/p/insuite/p/getRedirectUri?env=${this.env}&bId=${this.bId}`)
+          .then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              window.location.replace(data)
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+      },
+      getQyWxSign() {
+        fetch(this.httpUrl + '/scrm/v1/wxcp-corp/p/getAgentConfig', {
+          method: 'post',
+          body: JSON.stringify({
+            bid: this.bId,
+            url: window.location.href,
+          }),
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        }).then(res => {
+          return res.json()
+        }).then(result => {
+          let { data, code, msg } = result
+          if (code === 1) {
+            wx.config({
+              beta: true,
+              debug: false,
+              appId: data.corpid, // 必填,企业号的唯一标识,此处填写企业号corpid
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['checkJsApi', 'openEnterpriseChat'] // 必填,需要使用的JS接口列表
+            })
+            wx.agentConfig({
+              corpid: data.corpid,
+              agentid: data.agentId,
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['openEnterpriseChat'], // 必填,需要使用的JS接口列表
+              success: function (res) {
+                // 回调
+                console.log('agentConfig成功', res);
+
+              },
+              fail: function (res) {
+                if (res.errMsg.indexOf('function not exist') > -1) {
+                  alert('版本过低请升级');
+                }
+              },
+              complete: function (res) {
+                // 回调
+                console.log('complete', res);
+              }
+            });
+
+          } else {
+            this.$message({
+              message: msg,
+              type: 'warning'
+            })
+          }
+        })
+      },
+      executeDetail() {
+        fetch(this.httpUrl + `/scrm/v1/wxc-intention-session/p/findListForNotifyByPage`, {
+          method: 'post',
+          body: JSON.stringify({
+            memberId: this.memberId,
+            corpId: this.corpId,
+            page: 1,
+            pageCount: 1000,
+          }),
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        })
+          .then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              this.intentionList = data.records || []
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+      },
+      handleTimeOut(item) {
+        const data = { 
+          httpUrl: this.httpUrl,
+          corpId: this.corpId,
+          bId: this.bId,
+          id: item.id,
+          externalUserid: item.externalUseridOuter,
+          clientName: item.clientName,
+          reason: item.intentionGroup.reason,
+          groupId: item.groupId,
+          nameList: item.intentionGroup.nameList,
+          type: item.type,
+          chatId: item.type ? item.chatId : '',
+          notifyStatus: item.notifyStatus
+        }
+        window.name = JSON.stringify(data)
+        window.location.href = `intentionDetail.html`
+      },
+      // 截取url中的数据
+      getQueryParam(paramName) {
+        // 获取当前URL的查询字符串部分  
+        const queryString = window.location.search;
+        // 创建一个URLSearchParams对象  
+        const urlParams = new URLSearchParams(queryString);
+        // 返回指定参数的值,如果不存在则返回null  
+        return urlParams.get(paramName);
+      },
+    }
+  })   
+</script>
+
+</html>

+ 305 - 0
lottery/intentionDetail.html

@@ -0,0 +1,305 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport"
+    content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no, viewport-fit=cover" />
+  <title>意向详情</title>
+  <!--引入 element-ui 的样式,-->
+  <link rel="stylesheet"
+    href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742018383195/element-ui.css">
+  <!-- 必须先引入vue,  后使用element-ui -->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
+  <!-- 引入element 的组件库-->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017747738/element-ui.js"></script>
+  <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
+  <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
+  <!-- <script src="js/vconsole.min.js"></script>
+  <script>
+    var vConsole = new window.VConsole();
+  </script> -->
+</head>
+<style>
+  body {
+    margin: 0;
+    padding: 0;
+  }
+
+  .box {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+    background: #FAFAFA;
+  }
+
+  .page4 {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+  }
+
+  .client_data {
+    padding: 15px;
+    box-sizing: border-box;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+  }
+
+  .client_head {
+    font-weight: 500;
+    font-size: 14px;
+    color: #222222;
+    line-height: 20px;
+    margin-bottom: 10px;
+  }
+
+  .client_content {
+    background: #FFFFFF;
+    border-radius: 10px;
+    padding: 12px 10px;
+    height: 100%;
+    overflow: auto;
+    margin-bottom: 10px;
+  }
+  .intention_tag1 {
+    border-radius: 5px;
+    color: #1677FF;
+    border: 1px solid #1677FF;
+    padding: 4px 8px;
+    text-align: center;
+    font-weight: 400;
+    font-size: 12px;
+    background: rgba(186,215,255,0.1);
+    margin-right: 8px;
+  }
+  .intention_tag2 {
+    border-radius: 5px;
+    color: #899EB2;
+    border: 1px solid #C4CFDA;
+    padding: 4px 8px;
+    text-align: center;
+    font-weight: 400;
+    font-size: 12px;
+    background: rgba(196,207,218,0.1);
+    margin-right: 8px;
+  }
+  .reason {
+    font-weight: 400;
+    font-size: 14px;
+    color: #999999;
+    margin-top: 10px;
+  }
+  .follow_btn {
+    background: #1677FF;
+    border-radius: 15px;
+    font-weight: 500;
+    font-size: 14px;
+    color: #FFFFFF;
+    padding: 15px 0;
+    text-align: center;
+  }
+</style>
+
+<body>
+  <div id="box" class="box">
+    <!-- 数据查看 -->
+    <div class="page4">
+      <div class="client_data">
+        <div class="client_head">{{clientName}}</div>
+        <div class="client_content">
+          <div>
+            <span v-for="(k, kIndex) in nameList" :key="kIndex"
+              :class="groupId === 1 ? 'intention_tag1' : 'intention_tag2'">{{k}}</span>
+          </div>
+          <div class="reason">{{reason}}</div>
+        </div>
+        <div class="follow_btn" @click="toComfirm">去跟进</div>
+      </div>
+    </div>
+  </div>
+</body>
+<script>
+  new Vue({
+    el: '#box',
+    data() {
+      return {
+        httpUrl: '',
+        bId: null,
+        corpId: null,
+        id: null,
+        externalUserid: null,
+        clientName: null,
+        reason: '',
+        type: null,
+        chatId: null,
+        groupId: 1,
+        nameList: [],
+        notifyStatus: null
+      }
+    },
+    created() {
+      const data = JSON.parse(window.name)
+      this.httpUrl = data.httpUrl,
+      this.corpId = data.corpId,
+      this.bId = data.bId,
+      this.id = data.id,
+      this.clientName = data.clientName,
+      this.reason = data.reason,
+      this.groupId = data.groupId,
+      this.nameList = data.nameList,
+      this.type = Number(data.type),
+      this.chatId = Number(data.type) ? data.chatId : '',
+      this.externalUserid = data.externalUserid,
+      this.notifyStatus = Number(data.notifyStatus)
+      this.getQyWxSign()
+    },
+    methods: {
+      toComfirm() {
+        if (this.notifyStatus === 2) {
+          if (this.type === 1) {
+            this.toFollowGroup()
+          } else {
+            this.toFollowClient()
+          }
+        } else {
+          fetch(this.httpUrl + `/scrm/v1/wxc-intention-session/p/notifyReadComfirm`, {
+            method: 'post',
+            body: JSON.stringify({
+              id: this.id,
+              corpId: this.corpId,
+            }),
+            headers: {
+              'Content-Type': 'application/json'
+            }
+          }).then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              if (this.type === 1) {
+                this.toFollowGroup()
+              } else {
+                this.toFollowClient()
+              }
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+      },
+      getQyWxSign() {
+        fetch(this.httpUrl + '/scrm/v1/wxcp-corp/p/getAgentConfig', {
+          method: 'post',
+          body: JSON.stringify({
+            bid: this.bId,
+            url: window.location.href,
+          }),
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        }).then(res => {
+          return res.json()
+        }).then(result => {
+          let { data, code, msg } = result
+          if (code === 1) {
+            wx.config({
+              beta: true,
+              debug: false,
+              appId: data.corpid, // 必填,企业号的唯一标识,此处填写企业号corpid
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['checkJsApi', 'openEnterpriseChat'] // 必填,需要使用的JS接口列表
+            })
+            wx.agentConfig({
+              corpid: data.corpid,
+              agentid: data.agentId,
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['openEnterpriseChat'], // 必填,需要使用的JS接口列表
+              success: function (res) {
+                // 回调
+                console.log('agentConfig成功', res);
+
+              },
+              fail: function (res) {
+                if (res.errMsg.indexOf('function not exist') > -1) {
+                  alert('版本过低请升级');
+                }
+              },
+              complete: function (res) {
+                // 回调
+                console.log('complete', res);
+              }
+            });
+
+          } else {
+            this.$message({
+              message: msg,
+              type: 'warning'
+            })
+          }
+        })
+      },
+      toFollowClient() {
+        wx.openEnterpriseChat({
+          externalUserIds: this.externalUserid, // 参与会话的外部联系人列表,格式为userId1;userId2;…,用分号隔开。
+          groupName: "",  // 会话名称。单聊时该参数传入空字符串""即可。
+          chatId: "",
+          success: function (res) {
+            var chatId = res.chatId; //返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
+            // 回调
+            console.log('打开客户成功', res)
+
+          },
+          fail: function (res) {
+            // 回调
+            if (res.errMsg.indexOf('function not exist') > -1) {
+              alert('版本过低请升级');
+            }
+            console.log('失败', res);
+          },
+          complete: function (res) {
+            // 回调
+            console.log('完成', res);
+          }
+        })
+      },
+      toFollowGroup() {
+        wx.openEnterpriseChat({
+          groupName: "",  // 会话名称。单聊时该参数传入空字符串""即可。
+          chatId: this.chatId,
+          success: function (res) {
+            var chatId = res.chatId; //返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
+            // 回调
+            console.log('打开客户群聊成功', res)
+
+          },
+          fail: function (res) {
+            // 回调
+            if (res.errMsg.indexOf('function not exist') > -1) {
+              alert('版本过低请升级');
+            }
+            console.log('失败', res);
+          },
+          complete: function (res) {
+            // 回调
+            console.log('完成', res);
+          }
+        });
+      },
+    }
+  })   
+</script>
+
+</html>

+ 48 - 38
lottery/jxs.html

@@ -1045,7 +1045,7 @@
         outletsData: [], // 网点列表数据
         pageTitle: '客户资产',
         showPicker: false,
-        outletName: '全部', // 网点名称
+        outletName: '', // 网点名称
         outletId: null, // 网点id
 
         clientIndicators: [], // 客户资产-总数据
@@ -1209,44 +1209,9 @@
               this.pageEndTime =  this.getDateTime(-1)
               this.index = 1
             }
-            this.outletName = '全部'
+            this.outletName = ''
             this.outletId = null
             this.getOutletsData()
-            if (this.pageTitle === '客户资产') {
-              this.getClientIndicators() // 客户资产-总数据
-              this.getTrend() // 客户资产-统计趋势图
-              this.stepStatistic() // 客户资产-客群包分布
-              this.getIntentRank() // 意向车型标签排名
-              this.getBuyRank() // 已购车型标签排名
-              this.$nextTick(() => {
-                this.funnelDraw()
-                this.passValue()
-                this.intentRankChart()
-                this.buyRankChart()
-              })
-            } else if (this.pageTitle === '聊天分析') {
-              this.handlePage(2)
-              this.$nextTick(() => {
-                this.interactChart()
-                this.staffChart()
-                this.clientChart()
-                this.opinionChart()
-                this.wordCloudChart()
-              })
-            } else if (this.pageTitle === '员工监测') {
-              this.handlePage(3)
-              this.$nextTick(() => {
-                this.clientStepChart()
-                this.timeOutTrendChart()
-              })
-            } else if (this.pageTitle === '运营任务') {
-              this.handlePage(4)
-              this.$nextTick(() => {
-                this.taskCompleteChart()
-                this.opInteractChart()
-                this.contentRankChart()
-              })
-            }
           } else if (code === 10001) {
             this.loginOut()
           } else {
@@ -1254,6 +1219,43 @@
           }
         })
       },
+      requestData () {
+        if (this.pageTitle === '客户资产') {
+          this.getClientIndicators() // 客户资产-总数据
+          this.getTrend() // 客户资产-统计趋势图
+          this.stepStatistic() // 客户资产-客群包分布
+          this.getIntentRank() // 意向车型标签排名
+          this.getBuyRank() // 已购车型标签排名
+          this.$nextTick(() => {
+            this.funnelDraw()
+            this.passValue()
+            this.intentRankChart()
+            this.buyRankChart()
+          })
+        } else if (this.pageTitle === '聊天分析') {
+          this.handlePage(2)
+          this.$nextTick(() => {
+            this.interactChart()
+            this.staffChart()
+            this.clientChart()
+            this.opinionChart()
+            this.wordCloudChart()
+          })
+        } else if (this.pageTitle === '员工监测') {
+          this.handlePage(3)
+          this.$nextTick(() => {
+            this.clientStepChart()
+            this.timeOutTrendChart()
+          })
+        } else if (this.pageTitle === '运营任务') {
+          this.handlePage(4)
+          this.$nextTick(() => {
+            this.taskCompleteChart()
+            this.opInteractChart()
+            this.contentRankChart()
+          })
+        }
+      },
       // 获取商户列表(右上角)
       getAdminList() {
         const headers = new Headers()
@@ -1307,7 +1309,15 @@
             vant.Toast.fail(msg)
           }
         }).finally(() => {
-          this.outletsData.unshift('全部')
+          if (this.outletsList.length === 1) {
+            this.outletName = this.outletsData[0]
+            this.outletId = this.outletsList.find(item => item.name === this.outletName).id || null
+          } else if (this.outletsList.length === 0 || this.outletsList.length > 1) {
+            this.outletsData.unshift('全部')
+            this.outletName = '全部'
+            this.outletId = null
+          }
+          this.requestData()
         })
       },
       onConfirm (val) {

+ 318 - 0
lottery/timeOut.html

@@ -0,0 +1,318 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport"
+    content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no, viewport-fit=cover" />
+  <title>超时消息列表</title>
+  <!--引入 element-ui 的样式,-->
+  <link rel="stylesheet"
+    href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742018383195/element-ui.css">
+  <!-- 必须先引入vue,  后使用element-ui -->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
+  <!-- 引入element 的组件库-->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017747738/element-ui.js"></script>
+  <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
+  <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
+  <!-- <script src="js/vconsole.min.js"></script>
+  <script>
+    var vConsole = new window.VConsole();
+  </script> -->
+</head>
+<style>
+  body {
+    margin: 0;
+    padding: 0;
+  }
+
+  .box {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+    background: #FAFAFA;
+  }
+
+  .page4 {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+  }
+
+  .client_list {
+    padding: 15px 10px;
+    height: 100%;
+    overflow: auto;
+    box-sizing: border-box;
+  }
+
+  .client_item {
+    width: 100%;
+    background: #FFFFFF;
+    border-radius: 10px;
+    padding: 20px 10px;
+    box-sizing: border-box;
+    margin-bottom: 15px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+
+  .client_head {
+    font-weight: 400;
+    font-size: 14px;
+    color: #222222;
+  }
+
+  .client_right {
+    display: flex;
+    align-items: center;
+    font-weight: 400;
+    font-size: 14px;
+    color: #999999;
+  }
+  .to_iocn {
+    width: 14px;
+    height: 14px;
+  }
+</style>
+
+<body>
+  <div id="box" class="box">
+    <!-- 数据查看 -->
+    <div class="page4">
+      <div class="client_list">
+        <div class="client_item" v-for="(item, index) in timeOutList" :key="index" @click="handleTimeOut(item)">
+          <div class="client_head">{{item.clientName}}</div>
+          <div class="client_right">已等待
+              <span style="color: #FF4E4E;">{{formatTime(item.waitSeconds)}}</span>
+              <img class="to_iocn" src="./img/to-icon.png" alt="">
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</body>
+<script>
+  new Vue({
+    el: '#box',
+    data() {
+      return {
+        httpUrl: '',
+        bId: null,
+        env: '',
+        memberId: null,
+        timeOutList: [],
+      }
+    },
+    created() {
+      this.bId = this.getQueryParam('bId')
+      this.env = this.getQueryParam('env')
+
+      if (!this.env || this.env === 'prod') {
+        this.httpUrl = 'https://wlapi.wefanbot.com'
+      } else {
+        this.httpUrl = 'http://test.wefanbot.com:18993'
+      }
+      if (this.getQueryParam('memberId')) {
+        // 已授权
+        this.memberId = this.getQueryParam('memberId')
+        this.getQyWxSign()
+        this.executeDetail()
+      } else {
+        // 授权
+        this.getAuth()
+      }
+    },
+    methods: {
+      getAuth() {
+        fetch(this.httpUrl + `/p/insuite/p/getRedirectUri?env=${this.env}&bId=${this.bId}`)
+          .then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              window.location.replace(data)
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+      },
+      getQyWxSign() {
+        fetch(this.httpUrl + '/scrm/v1/wxcp-corp/p/getAgentConfig', {
+          method: 'post',
+          body: JSON.stringify({
+            bid: this.bId,
+            url: window.location.href,
+          }),
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        }).then(res => {
+          return res.json()
+        }).then(result => {
+          let { data, code, msg } = result
+          if (code === 1) {
+            wx.config({
+              beta: true,
+              debug: false,
+              appId: data.corpid, // 必填,企业号的唯一标识,此处填写企业号corpid
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['checkJsApi', 'openEnterpriseChat'] // 必填,需要使用的JS接口列表
+            })
+            wx.agentConfig({
+              corpid: data.corpid,
+              agentid: data.agentId,
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['openEnterpriseChat'], // 必填,需要使用的JS接口列表
+              success: function (res) {
+                // 回调
+                console.log('agentConfig成功', res);
+
+              },
+              fail: function (res) {
+                if (res.errMsg.indexOf('function not exist') > -1) {
+                  alert('版本过低请升级');
+                }
+              },
+              complete: function (res) {
+                // 回调
+                console.log('complete', res);
+              }
+            });
+
+          } else {
+            this.$message({
+              message: msg,
+              type: 'warning'
+            })
+          }
+        })
+      },
+      executeDetail() {
+        fetch(this.httpUrl + `/wxcp/monitoredMessage/p/member/wait-handle-message?memberId=${this.memberId}`)
+          .then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              this.timeOutList = data || []
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+      },
+      handleTimeOut(item) {
+        if (item.sessionType === 1) {
+          this.toFollowGroup(item)
+        } else {
+          this.toFollowClient(item)
+        }
+      },
+      toFollowGroup(item) {
+        wx.openEnterpriseChat({
+          groupName: "",  // 会话名称。单聊时该参数传入空字符串""即可。
+          chatId: item.chatId,
+          success: function (res) {
+            var chatId = res.chatId; //返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
+            // 回调
+            console.log('打开客户群聊成功', res)
+
+          },
+          fail: function (res) {
+            // 回调
+            if (res.errMsg.indexOf('function not exist') > -1) {
+              alert('版本过低请升级');
+            }
+            console.log('失败', res);
+          },
+          complete: function (res) {
+            // 回调
+            console.log('完成', res);
+          }
+        });
+      },
+      toFollowClient (item) {
+        wx.openEnterpriseChat({
+          externalUserIds: item.wxcpClientExternalUserId, // 参与会话的外部联系人列表,格式为userId1;userId2;…,用分号隔开。
+          groupName: "",  // 会话名称。单聊时该参数传入空字符串""即可。
+          chatId: "",
+          success: function (res) {
+            var chatId = res.chatId; //返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
+            // 回调
+            console.log('打开客户成功', res)
+
+          },
+          fail: function (res) {
+            // 回调
+            if (res.errMsg.indexOf('function not exist') > -1) {
+              alert('版本过低请升级');
+            }
+            console.log('失败', res);
+          },
+          complete: function (res) {
+            // 回调
+            console.log('完成', res);
+          }
+        })
+      },
+      formatTime(seconds) {
+        if (seconds === undefined || seconds === '' || seconds === null) {
+          return '--'
+        }
+        if (seconds >= 3600) {
+          // 转换为小时并保留整数部分
+          const hour = this.formatNumber(seconds / 3600);
+          return `${hour}小时`;
+        } else if (seconds >= 60) {
+          // 转换为分钟并保留整数部分
+          const minutes = this.formatNumber(seconds / 60);
+          return `${minutes}分钟`;
+        } else {
+          return `${seconds}秒`;
+        }
+      },
+      formatNumber(num) {
+        const number = Number(num);
+
+        if (isNaN(number) || !isFinite(number)) {
+          return num;
+        }
+
+        // 整数直接返回
+        if (Number.isInteger(number)) {
+          return number.toString();
+        }
+
+        // 非整数处理:先保留两位小数,再移除末尾的零
+        let str = number.toFixed(2);
+        // 正则表达式移除末尾的零(保留有效小数位)
+        return str.replace(/(\.[1-9]?0+)$|(\.[1-9])0+$/g, '$1$2');
+      },
+      // 截取url中的数据
+      getQueryParam(paramName) {
+        // 获取当前URL的查询字符串部分  
+        const queryString = window.location.search;
+        // 创建一个URLSearchParams对象  
+        const urlParams = new URLSearchParams(queryString);
+        // 返回指定参数的值,如果不存在则返回null  
+        return urlParams.get(paramName);
+      },
+    }
+  })   
+</script>
+
+</html>

+ 262 - 0
lottery/toFollowUpClient.html

@@ -0,0 +1,262 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport"
+    content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no, viewport-fit=cover" />
+  <title>待跟进客户列表</title>
+  <!--引入 element-ui 的样式,-->
+  <link rel="stylesheet"
+    href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742018383195/element-ui.css">
+  <!-- 必须先引入vue,  后使用element-ui -->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
+  <!-- 引入element 的组件库-->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017747738/element-ui.js"></script>
+  <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
+  <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
+  <!-- <script src="js/vconsole.min.js"></script>
+  <script>
+    var vConsole = new window.VConsole();
+  </script> -->
+</head>
+<style>
+  body {
+    margin: 0;
+    padding: 0;
+  }
+
+  .box {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+    background: #FAFAFA;
+  }
+
+  .page4 {
+    width: 100vw;
+    height: 100vh;
+    box-sizing: border-box;
+  }
+
+  .client_list {
+    padding: 15px 10px;
+    height: 100%;
+    overflow: auto;
+    box-sizing: border-box;
+  }
+
+  .client_item {
+    width: 100%;
+    background: #FFFFFF;
+    border-radius: 10px;
+    padding: 20px 10px;
+    box-sizing: border-box;
+    margin-bottom: 15px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+  .client_head {
+    font-weight: 400;
+    font-size: 14px;
+    color: #222222;
+  }
+  .client_right {
+    display: flex;
+    align-items: center;
+    font-weight: 400;
+    font-size: 14px;
+    color: #222222;
+  }
+
+  .client_status {
+    font-weight: 400;
+    font-size: 14px;
+    padding-left: 25px;
+  }
+  .to_iocn {
+    width: 14px;
+    height: 14px;
+  }
+</style>
+
+<body>
+  <div id="box" class="box">
+    <!-- 数据查看 -->
+    <div class="page4">
+      <div class="client_list">
+        <div class="client_item" v-for="(item, index) in followUpList" :key="index" @click="toFollowUpClient(item)">
+          <div class="client_head">{{item.clientName}}</div>
+          <div class="client_right">
+            <div>{{item.sellProcessName}}</div>
+            <div class="client_status">
+              <span :style="{color: item.followStatus === 'NEED_FOLLOW' ? '#FF4E4E' : '#FFA64E'}">{{item.followStatus === 'NEED_FOLLOW' ? '需要跟进' : '急需跟进'}}</span>
+              <img class="to_iocn" src="./img/to-icon.png" alt="">
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</body>
+<script>
+  new Vue({
+    el: '#box',
+    data() {
+      return {
+        httpUrl: '',
+        bId: null,
+        env: '',
+        memberId: null,
+        followUpList: [],
+      }
+    },
+    created() {
+      this.bId = this.getQueryParam('bId')
+      this.env = this.getQueryParam('env')
+
+      if (!this.env || this.env === 'prod') {
+        this.httpUrl = 'https://wlapi.wefanbot.com'
+      } else {
+        this.httpUrl = 'http://test.wefanbot.com:18993'
+      }
+      if (this.getQueryParam('memberId')) {
+        // 已授权
+        this.memberId = this.getQueryParam('memberId')
+        this.getQyWxSign()
+        this.executeDetail()
+      } else {
+        // 授权
+        this.getAuth()
+      }
+    },
+    methods: {
+      getAuth() {
+        fetch(this.httpUrl + `/p/insuite/p/getRedirectUri?env=${this.env}&bId=${this.bId}`)
+          .then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              window.location.replace(data)
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+      },
+      getQyWxSign() {
+        fetch(this.httpUrl + '/scrm/v1/wxcp-corp/p/getAgentConfig', {
+          method: 'post',
+          body: JSON.stringify({
+            bid: this.bId,
+            url: window.location.href,
+          }),
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        }).then(res => {
+          return res.json()
+        }).then(result => {
+          let { data, code, msg } = result
+          if (code === 1) {
+            wx.config({
+              beta: true,
+              debug: false,
+              appId: data.corpid, // 必填,企业号的唯一标识,此处填写企业号corpid
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['checkJsApi', 'openEnterpriseChat'] // 必填,需要使用的JS接口列表
+            })
+            wx.agentConfig({
+              corpid: data.corpid,
+              agentid: data.agentId,
+              timestamp: data.timestamp, // 必填,生成签名的时间戳
+              nonceStr: data.nonceStr, // 必填,生成签名的随机串
+              signature: data.agentSignature, // 必填,签名,见附录1
+              jsApiList: ['openEnterpriseChat'], // 必填,需要使用的JS接口列表
+              success: function (res) {
+                // 回调
+                console.log('agentConfig成功', res);
+
+              },
+              fail: function (res) {
+                if (res.errMsg.indexOf('function not exist') > -1) {
+                  alert('版本过低请升级');
+                }
+              },
+              complete: function (res) {
+                // 回调
+                console.log('complete', res);
+              }
+            });
+
+          } else {
+            this.$message({
+              message: msg,
+              type: 'warning'
+            })
+          }
+        })
+      },
+      executeDetail() {
+        fetch(this.httpUrl + `/wxcp/sell-process/p/member/wait-follow-clietns?memberId=${this.memberId}`)
+          .then(res => {
+            return res.json()
+          }).then(result => {
+            let { data, code, msg } = result
+            if (code === 1) {
+              this.followUpList = data || []
+            } else {
+              this.$message({
+                message: msg,
+                type: 'warning'
+              })
+            }
+          })
+      },
+      toFollowUpClient(item) {
+        wx.openEnterpriseChat({
+          externalUserIds: item.wxcpClientExternalUserId, // 参与会话的外部联系人列表,格式为userId1;userId2;…,用分号隔开。
+          groupName: "",  // 会话名称。单聊时该参数传入空字符串""即可。
+          chatId: "",
+          success: function (res) {
+            var chatId = res.chatId; //返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
+            // 回调
+            console.log('打开客户成功', res)
+
+          },
+          fail: function (res) {
+            // 回调
+            if (res.errMsg.indexOf('function not exist') > -1) {
+              alert('版本过低请升级');
+            }
+            console.log('失败', res);
+          },
+          complete: function (res) {
+            // 回调
+            console.log('完成', res);
+          }
+        })
+      },
+      // 截取url中的数据
+      getQueryParam(paramName) {
+        // 获取当前URL的查询字符串部分  
+        const queryString = window.location.search;
+        // 创建一个URLSearchParams对象  
+        const urlParams = new URLSearchParams(queryString);
+        // 返回指定参数的值,如果不存在则返回null  
+        return urlParams.get(paramName);
+      },
+    }
+  })   
+</script>
+
+</html>