Browse Source

开发标签管理

liuxiaona 2 years ago
parent
commit
52667a6fc2

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

@@ -53,6 +53,10 @@ var api = {
53 53
   customer_setCustomerTag: "/api/customer/setCustomerTag",
54 54
   customer_batchMarkTagResult: "/api/customer/batchMarkTagResult",
55 55
   departmentList: "/api/user/departments",
56
+  add_tag: "/api/tag/addSingleTag",
57
+  add_tag_group: "/api/tag/addTagGroup",
58
+  order_tag_group: "/api/tag/updateTagGroupOrder",
59
+  dele_tag_group: "/api/tag/deleteTagGroup",
56 60
 };
57 61
 
58 62
 export { api };

BIN
project/src/assets/img/down.png


BIN
project/src/assets/img/downNone.png


BIN
project/src/assets/img/edit.png


BIN
project/src/assets/img/fullScreen.png


BIN
project/src/assets/img/info_detial.png


BIN
project/src/assets/img/kefuxinxi@2x.png


BIN
project/src/assets/img/kehu@2x.png


BIN
project/src/assets/img/lable_detial.png


BIN
project/src/assets/img/lianjie copy@2x.png


BIN
project/src/assets/img/shouquan@2x.png


BIN
project/src/assets/img/tupian copy@2x.png


BIN
project/src/assets/img/up.png


BIN
project/src/assets/img/upNone.png


BIN
project/src/assets/img/xiaochengxu copy@2x.png


BIN
project/src/assets/img/确认 copy@2x.png


+ 35 - 13
project/src/components/assembly/tagGroup.vue

@@ -36,9 +36,17 @@
36 36
           <div v-for="(m,mIdx) in moreLable" :key="m.id" class="flex">
37 37
             <el-input class="ipt_group tMar10" v-model="m.name" placeholder="请输入标签名称"></el-input>
38 38
             <span v-if="moreLable&&moreLable.length>1" class="flex">
39
+               <el-tooltip effect="light" content="删除该标签" placement="top-start">
39 40
                 <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>
41
+               </el-tooltip>
42
+                <img src="../../assets/img/upNone.png" alt="" v-if="mIdx == 0" style="width: 20px;margin: 0 8px;cursor: pointer">
43
+               <el-tooltip effect="light" content="上移" placement="top-start">
44
+                 <img src="../../assets/img/up.png" alt="" v-if="mIdx > 0" @click="upClick(mIdx)" style="width: 20px;margin: 0 8px;cursor: pointer">
45
+               </el-tooltip>
46
+                <img src="../../assets/img/downNone.png" alt="" v-if="mIdx == moreLable.length-1" style="width: 20px;cursor: pointer">
47
+               <el-tooltip effect="light" content="下移" placement="top-start">
48
+                 <img src="../../assets/img/down.png" alt="" v-if="mIdx < moreLable.length-1" @click="downClick(mIdx)" style="width: 20px;cursor: pointer">
49
+               </el-tooltip>
42 50
               </span>
43 51
           </div>
44 52
           <div class="addIptGroup" @click="moreLable.push({id:moreLable.length,name:''})">+ 添加标签</div>
@@ -47,7 +55,7 @@
47 55
     </div>
48 56
     <div slot="footer">
49 57
       <el-button size="mini" @click="lableGroup = false">取 消</el-button>
50
-      <el-button size="mini" type="primary" @click="lableGroup = false">确 定</el-button>
58
+      <el-button size="mini" type="primary" @click="addTagGroup()">确 定</el-button>
51 59
     </div>
52 60
   </el-dialog>
53 61
 </template>
@@ -55,31 +63,45 @@
55 63
 <script>
56 64
 export default {
57 65
   name: "tagGroup",
66
+  props:['source'],
58 67
   data(){
59 68
     return{
60 69
       lableGroup:false,
61 70
       groupName:'',
62
-      moreLable:[
63
-        {id:0,name:''}
64
-      ],
71
+      moreLable:[{id:0,name:''}],//添加标签组时,新增标签的数据列表,传给后台
65 72
     }
66 73
   },
67 74
   methods:{
68
-    addTag(){
69
-      this.$axios.post(this.URL.BASEURL + this.URL.addTag, {
75
+    addTagGroup(){
76
+      this.$axios.post(this.URL.BASEURL + this.URL.add_tag_group, {
70 77
         group_name: this.groupName,
71
-        tag_list:[]
78
+        tag_list:this.moreLable
72 79
       }).then((res) => {
73 80
         var res = res.data
74 81
         if (res && res.errno == 0) {
75
-
82
+          this.lableGroup = false
83
+          this.$parent.init(1)
76 84
         }
77 85
         this.$message({
78 86
           message: res.err,
79 87
           type: "warning"
80 88
         })
81 89
       })
82
-    }
90
+    },
91
+    // 上移
92
+    upClick(index) {
93
+      if(index == 0){return false}
94
+      this.moreLable = this.swapItems(this.moreLable, index, index - 1)
95
+    },
96
+    // 下移
97
+    downClick(index) {
98
+      if(index == this.moreLable.length-1){return false}
99
+      this.moreLable = this.swapItems(this.moreLable, index, index + 1)
100
+    },
101
+    swapItems(arr, index1, index2) {
102
+      arr[index1] = arr.splice(index2, 1, arr[index1])[0];
103
+      return arr;
104
+    },
83 105
 
84 106
   }
85 107
 }
@@ -161,7 +183,7 @@ export default {
161 183
         }
162 184
         .minusIptGroup{
163 185
           display: inline-block;
164
-          border: 1px solid #333;
186
+          border: 1px solid #33c2a1;
165 187
           border-radius: 50%;
166 188
           font-size: 18px;
167 189
           width: 16px;
@@ -169,7 +191,7 @@ export default {
169 191
           text-align: center;
170 192
           line-height: 12px;
171 193
           margin-left: 10px;
172
-          color: #333;
194
+          color: #33c2a1;
173 195
           cursor: pointer;
174 196
           flex-shrink: 0;
175 197
         }

+ 3 - 3
project/src/components/detials/customerProfile.vue

@@ -2,7 +2,7 @@
2 2
 <!--  v-loading="loading"-->
3 3
   <div >
4 4
     <div class="bigTitle">
5
-      <i class="el-icon-user-solid"></i>
5
+      <i class="el-icon-user-solid c-00B38A"></i>
6 6
       <span>添加客服信息</span>
7 7
     </div>
8 8
     <div class="tableBox_detial">
@@ -52,8 +52,8 @@
52 52
       </el-skeleton>
53 53
     </div>
54 54
 
55
-    <div class="bigTitle tMar30">
56
-      <i class="el-icon-user-solid"></i>
55
+    <div class="bigTitle tMar30 flex-align-center">
56
+      <img src="../../assets/img/info_detial.png" alt="" style="width: 14px;margin-right: 4px">
57 57
       <span>基本信息</span>
58 58
 <!--      <span style="color: #898D92;font-weight: 400;margin-left: 6px">所属员工可在「侧边栏-客户画像」中进行编辑</span>-->
59 59
     </div>

+ 2 - 1
project/src/components/detials/customerStatus.vue

@@ -5,7 +5,8 @@
5 5
         <div class="dayDate">{{l.create_time&&l.create_time.split(' ')[0]}}{{l.week}}</div>
6 6
         <div class="subBox" v-for="(s,sIdx) in l.sub" :key="sIdx" :class="idx==0 ? 'tMar17' : ''">
7 7
           <div class="subBox_line">
8
-            <i class="el-icon-price-tag f16"></i>
8
+<!--            <i class="el-icon-price-tag f16"></i>-->
9
+            <img src="../../assets/img/lable_detial.png" alt="" style="display: inline-block;width: 16px">
9 10
             <div class="splitLine"></div>
10 11
           </div>
11 12
           <div class="lMar8">

+ 2 - 2
project/src/components/detials/index.vue

@@ -16,8 +16,8 @@
16 16
         </span>
17 17
 -->
18 18
       </div>
19
-      <div>
20
-        <i class="el-icon-plus pointer" @click="changeWidth"></i>
19
+      <div class="flex-align-center">
20
+        <img src="../../assets/img/fullScreen.png" alt="" style="width: 13px;margin-right: 6px;cursor: pointer"  @click="changeWidth">
21 21
         <i class="el-icon-close pointer" @click="close"></i>
22 22
       </div>
23 23
     </div>

+ 14 - 9
project/src/components/manage/memberManage.vue

@@ -2,7 +2,10 @@
2 2
   <div>
3 3
     <div class="tableInfo">
4 4
       <div class="flex">
5
-        <div class="totalCustom">共<span>{{tableData&&tableData.length ? tableData.length : '-'}}</span>个成员</div>
5
+        <div class="totalCustom">
6
+          <i class="el-icon-user-solid"></i>
7
+          共<span>{{tableData&&tableData.length ? tableData.length : '-'}}</span>个成员
8
+        </div>
6 9
       </div>
7 10
       <div class="flex">
8 11
         <selfinput :hasLabel="false" @inputChange="inputChange"></selfinput>
@@ -14,10 +17,10 @@
14 17
           部门信息
15 18
         </div>
16 19
         <div>
17
-          <div v-for="c in depart_List" :key="c.id" class="tMar20 flex-align-center">
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
-            <i class="el-icon-circle rMar7 pointer" @click="checkDepartId(c.id)" v-else></i>
20
-            {{c.name}}
20
+          <div v-for="c in depart_List" :key="c.department_id" class="tMar20 flex-align-center">
21
+            <i class="el-icon-circle-check c-00B38A f16 rMar7 pointer" v-if="checkVals.indexOf(c.department_id)>-1" @click="checkDepartId(c.department_id)"></i>
22
+            <i class="el-icon-circle rMar7 pointer" @click="checkDepartId(c.department_id)" v-else></i>
23
+            {{c.department_id}}
21 24
           </div>
22 25
         </div>
23 26
       </div>
@@ -80,22 +83,23 @@ export default {
80 83
       tableData: [],
81 84
       checkVals:[],
82 85
       depart_List:[],
83
-
86
+      keyword:'',
84 87
     }
85 88
   },
86 89
   created () {
90
+    this.init_depart()
87 91
     this.init(1)
88 92
   },
89 93
   methods: {
90
-
91 94
     inputChange(keyword){
95
+      this.keyword = keyword
92 96
       this.init(1,keyword)
93 97
     },
94 98
     init_depart(){
95 99
       this.$axios.get(this.URL.BASEURL + this.URL.departmentList, {}).then((res) => {
96 100
         var res = res.data
97 101
         if (res && res.errno == 0) {
98
-
102
+          this.depart_List = res.rst
99 103
         } else if (res.errno != 4002) {
100 104
           this.$message({
101 105
             message: res.err,
@@ -132,7 +136,7 @@ export default {
132 136
       });
133 137
     },
134 138
     handleCurrentChange (val) {
135
-      this.init(val)
139
+      this.init(val,this.keyword)
136 140
     },
137 141
     checkDepartId(id){
138 142
       if(this.checkVals.indexOf(id)==-1){
@@ -140,6 +144,7 @@ export default {
140 144
       }else{
141 145
         this.checkVals.splice(this.checkVals.indexOf(id),1)
142 146
       }
147
+      this.init(1,this.keyword)
143 148
     },
144 149
   }
145 150
 }

+ 50 - 38
project/src/components/manage/tagManage.vue

@@ -11,38 +11,42 @@
11 11
         </div>
12 12
       </div>
13 13
       <div class="flex">
14
-        <el-button type="primary" size="mini" @click="addLableGroup">添加标签组</el-button>
14
+        <el-button type="primary" size="mini" @click="addLableGroup('add')">添加标签组</el-button>
15 15
       </div>
16 16
     </div>
17 17
     <div class="tagListBox">
18 18
       <div class="tagItemBox" v-for="(item,mIdx) in tableData" :key="item.group_id">
19
-        <div style="width: 15%">
19
+        <div style="width: 15%;flex-shrink: 0">
20 20
           <div class="fWeight600 c-333 f14">{{item.group_name?item.group_name:'-'}}</div>
21 21
           <div class="c-666 f13 tMar10">共{{item.tag_num?item.tag_num:'-'}}个标签</div>
22 22
         </div>
23
-        <div class="flex-align-center">
23
+        <div class="flex-align-center" style="flex-wrap: wrap">
24 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>
25
+          <el-input v-if="item.iptshow" v-focus class="ipt" @input="forceUpdate" v-model="item.addLableVal" placeholder="请输入标签" @blur="iptBlur(item)"></el-input>
26 26
           <div class="lableItem" v-for="t in item.tag_list" :key="t.tag_id">
27 27
             {{t.tag_name}}
28 28
           </div>
29 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>
30
+        <div class="flex-align-center lMarauto editArea">
31
+          <div class="pointer rMar10 flex-align-center" @click="mIdx>0&&orderList(item.group_id)">
32
+            <img src="../../assets/img/upNone.png" alt="" v-if="mIdx == 0">
33
+            <img src="../../assets/img/up.png" alt="" v-if="mIdx > 0">
34
+            上移
35
+          </div>
36
+          <div class="pointer rMar10 flex-align-center" @click="mIdx < tableData.length-1&&orderList(item.group_id)">
37
+            <img src="../../assets/img/downNone.png" alt="" v-if="mIdx == tableData.length-1">
38
+            <img src="../../assets/img/down.png" alt="" v-if="mIdx < tableData.length-1">
39
+            上移
40
+          </div>
41
+          <div class="pointer flex-align-center" @click="addLableGroup('edit')">
42
+            <img src="../../assets/img/edit.png" alt="">
43
+            修改
44
+          </div>
40 45
         </div>
41 46
 
42 47
       </div>
43 48
     </div>
44
-
45
-    <tagGroup ref="tagRef"></tagGroup>
49
+    <tagGroup ref="tagRef" :source="editOpa"></tagGroup>
46 50
 
47 51
   </div>
48 52
 </template>
@@ -58,8 +62,7 @@ export default {
58 62
       tableData: [],
59 63
       resetFlag: false,//重置
60 64
       input_keyword: '',
61
-      iptshow:false,
62
-      moreLable:[],
65
+      editOpa:'add',//判断是新增标签组还是修改标签组
63 66
 
64 67
     }
65 68
   },
@@ -74,10 +77,17 @@ export default {
74 77
     this.init(1)
75 78
   },
76 79
   methods: {
80
+    orderList(){
81
+
82
+    },
83
+    forceUpdate() {
84
+      this.$forceUpdate()
85
+    },
77 86
     addTag(){
78 87
 
79 88
     },
80
-    addLableGroup(){
89
+    addLableGroup(opa){
90
+      this.editOpa = opa
81 91
       this.$nextTick(()=>{
82 92
         this.$refs.tagRef.lableGroup = true
83 93
       })
@@ -91,17 +101,21 @@ export default {
91 101
       item.iptshow = false
92 102
       this.$forceUpdate()
93 103
       if(item.addLableVal){
94
-        this.$axios.post(this.URL.BASEURL + this.URL.addTag, {
95
-          group_name: this.groupName,
96
-          name:item.addLableVal
104
+        this.$axios.post(this.URL.BASEURL + this.URL.add_tag, {
105
+          group_id: item.group_id,
106
+          tag_name:item.addLableVal
97 107
         }).then((res) => {
98 108
           var res = res.data
109
+          if(res&&res.errno == 0){
110
+            item.tag_list.push({tag_name:item.addLableVal})
111
+            item.tag_num+=1
112
+            return
113
+          }
99 114
           this.$message({
100 115
             message: res.err,
101
-            type: "warning"
116
+            type: "info"
102 117
           })
103 118
         })
104
-        // this.lableArr.push({id:this.lableArr.length,name:this.addLableVal})
105 119
       }
106 120
     },
107 121
     resetEvent () {//重置
@@ -138,20 +152,7 @@ export default {
138 152
     handleCurrentChange (val) {
139 153
       this.init(val)
140 154
     },
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
-    },
155
+
155 156
   }
156 157
 }
157 158
 </script>
@@ -166,6 +167,17 @@ export default {
166 167
       line-height: 30px;
167 168
     }
168 169
   }
170
+  .editArea{
171
+    font-size: 13px;
172
+    flex-shrink: 0;
173
+    padding-left: 30px;
174
+    img{
175
+      width: 14px;
176
+      height: 14px;
177
+      flex-shrink: 0;
178
+      margin-right: 3px;
179
+    }
180
+  }
169 181
 }
170 182
 
171 183
 </style>