xiuli.gao 1 year ago
parent
commit
efdd4f69a1
75 changed files with 467 additions and 214 deletions
  1. 1 0
      dist/assets/index.1d2000c0.js
  2. 0 1
      dist/assets/index.2c98265c.js
  3. 1 1
      dist/assets/index.0d9e1d9e.css
  4. 1 1
      dist/assets/index.f057110d.css
  5. 1 1
      dist/assets/index.3e3316e6.css
  6. 0 1
      dist/assets/nprogress.18a10d8a.css
  7. 9 5
      dist/index.html
  8. 1 1
      dist/js/_dialog/_dialog.3b198b10.js
  9. 1 1
      dist/js/_input/_input.cd6d6444.js
  10. 1 0
      dist/js/_popconfirm/_popconfirm.64aa59a9.js
  11. 0 1
      dist/js/_popconfirm/_popconfirm.aa9205c7.js
  12. 1 1
      dist/js/_select/_select.4c12a152.js
  13. 1 0
      dist/js/adTask/index.cbd45a94.js
  14. 0 1
      dist/js/adTask/index.f0b77ebe.js
  15. 0 1
      dist/js/adqManage/index.a8f1f445.js
  16. 1 0
      dist/js/adqManage/index.de15f3b1.js
  17. 0 1
      dist/js/basisMoudle/error.562d041b.js
  18. 1 0
      dist/js/basisMoudle/error.58cd3f7a.js
  19. 0 1
      dist/js/basisMoudle/home.11f0e737.js
  20. 1 0
      dist/js/basisMoudle/home.daf0d5a3.js
  21. 0 1
      dist/js/basisMoudle/login.12846ad5.js
  22. 1 0
      dist/js/basisMoudle/login.cc297776.js
  23. 1 0
      dist/js/collectClip/index.0a8fe2b0.js
  24. 0 1
      dist/js/collectClip/index.284ae1c3.js
  25. 5 0
      dist/js/configArea/index.45207fa3.js
  26. 0 5
      dist/js/configArea/index.7f0d480c.js
  27. 0 1
      dist/js/define/define.2b78a727.js
  28. 1 0
      dist/js/define/define.33cb41c8.js
  29. 0 1
      dist/js/gdtList/index.73642508.js
  30. 1 0
      dist/js/gdtList/index.ec6faf95.js
  31. 1 1
      dist/js/index/index.44c9297a.js
  32. 1 1
      dist/js/index/index.0a0a2ab7.js
  33. 0 1
      dist/js/layout/index.acd3cc1a.js
  34. 1 0
      dist/js/layout/index.dc9a2511.js
  35. 1 0
      dist/js/layout/index_head.461aeff8.js
  36. 0 1
      dist/js/layout/index_head.48ea945d.js
  37. 1 0
      dist/js/limitManage/index.1223dcb7.js
  38. 0 1
      dist/js/limitManage/index.8aa0cae7.js
  39. 1 1
      dist/js/materialBlock/materialBlock.a77c07c6.js
  40. 0 1
      dist/js/materialLibrary/index.a95dbf38.js
  41. 1 0
      dist/js/materialLibrary/index.d5e05213.js
  42. 1 0
      dist/js/memberManage/index.632e8885.js
  43. 0 1
      dist/js/memberManage/index.6c8a27a1.js
  44. 1 0
      dist/js/menu/index.1d4ad377.js
  45. 0 1
      dist/js/menu/index.4e7c675e.js
  46. 1 0
      dist/js/miniprogram/index.8616d508.js
  47. 0 1
      dist/js/miniprogram/index.9e5a9f07.js
  48. 1 0
      dist/js/noData/noData.0d27fe5d.js
  49. 0 1
      dist/js/noData/noData.38cf0abe.js
  50. 0 3
      dist/js/nprogress/nprogress.b93c8c22.js
  51. 0 1
      dist/js/projectManage/index.5c328235.js
  52. 1 0
      dist/js/projectManage/index.c0096bb3.js
  53. 1 1
      dist/js/radioGroup/radioGroup.31dd59f5.js
  54. 1 1
      dist/js/tableInfo/tableInfo.b2a870ab.js
  55. 1 0
      dist/js/taskList/index.88a1db09.js
  56. 0 1
      dist/js/taskList/index.b1b38eeb.js
  57. 1 1
      dist/js/timeScreen/timeScreen.8ac3a6f1.js
  58. 1 1
      dist/js/weekTime/weekTime.22a34e7c.js
  59. 7 1
      index.html
  60. 14 0
      src/components/businessMoudle/adTask/index.vue
  61. 16 0
      src/components/businessMoudle/adTask/ts/api.ts
  62. 1 1
      src/components/businessMoudle/adTask/ts/define.ts
  63. 2 2
      src/components/businessMoudle/batchGdt/configArea/copywriter/writerDialog.vue
  64. 1 1
      src/components/businessMoudle/batchGdt/configArea/copywriter/writerHelper.vue
  65. 77 21
      src/components/businessMoudle/batchGdt/configArea/index.vue
  66. 7 1
      src/components/businessMoudle/batchGdt/configArea/originalityBasic/components/floatingZoneStruct.vue
  67. 167 103
      src/components/businessMoudle/batchGdt/configArea/ts/strategyGroups.ts
  68. 10 0
      src/components/businessMoudle/batchGdt/configArea/ts/submitPreview.ts
  69. 30 2
      src/components/businessMoudle/batchGdt/previewArea/api.ts
  70. 34 2
      src/components/businessMoudle/batchGdt/previewArea/index.vue
  71. 13 2
      src/components/businessMoudle/gdtList/advert.vue
  72. 14 4
      src/components/businessMoudle/textLibrary/index.vue
  73. 1 1
      src/components/capsulationMoudle/_popconfirm.vue
  74. 7 7
      src/router/index.ts
  75. 19 19
      src/utils/nporgress.ts

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


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


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


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


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


File diff suppressed because it is too large
+ 0 - 1
dist/assets/nprogress.18a10d8a.css


+ 9 - 5
dist/index.html

@@ -5,15 +5,20 @@
5 5
     <link rel="icon" href="./favicon.ico" />
6 6
     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
7 7
     <title>广告系统</title>
8
-      <script src="//open.thunderurl.com/thunder-link.js"></script>
9
-    <script type="module" crossorigin src="./assets/index.2c98265c.js"></script>
8
+    <script>
9
+      // <!-- 迅雷下载使用 -->
10
+      (function(){
11
+			var src = "//open.thunderurl.com/thunder-link.js";
12
+			document.write('<script src="' + src + '"><\/script>');
13
+			})();
14
+    </script>
15
+    <script type="module" crossorigin src="./assets/index.1d2000c0.js"></script>
10 16
     <link rel="modulepreload" href="./js/@vue/@vue.e7eafc10.js">
11 17
     <link rel="modulepreload" href="./js/vue-router/vue-router.647267ed.js">
12
-    <link rel="modulepreload" href="./js/axios/axios.27022086.js">
13
-    <link rel="modulepreload" href="./js/nprogress/nprogress.b93c8c22.js">
14 18
     <link rel="modulepreload" href="./js/vue-demi/vue-demi.4f3c4c97.js">
15 19
     <link rel="modulepreload" href="./js/pinia/pinia.cb6cf138.js">
16 20
     <link rel="modulepreload" href="./js/pinia-plugin-persist/pinia-plugin-persist.67085de7.js">
21
+    <link rel="modulepreload" href="./js/axios/axios.27022086.js">
17 22
     <link rel="modulepreload" href="./js/lodash-es/lodash-es.e51fd119.js">
18 23
     <link rel="modulepreload" href="./js/async-validator/async-validator.21881447.js">
19 24
     <link rel="modulepreload" href="./js/@vueuse/@vueuse.ee9511b3.js">
@@ -26,7 +31,6 @@
26 31
     <link rel="modulepreload" href="./js/tslib/tslib.e35f93b8.js">
27 32
     <link rel="modulepreload" href="./js/zrender/zrender.fe59a237.js">
28 33
     <link rel="modulepreload" href="./js/echarts/echarts.5b4b2848.js">
29
-    <link rel="stylesheet" href="./assets/nprogress.18a10d8a.css">
30 34
     <link rel="stylesheet" href="./assets/element-plus.2e14e992.css">
31 35
     <link rel="stylesheet" href="./assets/index.4756ef18.css">
32 36
   </head>

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


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


File diff suppressed because it is too large
+ 1 - 0
dist/js/_popconfirm/_popconfirm.64aa59a9.js


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


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


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


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


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


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


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


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


File diff suppressed because it is too large
+ 0 - 1
dist/js/basisMoudle/home.11f0e737.js


File diff suppressed because it is too large
+ 1 - 0
dist/js/basisMoudle/home.daf0d5a3.js


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


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


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


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


File diff suppressed because it is too large
+ 5 - 0
dist/js/configArea/index.45207fa3.js


File diff suppressed because it is too large
+ 0 - 5
dist/js/configArea/index.7f0d480c.js


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


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


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


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


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


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


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


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


File diff suppressed because it is too large
+ 1 - 0
dist/js/layout/index_head.461aeff8.js


File diff suppressed because it is too large
+ 0 - 1
dist/js/layout/index_head.48ea945d.js


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


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


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


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


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


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


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


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


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


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


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


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


File diff suppressed because it is too large
+ 0 - 1
dist/js/noData/noData.38cf0abe.js


File diff suppressed because it is too large
+ 0 - 3
dist/js/nprogress/nprogress.b93c8c22.js


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


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


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


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


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


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


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


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


+ 7 - 1
index.html

@@ -5,7 +5,13 @@
5 5
     <link rel="icon" href="/favicon.ico" />
6 6
     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
7 7
     <title>广告系统</title>
8
-      <script src="//open.thunderurl.com/thunder-link.js"></script>
8
+    <script>
9
+      // <!-- 迅雷下载使用 -->
10
+      (function(){
11
+			var src = "//open.thunderurl.com/thunder-link.js";
12
+			document.write('<script src="' + src + '"><\/script>');
13
+			})();
14
+    </script>
9 15
   </head>
10 16
   <body>
11 17
     <div id="app"></div>

+ 14 - 0
src/components/businessMoudle/adTask/index.vue

@@ -56,6 +56,7 @@
56 56
           </div>
57 57
           <div v-else-if="item.prop == 'operate'">
58 58
             <span class="opt-link rMar10 pointer" @click="goDetail(scope.row.id)"> 详情 </span>
59
+            <span class="opt-link rMar10 pointer" @click="goCopyTask(scope.row.id)"> 复制 </span>
59 60
             <el-popconfirm title="确定要删除该任务?" @confirm="deleteTask(scope.row.id)">
60 61
               <template #reference>
61 62
                 <span class="opt-link pointer"> 删除 </span>
@@ -94,6 +95,8 @@ import { getTaskList, adTaskDel, adTaskEdit } from './ts/api'
94 95
 import { ElMessage } from 'element-plus'
95 96
 import EditTaskName from './dialog/editTaskName.vue'
96 97
 import Detail from './detail/index.vue'
98
+import { useRouter } from "vue-router";
99
+const router = useRouter();
97 100
 
98 101
 const {
99 102
   DetailRef,
@@ -146,6 +149,17 @@ const goDetail = (id) => {
146 149
   DetailRef.value?.switchShow(true, id)
147 150
 }
148 151
 
152
+/**去复制 */
153
+const goCopyTask = (id) => {
154
+  let newPage:any = router.resolve({
155
+    path: '/gdtList/batchGdt',
156
+    query: {
157
+      task_id: id,
158
+    }
159
+  })
160
+  window.open(newPage.href, "_blank")
161
+}
162
+
149 163
 /**删除任务 */
150 164
 const deleteTask = (id) => {
151 165
   loading.value = true

+ 16 - 0
src/components/businessMoudle/adTask/ts/api.ts

@@ -86,4 +86,20 @@ export function taskDetail(params: ITaskDetail) {
86 86
       reject()
87 87
     }
88 88
   })
89
+}
90
+
91
+/**通过任务ID获取复制信息 */
92
+interface IgetStrategyByTaskId {
93
+  task_id: string
94
+}
95
+export function getStrategyByTaskId(params: IgetStrategyByTaskId) {
96
+  return new Promise(async (resolve,reject)=>{
97
+    const res: any = await http.get('/api/ad/getStrategyByTaskId', params)
98
+    if (res.errNo == 0) {
99
+      resolve(res.rst)
100
+    } else {
101
+      ElMessage.error(res.errMsg)
102
+      reject()
103
+    }
104
+  })
89 105
 }

+ 1 - 1
src/components/businessMoudle/adTask/ts/define.ts

@@ -23,7 +23,7 @@ const tableInfo = reactive({
23 23
     { prop: 'ad_count', label: '提交广告数量', fixed: '' },
24 24
     { prop: 'created_at', label: '创建时间', fixed: '' },
25 25
     { prop: 'status', label: '执行状态', note: '当状态为绿色提交完成时,则包含的所有提交均为成功<br/>当状态为红色提交完成时,则包含的提交中有失败项', fixed: '', width: '130px' },
26
-    { prop: 'operate', label: '操作', fixed: 'right', width: '60px' },
26
+    { prop: 'operate', label: '操作', fixed: 'right', width: '80px' },
27 27
   ],
28 28
   currentPage:1,
29 29
   pageSize:20,

+ 2 - 2
src/components/businessMoudle/batchGdt/configArea/copywriter/writerDialog.vue

@@ -1,6 +1,6 @@
1 1
 <template>
2 2
   <el-dialog class="gdt-dialog" :close-on-click-modal="false" :destroy-on-close="true" key="copywriterDialog"
3
-    v-model="visible" title="选择标签" width="800px" top="40px" :before-close="handleClose">
3
+    v-model="visible" title="选择标签" width="1000px" top="40px" :before-close="handleClose">
4 4
     <div v-loading="loading">
5 5
       <div class="flex marT15">
6 6
         <label class="form-block-item-title">多文案测试</label>
@@ -54,7 +54,7 @@
54 54
         </div>
55 55
       </div>
56 56
       <div class="fix-table" v-if="multiCopyTesting == 1">
57
-        <TextLibrary ref="TextLibraryRef" source="writerHelper" :select_num="count_info?.adNum" @select="selectEvent"></TextLibrary>
57
+        <TextLibrary ref="TextLibraryRef" tableHeight="30vh" tableSize="small" source="writerHelper" :select_num="count_info?.adNum" @select="selectEvent"></TextLibrary>
58 58
       </div>
59 59
 
60 60
     </div>

+ 1 - 1
src/components/businessMoudle/batchGdt/configArea/copywriter/writerHelper.vue

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
 <el-dialog class="gdt-dialog" :close-on-click-modal="false" v-model="visible" title="创意文案" width="1000px" top="40px"
3 3
 :before-close="handleClose">
4
-  <TextLibrary source="writerHelper" :select_num="1" @select="selectEvent"></TextLibrary>
4
+  <TextLibrary source="writerHelper" tableSize="small" tableHeight="50vh" :select_num="1" @select="selectEvent"></TextLibrary>
5 5
   <template #footer>
6 6
     <div class="dialog-footer" style="text-align: right;padding:10px">
7 7
       <el-button @click="handleClose"> 取 消 </el-button>

+ 77 - 21
src/components/businessMoudle/batchGdt/configArea/index.vue

@@ -204,7 +204,7 @@ import CreativeMaterial from '@/components/businessMoudle/batchGdt/configArea/cr
204 204
 import ResuseConfig from '@/components/businessMoudle/batchGdt/configArea/resuseConfig/index.vue'
205 205
 import PreviewArea from '@/components/businessMoudle/batchGdt/previewArea/index.vue'
206 206
 import { Api } from "@/api/api";
207
-import { ElMessage } from "element-plus";
207
+import { ElLoading, ElMessage } from "element-plus";
208 208
 import BasicInfo from "./basicInfo/index.vue";
209 209
 import ExpandPopulation from './basicInfo/expandPopulation.vue'
210 210
 import AttributionOuter from './basicInfo/attributionOuter.vue'
@@ -227,7 +227,10 @@ import StrategyGroupsList from './strategyGroups/list.vue'
227 227
 import StrategyGroupsDialog from './strategyGroups/saveDialog.vue'
228 228
 import { strategyGroupsEvent } from './ts/strategyGroups'
229 229
 import { IUpdateHaveContent } from "./ts/interface";
230
-
230
+import { useRoute } from "vue-router";
231
+import { getAccountStatus } from "./strategyGroups/ts/api";
232
+import { getStrategyByTaskId } from "../../adTask/ts/api";
233
+const route = useRoute();
231 234
 const { proxy } = getCurrentInstance() as any;
232 235
 // 全局方法定义
233 236
 const NumberHandle = proxy.$NumberHandle
@@ -590,24 +593,6 @@ const clearOriginalityInfo = () => {
590 593
   updateHaveContent({ id: 5, clearFlag: true })
591 594
 }
592 595
 
593
-
594
-onMounted(() => {
595
-  nextTick(async () => {
596
-    await get_ruleConfig_info() //规则配置获取
597
-    //获取推广目标类型
598
-    await getPromotedObjectType().then((res) => {
599
-      pageInfo.targetList = res
600
-      if (targetRef.value) {
601
-        targetRef.value.value = pageInfo.targetList[0].name
602
-      }
603
-      pageInfo.targetValue = targetRef.value?.value
604
-    })
605
-    get_account_list()
606
-    getAdPresetsInfo(); // 广告预存信息获取
607
-  })
608
-})
609
-
610
-
611 596
 // S 每个模块判断是否可添加编辑
612 597
 const {
613 598
   judgeEvent
@@ -691,6 +676,8 @@ const {
691 676
 } = submitPreview({
692 677
   pageInfo,
693 678
   basicInfoData,
679
+  originalityBasicInfoData,
680
+  cMaterial,
694 681
   judgeEvent,
695 682
   computeCount,
696 683
   aNewConfigEvent
@@ -704,7 +691,8 @@ const {
704 691
   openStrategyGroups,
705 692
   openSaveStrategyGroups,
706 693
   closeSeletedGroup,
707
-  strategyGroupsUse
694
+  strategyGroupsUse,
695
+  strategyGroupsConfig
708 696
 } = strategyGroupsEvent({
709 697
   DirectPacketExhibitionRef,
710 698
   LandPageRef,
@@ -726,6 +714,74 @@ const {
726 714
 })
727 715
 /**E 策略组 */
728 716
 
717
+/**广告详情 */
718
+const adsDetail = async (adgroup_id) => {
719
+  const loading = ElLoading.service({
720
+    lock: true,
721
+    text: '复用配置中,请稍后...',
722
+    background: 'rgba(0, 0, 0, 0.7)',
723
+  })
724
+  const paramsModel = reactive({
725
+    adgroup_id: adgroup_id
726
+  })
727
+  let res:any = await proxy.$http.get(Api.advert_adsDetail,paramsModel)
728
+  loading.close()
729
+  if(res&&res.errNo=='0'){
730
+    if(res.rst.strategy && res.rst.strategy != '') {
731
+      await getAccountStatus({ account_ids: res.rst.account_id })
732
+      strategyGroupsConfig(res.rst.strategy, res.rst)
733
+    }else{
734
+      ElMessage.error('未获取到内容,复制失败!')
735
+    }
736
+  }else{
737
+    ElMessage.error(res.errMsg)
738
+  }
739
+}
740
+
741
+/**通过任务ID获取复制内容 */
742
+const getStrategyByTaskIdEvent = (id) => {
743
+  const loading = ElLoading.service({
744
+    lock: true,
745
+    text: '复用配置中,请稍后...',
746
+    background: 'rgba(0, 0, 0, 0.7)',
747
+  })
748
+  getStrategyByTaskId({task_id: id}).then(async (res:any)=>{
749
+    loading.close()
750
+    if(!res){
751
+      ElMessage.error('未获取到内容,复制失败!')
752
+      return
753
+    }
754
+    await getAccountStatus({ account_ids: res.account_ids })
755
+    strategyGroupsConfig(res)
756
+  }).catch(()=>{
757
+    loading.close()
758
+  })
759
+}
760
+
761
+onMounted(() => {
762
+  nextTick(async () => {
763
+    await get_ruleConfig_info() //规则配置获取
764
+    //获取推广目标类型
765
+    await getPromotedObjectType().then((res) => {
766
+      pageInfo.targetList = res
767
+      if (targetRef.value) {
768
+        targetRef.value.value = pageInfo.targetList[0].name
769
+      }
770
+      pageInfo.targetValue = targetRef.value?.value
771
+    })
772
+    get_account_list()
773
+    getAdPresetsInfo(); // 广告预存信息获取
774
+
775
+    
776
+    if(route.query.adgroup_id){//从广告点击了复制
777
+      adsDetail(route.query.adgroup_id)
778
+    }else if(route.query.task_id){//从任务列表点击了复制
779
+      getStrategyByTaskIdEvent(route.query.task_id)
780
+    }else{
781
+    }
782
+  })
783
+})
784
+
729 785
 //传值
730 786
 provide('accountIds', toRef(pageInfo, 'accIdsList'))
731 787
 

+ 7 - 1
src/components/businessMoudle/batchGdt/configArea/originalityBasic/components/floatingZoneStruct.vue

@@ -97,7 +97,10 @@ onBeforeMount(()=>{
97 97
   let child = props.adTemplateItem?.adcreative_elements?.floating_zone_struct?.child
98 98
   if(child){
99 99
     for(let key in child){
100
-      if(child[key].required){
100
+      // if(key == 'floating_zone_switch'){
101
+      //   floating_zone_switch.value = child[key].required
102
+      // }
103
+      if(child[key].required && key != 'floating_zone_switch'){
101 104
         floating_zone_struct.value.required = true
102 105
       }
103 106
     } 
@@ -144,6 +147,9 @@ const radioChange = () => {
144 147
           obj.api_value['floating_zone_struct']['image_id_obj'] = material.value
145 148
         }
146 149
       }
150
+    }else{
151
+      obj.api_value['floating_zone_struct'] = {}
152
+      obj.api_value['floating_zone_struct']['floating_zone_switch'] = floating_zone_switch.value
147 153
     }
148 154
     emit('backhaul', {'floating_zone_struct': obj})
149 155
   }

+ 167 - 103
src/components/businessMoudle/batchGdt/configArea/ts/strategyGroups.ts

@@ -82,118 +82,181 @@ export const strategyGroupsEvent = ({
82 82
       id: info.id
83 83
     }).then(async (res: any) => {
84 84
       loading.close()
85
-      if (res.rule_conf && isObject(JSON.parse(res.rule_conf))) {//规则配置
86
-        pageInfo.RuleConfigObj = JSON.parse(res.rule_conf)
87
-      }
88
-      if (res.ad_base && isObject(JSON.parse(res.ad_base))) {//广告基本信息
89
-        basicInfoData.fillBack = JSON.parse(res.ad_base)
90
-        getAdPresetsInfo('strategyGroups', basicInfoData.fillBack)
91
-      }
92
-      if (res?.account_ids && accValue.value) {//媒体账户
85
+      strategyGroupsConfig(res)
86
+    }).catch((err) => {
87
+      console.log(err)
88
+      pageInfo.groupsConfig = {}
89
+      ElMessage.error('策略组配置失败!')
90
+      loading.close()
91
+    })
92
+  }
93
+
94
+  /**策略组回调配置 */
95
+  const strategyGroupsConfig = async (res, adsDetailRes?) => {
96
+    if (res.rule_conf && isObject(JSON.parse(res.rule_conf))) {//规则配置
97
+      pageInfo.RuleConfigObj = JSON.parse(res.rule_conf)
98
+    }
99
+    if (res.ad_base && isObject(JSON.parse(res.ad_base))) {//广告基本信息
100
+      basicInfoData.fillBack = JSON.parse(res.ad_base)
101
+      getAdPresetsInfo('strategyGroups', basicInfoData.fillBack)
102
+    }
103
+    if (res?.account_ids && accValue.value) {//媒体账户
104
+      if(adsDetailRes){//广告复制
105
+        accValue.value = [adsDetailRes.account_id]
106
+      }else{
93 107
         accValue.value = res?.account_ids.split(',')
94
-        pageInfo.accIdsList = res?.account_ids?.split(',')?.map((v) => {
95
-          return { 'name': v, 'id': v }
96
-        })
97
-        pageInfo.accIdsList_copy_last = _.cloneDeep(pageInfo.accIdsList)
98 108
       }
99
-      if (res?.promoted_object_type && targetRef.value) {//推广目标
100
-        pageInfo.targetValue = res?.promoted_object_type
101
-        targetRef.value.value = pageInfo.targetValue;
102
-      }
103
-      if (res?.creative_base) {//创意基本信息
104
-        let creative_base = JSON.parse(res?.creative_base)
105
-        for (let key in originalityBasicInfoData) {
106
-          originalityBasicInfoData[key] = creative_base[key]
107
-        }
108
-        updateHaveContent({ id: 5, chooseNum: 1})
109
-      } else {
110
-        clearOriginalityInfo()
111
-      }
112
-      if (res?.targetings_info) {//定向包
113
-        pageInfo.directObj = JSON.parse(res?.targetings_info)
114
-        if (DirectPacketExhibitionRef.value && DirectPacketExhibitionRef.value[0]) {
115
-          DirectPacketExhibitionRef.value[0].feedbackEvent(pageInfo.directObj)
116
-        }
117
-      } else {
118
-        if (DirectPacketExhibitionRef.value && DirectPacketExhibitionRef.value[0]) {
119
-          DirectPacketExhibitionRef.value[0]?.clearDirectContent()
120
-        }
109
+      pageInfo.accIdsList = accValue.value?.map((v) => {
110
+        return { 'name': v, 'id': v }
111
+      })
112
+      pageInfo.accIdsList_copy_last = _.cloneDeep(pageInfo.accIdsList)
113
+    }
114
+    if (res?.promoted_object_type && targetRef.value) {//推广目标
115
+      pageInfo.targetValue = res?.promoted_object_type
116
+      targetRef.value.value = pageInfo.targetValue;
117
+    }
118
+    if (res?.creative_base) {//创意基本信息
119
+      let creative_base = JSON.parse(res?.creative_base)
120
+      creative_base.params = creative_base.params.filter((v)=>{
121
+        return accValue.value.includes(v.account_id)
122
+      })
123
+      for (let key in originalityBasicInfoData) {
124
+        originalityBasicInfoData[key] = creative_base[key]
121 125
       }
122
-      if (res?.creative_info) {//创意素材
123
-        let creative_info = JSON.parse(res?.creative_info)
124
-        for (let key in cMaterial) {
125
-          cMaterial[key] = creative_info[key]
126
-        }
127
-      } else {
128
-        CreativeMaterial_clear()
126
+      updateHaveContent({ id: 5, chooseNum: 1})
127
+    } else {
128
+      clearOriginalityInfo()
129
+    }
130
+    if (res?.targetings_info) {//定向包
131
+      pageInfo.directObj = JSON.parse(res?.targetings_info)
132
+      pageInfo.directObj.chooseList = pageInfo.directObj.chooseList.filter((v)=>{
133
+        return accValue.value.includes(v.id)
134
+      })
135
+      if (DirectPacketExhibitionRef.value && DirectPacketExhibitionRef.value[0]) {
136
+        DirectPacketExhibitionRef.value[0].feedbackEvent(pageInfo.directObj)
129 137
       }
130
-      if (res?.paperwork) {//文案
131
-        pageInfo.copywriterInfoData = JSON.parse(res?.paperwork)
132
-        if (CopywriterRef.value && CopywriterRef.value[0]) {
133
-          CopywriterRef.value[0].feedbackEvent(_.cloneDeep(pageInfo.copywriterInfoData))
134
-        }
135
-      } else {//清空文案
136
-        updateHaveContent({
137
-          id: 7,
138
-          chooseNum: 0,
139
-          minusFlag: false,
140
-          clearFlag: true
141
-        })
142
-        if (CopywriterRef.value) {
143
-          CopywriterRef.value[0]?.clearEvent()
144
-        }
138
+    } else {
139
+      if (DirectPacketExhibitionRef.value && DirectPacketExhibitionRef.value[0]) {
140
+        DirectPacketExhibitionRef.value[0]?.clearDirectContent()
145 141
       }
146
-      await computeCount()
147
-      if (res?.landing_page) {//落地页
148
-        pageInfo.copyLandPageInfoData = JSON.parse(res?.landing_page)
149
-        if (LandPageRef.value && LandPageRef.value[0]) {
150
-          LandPageRef.value[0].feedbackEvent(_.cloneDeep(pageInfo.copyLandPageInfoData))
151
-        }
152
-      } else {//清空落地页
153
-        if (LandPageRef.value) {
154
-          LandPageRef.value[0]?.clearEvent()
155
-        }
156
-        updateHaveContent({
157
-          id: 8,
158
-          chooseNum: 0,
159
-          minusFlag: false,
160
-          clearFlag: true
161
-        })
142
+    }
143
+    if (res?.creative_info) {//创意素材
144
+      let creative_info = JSON.parse(res?.creative_info)
145
+      creative_info.resResult = creative_info.resResult.filter((v)=>{
146
+        return accValue.value.includes(v.account_id)
147
+      })
148
+      creative_info.list?.forEach((item)=>{
149
+        item.list?.forEach((item1) => {
150
+          item1.resResult = item1.resResult?.filter((v)=>{
151
+            return accValue.value.includes(v.account_id)
152
+          })
153
+        });
154
+      })
155
+      creative_info.list_copy?.forEach((item)=>{
156
+        item.list?.forEach((item1) => {
157
+          item1.resResult = item1.resResult?.filter((v)=>{
158
+            return accValue.value.includes(v.account_id)
159
+          })
160
+        });
161
+      })
162
+      for (let key in cMaterial) {
163
+        cMaterial[key] = creative_info[key]
162 164
       }
163
-      if (res?.user_action_sets) {//精准匹配归因
164
-        basicInfoData.outerConfig.attributionOuter = JSON.parse(res?.user_action_sets)
165
-      } else {
166
-        basicInfoData.outerConfig.attributionOuter.value = {}
167
-        basicInfoData.outerConfig.attributionOuter.other = {}
168
-        basicInfoData.outerConfig.attributionOuter.isComplete = false
165
+    } else {
166
+      CreativeMaterial_clear()
167
+    }
168
+    if (res?.paperwork) {//文案
169
+      pageInfo.copywriterInfoData = JSON.parse(res?.paperwork)
170
+
171
+      if (CopywriterRef.value && CopywriterRef.value[0]) {
172
+        CopywriterRef.value[0].feedbackEvent(_.cloneDeep(pageInfo.copywriterInfoData))
169 173
       }
170
-      if (res?.union_position) {//优量汇
171
-        basicInfoData.outerConfig.unionPosition = JSON.parse(res?.union_position)
172
-      } else {
173
-        basicInfoData.outerConfig.unionPosition.value = {}
174
-        basicInfoData.outerConfig.unionPosition.other = {}
175
-        basicInfoData.outerConfig.unionPosition.isComplete = false
174
+    } else {//清空文案
175
+      updateHaveContent({
176
+        id: 7,
177
+        chooseNum: 0,
178
+        minusFlag: false,
179
+        clearFlag: true
180
+      })
181
+      if (CopywriterRef.value) {
182
+        CopywriterRef.value[0]?.clearEvent()
176 183
       }
177
-      if (res?.start_audience) {//一方助攻人群包
178
-        basicInfoData.outerConfig.targetingPartyData = JSON.parse(res?.start_audience)
179
-      } else {
180
-        basicInfoData.outerConfig.targetingPartyData.value = {}
181
-        basicInfoData.outerConfig.targetingPartyData.other = {}
182
-        basicInfoData.outerConfig.targetingPartyData.isComplete = false
184
+    }
185
+    await computeCount()
186
+    if (res?.landing_page) {//落地页
187
+      let landPageInfo = JSON.parse(res?.landing_page)
188
+      let landData = _.cloneDeep(landPageInfo.data)
189
+      landPageInfo.data = {}
190
+      accValue.value.forEach((item) => {
191
+        landPageInfo.data[item] = landData[item]
192
+      });
193
+      pageInfo.copyLandPageInfoData = landPageInfo
194
+      if (LandPageRef.value && LandPageRef.value[0]) {
195
+        LandPageRef.value[0].feedbackEvent(_.cloneDeep(pageInfo.copyLandPageInfoData))
183 196
       }
184
-      if (res?.wechat_channels) {//视频号
185
-        basicInfoData.outerConfig.weChatVideoAccount = JSON.parse(res?.wechat_channels)
186
-      } else {
187
-        basicInfoData.outerConfig.weChatVideoAccount.value = {}
188
-        basicInfoData.outerConfig.weChatVideoAccount.other = {}
189
-        basicInfoData.outerConfig.weChatVideoAccount.isComplete = false
197
+    } else {//清空落地页
198
+      if (LandPageRef.value) {
199
+        LandPageRef.value[0]?.clearEvent()
190 200
       }
191
-    }).catch((err) => {
192
-      console.log(err)
193
-      pageInfo.groupsConfig = {}
194
-      ElMessage.error('策略组配置失败!')
195
-      loading.close()
196
-    })
201
+      updateHaveContent({
202
+        id: 8,
203
+        chooseNum: 0,
204
+        minusFlag: false,
205
+        clearFlag: true
206
+      })
207
+    }
208
+    if (res?.user_action_sets) {//精准匹配归因
209
+      let user_action_sets = JSON.parse(res?.user_action_sets)
210
+      let user_action_value = _.cloneDeep(user_action_sets.value)
211
+      user_action_sets.value = {}
212
+      accValue.value.forEach((item) => {
213
+        user_action_sets.value[item] = user_action_value[item]
214
+      });
215
+      basicInfoData.outerConfig.attributionOuter = user_action_sets;
216
+    } else {
217
+      basicInfoData.outerConfig.attributionOuter.value = {}
218
+      basicInfoData.outerConfig.attributionOuter.other = {}
219
+      basicInfoData.outerConfig.attributionOuter.isComplete = false
220
+    }
221
+    if (res?.union_position) {//优量汇
222
+      let union_position = JSON.parse(res?.union_position)
223
+      let union_position_value = _.cloneDeep(union_position.value)
224
+      union_position.value = {}
225
+      accValue.value.forEach((item) => {
226
+        union_position.value[item] = union_position_value[item]
227
+      });
228
+      basicInfoData.outerConfig.unionPosition = union_position
229
+    } else {
230
+      basicInfoData.outerConfig.unionPosition.value = {}
231
+      basicInfoData.outerConfig.unionPosition.other = {}
232
+      basicInfoData.outerConfig.unionPosition.isComplete = false
233
+    }
234
+    if (res?.start_audience) {//一方助攻人群包
235
+      let start_audience = JSON.parse(res?.start_audience)
236
+      let start_audience_value = _.cloneDeep(start_audience.value)
237
+      start_audience.value = {}
238
+      accValue.value.forEach((item) => {
239
+        start_audience.value[item] = start_audience_value[item]
240
+      });
241
+      basicInfoData.outerConfig.targetingPartyData = start_audience
242
+    } else {
243
+      basicInfoData.outerConfig.targetingPartyData.value = {}
244
+      basicInfoData.outerConfig.targetingPartyData.other = {}
245
+      basicInfoData.outerConfig.targetingPartyData.isComplete = false
246
+    }
247
+    if (res?.wechat_channels) {//视频号
248
+      let wechat_channels = JSON.parse(res?.wechat_channels)
249
+      let wechat_channels_value = _.cloneDeep(wechat_channels.value)
250
+      wechat_channels.value = {}
251
+      accValue.value.forEach((item) => {
252
+        wechat_channels.value[item] = wechat_channels_value[item]
253
+      });
254
+      basicInfoData.outerConfig.weChatVideoAccount = wechat_channels
255
+    } else {
256
+      basicInfoData.outerConfig.weChatVideoAccount.value = {}
257
+      basicInfoData.outerConfig.weChatVideoAccount.other = {}
258
+      basicInfoData.outerConfig.weChatVideoAccount.isComplete = false
259
+    }
197 260
   }
198 261
   return {
199 262
     StrategyGroupsDialogRef,
@@ -201,6 +264,7 @@ export const strategyGroupsEvent = ({
201 264
     openStrategyGroups,
202 265
     openSaveStrategyGroups,
203 266
     closeSeletedGroup,
204
-    strategyGroupsUse
267
+    strategyGroupsUse,
268
+    strategyGroupsConfig
205 269
   }
206 270
 }

+ 10 - 0
src/components/businessMoudle/batchGdt/configArea/ts/submitPreview.ts

@@ -13,6 +13,8 @@ interface ISubmitPreview {
13 13
 export const submitPreview = ({
14 14
   pageInfo,
15 15
   basicInfoData,
16
+  originalityBasicInfoData,
17
+  cMaterial,
16 18
   judgeEvent,
17 19
   computeCount,
18 20
   aNewConfigEvent
@@ -29,6 +31,7 @@ export const submitPreview = ({
29 31
     num_total: {},//计划数等
30 32
     target: {},//推广目标
31 33
     basicInfoData: {},//广告基本信息
34
+    copyInfo:{},//复制要用的数据
32 35
   })
33 36
   const openPreAreaEvent = () => {
34 37
     if (!judgeEvent(-1) && !isMock.value) { return }
@@ -53,6 +56,13 @@ export const submitPreview = ({
53 56
     })
54 57
   }
55 58
   const openPreEvent = () => {
59
+ 
60
+    previewObj.copyInfo = {//复制要用的数据
61
+      'originalityBasicInfoData' : _.cloneDeep(originalityBasicInfoData),
62
+      'cMaterial': _.cloneDeep(cMaterial),
63
+      'basicInfoData':_.cloneDeep(basicInfoData),
64
+      'pageInfo': _.cloneDeep(pageInfo),
65
+    }
56 66
     previewObj.updateKey++
57 67
     previewObj.accVal = _.cloneDeep(pageInfo.accIdsList)
58 68
     previewObj.RuleConfigObj = _.cloneDeep(pageInfo.RuleConfigObj)

+ 30 - 2
src/components/businessMoudle/batchGdt/previewArea/api.ts

@@ -22,7 +22,8 @@ interface IAdsCreate {
22 22
   ad_common: string,
23 23
   ad_outer: string,
24 24
   comtype: 1 | 2,
25
-  dotime?: string
25
+  dotime?: string,
26
+  strategy?: string
26 27
 }
27 28
 export function adsCreate(params: IAdsCreate) {
28 29
   return new Promise(async (resolve,reject)=>{
@@ -51,4 +52,31 @@ export function adsCreate(params: IAdsCreate) {
51 52
   })
52 53
 }
53 54
 
54
-
55
+/**添加广告任务策略 */
56
+interface IAddTasksStrategy {
57
+  task_id: string,
58
+  promoted_object_type: string,
59
+  account_ids: string,
60
+  rule_conf: string,
61
+  ad_base: string,
62
+  targetings_info: string,
63
+  creative_base: string,
64
+  creative_info: string,
65
+  paperwork: string,
66
+  landing_page: string,
67
+  user_action_sets: string,
68
+  start_audience: string,
69
+  wechat_channels: string,
70
+  union_position: string,
71
+}
72
+export function addTasksStrategy(params: IAddTasksStrategy) {
73
+  return new Promise(async (resolve,reject)=>{
74
+    const res: any = await http.post('/api/ad/addTasksStrategy', params)
75
+    if (res.errNo == 0) {
76
+      resolve(res.rst)
77
+    } else {
78
+      ElMessage.error(res.errMsg)
79
+      reject()
80
+    }
81
+  })
82
+}

+ 34 - 2
src/components/businessMoudle/batchGdt/previewArea/index.vue

@@ -170,7 +170,7 @@ import LoadingMask from '@/components/businessMoudle/batchGdt/previewArea/dialog
170 170
 import { reactiveTableAndAny } from "@/api/ApiModel";
171 171
 import _ from "lodash";
172 172
 import { ElMessage, ElMessageBox } from 'element-plus';
173
-import { adsCreate } from './api'
173
+import { adsCreate, addTasksStrategy } from './api'
174 174
 import { NumberHandle } from '@/common/common'
175 175
 import { useRouter } from "vue-router";
176 176
 import { taskRecord } from "@/components/businessMoudle/adTask/ts/api"
@@ -237,7 +237,8 @@ const pageInfo = reactive<reactiveTableAndAny>({
237 237
   accPlanAd: {//账号下的计划及广告数
238 238
     planNum: 0,
239 239
     adNum: 0,
240
-  }
240
+  },
241
+  copyInfo:{}//复制要用的数据
241 242
 })
242 243
 
243 244
 //定时器
@@ -386,14 +387,19 @@ const auditSubmitEvent = (dialogInfo) => {
386 387
     ad_common: JSON.stringify(ad_common),
387 388
     ad_outer: JSON.stringify(ad_outer),
388 389
     comtype: dialogInfo.comtype,
390
+    // strategy: JSON.stringify(pageInfo.copyInfo)
389 391
   }
390 392
   if (dialogInfo.comtype == 2) {
391 393
     params['dotime'] = dialogInfo.dotime
392 394
   }
393 395
   adsCreate(params).then((res: any) => {
394 396
     submitLoading.value = false
397
+    if(res.task_id){
398
+      addTasksStrategyEvent(res.task_id)
399
+    }
395 400
     if (res.task_id && dialogInfo.comtype == 1) {
396 401
       LoadingMaskRef.value?.switchShow(true)
402
+      // res.task_id
397 403
       adTaskEvent(res.task_id)
398 404
     } else {
399 405
       goAdTask()
@@ -404,6 +410,29 @@ const auditSubmitEvent = (dialogInfo) => {
404 410
   })
405 411
 }
406 412
 
413
+/**添加广告任务策略 */
414
+const addTasksStrategyEvent = (task_id) => {
415
+  let groupsInfo = pageInfo.copyInfo
416
+  addTasksStrategy({
417
+    'task_id': String(task_id),
418
+    'promoted_object_type': groupsInfo?.pageInfo?.targetValue,
419
+    'account_ids': groupsInfo?.pageInfo?.accIdsList?.map((v) => v.id)?.join(','),
420
+    'rule_conf': JSON.stringify(groupsInfo?.pageInfo?.RuleConfigObj),
421
+    'ad_base': JSON.stringify(groupsInfo?.basicInfoData?.fillBack),
422
+    'targetings_info': JSON.stringify(groupsInfo?.pageInfo?.directObj),
423
+    'creative_base': JSON.stringify(groupsInfo?.originalityBasicInfoData),
424
+    'creative_info': JSON.stringify(groupsInfo?.cMaterial),
425
+    'paperwork': JSON.stringify(groupsInfo?.pageInfo?.copywriterInfoData),
426
+    'landing_page': JSON.stringify(groupsInfo?.pageInfo?.copyLandPageInfoData),
427
+    'user_action_sets': JSON.stringify(groupsInfo?.basicInfoData?.outerConfig?.attributionOuter),
428
+    'start_audience': JSON.stringify(groupsInfo?.basicInfoData?.outerConfig?.targetingPartyData),
429
+    'wechat_channels': JSON.stringify(groupsInfo?.basicInfoData?.outerConfig?.weChatVideoAccount),
430
+    'union_position': JSON.stringify(groupsInfo?.basicInfoData?.outerConfig?.unionPosition),
431
+  }).then((res)=>{
432
+    console.log('添加广告任务策略',res)
433
+  }).catch(()=>{})
434
+}
435
+
407 436
 /**广告任务执行记录 */
408 437
 const adTaskEvent = (task_id) => {
409 438
   taskRecord({ task_id }).then((res: any) => {
@@ -553,6 +582,8 @@ const tableHeaderStyle = ({ row, column, rowIndex, columnIndex }: never) => {
553 582
 const initEvent = (infoObj_c) => {
554 583
   let infoObj = _.cloneDeep(infoObj_c)
555 584
   nextTick(async () => {
585
+    //复制要用的数据
586
+    pageInfo.copyInfo = _.cloneDeep(infoObj.copyInfo)
556 587
     //账号
557 588
     pageInfo.accList = _.cloneDeep(infoObj.accVal)
558 589
     if (!pageInfo.accList || pageInfo.accList.length == 0) return;
@@ -571,6 +602,7 @@ const initEvent = (infoObj_c) => {
571 602
 }
572 603
 /**重置 */
573 604
 const resetEvent = ()=>{
605
+  pageInfo.copyInfo = {}
574 606
   pageInfo.accList = []
575 607
   pageInfo.RuleConfigObj = {}
576 608
   pageInfo.choosePlanObj = {}

+ 13 - 2
src/components/businessMoudle/gdtList/advert.vue

@@ -95,7 +95,7 @@
95 95
 
96 96
               <template v-for="item in bigItem.sub">
97 97
                 <el-table-column :label="item.label"  :fixed="item.disabled == 1"
98
-                                 :min-width="bigItem.key_value == 'adgroup_name' ? '200px' :
98
+                                 :min-width="bigItem.key_value == 'operate' ? '120px' : bigItem.key_value == 'adgroup_name' ? '200px' :
99 99
                                (bigItem.label.length <= 4 ? '100px' : bigItem.label.length <= 8 ? '150px' : '200px')">
100 100
 
101 101
                   <template #default="scope">
@@ -114,6 +114,7 @@
114 114
                       <div v-else-if="item.key_value == 'operate'">
115 115
                         <div class="flex">
116 116
                           <span class="c-theme pointer" @click="goDetial(scope.row)">详情</span>
117
+                          <span class="c-theme pointer lMar10" @click="goCopyTask(scope.row)">复制</span>
117 118
                           <Popconfirm key="dele" @confirm="batchPlanEvent(scope.row,3)" :slotFlag="true">
118 119
                             <template #con>
119 120
                               <span class="pointer lMar10 c-red">删除</span>
@@ -194,7 +195,8 @@ import {commonlistTs} from "@/components/businessMoudle/ts/commonList";
194 195
 import {getCurrentTime} from "@/common/common";
195 196
 import _ from "lodash";
196 197
 import Popconfirm from '@/components/capsulationMoudle/_popconfirm.vue'
197
-
198
+import { useRouter } from "vue-router";
199
+const router = useRouter();
198 200
 
199 201
 const { proxy } = getCurrentInstance() as any;
200 202
 // 全局方法定义
@@ -350,6 +352,15 @@ const detialRef = ref<{switchShow:(val:Boolean,row:any)=>void}>()
350 352
 const goDetial = (row:any) => {
351 353
   detialRef.value!.switchShow(true,row)
352 354
 }
355
+const goCopyTask = (row:any) => {
356
+  let newPage:any = router.resolve({
357
+    path: '/gdtList/batchGdt',
358
+    query: {
359
+      adgroup_id: row.adgroup_id,
360
+    }
361
+  })
362
+  window.open(newPage.href, "_blank")
363
+}
353 364
 
354 365
 //修改计划名称
355 366
 //推广计划 - 确定

+ 14 - 4
src/components/businessMoudle/textLibrary/index.vue

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
   <div class="screenBox">
3 3
     <TypeSelect ref="typeRef2" inputWidth="200px" @change="typeChange"></TypeSelect>
4
-    <Input class="lMar20" ref="InputRef_text" title="文案" @clearEvent="init()" @changeEvent="init()"/>
4
+    <Input class="lMar20" ref="InputRef_text" spanFS="14px" title="文案:" @clearEvent="init()" @changeEvent="init()"/>
5 5
   </div>
6 6
   <div class="tableBox" :style="source ? 'padding:0' : ''">
7 7
     <div class="flex">
@@ -18,7 +18,8 @@
18 18
     <div class="tMar20">
19 19
       <TableList
20 20
           ref="tableListRef"
21
-          tableHeight="calc(100vh - 220px)"
21
+          :tableSize="tableSize"
22
+          :tableHeight="tableHeight"
22 23
           :showSelect="true"
23 24
           :total="total"
24 25
           :tableData="tableInfo.tableList"
@@ -30,7 +31,7 @@
30 31
       >
31 32
         <template v-slot:operate="slotProps">
32 33
           <div class="text-center">
33
-            <span class="operate_text" @click="editTextEvent(slotProps.row)">编辑</span>
34
+            <span class="c-theme pointer" @click="editTextEvent(slotProps.row)">编辑</span>
34 35
             <Popconfirm @confirm="deleTextEvent(slotProps.row.id)"/>
35 36
           </div>
36 37
         </template>
@@ -79,7 +80,16 @@ const props = defineProps({
79 80
   select_num:{
80 81
     type: Number,
81 82
     default: -1,
83
+  },
84
+  tableHeight:{
85
+    type:String,
86
+    default: 'calc(100vh - 220px)'
87
+  },
88
+  tableSize: {
89
+    type: String,
90
+    default: 'default'
82 91
   }
92
+  
83 93
 })
84 94
 
85 95
 interface Emits {
@@ -204,7 +214,7 @@ const pageInfo = reactive<reactiveTableAndAny>({
204 214
   chooseList:[]
205 215
 })
206 216
 const descolParams = reactive([
207
-  { name:'文案',column:'content',minWidth:'180px'},
217
+  { name:'文案',column:'content',minWidth:'220px'},
208 218
   { name:'分类',column:'classify_name'},
209 219
   { name:'创建者',column:'author_name'},
210 220
   { name:'操作',column:'operate',slotFlag: true},

+ 1 - 1
src/components/capsulationMoudle/_popconfirm.vue

@@ -2,7 +2,7 @@
2 2
   <el-popconfirm :key="key" :title="`${'确定后,该项将被' + popTxt + ',是否继续?'}`" @confirm="confirmEvent">
3 3
     <template #reference>
4 4
       <slot name="con" v-if="slotFlag"></slot>
5
-      <span class="operate_text lMar8" style="color: #FF5B5B" v-else>{{popTxt}}</span>
5
+      <span class="pointer lMar8" style="color: #FF5B5B" v-else>{{popTxt}}</span>
6 6
     </template>
7 7
   </el-popconfirm>
8 8
 </template>

+ 7 - 7
src/router/index.ts

@@ -1,5 +1,5 @@
1 1
 import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
2
-import { close, start } from '@/utils/nporgress'
2
+// import { close, start } from '@/utils/nporgress'
3 3
 
4 4
 // 基础模块
5 5
 const Layout = () => import( '@/components/basisMoudle/layout/index.vue')
@@ -177,10 +177,10 @@ const router = createRouter({
177 177
   history: createWebHashHistory(''),
178 178
   routes: constantRoutes
179 179
 })
180
-router.beforeEach((pre, next) => {
181
-  start()
182
-})
183
-router.afterEach(() => {
184
-  close()
185
-})
180
+// router.beforeEach((pre, next) => {
181
+//   start()
182
+// })
183
+// router.afterEach(() => {
184
+//   close()
185
+// })
186 186
 export default router

+ 19 - 19
src/utils/nporgress.ts

@@ -1,20 +1,20 @@
1
-import NProgress from 'nprogress'
2
-import 'nprogress/nprogress.css'
3
-//全局进度条的配置
4
-NProgress.configure({
5
-    easing: 'ease', // 动画方式
6
-    speed: 1000, // 递增进度条的速度
7
-    showSpinner: false, // 是否显示加载ico
8
-    trickleSpeed: 200, // 自动递增间隔
9
-    minimum: 0.3, // 更改启动时使用的最小百分比
10
-    parent: 'body', //指定进度条的父容器
11
-})
12
-// 打开进度条
13
-export const start = () => {
14
-    NProgress.start()
15
-}
1
+// import NProgress from 'nprogress'
2
+// import 'nprogress/nprogress.css'
3
+// //全局进度条的配置
4
+// NProgress.configure({
5
+//     easing: 'ease', // 动画方式
6
+//     speed: 1000, // 递增进度条的速度
7
+//     showSpinner: false, // 是否显示加载ico
8
+//     trickleSpeed: 200, // 自动递增间隔
9
+//     minimum: 0.3, // 更改启动时使用的最小百分比
10
+//     parent: 'body', //指定进度条的父容器
11
+// })
12
+// // 打开进度条
13
+// export const start = () => {
14
+//     NProgress.start()
15
+// }
16 16
 
17
-// 关闭进度条
18
-export const close = () => {
19
-    NProgress.done()
20
-}
17
+// // 关闭进度条
18
+// export const close = () => {
19
+//     NProgress.done()
20
+// }