Kaynağa Gözat

feat: 智能推送 - 推送分组 - 单企微新增"企微主体"选项

zhengxy 1 yıl önce
ebeveyn
işleme
a7645c6801

+ 12 - 4
project/src/components/assembly/screen/selectCorp.vue

@@ -1,10 +1,10 @@
1 1
 <template>
2 2
   <div class="common-screen-item">
3
-    <label class="common-screen-label">{{ labelName }}</label>
3
+    <label v-if="labelName" class="common-screen-label">{{ labelName }}</label>
4 4
     <!-- 系统管理员 -->
5
-    <el-cascader v-if="isSuperManage" v-model="system_enterprise_res" size="small" :options="enterpriseList" :props="{value:'self_id',label:'self_name',children:'manage_corp_list'}" @change="onChangeCorpidSystem" clearable filterable :placeholder="placeholder" class="select-cls cascader" />
5
+    <el-cascader v-if="isSuperManage" v-model="system_enterprise_res" size="small" :options="enterpriseList" :props="{value:'self_id',label:'self_name',children:'manage_corp_list'}" @change="onChangeCorpidSystem" :clearable="clearable" filterable :placeholder="placeholder" class="select-cls cascader" :style="{width: width ? width + 'px' : '210px'}" />
6 6
     <!-- 非系统管理员 -->
7
-    <el-select v-else v-model="enterprise_res" size="small" filterable :placeholder="placeholder" @change="onChangeCorpid" clearable class="select-cls">
7
+    <el-select v-else v-model="enterprise_res" size="small" filterable :placeholder="placeholder" @change="onChangeCorpid" :clearable="clearable" class="select-cls" :style="{width: width ? width + 'px' : '210px'}">
8 8
       <el-option v-for="(item, index) in enterpriseList" :key="index+'enterpriseList'" :label="item.corp_name?item.corp_name:item.corp_full_name?item.corp_full_name:item.corpid" :value="item.corpid" />
9 9
     </el-select>
10 10
   </div>
@@ -25,6 +25,14 @@ export default {
25 25
       type: String,
26 26
       default: () => '请选择'
27 27
     },
28
+    width: {
29
+      type: Number | String,
30
+      default: () => '',
31
+    },
32
+    clearable: {
33
+      type: Boolean,
34
+      default: () => true
35
+    },
28 36
   },
29 37
   data() {
30 38
     return {
@@ -125,7 +133,7 @@ export default {
125 133
 <style lang="scss" scoped>
126 134
 .select-cls {
127 135
   /deep/ .el-input__inner {
128
-    width: 210px;
136
+    width: 100%;
129 137
   }
130 138
   /deep/ &.el-select .el-input.is-focus .el-input__inner,
131 139
   /deep/ &.el-select .el-input__inner:focus,

+ 38 - 7
project/src/components/smartPushV3/pushGroupDialog.vue

@@ -14,7 +14,8 @@
14 14
         <span class="lable required">分组名称</span>
15 15
         <el-input v-model="form.title" size="small" placeholder="请输入" />
16 16
       </div>
17
-      <!-- S 分组名称 -->
17
+      <!-- E 分组名称 -->
18
+
18 19
       <!-- S 选择模式 -->
19 20
       <div class="form-item">
20 21
         <span class="lable required">选择模式:</span>
@@ -24,6 +25,16 @@
24 25
         </div>
25 26
       </div>
26 27
       <!-- E 选择模式 -->
28
+
29
+      <!-- S 企微主体 - 单个企微主体 模式 -->
30
+      <div v-show="form.operate_type == 1" class="form-item">
31
+        <span class="lable required">企微主体:</span>
32
+        <div class="flex-align-center">
33
+          <selfSelectCorp v-model="form.corpid" :labelName="''" :width="300" :clearable="false" @change="onChangeCorpid" />
34
+        </div>
35
+      </div>
36
+      <!-- E 企微主体 - 单个企微主体 模式 -->
37
+
27 38
       <!-- S 使用员工 - 单个企微主体 模式 -->
28 39
       <div v-show="form.operate_type == 1" class="form-item flex-align-start">
29 40
         <span class="lable required">使用员工:</span>
@@ -36,7 +47,7 @@
36 47
             v-if="form.is_all == 0"
37 48
             title='' width="300px"
38 49
             :afferent_users='form.user_id_list'
39
-            :corpid="customerserviceCorpid"
50
+            :corpid="form.corpid"
40 51
             @customerDefine="(val) => { form.user_id_list = val; }"
41 52
           />
42 53
         </div>
@@ -71,10 +82,11 @@ import selfChannel from '@/components/assembly/screen/channel.vue'
71 82
 import selfCustomerservice from '@/components/assembly/screen/customerService.vue'
72 83
 import customerServiceCorpV2 from '@/components/assembly/screen/customerServiceCorpV2.vue'
73 84
 import { isJSON } from '@/assets/js/common'
85
+import selfSelectCorp from '@/components/assembly/screen/selectCorp.vue'
74 86
 
75 87
 export default {
76 88
   name: "pushGroupDialog",
77
-  components: { selfChannel, selfCustomerservice, customerServiceCorpV2 },
89
+  components: { selfChannel, selfCustomerservice, customerServiceCorpV2, selfSelectCorp },
78 90
   props: {
79 91
     // 控制弹框是否显示
80 92
     dialogVisible: {
@@ -93,7 +105,6 @@ export default {
93 105
     return {
94 106
       loading: false,
95 107
       isShowForm: false,
96
-      customerserviceCorpid: '',
97 108
       form: {
98 109
         title: '',
99 110
         is_all: 1, // 使用员工:1全部员工 0部分员工
@@ -103,6 +114,8 @@ export default {
103 114
         operator_group_id: '', // 运营组id
104 115
         afferent_multiple_senders: [], // 多个主体时选择的客服成员 [{ user_id: 888, corpid: 666 }]
105 116
         multiple_senders: [], // 多个主体时选择的客服成员结果
117
+
118
+        corpid: '', // 单企微模式传用户选择的企微,多企微模式不传(默认传全局缓存的数据)
106 119
       }
107 120
     }
108 121
   },
@@ -141,6 +154,11 @@ export default {
141 154
           operator_group_id: (operate_type == 2 && is_operation == 1) ? operator_group_id : '',
142 155
           multiple_senders: (operate_type == 2 && is_operation == 0 && multiple_senders.length) ? JSON.stringify(multiple_senders) : '',
143 156
         }
157
+
158
+        if (operate_type == 1) { // 单企微模式传用户选择的企微id,多企微模式默认传全局缓存的数据
159
+          params.corpid = this.form.corpid
160
+        }
161
+
144 162
         this.loading = true
145 163
         const { data: res = {} } = await this.$axios.post(url, params)
146 164
         if (res && res.errno == 0) {
@@ -163,10 +181,14 @@ export default {
163 181
     // 执行表单校验
164 182
     handleFormValidate() {
165 183
       return new Promise((resolve, reject) => {
166
-        const { title, operate_type, is_all, user_id_list, is_operation, operator_group_id, multiple_senders } = this.form
184
+        const { title, operate_type, is_all, user_id_list, is_operation, operator_group_id, multiple_senders, corpid } = this.form
167 185
         if (!title) {
168 186
           this.$message.warning('请输入分组名称')
169 187
           reject('表单校验未通过')
188
+        } else if ((operate_type == 1) && (!corpid || corpid == '')) {
189
+          // 单主体判空
190
+          this.$message.warning('请选择企微主体')
191
+          reject('表单校验未通过')
170 192
         } else if ((operate_type == 1) && (is_all == 0) && (!user_id_list || !user_id_list.length)) {
171 193
           // 单主体判空
172 194
           this.$message.warning('请选择使用员工!')
@@ -202,6 +224,7 @@ export default {
202 224
       this.form.operator_group_id = ''
203 225
       this.form.afferent_multiple_senders = []
204 226
       this.form.multiple_senders = []
227
+      this.form.corpid = ''
205 228
     },
206 229
 
207 230
     // 监听运营组选择
@@ -219,6 +242,15 @@ export default {
219 242
       }
220 243
     },
221 244
 
245
+    // 监听企微主体筛选变化
246
+    async onChangeCorpid(corp) {
247
+      console.log('corp => ', corp)
248
+      this.form.user_id_list = []
249
+      this.loading = true
250
+      await this.$nextTick()
251
+      this.loading = false
252
+    },
253
+
222 254
     async handleGetGroupDetail() {
223 255
       try {
224 256
         const url = `${this.URL.BASEURL}${this.URL.smartPushV3_groupDetail}`
@@ -237,7 +269,7 @@ export default {
237 269
           if (this.form.operate_type == 1) { // 单企微字段回显
238 270
             this.form.user_id_list = (detailInfo.senders && !isJSON(detailInfo.senders)) ? detailInfo.senders.split(',') : [];
239 271
             this.form.is_all = (detailInfo.is_all || detailInfo.is_all === 0) ? detailInfo.is_all : 1
240
-            this.customerserviceCorpid = detailInfo.corpid
272
+            this.form.corpid = detailInfo.corpid
241 273
           }
242 274
 
243 275
           if (this.form.operate_type == 2) { // 多企微字段回显
@@ -260,7 +292,6 @@ export default {
260 292
               })
261 293
               this.form.afferent_multiple_senders = [...arr]
262 294
             }
263
-            this.customerserviceCorpid = ''
264 295
           }
265 296
 
266 297
           this.isShowForm = true