houxiaohua 6 mesi fa
parent
commit
171e6f68fc
64 ha cambiato i file con 668 aggiunte e 65 eliminazioni
  1. 2 0
      dist/assets/index-B-M_fJAo.js
  2. 1 1
      dist/assets/index-D-tlnvu0.css
  3. 0 2
      dist/assets/index-BsPh14Cn.js
  4. 1 0
      dist/assets/index-M64Vbvjr.css
  5. 1 1
      dist/index.html
  6. 1 1
      dist/js/Home/index.DVF20AQL.js
  7. 1 1
      dist/js/_dialog/_dialog.DnYxd9Ou.js
  8. 1 1
      dist/js/_input/_input.tleKPaPl.js
  9. 1 1
      dist/js/_inputAppend/_inputAppend.BnM9HKx1.js
  10. 1 1
      dist/js/_select/_select.DzGZebhe.js
  11. 1 0
      dist/js/acStatement/index.C790mken.js
  12. 0 1
      dist/js/acStatement/index.DWcRqXad.js
  13. 1 0
      dist/js/adAccountGroup/index.D8v_LpqC.js
  14. 1 1
      dist/js/adTask/index.DUubCbus.js
  15. 1 1
      dist/js/adTask3/index.BTn7oBWB.js
  16. 1 1
      dist/js/adqManage/index.DeBgZhaH.js
  17. 1 1
      dist/js/adqManage3/index.DNuTh-cZ.js
  18. 1 1
      dist/js/api/api._7FezJgH.js
  19. 1 1
      dist/js/api/api.BLwHS5OL.js
  20. 1 0
      dist/js/api/api.CiL1JNfb.js
  21. 0 1
      dist/js/api/api.D1PXAJFf.js
  22. 1 1
      dist/js/basisMoudle/error.D7pUOZMQ.js
  23. 1 1
      dist/js/basisMoudle/login.B0czvXmu.js
  24. 1 1
      dist/js/checkboxDefault/checkboxDefault.BzruKqYU.js
  25. 1 1
      dist/js/collectClip/index.Cq0UbNJ5.js
  26. 1 1
      dist/js/commonList/commonList.Ce4s8fHX.js
  27. 1 1
      dist/js/configArea/index.HM-_QN1H.js
  28. 1 1
      dist/js/configArea/index.Cnf0gCDC.js
  29. 1 1
      dist/js/define/define.BWz6KGZ7.js
  30. 1 1
      dist/js/gdtList/index.C2rGqHiC.js
  31. 1 1
      dist/js/gdtList3/index.DQhY_57u.js
  32. 1 1
      dist/js/index/index.C74V0yOA.js
  33. 1 1
      dist/js/index/index.BBnXbURb.js
  34. 1 1
      dist/js/index/index.BjTfSIOu.js
  35. 1 1
      dist/js/index/index.B8Pkg0ts.js
  36. 1 1
      dist/js/layout/index.LEZqF5T4.js
  37. 1 1
      dist/js/layout/index_head.D-anJCjh.js
  38. 1 1
      dist/js/limitManage/index.DvNdpERu.js
  39. 1 1
      dist/js/materialBlock/materialBlock.BR7KryPo.js
  40. 1 1
      dist/js/materialData/index.DdiLA8iN.js
  41. 1 1
      dist/js/materialLibrary/index.CDYYZC-k.js
  42. 1 1
      dist/js/materialTs/materialTs.BvsJpZC4.js
  43. 1 1
      dist/js/memberManage/index.BwHHQFdR.js
  44. 1 1
      dist/js/menu/index.BJqKvKHy.js
  45. 1 1
      dist/js/miniprogram/index.D7Gpolu2.js
  46. 1 0
      dist/js/oeAdAccount/index.CILTx2qz.js
  47. 0 1
      dist/js/oeAdAccount/index.Ckl9c0yU.js
  48. 1 1
      dist/js/projectManage/index.DqDBiIXn.js
  49. 1 1
      dist/js/radioGroup/radioGroup.C8nnzmwG.js
  50. 1 1
      dist/js/tableInfo/tableInfo.BbtdQcp3.js
  51. 1 1
      dist/js/tagBlock/tagBlock.y7ygFR_A.js
  52. 1 1
      dist/js/taskList/index.BdBXwO47.js
  53. 1 1
      dist/js/teamManage/index.CIQIa_W9.js
  54. 1 1
      dist/js/timeScreen/timeScreen.BZO0NIMT.js
  55. 1 1
      dist/js/warning/warning.BLj9AqbF.js
  56. 1 1
      dist/js/wechatPage/index.BWZSJ9wE.js
  57. 1 1
      dist/js/weekTime/weekTime.Cw-bJZoI.js
  58. 1 1
      dist/js/weekTime/weekTime.-U4pWt5X.js
  59. 8 0
      src/api/ApiModel.ts
  60. 6 0
      src/api/api.ts
  61. 457 0
      src/components/businessMoudle/adAccountGroup/dialog/addGroup.vue
  62. 124 0
      src/components/businessMoudle/adAccountGroup/index.vue
  63. 9 12
      src/components/businessMoudle/oeAdAccount/index.vue
  64. 9 0
      src/router/index.ts

File diff suppressed because it is too large
+ 2 - 0
dist/assets/index-B-M_fJAo.js


File diff suppressed because it is too large
+ 1 - 1
dist/assets/index-D-tlnvu0.css


File diff suppressed because it is too large
+ 0 - 2
dist/assets/index-BsPh14Cn.js


File diff suppressed because it is too large
+ 1 - 0
dist/assets/index-M64Vbvjr.css


+ 1 - 1
dist/index.html

@@ -12,7 +12,7 @@
12 12
 			document.write('<script src="' + src + '"><\/script>');
13 13
 			})();
14 14
     </script>
15
-    <script type="module" crossorigin src="./assets/index-BsPh14Cn.js"></script>
15
+    <script type="module" crossorigin src="./assets/index-B-M_fJAo.js"></script>
16 16
     <link rel="modulepreload" crossorigin href="./js/@vue/@vue.lccsL1Mu.js">
17 17
     <link rel="modulepreload" crossorigin href="./js/vue-router/vue-router.D86bYXwF.js">
18 18
     <link rel="modulepreload" crossorigin href="./js/vue-demi/vue-demi.Dq6ymT-8.js">

File diff suppressed because it is too large
+ 1 - 1
dist/js/Home/index.DVF20AQL.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/_dialog/_dialog.DnYxd9Ou.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/_input/_input.tleKPaPl.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/_inputAppend/_inputAppend.BnM9HKx1.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/_select/_select.DzGZebhe.js


File diff suppressed because it is too large
+ 1 - 0
dist/js/acStatement/index.C790mken.js


File diff suppressed because it is too large
+ 0 - 1
dist/js/acStatement/index.DWcRqXad.js


File diff suppressed because it is too large
+ 1 - 0
dist/js/adAccountGroup/index.D8v_LpqC.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/adTask/index.DUubCbus.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/adTask3/index.BTn7oBWB.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/adqManage/index.DeBgZhaH.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/adqManage3/index.DNuTh-cZ.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/api/api._7FezJgH.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/api/api.BLwHS5OL.js


File diff suppressed because it is too large
+ 1 - 0
dist/js/api/api.CiL1JNfb.js


File diff suppressed because it is too large
+ 0 - 1
dist/js/api/api.D1PXAJFf.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/basisMoudle/error.D7pUOZMQ.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/basisMoudle/login.B0czvXmu.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/checkboxDefault/checkboxDefault.BzruKqYU.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/collectClip/index.Cq0UbNJ5.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/commonList/commonList.Ce4s8fHX.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/configArea/index.HM-_QN1H.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/configArea/index.Cnf0gCDC.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/define/define.BWz6KGZ7.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/gdtList/index.C2rGqHiC.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/gdtList3/index.DQhY_57u.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/index/index.C74V0yOA.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/index/index.BBnXbURb.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/index/index.BjTfSIOu.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/index/index.B8Pkg0ts.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/layout/index.LEZqF5T4.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/layout/index_head.D-anJCjh.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/limitManage/index.DvNdpERu.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/materialBlock/materialBlock.BR7KryPo.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/materialData/index.DdiLA8iN.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/materialLibrary/index.CDYYZC-k.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/materialTs/materialTs.BvsJpZC4.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/memberManage/index.BwHHQFdR.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/menu/index.BJqKvKHy.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/miniprogram/index.D7Gpolu2.js


File diff suppressed because it is too large
+ 1 - 0
dist/js/oeAdAccount/index.CILTx2qz.js


File diff suppressed because it is too large
+ 0 - 1
dist/js/oeAdAccount/index.Ckl9c0yU.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/projectManage/index.DqDBiIXn.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/radioGroup/radioGroup.C8nnzmwG.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/tableInfo/tableInfo.BbtdQcp3.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/tagBlock/tagBlock.y7ygFR_A.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/taskList/index.BdBXwO47.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/teamManage/index.CIQIa_W9.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/timeScreen/timeScreen.BZO0NIMT.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/warning/warning.BLj9AqbF.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/wechatPage/index.BWZSJ9wE.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/weekTime/weekTime.Cw-bJZoI.js


File diff suppressed because it is too large
+ 1 - 1
dist/js/weekTime/weekTime.-U4pWt5X.js


+ 8 - 0
src/api/ApiModel.ts

@@ -259,6 +259,14 @@ export interface departParams{
259 259
     keyword?:string
260 260
 }
261 261
 
262
+export interface adGroupParams{
263
+    name?:string,
264
+    group_id?:string|number,
265
+    promoter_id?:any,
266
+    keyword?:string,
267
+    status?:number,
268
+}
269
+
262 270
 
263 271
 
264 272
 

+ 6 - 0
src/api/api.ts

@@ -88,6 +88,12 @@ export enum Api{
88 88
     oe_ad_account = '/api/oeAdAccount/lists',
89 89
     oe_account_auth = '/oceanAuth/getUrl',
90 90
 
91
+    // 广告账户分组管理
92
+    ad_account_group_list = '/api/adAccountGroup/lists',
93
+    ad_account_group_edit = '/api/adAccountGroup/edit',
94
+    ad_account_group_convert = '/api/adAccountGroup/convert',
95
+    ad_account_group_detail = '/api/adAccountGroup/detail',
96
+
91 97
     //定向包
92 98
     directPacket_add = '/api/ad/targetingsAdd',
93 99
     directPacket_list = '/api/ad/targetingGet',

+ 457 - 0
src/components/businessMoudle/adAccountGroup/dialog/addGroup.vue

@@ -0,0 +1,457 @@
1
+<template>
2
+
3
+  <Dialog ref="DialogRef_editType"
4
+          :dialogVisible="dialogShow"
5
+          @confirm="confirmEvent"
6
+          @close="dialogShow = false"
7
+          width="800px"
8
+          height="calc(100vh - 220px)"
9
+          top="20px"
10
+          :dialog-title="pageInfo.title">
11
+    <template v-slot:content>
12
+      <div class="dialogBox" v-loading="loading">
13
+        <Input ref="nameRef" spanTitleWidth="80px" inputWidth="80%" title="分组名称" :haveTag="true" :haverMar15="false"/>
14
+        <Select ref="promoterRef"
15
+                class="tMar20"
16
+                :clearFlag="true"
17
+                :haveTag="true"
18
+                title="所属投手"
19
+                selectWidth="190px"
20
+                :optObj="{k:'id',la:'username',val:'id'}"
21
+                :options="pageInfo.userList"/>
22
+      </div>
23
+    </template>
24
+  </Dialog>
25
+
26
+</template>
27
+<script setup lang="ts">
28
+import Select from '@/components/capsulationMoudle/_select.vue'
29
+import Dialog from '@/components/capsulationMoudle/_dialog.vue'
30
+import Input from '@/components/capsulationMoudle/_input.vue'
31
+import {getCurrentInstance, nextTick, onMounted, reactive, ref} from "vue";
32
+import {ElMessage} from "element-plus";
33
+import {adGroupParams, fileParam, reactiveTableAndAny} from "@/api/ApiModel";
34
+import {Api} from "@/api/api";
35
+
36
+const { proxy } = getCurrentInstance() as any;
37
+// 全局方法定义
38
+const NumberHandle = proxy.$NumberHandle
39
+
40
+const emit = defineEmits<{
41
+  (event: "init"): void;
42
+}>();
43
+
44
+//页面数据
45
+const pageInfo = reactive<reactiveTableAndAny>({
46
+  editId:'',
47
+  title:'新增账号分组',
48
+  userList:[]
49
+})
50
+
51
+const init_userList = async () => {
52
+  let res:any = await proxy.$http.get(Api.user_list)
53
+  if(res&&res.errNo=='0'){
54
+    let resNew:any = res.rst
55
+    pageInfo.userList = resNew
56
+  }else{
57
+    ElMessage.error(res.errMsg)
58
+  }
59
+}
60
+
61
+const nameRef=ref<{value:string}>()
62
+const promoterRef=ref<{value:any}>()
63
+const loading=ref<boolean>(false)
64
+const confirmEvent = async () => {
65
+  if(nameRef.value!.value==''){
66
+    ElMessage.error('分组名称为必填项')
67
+    return
68
+  }
69
+
70
+  if(promoterRef.value!.value==''){
71
+    ElMessage.error('所属投手为必选项')
72
+    return
73
+  }
74
+  loading.value = true
75
+  let api:string = Api.ad_account_group_edit
76
+  const paramsModel = reactive<adGroupParams>({
77
+    name:nameRef.value!.value,
78
+    promoter_id:promoterRef.value!.value,
79
+  })
80
+  if(pageInfo.editId){ // 编辑
81
+    paramsModel.group_id = pageInfo.editId
82
+  }
83
+  let res:any = await proxy.$http.post(api,paramsModel)
84
+  loading.value = false
85
+  if(res&&res.errNo=='0'){
86
+    let resNew:any = res.rst
87
+    dialogShow.value = false
88
+    emit('init')
89
+  }else{
90
+    ElMessage.error(res.errMsg)
91
+  }
92
+}
93
+
94
+/**项目详情 */
95
+const getDetail = async (group_id) => {
96
+  loading.value = true;
97
+  let res:any = await proxy.$http.get(Api.ad_account_group_detail, {group_id})
98
+  loading.value = false;
99
+  if(res&&res.errNo=='0'){
100
+    let info = res?.rst;
101
+    pageInfo.editId = info?.id
102
+    nameRef.value!.value = info.name
103
+    promoterRef.value!.value = info.promoter_id
104
+    pageInfo.title = '编辑账号组'
105
+  }else{
106
+    ElMessage.error(res.errMsg)
107
+  }
108
+}
109
+
110
+// 切换显隐
111
+const dialogShow = ref<boolean>(false)
112
+const switchShow = (val:boolean,info?:any)=>{
113
+  dialogShow.value = val
114
+  if(val){
115
+    nextTick(async ()=>{
116
+      nameRef.value!.value = ''
117
+      promoterRef.value!.value = ''
118
+      pageInfo.editId = ''
119
+      pageInfo.title = '新增账号组'
120
+      loading.value = true;
121
+      await init_userList()
122
+      loading.value = false;
123
+      if(info?.id){ // 编辑
124
+        getDetail(info?.id)
125
+      }
126
+    })
127
+  }
128
+}
129
+// 父组件共享值
130
+defineExpose({
131
+  switchShow,
132
+});
133
+onMounted(()=>{
134
+  nextTick(()=>{
135
+
136
+  })
137
+})
138
+</script>
139
+<style lang="scss" scoped>
140
+:deep(.spanTitle), .spanTitle{
141
+  font-size: 14px;
142
+  width: 80px !important;
143
+}
144
+.treeBox{
145
+  border-radius: 4px;
146
+  border: 1px solid #EDEDED;
147
+
148
+}
149
+
150
+ .search-box {
151
+  display: block!important;
152
+  width: 400px;
153
+  margin-bottom: 10px
154
+}
155
+
156
+ .search-box .el-input__inner, .search-box .el-input__inner:focus {
157
+  border-color: #dcdfe6
158
+}
159
+
160
+.cascader-container {
161
+  display: inline-block;
162
+  vertical-align: top;
163
+  background-color: #fff;
164
+  border: 1px solid #dee4f5
165
+}
166
+
167
+.cascader-container.left {
168
+  width: 400px;
169
+  margin-right: 16px
170
+}
171
+
172
+.cascader-container.right {
173
+  width: 200px
174
+}
175
+
176
+.cascader-title {
177
+  height: 40px;
178
+  padding: 0 12px;
179
+  font-size: 14px;
180
+  line-height: 40px;
181
+  color: #333;
182
+  background-color: #fafafa;
183
+  border-bottom: 1px solid #dee4f5
184
+}
185
+
186
+.cascader-title .tab-label {
187
+  cursor: pointer
188
+}
189
+
190
+.cascader-title .tab-label:first-child {
191
+  margin-right: 16px
192
+}
193
+
194
+.cascader-title .tab-label.active {
195
+  font-weight: 700;
196
+  color: #197afb;
197
+  border-bottom: 2px solid #197afb
198
+}
199
+
200
+.cascader-title .tab-label.is-hidden {
201
+  display: none
202
+}
203
+
204
+.clear {
205
+  float: right;
206
+  color: #598fe6;
207
+  text-decoration: none;
208
+  cursor: pointer
209
+}
210
+
211
+.cascader-list {
212
+  width: 100%;
213
+  height: 236px;
214
+  overflow: auto;
215
+  font-size: 14px
216
+}
217
+
218
+.depart-tree .el-tree-node {
219
+  padding: 0 10px;
220
+  margin-top: 10px
221
+}
222
+
223
+.depart-tree .el-tree-node__content,.depart-tree .el-upload-list__item {
224
+  background-color: transparent
225
+}
226
+
227
+.depart-tree .el-tree-node:focus>.el-tree-node__content {
228
+  width: 100%;
229
+  background-color: transparent
230
+}
231
+
232
+.choose-member {
233
+  padding: 3px 10px;
234
+  cursor: pointer
235
+}
236
+
237
+.choose-member .choose {
238
+  display: flex;
239
+  flex-direction: row;
240
+  align-items: center;
241
+  justify-content: space-between;
242
+  padding: 5px 10px;
243
+  color: #666;
244
+  background-color: #f2f3f6
245
+}
246
+
247
+.choose-member .choose .icon-right {
248
+  display: inline-block;
249
+  width: 15px;
250
+  height: 15px
251
+}
252
+
253
+.member-parent {
254
+  display: flex;
255
+  flex-direction: row
256
+}
257
+
258
+.member-parent .member-left {
259
+  box-sizing: border-box;
260
+  width: 200px;
261
+  height: 100%;
262
+  padding-top: 8px;
263
+  padding-right: 10px;
264
+  padding-left: 10px;
265
+  overflow: auto
266
+}
267
+
268
+.member-parent .member-right {
269
+  flex: 1;
270
+  height: 100%;
271
+  padding-top: 8px;
272
+  padding-right: 10px;
273
+  padding-left: 10px;
274
+  overflow: auto;
275
+  border-left: 1px solid #dee4f5
276
+}
277
+
278
+.member-parent .member-right .tipbox {
279
+  display: flex;
280
+  flex-direction: row;
281
+  align-items: center;
282
+  justify-content: center;
283
+  width: 100%;
284
+  height: 100%;
285
+  font-size: 12px;
286
+  color: #909399
287
+}
288
+
289
+.member-tree .custom-tree-node {
290
+  width: 100%;
291
+  font-size: 12px;
292
+  -webkit-user-select: none;
293
+  -moz-user-select: none;
294
+  -ms-user-select: none;
295
+  user-select: none
296
+}
297
+
298
+.member-tree .custom-tree-node.active {
299
+  color: #197afb;
300
+  background-color: #f3f9ff;
301
+  border-radius: 3px
302
+}
303
+
304
+.member-tree .custom-tree-node .mg-icon-department,.member-tree .custom-tree-node .mg-icon-line {
305
+  margin-right: 6px;
306
+  font-size: 12px
307
+}
308
+
309
+.member-tree .custom-tree-node,.member-tree .el-tree-node__label {
310
+  overflow: hidden;
311
+  font-size: 14px;
312
+  text-indent: 8px;
313
+  text-overflow: ellipsis;
314
+  white-space: nowrap
315
+}
316
+
317
+.member-tree .el-tree-node__content {
318
+  height: 32px;
319
+  font-size: 14px;
320
+  line-height: 32px
321
+}
322
+
323
+.member-tree .el-tree-node__content:hover,.member-tree .el-upload-list__item:hover {
324
+  background-color: transparent
325
+}
326
+
327
+.member-tree .el-tree-node:focus>.el-tree-node__content {
328
+  width: 100%;
329
+  background-color: transparent
330
+}
331
+
332
+.member-tree .el-tree-node__content>.el-tree-node__expand-icon {
333
+  padding: 4px
334
+}
335
+
336
+.self-check .el-checkbox__label {
337
+  width: 100%;
338
+  font-size: 14px;
339
+  line-height: 32px
340
+}
341
+
342
+.display[data-v-7272e714] {
343
+  display: flex;
344
+  align-items: center
345
+}
346
+
347
+.hold[data-v-7272e714] {
348
+  width: 100%;
349
+  padding: 16px 0;
350
+  font-size: 12px;
351
+  color: #999;
352
+  text-align: center
353
+}
354
+
355
+.pricelimit[data-v-7272e714] {
356
+  padding: 6px 12px;
357
+  border: 1px solid #dcdfe6;
358
+  border-radius: 3px
359
+}
360
+
361
+.pricelimit .pricelimit-list[data-v-7272e714] {
362
+  display: flex;
363
+  align-items: center;
364
+  margin: 16px 0;
365
+  font-size: 14px
366
+}
367
+
368
+.pricelimit .pricelimit-list .tab-select[data-v-7272e714] {
369
+  width: 170px;
370
+  margin: 0 8px
371
+}
372
+
373
+.pricelimit .pricelimit-list .delete-icon[data-v-7272e714] {
374
+  font-size: 20px;
375
+  color: #999;
376
+  cursor: pointer
377
+}
378
+
379
+.pricelimit .addnew[data-v-7272e714] {
380
+  width: 100px;
381
+  font-size: 12px;
382
+  color: #197afb;
383
+  cursor: pointer
384
+}
385
+
386
+.pricelimit[data-v-7272e714] .el-form .el-form-item {
387
+  margin-bottom: 0!important
388
+}
389
+
390
+[data-v-1eec231b] .el-select .el-input__inner {
391
+  width: auto;
392
+  margin-left: 0
393
+}
394
+
395
+[data-v-1eec231b] .el-select .el-select__tags {
396
+  flex-wrap: nowrap
397
+}
398
+
399
+[data-v-1eec231b] .el-select .el-select__tags>span {
400
+  display: contents;
401
+  width: 100%
402
+}
403
+
404
+[data-v-1eec231b] .el-select .el-select__tags .el-tag {
405
+  height: 32px;
406
+  overflow: hidden;
407
+  line-height: 32px;
408
+  background-color: transparent;
409
+  border: 0 none
410
+}
411
+
412
+[data-v-1eec231b] .el-select .el-select__tags .el-tag .el-select__tags-text {
413
+  display: inline-block;
414
+  overflow: hidden;
415
+  font-size: 14px;
416
+  color: #666;
417
+  text-overflow: ellipsis;
418
+  white-space: nowrap
419
+}
420
+
421
+[data-v-1eec231b] .el-select .el-select__tags .el-tag .el-tag__close {
422
+  display: none
423
+}
424
+
425
+[data-v-1eec231b] .el-select .el-select__tags .el-select__input {
426
+  height: 32px;
427
+  margin-left: 0;
428
+  line-height: 32px
429
+}
430
+
431
+[data-v-1eec231b] .el-select.all-filter.el-select--small .el-input .el-input__inner {
432
+  height: 32px!important
433
+}
434
+
435
+[data-v-1eec231b] .el-select.all-filter.el-select--small .el-select__tags .el-select__input {
436
+  margin-left: 15px
437
+}
438
+
439
+[data-v-1eec231b] .el-select.all-filter.el-select--small .el-input__suffix {
440
+  height: 32px
441
+}
442
+
443
+.disable-icon[data-v-1eec231b] {
444
+  float: right;
445
+  width: 45px;
446
+  height: 24px;
447
+  margin-top: 5px;
448
+  margin-right: 20px;
449
+  font-size: 12px;
450
+  line-height: 24px;
451
+  color: #999;
452
+  text-align: center;
453
+  background-color: #e8eaec;
454
+  border-radius: 8px
455
+}
456
+
457
+</style>

+ 124 - 0
src/components/businessMoudle/adAccountGroup/index.vue

@@ -0,0 +1,124 @@
1
+<template>
2
+  <div class="screenBox flex">
3
+    <Input ref="InputRef_text" title="分组名称" placeholderTxt="分组名称" @changeEvent="init()" @clearEvent="init()"/>
4
+    <Select ref="statusRef" title="状态" @changeEvent="init()" @clearEvent="init()" 
5
+      :options="statusList.list" />
6
+    <el-button type="primary" class="lMarauto"  @click="addEvent()">新增账号组</el-button>
7
+  </div>
8
+
9
+  <!--  列表-->
10
+  <TableList
11
+      ref="tableListRef"
12
+      :tableData="tableInfo.tableList"
13
+      :descol="tableInfo.descolList"
14
+      :total="total"
15
+      @init="init"
16
+  >
17
+    <template v-slot:operate="slotProps">
18
+      <div class="text-center">
19
+        <span class="operate_text lMar8 pointer" @click="addEvent(slotProps.row)">编辑</span>
20
+        <Popconfirm @confirm="deleEvent(slotProps.row)"/>
21
+      </div>
22
+    </template>
23
+  </TableList>
24
+
25
+  <!--  添加分组-->
26
+  <AddGroup ref="AddGroupRef" @init="init"></AddGroup>
27
+</template>
28
+<script setup lang="ts">
29
+import {nextTick, onMounted, reactive, ref, getCurrentInstance} from 'vue'
30
+import Input from '@/components/capsulationMoudle/_input.vue'
31
+import Popconfirm from '@/components/capsulationMoudle/_popconfirm.vue'
32
+import Select from '@/components/capsulationMoudle/_select.vue'
33
+import TableList from '@/components/capsulationMoudle/tableList.vue'
34
+import {adGroupParams, adqParam, departParams, reactiveTableAndAny} from "@/api/ApiModel";
35
+import {Api} from "@/api/api";
36
+import {ElMessage} from "element-plus";
37
+import { publicTableTs } from '@/components/businessMoudle/tableInfo'
38
+import AddGroup from '@/components/businessMoudle/adAccountGroup/dialog/addGroup.vue'
39
+
40
+const { proxy } = getCurrentInstance() as any;
41
+
42
+
43
+// 表格数据公共ts
44
+const descolParams = reactive([
45
+  { name:'账号组名称',column:'name',},
46
+  { name:'操作人',column:'admin',},
47
+  { name:'所属投手',column:'promoter',},
48
+  { name:'创建时间',column:'created_at',},
49
+  { name:'更新时间',column:'updated_at',},
50
+  { name:'操作',column:'operate',slotFlag: true},
51
+])
52
+const { tableInfo,tableListRef,total } = publicTableTs(descolParams)
53
+
54
+const addEvent = (item?:any) => {
55
+  console.log(item)
56
+  nextTick(()=>{
57
+    AddGroupRef.value!.switchShow(true,item||'')
58
+  })
59
+}
60
+
61
+const AddGroupRef = ref<{switchShow:(val:boolean,info?:any)=>void}>()
62
+
63
+const InputRef_text = ref<{value:string}>()
64
+
65
+const statusRef = ref<{value:number}>()
66
+
67
+const statusList = reactive({
68
+  list: [
69
+    {value: 0, label: '已禁用' },
70
+    {value: 1, label: '正常' },
71
+]
72
+})
73
+
74
+//账号列表
75
+const init = async (page?:any,pageSize?:any) => {
76
+  tableListRef.value!.loading = true
77
+  const paramsModel = reactive({
78
+    keyword:InputRef_text.value!.value,
79
+    status: statusRef.value!.value,
80
+    page: page ? page : 1,
81
+    page_size: pageSize ? pageSize : 20,
82
+  })
83
+  let res:any = await proxy.$http.get(Api.ad_account_group_list,paramsModel)
84
+  tableListRef.value!.loading = false
85
+  if(res&&res.errNo=='0'){
86
+    tableInfo.tableList = res.rst.data
87
+    total.value = res.rst.pageInfo.total
88
+  }else{
89
+    ElMessage.error(res.errMsg)
90
+  }
91
+}
92
+
93
+const deleEvent = async (item:any) => {
94
+  tableListRef.value!.loading = true
95
+  const paramsModel = reactive<adGroupParams>({
96
+    group_id:item.id,
97
+    status: 1-item.status
98
+  })
99
+  let res:any = await proxy.$http.get(Api.ad_account_group_convert,paramsModel)
100
+  tableListRef.value!.loading = false
101
+  ElMessage.info(res.errMsg)
102
+  if(res&&res.errNo=='0'){
103
+    await init()
104
+  }
105
+}
106
+
107
+onMounted( async ()=>{
108
+  await init()
109
+})
110
+</script>
111
+<style lang="scss" scoped>
112
+.dialogBox{
113
+  :deep(.el-input__wrapper){
114
+    background: #F9F9F9;
115
+    border-radius: 5px;
116
+    border: 1px solid #F1F1F1;
117
+    height: 45px;
118
+    box-shadow:none;
119
+  }
120
+}
121
+.screenArea{
122
+  margin-bottom: 8px;
123
+}
124
+</style>

+ 9 - 12
src/components/businessMoudle/oeAdAccount/index.vue

@@ -39,7 +39,7 @@ import { nextTick, onMounted, reactive, ref, getCurrentInstance } from 'vue'
39 39
 import Popconfirm from '@/components/capsulationMoudle/_popconfirm.vue'
40 40
 import TableList from '@/components/capsulationMoudle/tableList.vue'
41 41
 import Input from '@/components/capsulationMoudle/_input.vue'
42
-import { adqParam, reactiveTableAndAny } from "@/api/ApiModel";
42
+import { reactiveTableAndAny } from "@/api/ApiModel";
43 43
 import { Api } from "@/api/api";
44 44
 import { ElMessage } from "element-plus";
45 45
 import { publicTableTs } from '@/components/businessMoudle/tableInfo'
@@ -54,10 +54,11 @@ const { proxy } = getCurrentInstance() as any;
54 54
 
55 55
 const typeList = reactive({
56 56
   list: [
57
-  {id:'ACCOUNT_ROLE_TYPE_ADVERTISER', name: '广告主' },
58
-  // {id:'ACCOUNT_ROLE_TYPE_AGENCY', name: '代理商' },
57
+  {id:'ADVERTISER', name: '广告主' },
58
+  {id:'CUSTOMER_ADMIN', name: '纵横组织' },
59
+  {id:'UNCLAIMED', name: '仓库' },
59 60
 ],
60
-typeAc: 'ACCOUNT_ROLE_TYPE_ADVERTISER'
61
+  typeAc: 'CUSTOMER_ADMIN'
61 62
 })
62 63
 const switchTypeItem = (info)=>{
63 64
   typeList.typeAc = info.id
@@ -84,10 +85,6 @@ const { tableInfo, tableListRef, total } = publicTableTs(descolParams)
84 85
 
85 86
 
86 87
 const pageInfo = reactive<reactiveTableAndAny>({
87
-  getTypeList: [
88
-    { label: '微信MP', value: 1 },
89
-    { label: '广点通', value: 2 },
90
-  ],
91 88
   createrList: [],
92 89
 })
93 90
 
@@ -105,12 +102,12 @@ const authEvent = async () => {
105 102
 }
106 103
 
107 104
 const InputRef_text = ref<{ value: string }>()
108
-const ideaManRef = ref<{ value: string | number }>()
109
-const ctypeRef = ref<{ value: string | number }>()
105
+
110 106
 //账号列表
111 107
 const init = async (page?: any, pageSize?: any) => {
112 108
   tableListRef.value!.loading = true
113
-  const paramsModel = reactive<adqParam>({
109
+  const paramsModel = reactive({
110
+    type: typeList.typeAc,
114 111
     keyword: InputRef_text.value!.value,
115 112
     page: page ? page : 1,
116 113
     page_size: pageSize ? pageSize : 20,
@@ -127,7 +124,7 @@ const init = async (page?: any, pageSize?: any) => {
127 124
 
128 125
 const deleEvent = async (item: any) => {
129 126
   tableListRef.value!.loading = true
130
-  const paramsModel = reactive<adqParam>({
127
+  const paramsModel = reactive({
131 128
     account_id: item.account_id
132 129
   })
133 130
   let res: any = await proxy.$http.post(Api.adq_dele, paramsModel)

+ 9 - 0
src/router/index.ts

@@ -31,6 +31,7 @@ const adTask3 = () => import('@/components/businessMoudle/adTask3/index.vue')
31 31
 const menuList = () => import('@/components/businessMoudle/menu/index.vue')
32 32
 const document = () => import('@/components/document/index.vue')
33 33
 const oeAdAccount = () => import('@/components/businessMoudle/oeAdAccount/index.vue')
34
+const adAccountGroup = () => import('@/components/businessMoudle/adAccountGroup/index.vue')
34 35
 
35 36
 //数据报表
36 37
 const acStatement = () => import('@/components/businessMoudle/dataManagement/acStatement/index.vue')
@@ -260,6 +261,14 @@ const constantRoutes: Array<RouteRecordRaw> = [
260 261
           title: '广告账户管理'
261 262
         }
262 263
       },
264
+      {
265
+        path: '/adAccountGroup',
266
+        component: adAccountGroup,
267
+        name: 'adAccountGroup',
268
+        meta: {
269
+          title: '账户组'
270
+        }
271
+      },
263 272
     ],
264 273
   },
265 274
 ]