duanshenglang 4 дней назад
Родитель
Сommit
6e1c8e797b

+ 42 - 11
lottery/qw.html → lottery/WeCom.html

@@ -36,6 +36,8 @@
   .box {
     width: 100vw;
     height: 100vh;
+    height: calc(100vh - constant(safe-area-inset-top));
+		height: calc(100vh - env(safe-area-inset-top));
     box-sizing: border-box;
     background: #F7F9FC;
   }
@@ -43,6 +45,8 @@
   .page5 {
     width: 100vw;
     height: 100vh;
+    height: calc(100vh - constant(safe-area-inset-top));
+		height: calc(100vh - env(safe-area-inset-top));
     box-sizing: border-box;
   }
   .tabbar {
@@ -54,9 +58,11 @@
     position: fixed;
     bottom: 0;
     left: 0;
-    z-index: 1;
+    z-index: 2;
     font-size: 10px;
     color: #858F9B;
+    margin-bottom: constant(safe-area-inset-bottom);
+    margin-bottom: env(safe-area-inset-bottom);
   }
   .tabbar_box {
     display: flex;
@@ -105,7 +111,7 @@
     /* padding-bottom: 46px; */
   }
   .task_content {
-    padding: 0 15px;
+    padding: 0 15px 46px;
   }
   .wel_tip {
     font-weight: bold;
@@ -194,7 +200,20 @@
     color: #222222;
     line-height: 17px;
     padding-top: 10px;
-    max-width: 240px; /* 必须设置宽度 */
+    width: 240px; /* 必须设置宽度 */
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+  }
+  .task_item_CLIENT_LOG {
+    height: 17px;
+  }
+  .task_item_CLIENT_LOG div{
+    font-size: 12px;
+    color: #222222;
+    line-height: 17px;
+    padding-top: 10px;
+    width: 240px; /* 必须设置宽度 */
     overflow: hidden;
     white-space: nowrap;
     text-overflow: ellipsis;
@@ -621,14 +640,15 @@
     left: 0;
     z-index: 1;
     width: 100%;
-    height: calc(100vh - 138px);
+    /* height: calc(100vh - 138px); */
     background: linear-gradient( 180deg, rgba(247,249,252,0.8) 0%, #F7F9FC 100%);
     border-radius: 15px 15px 0 0;
     border: 1px solid #FFFFFF;
+    border-bottom: unset;
     box-sizing: border-box;
   }
   .marketing_content {
-    padding: 20px 15px;
+    padding: 20px 15px 46px;
   }
   .reach_tools {
     display: flex;
@@ -708,7 +728,7 @@
           <div class="home_box">
             <div class="wel_tip">
               <div>下午好~</div>
-              <div>LING号玩家-服务官</div>
+              <div>{{memberName}}</div>
             </div>
             <div class="task_content">
               <div class="task_box" :style="{'height': taskList.length ? '295px' : '180px'}">
@@ -726,10 +746,11 @@
                   <div class="task_item" v-for="item in taskList" :key="item.id">
                     <div class="task_item_left">
                       <div class="task_item_left_top">
-                        <img :src="item.clientAvatar ? item.clientAvatar : './img/avatar.png'" alt="">
+                        <img :src="item.clientAvatar ? item.clientAvatar : './img/qw/mem_icon.png'" alt="">
                         <div>{{ item.clientName }}</div>
                       </div>
-                      <div class="task_item_left_bottom">{{ item.taskDesc }}</div>
+                      <div class="task_item_CLIENT_LOG" v-if="item.type === 'CLIENT_LOG'" v-html="item.taskDesc"></div>
+                      <div class="task_item_left_bottom" v-else>{{item.taskDesc}}</div>
                     </div>
                     <div class="task_item_line"></div>
                     <div class="task_item_right" @click="handleTaskDetail(item)">查看</div>
@@ -814,7 +835,7 @@
                     </template>
                   </van-checkbox>
                   <div class="client_info" @click="handleClientDetail(item)">
-                    <img :src="item.avatar ? item.avatar : './img/avatar.png'" alt="">
+                    <img :src="item.avatar ? item.avatar : './img/qw/mem_icon.png'" alt="">
                     <div class="client_info_text">
                       <div>{{item.name}}</div>
                       <div class="client_tag">
@@ -923,7 +944,7 @@
         bId: null,
         env: '',
         memberId: null,
-
+        memberName: '', // 首页
         bind: false, // 首页
         taskList: [],
         clientAdd: null,
@@ -1016,10 +1037,12 @@
               localStorage.setItem('tokenValue', data.token)
               localStorage.setItem('tenancyIdValue', data.tenancyId)
               localStorage.setItem('userId', data.userId)
+              localStorage.setItem('tenancyNameValue', data.memberName)
             } else {
               this.clientData()
               this.getTaskList()
             }
+            this.memberName = data.memberName
           } else {
             vant.Toast.fail(msg)
           }
@@ -1122,6 +1145,7 @@
       },
       handleChange(tab) {
         this.activeTab = tab
+        this.keyword = ''
         this.clientList = []
         this.groupList = []
         if (tab === '客户') {
@@ -1137,7 +1161,11 @@
       },
       // 搜索客户
       handleSearch() {
-        this.pageClient()
+        if (this.activeTab === '客户') {
+          this.pageClient()
+        } else {
+          this.pageGroup()
+        }
       },
       // 全部客户
       pageClient() {
@@ -1181,6 +1209,7 @@
           body: JSON.stringify({
             bid: this.bId,
             memberId: this.memberId,
+            keyword: this.keyword,
             page: 1,
             pageCount: 1000,
           }),
@@ -1250,6 +1279,8 @@
           .map(item => ({
             clientId: item.id,
             externalUserid: item.externalUserid,
+            avatar: item.avatar,
+            tagList: item.tagList || [],
             // 如果后面还需要其它字段,也可以一起带上
             name: item.name,
           }))

+ 20 - 0
lottery/css/page-return.css

@@ -0,0 +1,20 @@
+.return_btn {
+  display: flex;
+  align-items: center;
+  height: 39px;
+  background: #FFFFFF;
+  box-shadow: 0px -10px 20px 1px rgba(62, 89, 132, 0.03);
+  border-radius: 20px 20px 0px 0px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  gap: 80px;
+  justify-content: center;
+  margin-bottom: constant(safe-area-inset-bottom);
+  margin-bottom: env(safe-area-inset-bottom);
+}
+
+.return_btn img {
+  width: 24px;
+  height: 24px;
+}

BIN
lottery/img/qw/back_left.png


BIN
lottery/img/qw/back_right.png


BIN
lottery/img/qw/videoLink_type.png


BIN
lottery/img/qw/videoLink_type1.png


BIN
lottery/img/qw/video_type.png


BIN
lottery/img/qw/video_type1.png


+ 6 - 2
lottery/index.html

@@ -100,7 +100,11 @@
 						})
 				},
 				ifH5Type () {
-					if (this.h5Type == 19 || this.h5Type == 30) {
+					 if(this.h5Type == 4) {
+						// 宝骏云海送祝福
+						var currentQueryParams = window.location.search;
+						window.location.replace('qw/material.html' + currentQueryParams)
+					} else if (this.h5Type == 19 || this.h5Type == 30) {
 						// 抽奖
 						var currentQueryParams = window.location.search;
 						window.location.replace('lottery.html' + currentQueryParams)
@@ -207,7 +211,7 @@
 					} else if (this.h5Type == 45) {
 						// 意向客户列表
 						var currentQueryParams = window.location.search;
-						window.location.replace('qw.html' + currentQueryParams)
+						window.location.replace('WeCom.html' + currentQueryParams)
 					} else if (!this.h5Type && this.bId) {
 						this.getAuth()
 					}

+ 29 - 0
lottery/js/page-return.js

@@ -0,0 +1,29 @@
+var demo_str = `
+    <div class="return_btn">
+      <img :src="leftIcon" alt="" @click="handleClickReturn">
+      <img :src="rightIcon" alt="">
+    </div>
+`;
+
+var demoComponent = Vue.extend({
+  template: demo_str,
+  data: function() {
+    // 初始化时先获取路径信息
+    const isQwPath = window.location.pathname.includes('/qw')
+    
+    return {
+      // 根据路径设置不同的图片路径
+      leftIcon: isQwPath ? '../img/qw/back_left.png' : './img/qw/back_left.png',
+      rightIcon: isQwPath ? '../img/qw/back_right.png' : './img/qw/back_right.png',
+    }
+  },
+  created() {
+  },
+  methods: {
+    handleClickReturn() {
+      window.history.back()
+    }
+  },
+});
+
+Vue.component('page-return', demoComponent);

+ 10 - 6
lottery/js/select-tag.js

@@ -3,13 +3,13 @@ var demo_str = `
     <div class="clientTag_title">
       <div class="close_icon"></div>
       <div>按客户标签筛选</div>
-      <img class="close_icon" src="../img/qw/close_icon.png" alt="" @click="popupVisible = false">
+      <img class="close_icon" :src="closeIcon" alt="" @click="popupVisible = false">
     </div>
     <div class="search_box">
-      <van-search class="search_input" placeholder="搜索客户昵称/客户群昵称" v-model="keyword" search :clearable="false" left-icon="" @search="handleSearch">
+      <van-search class="search_input" placeholder="搜索标签" v-model="keyword" search :clearable="false" left-icon="" @search="getTagList">
         <!-- 自定义右侧图标 -->
         <template v-slot:right-icon>
-          <img class="search_icon" src="../img/qw/search_icon.png" alt="" @click="handleSearch" />
+          <img class="search_icon" :src="searchIcon" alt="" @click="getTagList" />
         </template>
       </van-search>
     </div>
@@ -50,8 +50,13 @@ var demo_str = `
 `
 var demoComponent = Vue.extend({
   template:demo_str ,
-  data:function(){
+  data: function () {
+    // 初始化时先获取路径信息
+    const isQwPath = window.location.pathname.includes('/qw')
     return {
+      // 根据路径设置不同的图片路径
+      closeIcon: isQwPath ? '../img/qw/close_icon.png' : './img/qw/close_icon.png',
+      searchIcon: isQwPath ? '../img/qw/search_icon.png' : './img/qw/search_icon.png',
       httpUrl: '',
       env: '',
       keyword: '',
@@ -108,7 +113,7 @@ var demoComponent = Vue.extend({
       headers.append('token', 'k1176728601917100001')
       headers.append('tenancyId', '103548289110001')
       headers.append('userId', '100884320310007')
-      fetch(this.httpUrl + `/scrm/v1/wxcp-tag/m/findListWithGroup`, {
+      fetch(this.httpUrl + `/scrm/v1/wxcp-tag/m/findListWithGroup?keyword=${this.keyword}`, {
           method: 'GET',
           headers: headers
         }).then(res => {
@@ -211,7 +216,6 @@ var demoComponent = Vue.extend({
       this.$emit('add', this.tagType, this.showTagList)
       this.$emit('update:showClientTag', false)
     },
-    handleSearch() { },
     // 截取url中的数据
       getQueryParam(paramName) {
         // 获取当前URL的查询字符串部分  

+ 18 - 5
lottery/qw/clientGroupDetail.html

@@ -10,7 +10,8 @@
   <!-- 引入样式文件 -->
   <link rel="stylesheet"
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
-  <!-- 必须先引入vue,  后使用vant-ui -->
+  <link rel="stylesheet" href="../css/page-return.css">
+    <!-- 必须先引入vue,  后使用vant-ui -->
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
   <!-- 引入vant的组件库-->
@@ -20,6 +21,7 @@
 
   <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/page-return.js"></script>
   <!-- <script src="js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
@@ -42,6 +44,7 @@
     width: 100vw;
     box-sizing: border-box;
     padding: 15px;
+    padding-bottom: 39px;
   }
 
   .task_list {}
@@ -76,6 +79,9 @@
     display: flex;
     flex-direction: column;
     gap: 9px;
+    flex: 1;
+    min-width: 0;
+    overflow: hidden;
   }
   .task_item_name {
     font-weight: 500;
@@ -95,6 +101,9 @@
     display: flex;
     align-items: center;
     gap: 8px;
+    overflow: hidden;
+    flex-wrap: nowrap;
+    width: 100%;
   }
 
   .client_tag span {
@@ -106,6 +115,8 @@
     padding: 2px 8px;
     background: rgba(19, 109, 251, 0.05);
     box-sizing: border-box;
+    white-space: nowrap;
+    flex-shrink: 0;
   }
 
   .notask {
@@ -134,21 +145,23 @@
       <div v-if="groupMembersList.length">
         <div class="task_item" v-for="(item, index) in groupMembersList" :key="index" @click="handleClick(item)">
           <div class="task_item_title">
-            <img :src="item.avatar ? item.avatar : '../img/avatar.png'" alt="">
+            <img :src="item.avatar ? item.avatar : '../img/qw/mem_icon.png'" alt="">
             <div class="task_item_text">
               <div class="task_item_name">{{item.userName}}<span class="wx_tag" v-if="item.clientType === 1">@微信</span></div>
               <div class="client_tag">
-                <span>标签</span>
+                <span v-for="(tag, tagIndex) in item.tagList" :key="tagIndex">{{ tag }}</span>
               </div>
             </div>
           </div>
         </div>
       </div>
       <div class="notask" v-else>
-        <img src="./img/qw/no_task.png" alt="">
-        <div class="notask_text">暂无待办任务</div>
+        <img src="../img/qw/no_task.png" alt="">
+        <div class="notask_text">暂无数据</div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>

+ 112 - 3
lottery/qw/clientMass.html

@@ -11,6 +11,7 @@
   <link rel="stylesheet"
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
   <link rel="stylesheet" href="../css/select-tag.css">
+  <link rel="stylesheet" href="../css/page-return.css">
     <!-- 必须先引入vue,  后使用vant-ui -->
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
@@ -22,6 +23,7 @@
   <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/select-tag.js"></script>
+  <script src="../js/page-return.js"></script>
   <!-- <script src="js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
@@ -43,6 +45,7 @@
   .page5 {
     width: 100vw;
     box-sizing: border-box;
+    padding-bottom: 39px;
   }
 
   .task_content {
@@ -726,6 +729,10 @@
 <body>
   <div id="box" class="box">
     <div class="page5">
+      <van-dialog v-model="showReturn" title="提示" show-cancel-button :before-close="beforeClose" confirm-button-text="确定"
+        cancel-button-text="取消">
+        <div style="padding: 20px; text-align: center;">确认返回吗?</div>
+      </van-dialog>
       <!-- 标签筛选组件 -->
       <select-tag :show-Client-Tag.sync="showClientTag" :show-Label-Filter="showLabelFilter" :label-Filter.sync="selectLabelFilter" :select-Tag-List.sync="SelectWach" @add="handleAdd"></select-tag>
       <!-- 选择群发时间 -->
@@ -1039,6 +1046,8 @@
         </div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>
@@ -1053,6 +1062,10 @@
         tenancyId: null,
         token: null,
         userId: null,
+        showReturn: false,
+        isConfirmingBack: false, // 标记是否已确认返回
+        pushStateCount: 0, // 记录 pushState 的次数
+        initialHistoryLength: 0, // 记录初始历史记录长度
         clientBagKeyword: '',
         showClientBag: false,
         checkedCbIds: [], // 选中的客群包id
@@ -1090,7 +1103,6 @@
           { contentType: 3, name: '文件' },
           { contentType: 4, name: '外部链接' },
           { contentType: 15, name: '视频' },
-          { contentType: 16, name: '视频链接' },
           { contentType: 17, name: '图集链接' },
         ],
         
@@ -1112,6 +1124,32 @@
         showDateTime: [], // 外面展示的日期格式
       }
     },
+    mounted() {
+      // 监听浏览器返回按钮
+      if (window.history && window.history.pushState) {
+        // 记录初始历史记录长度
+        this.initialHistoryLength = window.history.length;
+        history.pushState(null, null, document.URL);
+        this.pushStateCount = 1; // 记录初始 pushState
+        window.addEventListener('popstate', this.handleBack, false);
+      }
+
+      // 监听微信/企业微信返回按钮
+      if (typeof wx !== 'undefined' && wx.ready) {
+        wx.ready(() => {
+          wx.hideOptionMenu();
+        });
+      }
+      if (typeof ww !== 'undefined' && ww.ready) {
+        ww.ready(() => {
+          ww.hideOptionMenu();
+        });
+      }
+    },
+    beforeDestroy() {
+      // 移除事件监听
+      window.removeEventListener('popstate', this.handleBack, false);
+    },
     created() {
       this.bId = this.getQueryParam('bId')
       this.env = this.getQueryParam('env')
@@ -1155,6 +1193,74 @@
       this.checkedCbIds = this.SelectPackage.map(item => item.id)
     },
     methods: {
+      handleBack(e) {
+        // 如果已经确认返回,直接返回,不显示弹框
+        if (this.isConfirmingBack) {
+          return;
+        }
+
+        // 如果弹框已经显示,阻止默认返回行为,但不重复显示弹框
+        if (this.showReturn) {
+          // 阻止返回,重新添加历史记录
+          if (window.history && window.history.pushState) {
+            history.pushState(null, null, document.URL);
+            this.pushStateCount++;
+          }
+          return;
+        }
+
+        // 阻止默认返回行为
+        if (window.history && window.history.pushState) {
+          history.pushState(null, null, document.URL);
+          this.pushStateCount++;
+        }
+
+        // 显示确认弹框
+        this.showReturn = true;
+      },
+      beforeClose(action, done) {
+        if (action === 'confirm') {
+          // 点击确定,设置确认返回标志
+          this.isConfirmingBack = true;
+          // 清理数据
+          localStorage.removeItem('selectedMaters');
+          localStorage.removeItem('selectedMems');
+          localStorage.removeItem('clientMassData');
+          // 移除事件监听,避免触发弹框
+          window.removeEventListener('popstate', this.handleBack, false);
+          // 关闭弹框
+          done();
+          // 直接跳转到 WeCom.html 页面
+          setTimeout(() => {
+            // 获取当前 URL 的查询参数,保留必要的参数
+            const params = new URLSearchParams(window.location.search);
+            const memberId = params.get('memberId') || this.memberId;
+            const bId = params.get('bId') || this.bId;
+            const env = params.get('env') || this.env;
+
+            // 构建跳转 URL
+            let targetUrl = 'clientMassList.html';
+            if (memberId || bId || env) {
+              const queryParams = [];
+              if (memberId) queryParams.push(`memberId=${memberId}`);
+              if (bId) queryParams.push(`bId=${bId}`);
+              if (env) queryParams.push(`env=${env}`);
+              if (queryParams.length > 0) {
+                targetUrl += '?' + queryParams.join('&');
+              }
+            }
+
+            window.location.href = targetUrl;
+          }, 150);
+        } else {
+          // 点击取消,关闭弹框,重新添加历史记录防止返回
+          done();
+          if (window.history && window.history.pushState) {
+            history.pushState(null, null, document.URL);
+            this.pushStateCount++;
+          }
+        }
+      },
       // 打开顾问选择
       handleAddMem() {
         this.showMem = true
@@ -1202,7 +1308,7 @@
         this.treeData = []
         this.itemList = []
         this.getTreeData(item.id)
-        fetch(this.httpUrl + '/scrm/v1/wxcp-dept/m/findDeptMemberListByPage', {
+        fetch(this.httpUrl + '/scrm/v1/wxcp-dept/m/findActiveDeptMemberListByPage', {
           method: 'post',
           body: JSON.stringify({
             deptId: item.id,
@@ -1782,6 +1888,9 @@
           }),
           headers: {
             'Content-Type': 'application/json',
+            'token': this.token,
+            'tenancyId': this.tenancyId,
+            'userId': this.userId,
           }
         }).then(res => {
           return res.json()
@@ -1792,7 +1901,7 @@
             localStorage.removeItem('selectedMems')
             localStorage.removeItem('clientMassData')
             localStorage.removeItem('selectedMaters')
-            window.history.back()
+            this.beforeClose('confirm', () => { })
           } else {
             vant.Toast.fail(msg)
           }

+ 11 - 2
lottery/qw/clientMassDetail.html

@@ -10,7 +10,8 @@
   <!-- 引入样式文件 -->
   <link rel="stylesheet"
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
-  <!-- 必须先引入vue,  后使用vant-ui -->
+  <link rel="stylesheet" href="../css/page-return.css">
+    <!-- 必须先引入vue,  后使用vant-ui -->
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
   <!-- 引入vant的组件库-->
@@ -20,6 +21,7 @@
 
   <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/page-return.js"></script>
   <!-- <script src="js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
@@ -41,6 +43,7 @@
   .page5 {
     width: 100vw;
     box-sizing: border-box;
+    padding-bottom: 39px;
   }
 
   .task_content {
@@ -365,7 +368,7 @@
           </div>
           <div class="mem_title">
             <div class="mem_title_left">生效成员</div>
-            <div class="mem_title_right">
+            <div class="mem_title_right" @click="handleShowClient">
               <div>全部成员</div>
               <img src="../img/qw/more_icon.png" alt="">
             </div>
@@ -475,6 +478,8 @@
         </div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>
@@ -668,6 +673,10 @@
           }
         })
       },
+      handleShowClient() {
+        // localStorage.setItem('clientData', JSON.stringify(this.formValidate.memberList || []))
+        // window.location.href = `showClientList.html`
+      },
       timeFormat(time, format = 'yyyy-MM-dd hh:mm:ss') {
         if (time === undefined || time === '' || time === null) {
           return '/';

+ 10 - 5
lottery/qw/clientMassList.html

@@ -6,11 +6,12 @@
   <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>
+  <title>群发列表</title>
   <!-- 引入样式文件 -->
   <link rel="stylesheet"
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
-  <!-- 必须先引入vue,  后使用vant-ui -->
+  <link rel="stylesheet" href="../css/page-return.css">
+    <!-- 必须先引入vue,  后使用vant-ui -->
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
   <!-- 引入vant的组件库-->
@@ -20,6 +21,7 @@
 
   <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/page-return.js"></script>
   <!-- <script src="js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
@@ -42,6 +44,7 @@
     width: 100vw;
     box-sizing: border-box;
     padding: 15px;
+    padding-bottom: 39px;
   }
   .client_top {
     width: 100%;
@@ -92,7 +95,7 @@
 
   .task_list {
     width: 100%;
-    height: calc(100vh - 70px);
+    height: calc(100vh - 109px);
     position: absolute;
     top: 70px;
     left: 0;
@@ -164,7 +167,7 @@
   }
   .send_foot {
     position: absolute;
-    bottom: 10px;
+    bottom: 39px;
     left: 0;
     width: 100%;
     z-index: 2;
@@ -225,10 +228,12 @@
         </div>
       </div>
       <div class="notask" v-else>
-        <img src="./img/qw/no_task.png" alt="">
+        <img src="../img/qw/no_task.png" alt="">
         <div class="notask_text">暂无数据</div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>

+ 24 - 10
lottery/qw/mass.html

@@ -10,7 +10,8 @@
   <!-- 引入样式文件 -->
   <link rel="stylesheet"
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
-  <!-- 必须先引入vue,  后使用vant-ui -->
+  <link rel="stylesheet" href="../css/page-return.css">
+    <!-- 必须先引入vue,  后使用vant-ui -->
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
   <!-- 引入vant的组件库-->
@@ -20,6 +21,7 @@
 
   <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/page-return.js"></script>
   <!-- <script src="js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
@@ -41,6 +43,7 @@
   .page5 {
     width: 100vw;
     box-sizing: border-box;
+    padding-bottom: 39px;
   }
 
   .task_content {
@@ -390,7 +393,7 @@
         <div class="send_item">
           <div class="mem_title">
             <div class="mem_title_left">发送客户</div>
-            <div class="mem_title_right">
+            <div class="mem_title_right" @click="handleShowClient">
               <div>全部客户</div>
               <img src="../img/qw/more_icon.png" alt="">
             </div>
@@ -455,6 +458,8 @@
         </div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>
@@ -484,7 +489,6 @@
           { contentType: 3, name: '文件' },
           { contentType: 4, name: '外部链接' },
           { contentType: 15, name: '视频' },
-          { contentType: 16, name: '视频链接' },
           { contentType: 17, name: '图集链接' },
         ],
       }
@@ -499,9 +503,14 @@
         this.httpUrl = 'http://test.wefanbot.com:18993'
       }
       this.memberId = this.getQueryParam('memberId')
-      this.formValidate.clients = JSON.parse(localStorage.getItem('clientData')) || []
+      this.formValidate = localStorage.getItem('clientMassData') ? JSON.parse(localStorage.getItem('clientMassData')) : {
+        clients: [],
+        contentText: '',
+        ctOthers: [],
+        matters: [],
+      }
+      this.formValidate.clients = JSON.parse(localStorage.getItem('clientData')) || [] // 外面勾选的客户数据
       this.formValidate.matters = JSON.parse(localStorage.getItem('selectedMaters')) || []
-      
       if (this.formValidate.matters && this.formValidate.matters.length > 0) {
         this.formValidate.matters.forEach(item => {
           if (item.contentType === 19) {
@@ -571,12 +580,12 @@
           // 清理数据
           localStorage.removeItem('selectedMaters');
           localStorage.removeItem('clientData');
-
+          localStorage.removeItem('clientMassData');
           // 移除事件监听,避免触发弹框
           window.removeEventListener('popstate', this.handleBack, false);
           // 关闭弹框
           done();
-          // 直接跳转到 qw.html 页面
+          // 直接跳转到 WeCom.html 页面
           setTimeout(() => {
             // 获取当前 URL 的查询参数,保留必要的参数
             const params = new URLSearchParams(window.location.search);
@@ -585,7 +594,7 @@
             const env = params.get('env') || this.env;
             
             // 构建跳转 URL
-            let targetUrl = '../qw.html';
+            let targetUrl = '../WeCom.html';
             if (memberId || bId || env) {
               const queryParams = [];
               if (memberId) queryParams.push(`memberId=${memberId}`);
@@ -640,8 +649,9 @@
           if (code === 1) {
             vant.Toast.success('发送成功')
             localStorage.removeItem('selectedMaters')
-            localStorage.removeItem('clientData')
-            window.history.back()
+            localStorage.removeItem('clientData');
+            localStorage.removeItem('clientMassData');
+            this.beforeClose('confirm', () => {})
           } else {
             vant.Toast.fail(msg)
           }
@@ -649,8 +659,12 @@
       },
       // 添加素材
       handleAddMatter() {
+        localStorage.setItem('clientMassData', JSON.stringify(this.formValidate))
         window.location.href = `material.html?memberId=${this.memberId}&bId=${this.bId}&env=${this.env}`
       },
+      handleShowClient() {
+        window.location.href = `showClientList.html`
+      },
       handleCloseMatter(item) {
         this.formValidate.matters = this.formValidate.matters.filter(matter => matter.id !== item.id)
         this.matterOthersList = this.matterOthersList.filter(matter => matter.id !== item.id)

+ 57 - 12
lottery/qw/material.html

@@ -12,6 +12,7 @@
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
   <!-- 必须先引入vue,  后使用vant-ui -->
   <link rel="stylesheet" href="../css/select-tag.css">
+  <link rel="stylesheet" href="../css/page-return.css">
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
   <!-- 引入vant的组件库-->
@@ -21,6 +22,7 @@
 
   <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/page-return.js"></script>
   <!-- <script src="js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
@@ -34,7 +36,7 @@
 
   .box {
     width: 100vw;
-    min-height: 100vh;
+    height: 100vh;
     box-sizing: border-box;
     background: #F7F9FC;
   }
@@ -42,7 +44,6 @@
   .page5 {
     width: 100vw;
     box-sizing: border-box;
-    padding: 15px;
   }
   .page_top {
     width: 100%;
@@ -145,7 +146,7 @@
   }
   .page_foot {
     position: absolute;
-    bottom: 0;
+    bottom: 39px;
     left: 0;
     width: 100%;
   }
@@ -327,6 +328,29 @@
 <body>
   <div id="box" class="box">
     <div class="page5">
+      <!-- 选择视频格式 -->
+      <van-popup v-model="showVideoType" duration="0.2" round position="bottom" :close-on-click-overlay="false"
+        :style="{ width: '100%', height: '266px' }">
+        <div class="clientTag_title">
+          <div class="close_icon"></div>
+          <div>选择视频格式</div>
+          <img class="close_icon" src="../img/qw/close_icon.png" alt="" @click="showVideoType = false">
+        </div>
+        <div class="filter_list1">
+          <div :class="filterIndex ? 'filter_img' : 'filter_exc'" @click="filterIndex = 1">
+            <img :src="filterIndex ? '../img/qw/video_type.png' : '../img/qw/video_type1.png'" alt="">
+            <div>视频</div>
+          </div>
+          <div :class="filterIndex ? 'filter_exc' : 'filter_img'" @click="filterIndex = 0">
+            <img :src="filterIndex ? '../img/qw/videoLink_type1.png' : '../img/qw/videoLink_type.png'" alt="">
+            <div>视频链接</div>
+          </div>
+        </div>
+        <div class="tag_footers">
+          <div class="tag_re_btn" @click="showVideoType = false">取消</div>
+          <div class="tag_ok_btn" @click="handleVideoType">确定</div>
+        </div>
+      </van-popup>
       <!-- 选择图集格式 -->
       <van-popup v-model="showImgType" duration="0.2" round position="bottom" :close-on-click-overlay="false"
         :style="{ width: '100%', height: '266px' }">
@@ -395,7 +419,7 @@
                 <span class="path_line">/</span>{{item.text}}</span>
             </div>
           </div>
-          <div class="data_list" :style="{height: selectedMaters.length > 0 ? 'calc(100vh - 320px)' : 'calc(100vh - 213px)'}">
+          <div class="data_list" :style="{height: selectedMaters.length > 0 ? 'calc(100vh - 356px)' : 'calc(100vh - 213px)'}">
             <div class="data_item" v-for="item in treeData" :key="item.id" @click="handleFolderClick(item)">
               <img src="../img/qw/folder.png" alt="" />
               <div class="data_title">{{item.text}}</div>
@@ -405,7 +429,7 @@
                 <img v-if="contentType === 0" src="../img/qw/article.png" alt="" />
                 <img v-else-if="contentType === 2" src="../img/qw/form.png" alt="" />
                 <img v-else-if="contentType === 3" src="../img/qw/file.png" alt="" />
-                <img v-else-if="contentType === 16" src="../img/qw/video.png" alt="" />
+                <img v-else-if="contentType === 15" src="../img/qw/video.png" alt="" />
                 <img v-else-if="contentType === 17" src="../img/qw/imgList.png" alt="" />
                 <img v-else-if="contentType === 4" src="../img/qw/link.png" alt="" />
                 <div class="data_title">{{item.title || item.name}}</div>
@@ -429,6 +453,8 @@
         </div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>
@@ -463,7 +489,7 @@
             title: '文件'
           },
           {
-            contentType: 16,
+            contentType: 15,
             icon: '../img/qw/video.png',
             icon1: '../img/qw/video1.png',
             title: '视频'
@@ -495,7 +521,7 @@
             title: '文件'
           },
           {
-            contentType: 16,
+            contentType: 15,
             title: '视频'
           },
           {
@@ -519,10 +545,11 @@
         selectedMaters: [], // 当前选中的所有素材数据
         pathList: [], // 当前路径
         contentTypeCount: {}, // 当前选中的类型数量
-        filterIndex: 0,
+        filterIndex: 1,
         showImgType: false,
         showImgList: false,
         imgList: [], // 图集图片列表
+        showVideoType: false
       }
     },
     created() {
@@ -578,7 +605,7 @@
           url = '/scrm/v1/wxcp-chat-tool/p/ctFormGroupTree'
         } else if (this.contentType === 3) {
           url = '/scrm/v1/wxcp-chat-tool/p/ctFileGroupTree'
-        } else if (this.contentType === 16) {
+        } else if (this.contentType === 15) {
           url = '/scrm/v1/wxcp-chat-tool/p/ctVideoGroupTree'
         } else if (this.contentType === 17) {
           url = '/scrm/v1/wxcp-chat-tool/p/ctImgGroupTree'
@@ -631,7 +658,7 @@
           url = '/scrm/v1/wxcp-chat-tool/p/pageForm'
         } else if (this.contentType === 3) {
           url = '/scrm/v1/wxcp-chat-tool/p/pageFile'
-        } else if (this.contentType === 16) {
+        } else if (this.contentType === 15) {
           url = '/scrm/v1/wxcp-chat-tool/p/pageVideo'
         } else if (this.contentType === 17) {
           url = '/scrm/v1/wxcp-chat-tool/p/pageImg'
@@ -707,7 +734,7 @@
         this.selectedMaters.forEach(item => {
           existingIdsMap.set(item.id, item)
         })
-        
+
         // 更新或添加当前选中的数据(优先使用当前页面的数据和类型)
         currentSelected.forEach(item => {
           existingIdsMap.set(item.id, item)
@@ -768,16 +795,33 @@
           return
         }
         localStorage.setItem('selectedMaters', JSON.stringify(this.selectedMaters))
+        if (this.selectedMaters.length > 9) {
+          vant.Toast.fail('最多选择9个素材')
+          return
+        }
         window.history.back()
       },
       handleCheckboxClick (item) {
-        console.log(item)
+        // if (this.contentType === 16) {
+        //   if (this.selectedMaters.some(s => s.id === item.id)) {
+        //     this.showVideoType = true
+        //   }
+        // } else 
         if (this.contentType === 17) {
           if (this.selectedMaters.some(s => s.id === item.id)) {
             this.showImgType = true
           }
         }
       },
+      handleVideoType () {
+        // this.showVideoType = false
+        // let obj = this.selectedMaters[this.selectedMaters.length - 1]
+        // this.selectedMaters.push({
+        //   contentType: this.filterIndex === 1 ? 15 : 16,
+        //   ...obj,
+        // })
+        // this.contentTypeCount = this.countByType(this.selectedMaters)
+      },
       handleImgType () {
         if (this.filterIndex === 0) {
           this.showImgType = false
@@ -785,6 +829,7 @@
           this.showImgType = false
           this.imgList = this.selectedMaters[this.selectedMaters.length-1].imgList
           this.selectedMaters.pop() // 删除最后一条数据(点击自动添加进去的图集项链接)
+          this.checkedMaterIds.pop()
           this.selectedMaters.forEach(s => {
             this.imgList.forEach(item => {
               if (s.id === item.id) {

+ 8 - 2
lottery/qw/qwJxs.html

@@ -143,7 +143,7 @@
   .top_data {
     display: flex;
     align-items: center;
-    justify-content: flex-end;
+    justify-content: space-between;
     padding: 10px;
     height: 54px;
     background: #FFFFFF;
@@ -249,7 +249,12 @@
     display: flex;
     align-items: center;
   }
-
+  .top_data_left {
+    font-weight: 500;
+    font-size: 14px;
+    color: #222222;
+    line-height: 20px;
+  }
   .top_data_right {
     display: flex;
     align-items: center;
@@ -653,6 +658,7 @@
         <van-tab title="运营任务" name="运营任务"></van-tab>
       </van-tabs>
       <div class="top_data">
+        <div class="top_data_left">{{jxsName}}</div>
         <div class="top_data_right" v-if="pageTitle === '客户资产'">
           <div class="top_data_title item_gap" @click="showPicker = true">
             <div class="top_data_title_branch">网点:{{outletName}}</div>

+ 195 - 0
lottery/qw/showClientList.html

@@ -0,0 +1,195 @@
+<!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>
+  <!-- 引入样式文件 -->
+  <link rel="stylesheet"
+    href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
+  <link rel="stylesheet" href="../css/page-return.css">
+  <!-- 必须先引入vue,  后使用vant-ui -->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
+  <!-- 引入vant的组件库-->
+  <!-- 引入 Vant 的 JS 文件 -->
+  <script
+    src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012748487/vant.min.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/page-return.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;
+    min-height: 100vh;
+    box-sizing: border-box;
+    background: #F7F9FC;
+  }
+
+  .page5 {
+    width: 100vw;
+    box-sizing: border-box;
+    padding: 15px;
+    padding-bottom: 39px;
+  }
+
+  .task_list {}
+
+  .task_item {
+    width: 100%;
+    background: linear-gradient(180deg, rgba(255, 255, 255, 0.8) 0%, #FFFFFF 100%);
+    border-radius: 15px;
+    border: 1px solid #FFFFFF;
+    box-sizing: border-box;
+    margin-bottom: 15px;
+  }
+
+  .task_item:last-child {
+    margin-bottom: 0;
+  }
+
+  .task_item_title {
+    display: flex;
+    align-items: center;
+    padding: 10px 15px;
+  }
+
+  .task_item_title img {
+    width: 48px;
+    height: 48px;
+    border-radius: 8px;
+    margin-right: 10px;
+  }
+
+  .task_item_text {
+    display: flex;
+    flex-direction: column;
+    gap: 9px;
+    flex: 1;
+    min-width: 0;
+    overflow: hidden;
+  }
+
+  .task_item_name {
+    font-weight: 500;
+    font-size: 14px;
+    color: #222222;
+    display: flex;
+    align-items: center;
+    height: 20px;
+  }
+
+  .wx_tag {
+    font-weight: 400;
+    font-size: 12px;
+    color: #4CDE93;
+    padding-left: 5px;
+  }
+
+  .client_tag {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    overflow: hidden;
+    flex-wrap: nowrap;
+    width: 100%;
+  }
+
+  .client_tag span {
+    height: 21px;
+    font-size: 12px;
+    color: #136DFB;
+    line-height: 17px;
+    border-radius: 5px;
+    padding: 2px 8px;
+    background: rgba(19, 109, 251, 0.05);
+    box-sizing: border-box;
+    white-space: nowrap;
+    flex-shrink: 0;
+  }
+
+  .notask {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    padding-top: 198px;
+  }
+
+  .notask img {
+    width: 102px;
+    height: 90px;
+  }
+
+  .notask_text {
+    font-size: 14px;
+    color: #CCCCCC;
+    line-height: 20px;
+    padding-top: 20px;
+  }
+</style>
+
+<body>
+  <div id="box" class="box">
+    <div class="page5">
+      <div v-if="clientsList.length">
+        <div class="task_item" v-for="(item, index) in clientsList" :key="index" @click="handleClick(item)">
+          <div class="task_item_title">
+            <img :src="item.avatar ? item.avatar : '../img/qw/mem_icon.png'" alt="">
+            <div class="task_item_text">
+              <div class="task_item_name">{{item.name}}</div>
+              <div class="client_tag" v-if="item.tagList &&item.tagList.length">
+                <span v-for="(tag, tagIndex) in item.tagList" :key="tagIndex">{{ tag }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="notask" v-else>
+        <img src="../img/qw/no_task.png" alt="">
+        <div class="notask_text">暂无数据</div>
+      </div>
+    </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
+  </div>
+</body>
+<script>
+  new Vue({
+    el: '#box',
+    data() {
+      return {
+        clientsList: []
+      }
+    },
+    created() {
+      this.clientsList = localStorage.getItem('clientData') ? JSON.parse(localStorage.getItem('clientData')) : []
+    },
+    methods: {
+      // 截取url中的数据
+      getQueryParam(paramName) {
+        // 获取当前URL的查询字符串部分  
+        const queryString = window.location.search;
+        // 创建一个URLSearchParams对象  
+        const urlParams = new URLSearchParams(queryString);
+        // 返回指定参数的值,如果不存在则返回null  
+        return urlParams.get(paramName);
+      },
+    }
+  })   
+</script>
+
+</html>

+ 23 - 10
lottery/qw/taskDetail.html

@@ -10,7 +10,8 @@
   <!-- 引入样式文件 -->
   <link rel="stylesheet"
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
-  <!-- 必须先引入vue,  后使用vant-ui -->
+  <link rel="stylesheet" href="../css/page-return.css">
+    <!-- 必须先引入vue,  后使用vant-ui -->
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
   <!-- 引入vant的组件库-->
@@ -20,10 +21,11 @@
 
   <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 src="../js/page-return.js"></script>
+  <script src="../js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
-  		</script> -->
+  		</script>
 </head>
 <style>
   body {
@@ -33,7 +35,7 @@
 
   .box {
     width: 100vw;
-    min-height: 100vh;
+    height: 100vh;
     box-sizing: border-box;
     background: #F7F9FC;
   }
@@ -41,7 +43,7 @@
   .page5 {
     width: 100vw;
     box-sizing: border-box;
-    padding: 15px 10px;
+    padding: 15px 10px 39px;
   }
 
   .task_list {}
@@ -81,10 +83,17 @@
     flex-direction: column;
     gap: 8px;
   }
+  .client_name {
+    display: flex;
+  }
+  .client_remark {
+    font-size: 12px;
+    color: #999999;
+    padding-left: 5px;
+  }
   .task_item_time {
     font-size: 12px;
     color: #999999;
-    line-height: 17px;
   }
   .client_tag {
     display: flex;
@@ -458,7 +467,7 @@
       <div v-if="type === 'CLIENT_SOP'">
         <div class="content">
           <div class="sop_content">
-            <img class="icon_logo" :src="taskData.clientAvatar || './img/avatar.png'"></img>
+            <img class="icon_logo" :src="taskData.clientAvatar || '../img/qw/mem_icon.png'"></img>
             <span>「{{taskData.clientName}}」在「{{timeFormat(taskData.triggerTime, 'yyyy/MM/dd hh:mm:ss')}}」</span>
             <span class="font" v-if="taskData.triggerType">添加好友后触发客户SOP任务,</span>
             <span class="font" v-else>打上标签后触发客户SOP任务,</span>
@@ -531,7 +540,7 @@
         </div>
         <div class="send_title">跟进客户</div>
         <div class="follow_client">
-          <img class="avatar" :src="taskData.clientAvatar || './img/avatar.png'"></img>
+          <img class="avatar" :src="taskData.clientAvatar || '../img/qw/mem_icon.png'"></img>
           <div class="client_msg">
             <span class="font">{{taskData.clientName}}</span>
             <span>添加时间:{{timeFormat(taskData.addTime, 'yyyy/MM/dd hh:mm:ss')}}</span>
@@ -542,9 +551,11 @@
       <div v-else>
         <div class="task_item">
           <div class="task_item_title">
-            <img :src="taskData.clientAvatar || '../img/avatar.png'" alt="">
+            <img :src="taskData.clientAvatar || '../img/qw/mem_icon.png'" alt="">
             <div class="task_item_text">
-              <div>{{taskData.clientName}}</div>
+              <div class="client_name">{{taskData.clientName}}
+                <span class="client_remark">({{taskData.clientRemark}})</span>
+              </div>
               <div class="task_item_time">任务时间: {{formatDate(taskData.createdTime)}}</div>
             </div>
           </div>
@@ -643,6 +654,8 @@
         <div class="foot_btn" @click="toFollow">去跟进</div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>

+ 111 - 9
lottery/qw/toDoTask.html

@@ -10,7 +10,8 @@
   <!-- 引入样式文件 -->
   <link rel="stylesheet"
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
-  <!-- 必须先引入vue,  后使用vant-ui -->
+  <link rel="stylesheet" href="../css/page-return.css">
+    <!-- 必须先引入vue,  后使用vant-ui -->
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
   <!-- 引入vant的组件库-->
@@ -20,10 +21,11 @@
 
   <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 src="../js/page-return.js"></script>
+  <script src="../js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
-  		</script> -->
+  		</script>
 </head>
 <style>
   body {
@@ -33,7 +35,7 @@
 
   .box {
     width: 100vw;
-    min-height: 100vh;
+    height: 100vh;
     box-sizing: border-box;
     background: #F7F9FC;
   }
@@ -42,6 +44,7 @@
     width: 100vw;
     box-sizing: border-box;
     padding: 15px;
+    padding-bottom: 39px;
   }
   .task_list {
   }
@@ -157,14 +160,25 @@
     line-height: 50px;
     text-align: center;
   }
+  .task_btn_read {
+    width: 100%;
+    height: 50px;
+    border-radius: 20px;
+    font-weight: 500;
+    font-size: 14px;
+    color: #7D97BF;
+    background: rgba(125, 151, 191, 0.1);
+    line-height: 50px;
+    text-align: center;
+  }
 </style>
 <body>
   <div id="box" class="box">
     <div class="page5">
       <div class="task_list" v-if="taskList.length > 0">
-        <div class="task_item" v-for="item in taskList" :key="item.id" @click="handleTaskDetail(item)">
+        <div class="task_item" v-for="item in taskList" :key="item.id">
           <div class="task_item_title">
-            <img :src="item.clientAvatar ? item.clientAvatar : '../img/avatar.png'" alt="">
+            <img :src="item.clientAvatar ? item.clientAvatar : '../img/qw/mem_icon.png'" alt="">
             <div class="task_item_text">
               <div>{{ item.clientName }}</div>
               <div class="client_tag">
@@ -179,8 +193,9 @@
             <div class="task_des" v-if="taskType === 'CLIENT_LOG'" v-html="item.taskDesc"></div>
             <div class="task_des" v-else>{{item.taskDesc}}</div>
           </div>
-          <div class="task_btn_box">
-            <div class="task_btn">查看详情</div>
+          <div class="task_btn_box" @click="handleTaskDetail(item)">
+            <div class="task_btn" v-if="taskType === 'MONITORED_MESSAGE'">去回复</div>
+            <div :class="item.isRead ? 'task_btn_read' : 'task_btn'" v-else>{{item.isRead ? '已读' : '查看详情'}}</div>
           </div>
         </div>
       </div>
@@ -189,6 +204,8 @@
         <div class="notask_text">暂无待办任务</div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>
@@ -218,6 +235,7 @@
         this.taskType = this.getQueryParam('type')
         this.getTaskList()
       }
+      this.getQyWxSign()
     },
     methods: {
       getTaskList() {
@@ -234,7 +252,91 @@
           })
       },
       handleTaskDetail(item) {
-        window.location.href = `taskDetail.html?taskId=${item.todoTaskId}&type=${item.type}&env=${this.env}&bId=${this.bId}`
+        if (this.taskType === 'MONITORED_MESSAGE') {
+          if (!item.clientExternalUserId) {
+            vant.Toast.fail('无效')
+            return
+          }
+          wx.openEnterpriseChat({
+            externalUserIds: item.clientExternalUserId, // 参与会话的外部联系人列表,格式为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);
+            }
+          });
+        } else {
+          window.location.href = `taskDetail.html?taskId=${item.todoTaskId}&type=${item.type}&env=${this.env}&bId=${this.bId}`
+        }
+      },
+      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'
+            })
+          }
+        })
       },
       // 截取url中的数据
       getQueryParam(paramName) {

+ 7 - 2
lottery/qw/toDoTaskList.html

@@ -10,7 +10,8 @@
   <!-- 引入样式文件 -->
   <link rel="stylesheet"
     href="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1758012584633/vant.css" />
-  <!-- 必须先引入vue,  后使用vant-ui -->
+  <link rel="stylesheet" href="../css/page-return.css">
+    <!-- 必须先引入vue,  后使用vant-ui -->
   <script
     src="https://wl-1306604067.cos.ap-guangzhou.myqcloud.com/production/ct/103548289110001/1742017957144/vue.js"></script>
   <!-- 引入vant的组件库-->
@@ -20,6 +21,7 @@
 
   <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/page-return.js"></script>
   <!-- <script src="js/vconsole.min.js"></script>
     <script>
   		  var vConsole = new window.VConsole();
@@ -33,7 +35,7 @@
 
   .box {
     width: 100vw;
-    min-height: 100vh;
+    height: 100vh;
     box-sizing: border-box;
     background: #F7F9FC;
   }
@@ -42,6 +44,7 @@
     width: 100vw;
     box-sizing: border-box;
     padding: 15px;
+    padding-bottom: 39px;
   }
 
   .task_list {}
@@ -140,6 +143,8 @@
         <div class="notask_text">暂无待办任务</div>
       </div>
     </div>
+    <!-- 底部返回栏 -->
+    <page-return></page-return>
   </div>
 </body>
 <script>

+ 2 - 2
lottery/userProfile.html

@@ -18,10 +18,10 @@
     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 src="js/vconsole.min.js"></script>
   <script>
 		  var vConsole = new window.VConsole();
-		</script> -->
+		</script>
 </head>
 <style>
   body {