duanshenglang 2 周之前
父节点
当前提交
4256d01449

+ 1 - 1
lottery/js/select-tag.js

@@ -68,7 +68,7 @@ var demoComponent = Vue.extend({
   },
   props: {
     tenancyId: {
-      type: String || Number,
+      type: [Number, String],
       default: () => ''
     },
     labelFilter: {

+ 30 - 10
lottery/qw/clientGroupMass.html

@@ -242,12 +242,13 @@
   }
 
   .matters_item {
-    width: 163px;
+    width: calc(50% - 5px);
     height: 60px;
     border-radius: 10px;
     display: flex;
     align-items: center;
     padding: 10px;
+    margin-bottom: 10px;
     box-sizing: border-box;
     border: 1px solid #EFEFEF;
     position: relative;
@@ -256,6 +257,7 @@
   .matters_item_img {
     width: 40px;
     height: 40px;
+    flex-shrink: 0;
     margin-right: 8px;
   }
 
@@ -268,6 +270,8 @@
   }
 
   .matters_item_info {
+    flex: 1;
+    min-width: 0;
     display: flex;
     flex-direction: column;
     font-size: 12px;
@@ -279,8 +283,7 @@
     font-size: 12px;
     color: #222222;
     line-height: 17px;
-    width: 96px;
-    /* 必须设置宽度 */
+    /* 必须设置宽度,此处宽度继承父元素 */
     overflow: hidden;
     white-space: nowrap;
     text-overflow: ellipsis;
@@ -289,8 +292,8 @@
 
   .matters_list {
     display: flex;
+    justify-content: space-between;
     flex-wrap: wrap;
-    gap: 10px;
   }
 
   .mem_centent {
@@ -559,7 +562,9 @@
   .tag_radio {
     margin-top: 10px;
   }
-
+  .tag_radio_bo {
+    margin-bottom: 10px;
+  }
   .tag_radio_item {
     margin-right: 32px;
   }
@@ -896,7 +901,7 @@
         </div>
         <div class="send_item">
           <div class="mem_title_left">素材</div>
-          <van-radio-group class="tag_radio" v-model="materialType" direction="horizontal">
+          <van-radio-group class="tag_radio tag_radio_bo" v-model="materialType" direction="horizontal">
             <van-radio :name="1">
               素材库选择
               <template #icon="props">
@@ -945,7 +950,7 @@
                 <img class="matters_item_img" v-else-if="item.contentType === 3" src="../img/qw/file.png" alt="">
                 <img class="matters_item_img" v-else src="../img/qw/link.png" alt="">
                 <div class="matters_item_info">
-                  <div class="matters_item_title">{{item.title}}</div>
+                  <div class="matters_item_title">{{item.name || item.title}}</div>
                   <div>{{matterTypeList.find(type => type.contentType === item.contentType)?.name || '未知类型'}}</div>
                 </div>
                 <img class="close_mater" src="../img/qw/close_mater.png" alt="" @click="handleCloseMatter(item)">
@@ -1576,11 +1581,26 @@
         this.showTime = false
       },
       handleCloseMatter(item) {
-        this.formValidate.matters = this.formValidate.matters.filter(matter => matter.id !== item.id)
-        this.matterOthersList = this.matterOthersList.filter(matter => matter.id !== item.id)
-        this.matterImgList = this.matterImgList.filter(img => img.id !== item.id)
+        this.formValidate.matters = this.removeItemFromArray(this.formValidate.matters, item)
+        this.matterOthersList = this.removeItemFromArray(this.matterOthersList, item)
+        this.matterImgList = this.removeItemFromArray(this.matterImgList, item)
         this.deleteItemFromLocalStorage('selectedMaters', item.id)
       },
+      // 创建删除函数生成器
+      removeItemFromArray(array, item) {
+        return array.filter(element => {
+          // 如果 element 有 id,则用 id 比较
+          if (element.id) {
+            return element.id !== item.id
+          }
+          // 如果 element 有 contentId,则用 contentId 比较
+          if (element.contentId) {
+            return element.contentId !== item.id
+          }
+          // 如果都没有,保留元素
+          return true
+        })
+      },
       // 从localStorage中删除指定id的对象项
       deleteItemFromLocalStorage(storageKey, idToDelete) {
         try {

+ 1 - 1
lottery/qw/clientGroupMassList.html

@@ -268,7 +268,7 @@
           <div class="send_btn" @click="handleClientMass">创建客户群群发</div>
         </div>
       </div>
-      <div class="notask" v-else>
+      <div class="notask" v-if="!tableData.length">
         <img src="../img/qw/no_task.png" alt="">
         <div class="notask_text">暂无数据</div>
       </div>

+ 30 - 9
lottery/qw/clientMass.html

@@ -232,12 +232,13 @@
   }
 
   .matters_item {
-    width: 163px;
+    width: calc(50% - 5px);
     height: 60px;
     border-radius: 10px;
     display: flex;
     align-items: center;
     padding: 10px;
+    margin-bottom: 10px;
     box-sizing: border-box;
     border: 1px solid #EFEFEF;
     position: relative;
@@ -246,6 +247,7 @@
   .matters_item_img {
     width: 40px;
     height: 40px;
+    flex-shrink: 0;
     margin-right: 8px;
   }
   .close_mater {
@@ -256,6 +258,8 @@
     right: -8px;
   }
   .matters_item_info {
+    flex: 1;
+    min-width: 0;
     display: flex;
     flex-direction: column;
     font-size: 12px;
@@ -267,8 +271,7 @@
     font-size: 12px;
     color: #222222;
     line-height: 17px;
-    width: 96px;
-    /* 必须设置宽度 */
+    /* 必须设置宽度,此处宽度继承父元素 */
     overflow: hidden;
     white-space: nowrap;
     text-overflow: ellipsis;
@@ -277,8 +280,8 @@
 
   .matters_list {
     display: flex;
+    justify-content: space-between;
     flex-wrap: wrap;
-    gap: 10px;
   }
 
   .mem_centent {
@@ -527,6 +530,9 @@
   .tag_radio {
     margin-top: 10px;
   }
+  .tag_radio_bo {
+    margin-bottom: 10px;
+  }
   .tag_radio_item {
     margin-right: 32px;
   }
@@ -959,7 +965,7 @@
         </div>
         <div class="send_item">
           <div class="mem_title_left">素材</div>
-          <van-radio-group class="tag_radio" v-model="materialType" direction="horizontal">
+          <van-radio-group class="tag_radio tag_radio_bo" v-model="materialType" direction="horizontal">
             <van-radio :name="1">
               素材库选择
               <template #icon="props">
@@ -1008,7 +1014,7 @@
                 <img class="matters_item_img" v-else-if="item.contentType === 3" src="../img/qw/file.png" alt="">
                 <img class="matters_item_img" v-else src="../img/qw/link.png" alt="">
                 <div class="matters_item_info">
-                  <div class="matters_item_title">{{item.title}}</div>
+                  <div class="matters_item_title">{{item.name || item.title}}</div>
                   <div>{{matterTypeList.find(type => type.contentType === item.contentType)?.name || '未知类型'}}</div>
                 </div>
                 <img class="close_mater" src="../img/qw/close_mater.png" alt="" @click="handleCloseMatter(item)">
@@ -1804,11 +1810,26 @@
         this.showTime = false
       },
       handleCloseMatter(item) {
-        this.formValidate.matters = this.formValidate.matters.filter(matter => matter.id !== item.id)
-        this.matterOthersList = this.matterOthersList.filter(matter => matter.id !== item.id)
-        this.matterImgList = this.matterImgList.filter(img => img.id !== item.id)
+        this.formValidate.matters = this.removeItemFromArray(this.formValidate.matters, item)
+        this.matterOthersList = this.removeItemFromArray(this.matterOthersList, item)
+        this.matterImgList = this.removeItemFromArray(this.matterImgList, item)
         this.deleteItemFromLocalStorage('selectedMaters', item.id)
       },
+      // 创建删除函数生成器
+      removeItemFromArray(array, item) {
+        return array.filter(element => {
+          // 如果 element 有 id,则用 id 比较
+          if (element.id) {
+            return element.id !== item.id
+          }
+          // 如果 element 有 contentId,则用 contentId 比较
+          if (element.contentId) {
+            return element.contentId !== item.id
+          }
+          // 如果都没有,保留元素
+          return true
+        })
+      },
       // 从localStorage中删除指定id的对象项
       deleteItemFromLocalStorage(storageKey, idToDelete) {
         try {

+ 24 - 7
lottery/qw/mass.html

@@ -197,12 +197,13 @@
   }
 
   .matters_item {
-    width: 163px;
+    width: calc(50% - 5px);
     height: 60px;
     border-radius: 10px;
     display: flex;
     align-items: center;
     padding: 10px;
+    margin-bottom: 10px;
     box-sizing: border-box;
     border: 1px solid #EFEFEF;
     position: relative;
@@ -211,6 +212,7 @@
   .matters_item_img {
     width: 24px;
     height: 24px;
+    flex-shrink: 0;
     margin-right: 8px;
   }
   .close_mater {
@@ -221,6 +223,8 @@
     right: -8px;
   }
   .matters_item_info {
+    flex: 1;
+    min-width: 0;
     display: flex;
     flex-direction: column;
     font-size: 12px;
@@ -232,8 +236,7 @@
     font-size: 12px;
     color: #222222;
     line-height: 17px;
-    width: 96px;
-    /* 必须设置宽度 */
+    /* 必须设置宽度,此处宽度继承父元素 */
     overflow: hidden;
     white-space: nowrap;
     text-overflow: ellipsis;
@@ -244,7 +247,6 @@
     display: flex;
     flex-wrap: wrap;
     justify-content: space-between;
-    gap: 10px;
   }
 
   .mem_centent {
@@ -679,11 +681,26 @@
         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)
-        this.matterImgList = this.matterImgList.filter(img => img.id !== item.id)
+        this.formValidate.matters = this.removeItemFromArray(this.formValidate.matters, item)
+        this.matterOthersList = this.removeItemFromArray(this.matterOthersList, item)
+        this.matterImgList = this.removeItemFromArray(this.matterImgList, item)
         this.deleteItemFromLocalStorage('selectedMaters', item.id)
       },
+      // 创建删除函数生成器
+      removeItemFromArray(array, item) {
+        return array.filter(element => {
+          // 如果 element 有 id,则用 id 比较
+          if (element.id) {
+            return element.id !== item.id
+          }
+          // 如果 element 有 contentId,则用 contentId 比较
+          if (element.contentId) {
+            return element.contentId !== item.id
+          }
+          // 如果都没有,保留元素
+          return true
+        })
+      },
       // 从localStorage中删除指定id的对象项
       deleteItemFromLocalStorage(storageKey, idToDelete) {
         try {

+ 4 - 0
lottery/qw/material.html

@@ -571,6 +571,10 @@
       } else {
         this.httpUrl = 'http://test.wefanbot.com:18993'
       }
+      // 过滤掉文件类型
+      if (this.getQueryParam('hideType')) {
+        this.typeList = this.typeList.filter(item => item.contentType !== Number(this.getQueryParam('hideType')))
+      }
       this.selectedMaters = localStorage.getItem('selectedMaters') ? JSON.parse(localStorage.getItem('selectedMaters')) : []
       this.contentTypeCount = this.countByType(this.selectedMaters)
       if (this.getQueryParam('memberId')) {

+ 57 - 13
lottery/qw/pyqMass.html

@@ -243,12 +243,13 @@
   }
 
   .matters_item {
-    width: 163px;
+    width: calc(50% - 5px);
     height: 60px;
     border-radius: 10px;
     display: flex;
     align-items: center;
     padding: 10px;
+    margin-bottom: 10px;
     box-sizing: border-box;
     border: 1px solid #EFEFEF;
     position: relative;
@@ -257,6 +258,7 @@
   .matters_item_img {
     width: 40px;
     height: 40px;
+    flex-shrink: 0;
     margin-right: 8px;
   }
 
@@ -269,6 +271,8 @@
   }
 
   .matters_item_info {
+    flex: 1;
+    min-width: 0;
     display: flex;
     flex-direction: column;
     font-size: 12px;
@@ -280,8 +284,7 @@
     font-size: 12px;
     color: #222222;
     line-height: 17px;
-    width: 96px;
-    /* 必须设置宽度 */
+    /* 必须设置宽度,此处宽度继承父元素 */
     overflow: hidden;
     white-space: nowrap;
     text-overflow: ellipsis;
@@ -290,8 +293,8 @@
 
   .matters_list {
     display: flex;
+    justify-content: space-between;
     flex-wrap: wrap;
-    gap: 10px;
   }
 
   .mem_centent {
@@ -960,7 +963,7 @@
                 <img class="matters_item_img" v-else-if="item.contentType === 3" src="../img/qw/file.png" alt="">
                 <img class="matters_item_img" v-else src="../img/qw/link.png" alt="">
                 <div class="matters_item_info">
-                  <div class="matters_item_title">{{item.title}}</div>
+                  <div class="matters_item_title">{{item.name || item.title}}</div>
                   <div>{{matterTypeList.find(type => type.contentType === item.contentType)?.name || '未知类型'}}</div>
                 </div>
                 <img class="close_mater" src="../img/qw/close_mater.png" alt="" @click="handleCloseMatter(item)">
@@ -1609,9 +1612,10 @@
         this.showTime = false
       },
       handleCloseMatter(item) {
-        this.formValidate.matters = this.formValidate.matters.filter(matter => matter.id !== item.id)
-        this.matterOthersList = this.matterOthersList.filter(matter => matter.id !== item.id)
-        this.matterImgList = this.matterImgList.filter(img => img.id !== item.id)
+        this.formValidate.matters = this.removeItemFromArray(this.formValidate.matters, item)
+        this.matterOthersList = this.removeItemFromArray(this.matterOthersList, item)
+        this.matterImgList = this.removeItemFromArray(this.matterImgList, item)
+
         this.deleteItemFromLocalStorage('selectedMaters', item.id)
       },
       // 从localStorage中删除指定id的对象项
@@ -1676,10 +1680,6 @@
           vant.Toast.fail('请添加要发送的内容')
           return
         }
-        if (this.formValidate.matters && this.formValidate.matters.length > 9) {
-          vant.Toast.fail('发送素材最多9个')
-          return
-        }
         if (this.formValidate.type === 2 && !this.formValidate.sendTime) {
           vant.Toast.fail('请设置群发时间再提交')
           return
@@ -1696,6 +1696,10 @@
               title: matter.title || matter.name,
             }
           })
+          if (!this.validateMaterials(this.formValidate.matters).valid) {
+            vant.Toast.fail(this.validateMaterials(this.formValidate.matters).message)
+            return
+          }
         }
         fetch(this.httpUrl + '/scrm/v1/wxcp-moment/m/add', {
           method: 'post',
@@ -1723,6 +1727,46 @@
           }
         })
       },
+      validateMaterials(materials) {
+        // 分离 type 为 19 和不为 19 的项
+        const type19Items = materials.filter(item => item.type === 19);
+        const otherTypeItems = materials.filter(item => item.type !== 19);
+
+        // 检查条件
+        if (type19Items.length > 0 && otherTypeItems.length > 0) {
+          return {
+            valid: false,
+            message: "图片和别的素材只能传一种"
+          };
+        }
+
+        // 检查其他类型是否有多条
+        if (otherTypeItems.length > 1) {
+          return {
+            valid: false,
+            message: "同一类型的素材只能上传一条"
+          };
+        }
+
+        return {
+          valid: true,
+        };
+      },
+      // 创建删除函数生成器
+      removeItemFromArray (array, item) {
+        return array.filter(element => {
+          // 如果 element 有 id,则用 id 比较
+          if (element.id) {
+            return element.id !== item.id
+          }
+          // 如果 element 有 contentId,则用 contentId 比较
+          if (element.contentId) {
+            return element.contentId !== item.id
+          }
+          // 如果都没有,保留元素
+          return true
+        })
+      },
       processData(data) {
         return data.map(obj => {
           // 过滤掉tags为空的条件项
@@ -1738,7 +1782,7 @@
       handleAddMatter() {
         if (this.materialType === 1) {
           localStorage.setItem('clientMassData', JSON.stringify(this.formValidate))
-          window.location.href = `material.html?memberId=${this.memberId}&bId=${this.bId}&env=${this.env}`
+          window.location.href = `material.html?memberId=${this.memberId}&bId=${this.bId}&env=${this.env}&hideType=3`
         } else {
           // 创建一个input元素,用于选择相册中的图片
           const input = document.createElement('input');