Browse Source

fix: 批量分配人数判断逻辑 & 成员选择交互优化

zhengxy 2 years ago
parent
commit
a2550521bf

+ 32 - 24
project/src/components/assembly/screen/customerService.vue

@@ -3,51 +3,61 @@
3 3
     <label class="common-screen-label" v-if="title && title != ''" :style="labelWidth ? 'width:' + labelWidth : ''">{{
4 4
         title
5 5
     }}</label>
6
-    <el-popover append-to-body placement="bottom" trigger="click" v-model="visible" :disabled="disabled">
7
-      <div :style="width ? 'width:' + width : ''" :class="['common-screen-self-box',
8
-      'common-input-select',
9
-      final_result && final_result.length != 0 && clearable && !disabled ? 'common-input-select-hover' : '',
10
-      disabled ? 'pointer-drop' : '']" slot="reference">
6
+    <!-- trigger="manual" || trigger="click" -->
7
+    <el-popover append-to-body placement="bottom" trigger="manual" v-model="visible" :disabled="disabled">
8
+      <div
9
+        :style="width ? 'width:' + width : ''"
10
+        :class="[
11
+          'common-screen-self-box',
12
+          'common-input-select',
13
+          final_result && final_result.length != 0 && clearable && !disabled ? 'common-input-select-hover' : '',
14
+          disabled ? 'pointer-drop' : ''
15
+        ]"
16
+        slot="reference"
17
+        @click="visible = true"
18
+      >
11 19
         <div :class="['common-screen-self-con',
12 20
         !final_result || final_result.length == 0 ? 'common-screen-self-placeholder' : '']">
13 21
           <div class="common-screen-self-con-div">
14 22
             <span v-if="!final_result || final_result.length == 0">请选择{{ source == 'chatGroup' ? '群主' : '成员' }}</span>
15 23
             <template v-else>
16
-              <span v-for="(item, index) in final_result" :key="index">{{ item.name }}{{ index == final_result.length -
17
-                  1 ? '' : ','
18
-              }}</span>
24
+              <span
25
+                v-for="(item, index) in final_result"
26
+                :key="index"
27
+              >{{ item.name }}{{ index == final_result.length - 1 ? '' : ',' }}</span>
19 28
             </template>
20 29
           </div>
21
-          <i class="el-icon-circle-close other-icon" @click.stop="clear"></i>
30
+          <i class="el-icon-circle-close other-icon" @click.stop="clear" />
22 31
         </div>
23 32
         <div class="common-screen-self-icon">
24
-          <i class="el-icon-arrow-down"></i>
33
+          <i class="el-icon-arrow-down" />
25 34
         </div>
26 35
       </div>
27 36
       <div class="flex" style="padding:10px">
28 37
         <div class="propoverItem">
29 38
           <self-input :reset='resetFlag' :hasLabel="false" label_name="成员名称" :inputFlag='true'
30
-            @inputChange='(val) => { input_keyword = val; userSearch() }' width="270px" style="margin-top:0">
31
-          </self-input>
39
+            @inputChange='(val) => { input_keyword = val; userSearch() }' width="270px" style="margin-top:0" />
32 40
           <!-- <self-input :reset='resetFlag' :hasLabel="false" @inputChange='(val)=>{input_keyword = val;init("userSearch")}' width="270px" style="margin-top:0"></self-input> -->
33 41
           <div class="allMember">全部{{ source == 'chatGroup' ? '群主' : '成员' }}({{ userTotal }}):</div>
34 42
           <div class="memberBoxBig self-scrollbar-3">
35 43
             <template v-for="(item, index) in userList">
36 44
               <div class="memberBox" :key="index + 'userList' + item.department_id">
37
-                <i :class="['el-icon-caret-bottom', item.is_open ? 'reversalAnimation' : '']"
38
-                  @click="openEvent(index)"></i>
45
+                <i :class="['el-icon-caret-bottom', item.is_open ? 'reversalAnimation' : '']" @click="openEvent(index)" />
39 46
                 <div class="meberList">
40 47
                   <div class="department" @click="selectUserEvent('all', index)">
41 48
                     <div class="flex" style="align-items: flex-start;">
42
-                      <i class="el-icon-s-cooperation" style="margin-top:3px"></i>
49
+                      <i class="el-icon-s-cooperation" style="margin-top:3px" />
43 50
                       <span>{{ item.department_name ? item.department_name : '部门' + (index + 1) }}</span>
44 51
                     </div>
45
-                    <div :class="['checkbox', item.is_select ? 'checkbox_active' : '']"><i class="el-icon-check"></i>
46
-                    </div>
52
+                    <div :class="['checkbox', item.is_select ? 'checkbox_active' : '']"><i class="el-icon-check" /></div>
47 53
                   </div>
48
-                  <div class="memberItem" :style="item.is_open ? 'display:none' : ''"
49
-                    v-for="(item1, user_index) in item.user_list" :key="item1.user_id"
50
-                    @click="selectUserEvent('user', index, user_index)">
54
+                  <div
55
+                    v-for="(item1, user_index) in item.user_list"
56
+                    :key="item1.user_id"
57
+                    :style="item.is_open ? 'display:none' : ''"
58
+                    class="memberItem"
59
+                    @click="selectUserEvent('user', index, user_index)"
60
+                  >
51 61
                     <div class="flex" style="flex:1">
52 62
                       <img class="memberImg" :src="item1.avatar" alt="">
53 63
                       <div class="memberInfo">
@@ -55,8 +65,7 @@
55 65
                         <div class="other">部门:{{ item1.department_list && item1.department_list.join(',') }}</div>
56 66
                       </div>
57 67
                     </div>
58
-                    <div :class="['checkbox', item1.is_select ? 'checkbox_active' : '']"><i class="el-icon-check"></i>
59
-                    </div>
68
+                    <div :class="['checkbox', item1.is_select ? 'checkbox_active' : '']"><i class="el-icon-check" /></div>
60 69
                   </div>
61 70
                 </div>
62 71
               </div>
@@ -79,7 +88,7 @@
79 88
                   <div class="other">部门:{{ item.department_list && item.department_list.join(',') }}</div>
80 89
                 </div>
81 90
               </div>
82
-              <i class="el-icon-close" style="margin-left:10px" @click="closeUser(index)"></i>
91
+              <i class="el-icon-close" style="margin-left:10px" @click="closeUser(index)" />
83 92
             </div>
84 93
           </div>
85 94
           <div class="buttons">
@@ -154,7 +163,6 @@ export default {
154 163
       this.changeSelect()
155 164
       this.afferent_init()
156 165
     }
157
-
158 166
   },
159 167
   methods: {
160 168
     // 执行一遍组件的created方法(拓展组件 群活码详情用)

+ 9 - 12
project/src/components/manage/memberComp/batchAssign.vue

@@ -12,22 +12,19 @@
12 12
       <div class="flex" style="padding:10px">
13 13
         <div class="propoverItem">
14 14
           <self-input :reset='resetFlag' :hasLabel="false" label_name="成员名称" :inputFlag='true'
15
-            @inputChange='(val) => { input_keyword = val; userSearch() }' width="270px" style="margin-top:0">
16
-          </self-input>
15
+            @inputChange='(val) => { input_keyword = val; userSearch() }' width="270px" style="margin-top:0" />
17 16
           <div class="allMember">全部成员({{ userTotal }}):</div>
18 17
           <div class="memberBoxBig self-scrollbar-3">
19 18
             <template v-for="(item, index) in userList">
20 19
               <div class="memberBox" :key="index + 'userList' + item.department_id">
21
-                <i :class="['el-icon-caret-bottom', item.is_open ? 'reversalAnimation' : '']"
22
-                  @click="openEvent(index)"></i>
20
+                <i :class="['el-icon-caret-bottom', item.is_open ? 'reversalAnimation' : '']" @click="openEvent(index)" />
23 21
                 <div class="meberList">
24 22
                   <div class="department" @click="selectUserEvent('all', index)">
25 23
                     <div class="flex" style="align-items: flex-start;">
26
-                      <i class="el-icon-s-cooperation" style="margin-top:3px"></i>
24
+                      <i class="el-icon-s-cooperation" style="margin-top:3px" />
27 25
                       <span>{{ item.department_name ? item.department_name : '部门' + (index + 1) }}</span>
28 26
                     </div>
29
-                    <div :class="['checkbox', item.is_select ? 'checkbox_active' : '']"><i class="el-icon-check"></i>
30
-                    </div>
27
+                    <div :class="['checkbox', item.is_select ? 'checkbox_active' : '']"><i class="el-icon-check" /></div>
31 28
                   </div>
32 29
                   <div
33 30
                     v-for="(item1, user_index) in item.user_list"
@@ -43,15 +40,14 @@
43 40
                         <div class="other">部门:{{ item1.department_list && item1.department_list.join(',') }}</div>
44 41
                       </div>
45 42
                     </div>
46
-                    <div :class="['checkbox', item1.is_select ? 'checkbox_active' : '']"><i class="el-icon-check"></i>
47
-                    </div>
43
+                    <div :class="['checkbox', item1.is_select ? 'checkbox_active' : '']"><i class="el-icon-check" /></div>
48 44
                   </div>
49 45
                 </div>
50 46
               </div>
51 47
             </template>
52 48
           </div>
53 49
         </div>
54
-        <div class="line"></div>
50
+        <div class="line" />
55 51
         <div class="propoverItem" style="padding-left:20px">
56 52
           <div class="title">已选择的成员</div>
57 53
           <div class="choice_result_top">
@@ -67,7 +63,7 @@
67 63
                   <div class="other">部门:{{ item.department_list && item.department_list.join(',') }}</div>
68 64
                 </div>
69 65
               </div>
70
-              <i class="el-icon-close" style="margin-left:10px" @click="closeUser(index)"></i>
66
+              <i class="el-icon-close" style="margin-left:10px" @click="closeUser(index)" />
71 67
             </div>
72 68
           </div>
73 69
           <div class="buttons">
@@ -341,12 +337,13 @@ export default {
341 337
         return list
342 338
       }, []);
343 339
 
340
+      selectUser = selectUser.filter(item => item.is_active != 1) // 过滤已分配成员
341
+
344 342
       if (selectUser && (selectUser.length > this.waitForAssignNum)) { // 不能超过“待分配许可人数”
345 343
         const msg = this.waitForAssignNum == 0 ? '暂无待分配许可' : `最多可选${this.waitForAssignNum}名成员`
346 344
         this.$message.warning(msg)
347 345
         return false
348 346
       }
349
-      selectUser = selectUser.filter(item => item.is_active != 1) // 过滤已分配成员
350 347
 
351 348
       this.selectUser = selectUser
352 349
       this.$set(this.userList, main_index, user_arr)