Browse Source

添加详情和开发标签管理

liuxiaona 2 years ago
parent
commit
0dbd19ab3b

+ 2 - 0
project/src/assets/config/interface_api.js

@@ -24,6 +24,7 @@ var api = {
24 24
   memberList: "/api/user/users",
25 25
   addWayList: "/api/customer/addWayList",
26 26
   tagList: "/api/tag/tagList",
27
+  addTag: "/api/tag/addTag",
27 28
   customerList: "/api/customer/customerList",
28 29
   massMsg_lists: "/api/massMsg/lists",
29 30
   massMsg_detail: "/api/massMsg/detail",
@@ -51,6 +52,7 @@ var api = {
51 52
   tag_detial_edit: "/api/customer/customerDetailTagUpdate",
52 53
   customer_setCustomerTag: "/api/customer/setCustomerTag",
53 54
   customer_batchMarkTagResult: "/api/customer/batchMarkTagResult",
55
+  departmentList: "/api/user/departments",
54 56
 };
55 57
 
56 58
 export { api };

+ 189 - 0
project/src/components/assembly/tagGroup.vue

@@ -0,0 +1,189 @@
1
+<template>
2
+  <el-dialog
3
+    title="新建标签组"
4
+    :visible.sync="lableGroup"
5
+    :append-to-body="true"
6
+    class="addLable_dialog"
7
+    width="40%">
8
+    <div class="groupCon">
9
+      <div class="group_item">
10
+        <div class="lable">标签组名称:</div>
11
+        <div class="opaArea">
12
+          <el-input class="ipt_group" v-model="groupName" placeholder="请输入标签组名称"></el-input>
13
+        </div>
14
+      </div>
15
+      <!--
16
+      后台说先不做
17
+              <div class="group_item">
18
+                <div class="lable">可见范围:</div>
19
+                <div class="opaArea">
20
+                  <el-radio-group v-model="scopeVal">
21
+                    <el-radio :label="0">全部员工</el-radio>
22
+                    <el-radio :label="1">部门可用</el-radio>
23
+                  </el-radio-group>
24
+                </div>
25
+              </div>
26
+              <div class="group_item" v-if="scopeVal==1">
27
+                <div class="lable">选择可用部门:</div>
28
+                <div class="pointer" style="padding: 8px 12px;border: 1px solid #D2D2D2;margin-left: 20px">
29
+                  + 添加部门
30
+                </div>
31
+              </div>
32
+      -->
33
+      <div class="group_item" style="align-items: baseline;margin-top: 10px">
34
+        <div class="lable">标签名称:</div>
35
+        <div class="opaArea">
36
+          <div v-for="(m,mIdx) in moreLable" :key="m.id" class="flex">
37
+            <el-input class="ipt_group tMar10" v-model="m.name" placeholder="请输入标签名称"></el-input>
38
+            <span v-if="moreLable&&moreLable.length>1" class="flex">
39
+                <span class="minusIptGroup" @click="moreLable.splice(mIdx,1)">-</span>
40
+                <i class="el-icon-top f18 lMar8 pointer" :class="mIdx == 0 ? 'disCss' : ''" @click="upClick(mIdx)"></i>
41
+                <i class="el-icon-bottom f18 lMar8 pointer" :class="mIdx == moreLable.length-1 ? 'disCss' : ''" @click="downClick(mIdx)"></i>
42
+              </span>
43
+          </div>
44
+          <div class="addIptGroup" @click="moreLable.push({id:moreLable.length,name:''})">+ 添加标签</div>
45
+        </div>
46
+      </div>
47
+    </div>
48
+    <div slot="footer">
49
+      <el-button size="mini" @click="lableGroup = false">取 消</el-button>
50
+      <el-button size="mini" type="primary" @click="lableGroup = false">确 定</el-button>
51
+    </div>
52
+  </el-dialog>
53
+</template>
54
+
55
+<script>
56
+export default {
57
+  name: "tagGroup",
58
+  data(){
59
+    return{
60
+      lableGroup:false,
61
+      groupName:'',
62
+      moreLable:[
63
+        {id:0,name:''}
64
+      ],
65
+    }
66
+  },
67
+  methods:{
68
+    addTag(){
69
+      this.$axios.post(this.URL.BASEURL + this.URL.addTag, {
70
+        group_name: this.groupName,
71
+        tag_list:[]
72
+      }).then((res) => {
73
+        var res = res.data
74
+        if (res && res.errno == 0) {
75
+
76
+        }
77
+        this.$message({
78
+          message: res.err,
79
+          type: "warning"
80
+        })
81
+      })
82
+    }
83
+
84
+  }
85
+}
86
+</script>
87
+
88
+
89
+<style lang="scss">
90
+
91
+.addLable_dialog{
92
+  .addLableBox{
93
+
94
+    .add{
95
+      padding: 4px 10px;
96
+      line-height: 20px;
97
+      text-align: center;
98
+      border: 1px solid #D2D2D2;
99
+      cursor: pointer;
100
+      margin-right: 8px;
101
+      margin-top: 10px;
102
+    }
103
+    .lableItem{
104
+      line-height: 20px;
105
+      text-align: center;
106
+      border: 1px solid #D2D2D2;
107
+      padding: 4px 10px;
108
+      background-color: #fafafa;
109
+      margin-right: 8px;
110
+      //cursor: pointer;
111
+      margin-top: 10px;
112
+    }
113
+    .ipt{
114
+      width: 120px;
115
+      margin-right: 8px;
116
+      margin-top: 10px;
117
+      .el-input__inner{
118
+        height: 30px;
119
+        line-height: 30px;
120
+      }
121
+    }
122
+    .lableItem_dad{
123
+      display: flex;
124
+      align-items: center;
125
+      flex-wrap: wrap;
126
+    }
127
+    //.lableItem:hover{
128
+    //  //color: #00B38A;
129
+    //  border: 1px solid #00B38A;
130
+    //}
131
+    .lableItemAc{
132
+      background-color: rgba(0,179,138,0.4);
133
+      border: 1px solid rgba(0,179,138,0.4);
134
+      color: #00B38A;
135
+    }
136
+  }
137
+  .dialog-footer{
138
+    //display: flex;
139
+    //align-items: center;
140
+    //justify-content: space-between;
141
+    .addLableGroup{
142
+      font-size: 14px;
143
+      color: #00B38A;
144
+      cursor: pointer;
145
+    }
146
+  }
147
+  .groupCon{
148
+    .group_item{
149
+      display: flex;
150
+      align-items: center;
151
+      margin-top: 20px;
152
+      .lable{
153
+        width: 24%;
154
+        text-align: right;
155
+      }
156
+      .opaArea{
157
+        margin-left: 20px;
158
+        width: 68%;
159
+        .addIptGroup{
160
+          font-size: 12px;color: #00B38A;cursor: pointer;margin-top: 10px
161
+        }
162
+        .minusIptGroup{
163
+          display: inline-block;
164
+          border: 1px solid #333;
165
+          border-radius: 50%;
166
+          font-size: 18px;
167
+          width: 16px;
168
+          height: 16px;
169
+          text-align: center;
170
+          line-height: 12px;
171
+          margin-left: 10px;
172
+          color: #333;
173
+          cursor: pointer;
174
+          flex-shrink: 0;
175
+        }
176
+        .disCss{
177
+          color: rgba(0,0,0,.25)
178
+        }
179
+      }
180
+    }
181
+    .ipt_group{
182
+      .el-input__inner{
183
+        height: 36px;
184
+        line-height: 36px;
185
+      }
186
+    }
187
+  }
188
+}
189
+</style>

+ 29 - 3
project/src/components/customManage/blackList.vue

@@ -63,7 +63,7 @@
63 63
       <el-table-column label="操作" align="center">
64 64
         <template slot-scope="scope">
65 65
           <div class="flex" style="justify-content:center">
66
-            <div class="c-00B38A pointer" style="margin:0 6px" @click="goDetail(scope.row.rule_id)">用户详情</div>
66
+            <div class="c-00B38A pointer" style="margin:0 6px" @click="showDetial(scope.row)">用户详情</div>
67 67
             <div class="c-00B38A pointer" style="margin:0 6px" @click="removeCustomer(scope.row)">移除</div>
68 68
           </div>
69 69
         </template>
@@ -73,15 +73,26 @@
73 73
       <el-pagination background :current-page="page" @current-change="handleCurrentChange" layout="prev, pager, next" :page-count='Number(pages)'>
74 74
       </el-pagination>
75 75
     </div>
76
+    <!--详情-->
77
+    <el-drawer :size="drawerSize" :visible.sync="detialDrawer" :with-header="false">
78
+      <detial @changeDrawerSize="changeDrawerSize" @closeDrawer="closeDrawer" :rowProp="{
79
+        customer_id:rowPro.customer_id,
80
+        user_id:rowPro.user_id
81
+      }" ref="detial"></detial>
82
+    </el-drawer>
76 83
   </div>
77 84
 </template>
78 85
 <script>
79 86
 import selfInput from '@/components/assembly/screen/input.vue'
80 87
 import selfChannel from '@/components/assembly/screen/channel.vue'
88
+import detial from '@/components/detials/index.vue'
81 89
 export default {
82
-  components: { selfInput, selfChannel },
90
+  components: { selfInput, selfChannel, detial },
83 91
   data () {
84 92
     return {
93
+      drawerSize: '60%',
94
+      detialDrawer: false,
95
+      rowPro: {},//去详情的此条对象
85 96
       loading: false,
86 97
       page: 1,
87 98
       pages: 0,
@@ -97,6 +108,21 @@ export default {
97 108
     this.init(1)
98 109
   },
99 110
   methods: {
111
+    changeDrawerSize () {
112
+      this.drawerSize = this.drawerSize == '100%' ? '60%' : '100%'
113
+    },
114
+    closeDrawer () {
115
+      this.detialDrawer = false
116
+    },
117
+    showDetial (row) {
118
+      this.rowPro = row
119
+      this.drawerSize = '60%'
120
+      this.detialDrawer = true
121
+      this.$nextTick(() => {
122
+        this.$refs.detial.acIdx = 0
123
+        this.$refs.detial.init()
124
+      })
125
+    },
100 126
     removeCustomer (item) {
101 127
       this.$confirm(`确定要将【${item.name}】从黑名单中移除?`, '提示', {
102 128
         confirmButtonText: '确定',
@@ -207,4 +233,4 @@ export default {
207 233
 .tableInfo {
208 234
   height: 50px;
209 235
 }
210
-</style>
236
+</style>

+ 22 - 12
project/src/components/customManage/customerTransfer.vue

@@ -121,7 +121,7 @@
121 121
       <el-table-column label="操作" align="center" fixed="right" width="80">
122 122
         <template slot-scope="scope">
123 123
           <div class="flex" style="justify-content:center">
124
-            <div class="c-00B38A pointer" style="margin:0 6px" @click="goDetail(scope.row.rule_id)">详情</div>
124
+            <div class="c-00B38A pointer" style="margin:0 6px" @click="showDetial(scope.row)">详情</div>
125 125
           </div>
126 126
         </template>
127 127
       </el-table-column>
@@ -135,8 +135,12 @@
135 135
       <shielding-user @cancel='shieldingUserCancel' :shieldingData='shieldingData'></shielding-user>
136 136
     </el-dialog>
137 137
 
138
+    <!--详情-->
138 139
     <el-drawer :size="drawerSize" :visible.sync="detialDrawer" :with-header="false">
139
-      <detial @changeDrawerSize="changeDrawerSize" @closeDrawer="closeDrawer"></detial>
140
+      <detial @changeDrawerSize="changeDrawerSize" @closeDrawer="closeDrawer" :rowProp="{
141
+        customer_id:rowPro.customer_id,
142
+        user_id:rowPro.user_id
143
+      }" ref="detial"></detial>
140 144
     </el-drawer>
141 145
   </div>
142 146
 </template>
@@ -158,6 +162,7 @@ export default {
158 162
       type: 1,
159 163
       drawerSize: '60%',
160 164
       detialDrawer: false,
165
+      rowPro: {},//去详情的此条对象
161 166
       loading: false,
162 167
       page: 1,
163 168
       pages: 0,
@@ -194,6 +199,21 @@ export default {
194 199
     this.init(1)
195 200
   },
196 201
   methods: {
202
+    changeDrawerSize () {
203
+      this.drawerSize = this.drawerSize == '100%' ? '60%' : '100%'
204
+    },
205
+    closeDrawer () {
206
+      this.detialDrawer = false
207
+    },
208
+    showDetial (row) {
209
+      this.rowPro = row
210
+      this.drawerSize = '60%'
211
+      this.detialDrawer = true
212
+      this.$nextTick(() => {
213
+        this.$refs.detial.acIdx = 0
214
+        this.$refs.detial.init()
215
+      })
216
+    },
197 217
     goReord () {
198 218
       if (this.type == 1) {
199 219
         this.$router.push({ path: '/transferRecord/off' })
@@ -202,12 +222,6 @@ export default {
202 222
         this.$router.push({ path: '/transferRecord/on' })
203 223
       }
204 224
     },
205
-    changeDrawerSize () {
206
-      this.drawerSize = this.drawerSize == '100%' ? '60%' : '100%'
207
-    },
208
-    closeDrawer () {
209
-      this.detialDrawer = false
210
-    },
211 225
     resetEvent () {//重置
212 226
       this.resetFlag = !this.resetFlag
213 227
       this.input_keyword = '';
@@ -329,10 +343,6 @@ export default {
329 343
     handleSelectionChange () {
330 344
 
331 345
     },
332
-    showDetial () {
333
-      this.drawerSize = '60%'
334
-      this.detialDrawer = true
335
-    }
336 346
   }
337 347
 }
338 348
 </script>

+ 28 - 5
project/src/components/customManage/lostCustomer.vue

@@ -102,7 +102,7 @@
102 102
       <el-table-column label="操作" align="center" fixed="right" width="80">
103 103
         <template slot-scope="scope">
104 104
           <div class="flex" style="justify-content:center">
105
-            <div class="c-00B38A pointer" style="margin:0 6px" @click="goDetail(scope.row.rule_id)">详情</div>
105
+            <div class="c-00B38A pointer" style="margin:0 6px" @click="showDetial(scope.row)">详情</div>
106 106
           </div>
107 107
         </template>
108 108
       </el-table-column>
@@ -111,17 +111,28 @@
111 111
       <el-pagination background :current-page="page" @current-change="handleCurrentChange" layout="prev, pager, next" :page-count='Number(pages)'>
112 112
       </el-pagination>
113 113
     </div>
114
+    <!--详情-->
115
+    <el-drawer :size="drawerSize" :visible.sync="detialDrawer" :with-header="false">
116
+      <detial @changeDrawerSize="changeDrawerSize" @closeDrawer="closeDrawer" :rowProp="{
117
+        customer_id:rowPro.customer_id,
118
+        user_id:rowPro.user_id
119
+      }" ref="detial"></detial>
120
+    </el-drawer>
114 121
   </div>
115 122
 </template>
116 123
 <script>
117 124
 import selfCustomerservice from '@/components/assembly/screen/customerService.vue'
118 125
 import datePicker from '@/components/assembly/screen/datePicker.vue'
119 126
 import addDuration from '@/components/assembly/screen/addDuration.vue'
127
+import detial from '@/components/detials/index.vue'
120 128
 
121 129
 export default {
122
-  components: { selfCustomerservice, datePicker, addDuration },
130
+  components: { selfCustomerservice, datePicker, addDuration, detial },
123 131
   data () {
124 132
     return {
133
+      drawerSize: '60%',
134
+      detialDrawer: false,
135
+      rowPro: {},//去详情的此条对象
125 136
       loading: false,
126 137
       page: 1,
127 138
       pages: 0,
@@ -143,8 +154,20 @@ export default {
143 154
     this.init(1)
144 155
   },
145 156
   methods: {
146
-    goDetail (rule_id) {
147
-      this.$router.push({ path: '/massMsg/' + rule_id })
157
+    changeDrawerSize () {
158
+      this.drawerSize = this.drawerSize == '100%' ? '60%' : '100%'
159
+    },
160
+    closeDrawer () {
161
+      this.detialDrawer = false
162
+    },
163
+    showDetial (row) {
164
+      this.rowPro = row
165
+      this.drawerSize = '60%'
166
+      this.detialDrawer = true
167
+      this.$nextTick(() => {
168
+        this.$refs.detial.acIdx = 0
169
+        this.$refs.detial.init()
170
+      })
148 171
     },
149 172
     resetEvent () {//重置
150 173
       this.resetFlag = !this.resetFlag
@@ -283,4 +306,4 @@ export default {
283 306
     margin-left: 14px;
284 307
   }
285 308
 }
286
-</style>
309
+</style>

+ 19 - 18
project/src/components/customManage/manage.vue

@@ -126,7 +126,7 @@
126 126
     <el-dialog title="拉黑原因" :visible.sync="shieldingFlag" width="578px" center>
127 127
       <shielding-user @cancel='shieldingUserCancel' :shieldingData='shieldingData'></shielding-user>
128 128
     </el-dialog>
129
-
129
+<!--详情-->
130 130
     <el-drawer :size="drawerSize" :visible.sync="detialDrawer" :with-header="false">
131 131
       <detial @changeDrawerSize="changeDrawerSize" @closeDrawer="closeDrawer" :rowProp="{
132 132
         customer_id:rowPro.customer_id,
@@ -149,8 +149,8 @@ import selfGender from '@/components/assembly/screen/gender.vue'
149 149
 import lossBody from '@/components/assembly/screen/lossBody.vue'
150 150
 import screenPay from '@/components/assembly/screen/pay.vue'
151 151
 import shieldingUser from '@/components/assembly/shieldingUser.vue'
152
-import detial from '@/components/detials/index.vue'
153 152
 import tagDialog from '@/components/assembly/tagDialog.vue'
153
+import detial from '@/components/detials/index.vue'
154 154
 
155 155
 export default {
156 156
   components: { tagDialog, detial, selfInput, selfCustomerservice, enterpriseTag, datePicker, selfChannel, selfGender, lossBody, screenPay, shieldingUser },
@@ -158,6 +158,7 @@ export default {
158 158
     return {
159 159
       drawerSize: '60%',
160 160
       detialDrawer: false,
161
+      rowPro: {},//去详情的此条对象
161 162
       loading: false,
162 163
       page: 1,
163 164
       pages: 0,
@@ -185,7 +186,6 @@ export default {
185 186
       resetFlag: false,//重置
186 187
       otherData: {},
187 188
       shieldingData: {},//拉黑的数据
188
-      rowPro: {},//去详情的此条对象
189 189
       multipleSelection: {},
190 190
       exclude_multiple_selection: {},
191 191
       isAll: false,//是否选择全部
@@ -197,6 +197,22 @@ export default {
197 197
     this.init(1)
198 198
   },
199 199
   methods: {
200
+
201
+    changeDrawerSize () {
202
+      this.drawerSize = this.drawerSize == '100%' ? '60%' : '100%'
203
+    },
204
+    closeDrawer () {
205
+      this.detialDrawer = false
206
+    },
207
+    showDetial (row) {
208
+      this.rowPro = row
209
+      this.drawerSize = '60%'
210
+      this.detialDrawer = true
211
+      this.$nextTick(() => {
212
+        this.$refs.detial.acIdx = 0
213
+        this.$refs.detial.init()
214
+      })
215
+    },
200 216
     closeTagDialog (val) {
201 217
       if (val && val.length != 0) {
202 218
         this.page = page ? page : this.page;
@@ -447,21 +463,6 @@ export default {
447 463
         this.$refs.multipleTable.toggleRowSelection(row, true);
448 464
       });
449 465
     },
450
-    changeDrawerSize () {
451
-      this.drawerSize = this.drawerSize == '100%' ? '60%' : '100%'
452
-    },
453
-    closeDrawer () {
454
-      this.detialDrawer = false
455
-    },
456
-    showDetial (row) {
457
-      this.rowPro = row
458
-      this.drawerSize = '60%'
459
-      this.detialDrawer = true
460
-      this.$nextTick(() => {
461
-        this.$refs.detial.acIdx = 0
462
-        this.$refs.detial.init()
463
-      })
464
-    }
465 466
   }
466 467
 }
467 468
 </script>

+ 29 - 3
project/src/components/customManage/transferRecord.vue

@@ -47,7 +47,7 @@
47 47
       <el-table-column label="操作" align="center">
48 48
         <template slot-scope="scope">
49 49
           <div class="flex" style="justify-content:center">
50
-            <div class="c-00B38A pointer" style="margin:0 6px" @click="goDetail(scope.row.rule_id)">详情</div>
50
+            <div class="c-00B38A pointer" style="margin:0 6px" @click="showDetial(scope.row)">详情</div>
51 51
           </div>
52 52
         </template>
53 53
       </el-table-column>
@@ -56,6 +56,13 @@
56 56
       <el-pagination background :current-page="page" @current-change="handleCurrentChange" layout="prev, pager, next" :page-count='Number(pages)'>
57 57
       </el-pagination>
58 58
     </div>
59
+    <!--详情-->
60
+    <el-drawer :size="drawerSize" :visible.sync="detialDrawer" :with-header="false">
61
+      <detial @changeDrawerSize="changeDrawerSize" @closeDrawer="closeDrawer" :rowProp="{
62
+        customer_id:rowPro.customer_id,
63
+        user_id:rowPro.user_id
64
+      }" ref="detial"></detial>
65
+    </el-drawer>
59 66
   </div>
60 67
 </template>
61 68
 <script>
@@ -63,9 +70,10 @@ import selfInput from '@/components/assembly/screen/input.vue'
63 70
 import datePicker from '@/components/assembly/screen/datePicker.vue'
64 71
 import serviceSingle from '@/components/assembly/screen/serviceSingle.vue'
65 72
 import selfChannel from '@/components/assembly/screen/channel.vue'
73
+import detial from '@/components/detials/index.vue'
66 74
 
67 75
 export default {
68
-  components: { selfInput, datePicker, serviceSingle, selfChannel },
76
+  components: { selfInput, datePicker, serviceSingle, selfChannel, detial },
69 77
   data () {
70 78
     return {
71 79
       type: '',
@@ -79,7 +87,10 @@ export default {
79 87
       tableData: [],
80 88
       transfer_time: [],
81 89
       user_id: '',
82
-      assignment_status: ''
90
+      assignment_status: '',
91
+      drawerSize: '60%',
92
+      detialDrawer: false,
93
+      rowPro: {},//去详情的此条对象
83 94
     }
84 95
   },
85 96
   created () {
@@ -87,6 +98,21 @@ export default {
87 98
     this.init(1)
88 99
   },
89 100
   methods: {
101
+    changeDrawerSize () {
102
+      this.drawerSize = this.drawerSize == '100%' ? '60%' : '100%'
103
+    },
104
+    closeDrawer () {
105
+      this.detialDrawer = false
106
+    },
107
+    showDetial (row) {
108
+      this.rowPro = row
109
+      this.drawerSize = '60%'
110
+      this.detialDrawer = true
111
+      this.$nextTick(() => {
112
+        this.$refs.detial.acIdx = 0
113
+        this.$refs.detial.init()
114
+      })
115
+    },
90 116
     serviceSingleEvent (val) {
91 117
       if (val && val.user_id) {
92 118
         this.user_id = val.user_id

+ 1 - 50
project/src/components/detials/index.vue

@@ -94,7 +94,6 @@
94 94
               {{t.tag_name}}
95 95
             </div>
96 96
           </div>
97
-
98 97
         </div>
99 98
 
100 99
       </div>
@@ -110,54 +109,7 @@
110 109
       </div>
111 110
     </el-dialog>
112 111
 
113
-    <el-dialog
114
-      title="新建企业标签组"
115
-      :visible.sync="lableGroup"
116
-      :append-to-body="true"
117
-      class="addLable_dialog"
118
-      width="30%">
119
-      <div class="groupCon">
120
-        <div class="group_item">
121
-          <div class="lable">标签组名称:</div>
122
-          <div class="opaArea">
123
-            <el-input class="ipt_group" v-model="groupName" placeholder="请输入标签组名称"></el-input>
124
-          </div>
125
-        </div>
126
-        <div class="group_item">
127
-          <div class="lable">可见范围:</div>
128
-          <div class="opaArea">
129
-            <el-radio-group v-model="scopeVal">
130
-              <el-radio :label="0">全部员工</el-radio>
131
-              <el-radio :label="1">部门可用</el-radio>
132
-            </el-radio-group>
133
-          </div>
134
-        </div>
135
-        <div class="group_item" v-if="scopeVal==1">
136
-          <div class="lable">选择可用部门:</div>
137
-          <div class="pointer" style="padding: 8px 12px;border: 1px solid #D2D2D2;margin-left: 20px">
138
-            + 添加部门
139
-          </div>
140
-        </div>
141
-        <div class="group_item" style="align-items: baseline;margin-top: 10px">
142
-          <div class="lable">标签名称:</div>
143
-          <div class="opaArea">
144
-            <div v-for="(m,mIdx) in moreLable" :key="m.id" class="flex">
145
-              <el-input class="ipt_group tMar10" v-model="m.name" placeholder="请输入标签名称"></el-input>
146
-              <span v-if="moreLable&&moreLable.length>1" class="flex">
147
-                <span class="minusIptGroup" @click="moreLable.splice(mIdx,1)">-</span>
148
-                <i class="el-icon-top f18 lMar8 pointer" :class="mIdx == 0 ? 'disCss' : ''" @click="upClick(mIdx)"></i>
149
-                <i class="el-icon-bottom f18 lMar8 pointer" :class="mIdx == moreLable.length-1 ? 'disCss' : ''" @click="downClick(mIdx)"></i>
150
-              </span>
151
-            </div>
152
-            <div class="addIptGroup" @click="moreLable.push({id:moreLable.length,name:''})">+ 添加标签</div>
153
-          </div>
154
-        </div>
155
-      </div>
156
-      <div slot="footer">
157
-        <el-button size="mini" @click="lableGroup = false">取 消</el-button>
158
-        <el-button size="mini" type="primary" @click="lableGroup = false">确 定</el-button>
159
-      </div>
160
-    </el-dialog>
112
+
161 113
 
162 114
 <!--
163 115
   <el-dialog
@@ -462,7 +414,6 @@ export default {
462 414
     }
463 415
   }
464 416
 }
465
-
466 417
 </style>
467 418
 
468 419
 <style lang="scss">

+ 17 - 3
project/src/components/manage/memberManage.vue

@@ -14,7 +14,7 @@
14 14
           部门信息
15 15
         </div>
16 16
         <div>
17
-          <div v-for="c in checkList" :key="c.id" class="tMar20 flex-align-center">
17
+          <div v-for="c in depart_List" :key="c.id" class="tMar20 flex-align-center">
18 18
             <i class="el-icon-circle-check c-00B38A f16 rMar7 pointer" v-if="checkVals.indexOf(c.id)>-1" @click="checkDepartId(c.id)"></i>
19 19
             <i class="el-icon-circle rMar7 pointer" @click="checkDepartId(c.id)" v-else></i>
20 20
             {{c.name}}
@@ -79,7 +79,7 @@ export default {
79 79
       page_size: 20,
80 80
       tableData: [],
81 81
       checkVals:[],
82
-      checkList:[],
82
+      depart_List:[],
83 83
 
84 84
     }
85 85
   },
@@ -87,16 +87,30 @@ export default {
87 87
     this.init(1)
88 88
   },
89 89
   methods: {
90
+
90 91
     inputChange(keyword){
91 92
       this.init(1,keyword)
92 93
     },
94
+    init_depart(){
95
+      this.$axios.get(this.URL.BASEURL + this.URL.departmentList, {}).then((res) => {
96
+        var res = res.data
97
+        if (res && res.errno == 0) {
98
+
99
+        } else if (res.errno != 4002) {
100
+          this.$message({
101
+            message: res.err,
102
+            type: "warning"
103
+          })
104
+        }
105
+      })
106
+    },
93 107
     init (page,keyword) {
94
-      console.log(this.checkVals);
95 108
       this.page = page ? page : this.page;
96 109
       this.loading = true
97 110
       this.$axios.get(this.URL.BASEURL + this.URL.memberList, {
98 111
         params: {
99 112
           user_name:keyword,
113
+          department_list:this.checkVals,
100 114
           page: this.page,
101 115
           page_size: this.page_size
102 116
         }

+ 138 - 7
project/src/components/manage/tagManage.vue

@@ -1,43 +1,109 @@
1 1
 <template>
2 2
   <div v-loading="loading">
3 3
     <div class="screenBox">
4
-      <self-input label_name="标签搜索" @inputChange='(val)=>{input_keyword = val;init(1)}'></self-input>
4
+      <self-input :hasLabel="false" label_name="标签搜索" @inputChange='(val)=>{input_keyword = val;init(1)}'></self-input>
5 5
       <div class="reset" @click="resetEvent">重置</div>
6 6
     </div>
7 7
     <div class="tableInfo">
8 8
       <div>
9 9
         <div class="flex">
10
-          <div class="totalCustom">共<span>{{total}}</span>个标签</div>
10
+          <div class="totalCustom">共<span>{{total}}</span>个标签</div>
11 11
         </div>
12 12
       </div>
13 13
       <div class="flex">
14
-        <el-button type="primary" size="mini" @click="init(1,'export')">添加标签组</el-button>
14
+        <el-button type="primary" size="mini" @click="addLableGroup">添加标签组</el-button>
15 15
       </div>
16 16
     </div>
17 17
     <div class="tagListBox">
18
-      <div class="tagItemBox">
18
+      <div class="tagItemBox" v-for="(item,mIdx) in tableData" :key="item.group_id">
19
+        <div style="width: 15%">
20
+          <div class="fWeight600 c-333 f14">{{item.group_name?item.group_name:'-'}}</div>
21
+          <div class="c-666 f13 tMar10">共{{item.tag_num?item.tag_num:'-'}}个标签</div>
22
+        </div>
23
+        <div class="flex-align-center">
24
+          <div class="add" @click="addLable(item)">+ 添加</div>
25
+          <el-input v-if="item.iptshow" v-focus class="ipt" v-model="item.addLableVal" placeholder="请输入标签" @blur="iptBlur(item)"></el-input>
26
+          <div class="lableItem" v-for="t in item.tag_list" :key="t.tag_id">
27
+            {{t.tag_name}}
28
+          </div>
29
+        </div>
30
+        <div class="flex-align-center lMarauto">
31
+          <span class="pointer rMar7">
32
+               <i class="el-icon-top f14 " :class="mIdx == 0 ? 'disCss' : ''" @click="upClick(mIdx)"></i>上移
33
+          </span>
34
+          <span class="pointer rMar7">
35
+                <i class="el-icon-bottom f14 " :class="mIdx == tableData.length-1 ? 'disCss' : ''" @click="downClick(mIdx)"></i>上移
36
+          </span>
37
+          <span class="pointer rMar7">
38
+            <i class="el-icon-edit f14"></i> 修改
39
+          </span>
40
+        </div>
19 41
 
20 42
       </div>
21 43
     </div>
44
+
45
+    <tagGroup ref="tagRef"></tagGroup>
46
+
22 47
   </div>
23 48
 </template>
24 49
 <script>
25 50
 import selfInput from '@/components/assembly/screen/input.vue'
51
+import tagGroup from "../assembly/tagGroup";
26 52
 export default {
27
-  components: { selfInput },
53
+  components: { selfInput, tagGroup },
28 54
   data () {
29 55
     return {
30 56
       loading: false,
31 57
       total: 0,
32 58
       tableData: [],
33 59
       resetFlag: false,//重置
34
-      input_keyword: ''
60
+      input_keyword: '',
61
+      iptshow:false,
62
+      moreLable:[],
63
+
64
+    }
65
+  },
66
+  directives:{
67
+    focus:{
68
+      inserted : function (el){
69
+        el.querySelector('input').focus()
70
+      }
35 71
     }
36 72
   },
37 73
   created () {
38 74
     this.init(1)
39 75
   },
40 76
   methods: {
77
+    addTag(){
78
+
79
+    },
80
+    addLableGroup(){
81
+      this.$nextTick(()=>{
82
+        this.$refs.tagRef.lableGroup = true
83
+      })
84
+    },
85
+    addLable(item){
86
+      item.iptshow = true
87
+      item.addLableVal = ''
88
+      this.$forceUpdate()
89
+    },
90
+    iptBlur(item){
91
+      item.iptshow = false
92
+      this.$forceUpdate()
93
+      if(item.addLableVal){
94
+        this.$axios.post(this.URL.BASEURL + this.URL.addTag, {
95
+          group_name: this.groupName,
96
+          name:item.addLableVal
97
+        }).then((res) => {
98
+          var res = res.data
99
+          this.$message({
100
+            message: res.err,
101
+            type: "warning"
102
+          })
103
+        })
104
+        // this.lableArr.push({id:this.lableArr.length,name:this.addLableVal})
105
+      }
106
+    },
41 107
     resetEvent () {//重置
42 108
       this.resetFlag = !this.resetFlag
43 109
       this.input_keyword = ''
@@ -55,6 +121,10 @@ export default {
55 121
         if (res && res.errno == 0) {
56 122
           this.tableData = res.rst;
57 123
           this.total = this.tableData.length;
124
+          this.tableData.forEach(item=>{
125
+            item.iptshow = false
126
+            item.addLableVal = ''
127
+          })
58 128
         } else if (res.errno != 4002) {
59 129
           this.$message({
60 130
             message: res.err,
@@ -68,12 +138,73 @@ export default {
68 138
     handleCurrentChange (val) {
69 139
       this.init(val)
70 140
     },
141
+    // 上移
142
+    upClick(index) {
143
+      if(index == 0){return false}
144
+      this.moreLable = this.swapItems(this.moreLable, index, index - 1)
145
+    },
146
+    // 下移
147
+    downClick(index) {
148
+      if(index == this.moreLable.length-1){return false}
149
+      this.moreLable = this.swapItems(this.moreLable, index, index + 1)
150
+    },
151
+    swapItems(arr, index1, index2) {
152
+      arr[index1] = arr.splice(index2, 1, arr[index1])[0];
153
+      return arr;
154
+    },
71 155
   }
72 156
 }
73 157
 </script>
158
+<style lang="scss">
159
+.tagItemBox{
160
+  .ipt{
161
+    width: 120px;
162
+    margin-right: 8px;
163
+    margin-top: 10px;
164
+    .el-input__inner{
165
+      height: 30px;
166
+      line-height: 30px;
167
+    }
168
+  }
169
+}
170
+
171
+</style>
74 172
 <style lang="scss" scoped>
75 173
 @import "@/style/list.scss";
76 174
 .tableInfo {
77 175
   height: 50px;
176
+
78 177
 }
79
-</style>
178
+.tagListBox{
179
+    font-size: 14px;
180
+    background-color: #fff;
181
+    .tagItemBox{
182
+      display: flex;
183
+      align-items: center;
184
+      //justify-content: space-between;
185
+      padding: 20px 10px;
186
+      border-bottom: 1px solid #E9E9E9;
187
+      .add{
188
+        padding: 4px 10px;
189
+        line-height: 20px;
190
+        text-align: center;
191
+        border: 1px solid #D2D2D2;
192
+        cursor: pointer;
193
+        margin-right: 8px;
194
+        margin-top: 10px;
195
+      }
196
+      .lableItem{
197
+        line-height: 20px;
198
+        text-align: center;
199
+        border: 1px solid #D2D2D2;
200
+        padding: 4px 10px;
201
+        background-color: #fafafa;
202
+        margin-right: 8px;
203
+        //cursor: pointer;
204
+        margin-top: 10px;
205
+      }
206
+
207
+    }
208
+  }
209
+
210
+</style>