Просмотр исходного кода

feat:巡检不关注是否已经暂停过

pudongliang 4 месяцев назад
Родитель
Сommit
8813a25046
53 измененных файлов с 215 добавлено и 67 удалено
  1. 1 1
      portal/dist/assets/accountGroup-Fih1S3v7.js
  2. 1 1
      portal/dist/assets/adAutoConf-yEdZEF3x.js
  3. 0 1
      portal/dist/assets/adPlanConf-CLOApIA5.js
  4. 1 0
      portal/dist/assets/adPlanConf-Do-TdXyC.js
  5. 1 1
      portal/dist/assets/auth-DpUuiiYT.js
  6. 1 1
      portal/dist/assets/conversion-DSZvw9We.js
  7. 0 0
      portal/dist/assets/detail-C473QFWJ.js
  8. 0 0
      portal/dist/assets/detail-D04nHiZv.js
  9. 1 1
      portal/dist/assets/drama-n7X6THLf.js
  10. 1 0
      portal/dist/assets/edit-7oGWZYv1.css
  11. 0 0
      portal/dist/assets/edit-B96QKxjH.js
  12. 0 0
      portal/dist/assets/edit-D0eWCO8x.js
  13. 0 1
      portal/dist/assets/edit-pu_LsWtY.css
  14. 1 0
      portal/dist/assets/index-0MmA-K0O.css
  15. 0 0
      portal/dist/assets/index-B6PGHzAN.js
  16. 0 0
      portal/dist/assets/index-B6wY7QRz.js
  17. 0 1
      portal/dist/assets/index-BKtci71u.css
  18. 0 0
      portal/dist/assets/index-BZ-t8Hi1.js
  19. 0 0
      portal/dist/assets/index-Bgxsd10W.js
  20. 0 0
      portal/dist/assets/index-C-1-wsmM.js
  21. 0 1
      portal/dist/assets/index-Cd8ld78-.css
  22. 0 0
      portal/dist/assets/index-CiTxjWE0.js
  23. 0 0
      portal/dist/assets/index-CkHzAXhl.js
  24. 0 0
      portal/dist/assets/index-CuSmpUxN.js
  25. 1 0
      portal/dist/assets/index-CvzQKMxG.css
  26. 0 0
      portal/dist/assets/index-D-wmqqFl.js
  27. 0 0
      portal/dist/assets/index-D6V01uPr.js
  28. 0 0
      portal/dist/assets/index-D7v9lqfP.js
  29. 0 0
      portal/dist/assets/index-D8YZo7Ai.js
  30. 0 0
      portal/dist/assets/index-DLIfzCMM.css
  31. 0 0
      portal/dist/assets/index-DLdwA7Zg.js
  32. 1 0
      portal/dist/assets/index-DNed_5gS.js
  33. 0 1
      portal/dist/assets/index-DnG4kEH9.js
  34. 0 1
      portal/dist/assets/index-Dti5aB1X.css
  35. 0 0
      portal/dist/assets/index-Dwsg_cRN.js
  36. 0 0
      portal/dist/assets/index-PcFjskg_.js
  37. 0 0
      portal/dist/assets/index-UKNlr1Ec.js
  38. 1 0
      portal/dist/assets/index-vV63W3OI.css
  39. 1 1
      portal/dist/assets/loadPageConf-DnpuseAO.js
  40. 1 1
      portal/dist/assets/ossFile-0305LXXw.js
  41. 0 0
      portal/dist/assets/request-CLvfKS5c.js
  42. 1 1
      portal/dist/assets/user-B5XygfYO.js
  43. 14 14
      portal/dist/index.html
  44. 3 2
      portal/src/api/adPlanConf.js
  45. 9 1
      portal/src/layout/index.vue
  46. 12 12
      portal/src/router/index.js
  47. 1 1
      portal/src/views/ad-auto-conf/edit.vue
  48. 19 9
      portal/src/views/ad-auto-conf/index.vue
  49. 15 7
      portal/src/views/ad-plan-conf/detail.vue
  50. 90 2
      portal/src/views/ad-plan-conf/index.vue
  51. 36 2
      src/main/java/com/moka/gdtauto/controller/AdPlanConfController.java
  52. 1 1
      src/main/java/com/moka/gdtauto/entity/AdPlanConf.java
  53. 1 2
      src/main/java/com/moka/gdtauto/service/AdAutoExecutor.java

+ 1 - 1
portal/dist/assets/accountGroup-Daj4u7pE.js → portal/dist/assets/accountGroup-Fih1S3v7.js

@@ -1 +1 @@
-import{r as u}from"./request-CR7c-BgI.js";function c(t){return u({url:"/api/account-group/create",method:"post",data:t})}function e(t){return u({url:"/api/account-group/update",method:"post",data:t})}function n(t){return u({url:`/api/account-group/${t}`,method:"delete"})}function a(t=1,o=10){return u({url:"/api/account-group/list",method:"get",params:{pageNum:t,pageSize:o}})}function p(){return u({url:"/api/account-group/all",method:"get"})}function i(t){return u({url:`/api/account-group/${t}/accounts`,method:"get"})}export{i as a,p as b,c,n as d,a as g,e as u};
+import{r as u}from"./request-CLvfKS5c.js";function c(t){return u({url:"/api/account-group/create",method:"post",data:t})}function e(t){return u({url:"/api/account-group/update",method:"post",data:t})}function n(t){return u({url:`/api/account-group/${t}`,method:"delete"})}function a(t=1,o=10){return u({url:"/api/account-group/list",method:"get",params:{pageNum:t,pageSize:o}})}function p(){return u({url:"/api/account-group/all",method:"get"})}function i(t){return u({url:`/api/account-group/${t}/accounts`,method:"get"})}export{i as a,p as b,c,n as d,a as g,e as u};

+ 1 - 1
portal/dist/assets/adAutoConf-B4CAGgFb.js → portal/dist/assets/adAutoConf-yEdZEF3x.js

@@ -1 +1 @@
-import{r as e}from"./request-CR7c-BgI.js";function u(t){return e({url:"/api/ad-auto-conf/list",method:"get",params:t})}function n(t){return e({url:`/api/ad-auto-conf/${t}`,method:"get"})}function a(t){return e({url:"/api/ad-auto-conf",method:"post",data:t})}function r(t){return e({url:"/api/ad-auto-conf/update",method:"post",data:t})}function i(t){return e({url:`/api/ad-auto-conf/execute?id=${t}`,method:"post"})}function d(t){return e({url:"/api/execute-log/list",method:"get",params:t})}function c(t){return e({url:"/api/execute-log/getChildLog",method:"get",params:t})}export{c as a,d as b,n as c,i as e,u as g,a as s,r as u};
+import{r as e}from"./request-CLvfKS5c.js";function u(t){return e({url:"/api/ad-auto-conf/list",method:"get",params:t})}function n(t){return e({url:`/api/ad-auto-conf/${t}`,method:"get"})}function a(t){return e({url:"/api/ad-auto-conf",method:"post",data:t})}function r(t){return e({url:"/api/ad-auto-conf/update",method:"post",data:t})}function i(t){return e({url:`/api/ad-auto-conf/execute?id=${t}`,method:"post"})}function d(t){return e({url:"/api/execute-log/list",method:"get",params:t})}function c(t){return e({url:"/api/execute-log/getChildLog",method:"get",params:t})}export{c as a,d as b,n as c,i as e,u as g,a as s,r as u};

+ 0 - 1
portal/dist/assets/adPlanConf-CLOApIA5.js

@@ -1 +0,0 @@
-import{r as a}from"./request-CR7c-BgI.js";function r(n){return a({url:"/api/ad-plan-conf/reCreate",method:"post",data:n})}function d(n){return a({url:"/api/ad-plan-conf/generate-plan",method:"post",data:n})}function o(n){return a({url:`/api/ad-plan-conf/reGeneratePlan/${n}`,method:"get"})}function u(n){return a({url:`/api/ad-plan-conf/syncSystemStatus/${n}`,method:"get"})}function l(n){return a({url:"/api/ad-plan-conf/create",method:"post",data:n})}function p(n){return a({url:"/api/ad-plan-conf/update",method:"post",data:n})}function s(n=1,e=10){return a({url:"/api/ad-plan-conf/list",method:"get",params:{pageNum:n,pageSize:e}})}function i(n){return a({url:`/api/ad-plan-conf/${n}`,method:"get"})}function f(n){return a({url:"/api/ad-plan/list",method:"get",params:n})}function c(n){return a({url:`/api/ad-plan-creative/plan/${n}`,method:"get"})}function g(n){return a({url:"/api/ad-plan-conf/gdtSuspendByConfId",params:{confId:n},method:"get"})}function m(n){return a({url:"/api/ad-plan-conf/gdtDeleteByConfId",params:{confId:n},method:"get"})}function h(n,e){return a({url:`/api/ad-plan-conf/gdtSuspendByPlanIds/${n}`,method:"post",data:e})}function C(n,e){return a({url:`/api/ad-plan-conf/gdtDeleteByPlanIds/${n}`,method:"post",data:e})}function P(n=[]){return a({url:"/api/ad-plan-conf/getOneCreativeImage",method:"post",data:n})}function y(){return a({url:"/api/ad-plan-conf/getOneBrandImage",method:"get"})}function I(n=[]){return a({url:"/api/ad-plan-conf/getOneCreativeVideo",method:"post",data:n})}export{P as a,y as b,I as c,d,l as e,i as f,s as g,f as h,m as i,h as j,C as k,u as l,o as m,c as n,r,g as s,p as u};

+ 1 - 0
portal/dist/assets/adPlanConf-Do-TdXyC.js

@@ -0,0 +1 @@
+import{r as a}from"./request-CLvfKS5c.js";function d(n){return a({url:"/api/ad-plan-conf/reCreate",method:"post",data:n})}function o(n){return a({url:"/api/ad-plan-conf/generate-plan",method:"post",data:n})}function u(n){return a({url:`/api/ad-plan-conf/reGeneratePlan/${n}`,method:"get"})}function l(n){return a({url:`/api/ad-plan-conf/syncSystemStatus/${n}`,method:"get"})}function p(n){return a({url:"/api/ad-plan-conf/create",method:"post",data:n})}function s(n){return a({url:"/api/ad-plan-conf/update",method:"post",data:n})}function i(n=1,e=10,t={}){return a({url:"/api/ad-plan-conf/list",method:"get",params:{pageNum:n,pageSize:e,...t}})}function f(n){return a({url:`/api/ad-plan-conf/${n}`,method:"get"})}function c(n){return a({url:"/api/ad-plan/list",method:"get",params:n})}function g(n){return a({url:`/api/ad-plan-creative/plan/${n}`,method:"get"})}function m(n){return a({url:"/api/ad-plan-conf/gdtSuspendByConfId",params:{confId:n},method:"get"})}function h(n){return a({url:"/api/ad-plan-conf/gdtDeleteByConfId",params:{confId:n},method:"get"})}function C(n,e){return a({url:`/api/ad-plan-conf/gdtSuspendByPlanIds/${n}`,method:"post",data:e})}function P(n,e){return a({url:`/api/ad-plan-conf/gdtDeleteByPlanIds/${n}`,method:"post",data:e})}function y(n=[]){return a({url:"/api/ad-plan-conf/getOneCreativeImage",method:"post",data:n})}function I(){return a({url:"/api/ad-plan-conf/getOneBrandImage",method:"get"})}function B(n=[]){return a({url:"/api/ad-plan-conf/getOneCreativeVideo",method:"post",data:n})}export{y as a,I as b,B as c,o as d,p as e,f,i as g,c as h,h as i,C as j,P as k,l,u as m,g as n,d as r,m as s,s as u};

+ 1 - 1
portal/dist/assets/auth-CjvRtW0-.js → portal/dist/assets/auth-DpUuiiYT.js

@@ -1 +1 @@
-import{r as t}from"./request-CR7c-BgI.js";function i(){return t({url:"/api/gdt/auth/authorize-url",method:"get"})}function n(r){return t({url:"/api/gdt/auth/refresh",method:"post",params:r})}function u(){return t({url:"/api/gdt/auth/list",method:"get"})}function a(){return u()}function o(){return t({url:"/api/gdt/auth/expiring",method:"get"})}export{o as a,a as b,i as g,u as l,n as r};
+import{r as t}from"./request-CLvfKS5c.js";function i(){return t({url:"/api/gdt/auth/authorize-url",method:"get"})}function n(r){return t({url:"/api/gdt/auth/refresh",method:"post",params:r})}function u(){return t({url:"/api/gdt/auth/list",method:"get"})}function a(){return u()}function o(){return t({url:"/api/gdt/auth/expiring",method:"get"})}export{o as a,a as b,i as g,u as l,n as r};

+ 1 - 1
portal/dist/assets/conversion-BHbEQ-lm.js → portal/dist/assets/conversion-DSZvw9We.js

@@ -1 +1 @@
-import{r as t}from"./request-CR7c-BgI.js";function e(n,o){return t({url:"/api/gdt/conversion/sync",method:"post",params:{orgAccountId:n,accountId:o}})}function s(n=1,o=20){return t({url:"/api/gdt/conversion/list",method:"get",params:{page:n,pageSize:o}})}function i(n){return t({url:"/api/gdt/conversion/detail",method:"get",params:{conversionId:n}})}function a(){return t({url:"/api/gdt/conversion/all",method:"get"})}export{s as a,i as b,a as g,e as s};
+import{r as t}from"./request-CLvfKS5c.js";function e(n,o){return t({url:"/api/gdt/conversion/sync",method:"post",params:{orgAccountId:n,accountId:o}})}function s(n=1,o=20){return t({url:"/api/gdt/conversion/list",method:"get",params:{page:n,pageSize:o}})}function i(n){return t({url:"/api/gdt/conversion/detail",method:"get",params:{conversionId:n}})}function a(){return t({url:"/api/gdt/conversion/all",method:"get"})}export{s as a,i as b,a as g,e as s};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/detail-C473QFWJ.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/detail-D04nHiZv.js


+ 1 - 1
portal/dist/assets/drama-C7JNoFSg.js → portal/dist/assets/drama-n7X6THLf.js

@@ -1 +1 @@
-import{r as t}from"./request-CR7c-BgI.js";function n(a){return t({url:"/api/gdt/asset/drama/sync",method:"post",params:{accountId:a}})}function m(a=1,s=20,r=""){return t({url:"/api/gdt/asset/drama/list",method:"get",params:{dramaName:r,page:a,pageSize:s}})}function d(a){return t({url:"/api/gdt/asset/drama/myDramaAssets",method:"get",params:{dramaName:a}})}function o(){return t({url:"/api/gdt/asset/drama/sync/conf/myConf",method:"get"})}function u(a){return t({url:"/api/gdt/asset/drama/sync/conf/add",method:"post",data:a})}function i(a){return t({url:"/api/gdt/asset/drama/sync/conf/delete",method:"post",params:{id:a}})}export{o as a,u as b,i as d,m as g,d as m,n as s};
+import{r as t}from"./request-CLvfKS5c.js";function n(a){return t({url:"/api/gdt/asset/drama/sync",method:"post",params:{accountId:a}})}function m(a=1,s=20,r=""){return t({url:"/api/gdt/asset/drama/list",method:"get",params:{dramaName:r,page:a,pageSize:s}})}function d(a){return t({url:"/api/gdt/asset/drama/myDramaAssets",method:"get",params:{dramaName:a}})}function o(){return t({url:"/api/gdt/asset/drama/sync/conf/myConf",method:"get"})}function u(a){return t({url:"/api/gdt/asset/drama/sync/conf/add",method:"post",data:a})}function i(a){return t({url:"/api/gdt/asset/drama/sync/conf/delete",method:"post",params:{id:a}})}export{o as a,u as b,i as d,m as g,d as m,n as s};

+ 1 - 0
portal/dist/assets/edit-7oGWZYv1.css

@@ -0,0 +1 @@
+.rules-container[data-v-b9cbdbfc]{max-height:500px;overflow-y:auto}.rule-item[data-v-b9cbdbfc]{border:1px solid #e5e7eb}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/edit-B96QKxjH.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/edit-D0eWCO8x.js


+ 0 - 1
portal/dist/assets/edit-pu_LsWtY.css

@@ -1 +0,0 @@
-.rules-container[data-v-7815b724]{max-height:500px;overflow-y:auto}.rule-item[data-v-7815b724]{border:1px solid #e5e7eb}

+ 1 - 0
portal/dist/assets/index-0MmA-K0O.css

@@ -0,0 +1 @@
+[data-v-c35dafee] .el-checkbox{width:100%;margin-right:0}[data-v-c35dafee] .el-checkbox__label{width:100%;white-space:normal;word-break:break-all}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-B6PGHzAN.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-B6wY7QRz.js


+ 0 - 1
portal/dist/assets/index-BKtci71u.css

@@ -1 +0,0 @@
-.conversion-container[data-v-cf5a26d8]{padding:20px}.card-header[data-v-cf5a26d8]{display:flex;justify-content:space-between;align-items:center}.stats-row[data-v-cf5a26d8]{margin-bottom:20px}.pagination-container[data-v-cf5a26d8]{margin-top:20px;display:flex;justify-content:flex-end}[data-v-cf5a26d8] .el-statistic__head{font-size:14px;color:#909399}[data-v-cf5a26d8] .el-statistic__number{font-size:24px;font-weight:700;color:#303133}[data-v-cf5a26d8] .success .el-statistic__number{color:#67c23a}[data-v-cf5a26d8] .info .el-statistic__number{color:#409eff}[data-v-cf5a26d8] .warning .el-statistic__number{color:#e6a23c}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-BZ-t8Hi1.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-Bgxsd10W.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-C-1-wsmM.js


+ 0 - 1
portal/dist/assets/index-Cd8ld78-.css

@@ -1 +0,0 @@
-.btn-primary[data-v-6c03763e]{background:linear-gradient(135deg,#667eea,#764ba2);border:none;color:#fff}.btn-primary[data-v-6c03763e]:hover{background:linear-gradient(135deg,#764ba2,#667eea)}.btn-secondary[data-v-6c03763e]{border-color:#e5e7eb;color:#6b7280}.btn-secondary[data-v-6c03763e]:hover{background-color:#f9fafb}[data-v-6c03763e] .el-upload-dragger{border:2px dashed #d1d5db;border-radius:8px;background-color:#f9fafb;transition:all .3s}[data-v-6c03763e] .el-upload-dragger:hover{border-color:#667eea;background-color:#f3f4f6}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-CiTxjWE0.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-CkHzAXhl.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-CuSmpUxN.js


+ 1 - 0
portal/dist/assets/index-CvzQKMxG.css

@@ -0,0 +1 @@
+.conversion-container[data-v-86e7044b]{padding:20px}.card-header[data-v-86e7044b]{display:flex;justify-content:space-between;align-items:center}.stats-row[data-v-86e7044b]{margin-bottom:20px}.pagination-container[data-v-86e7044b]{margin-top:20px;display:flex;justify-content:flex-end}[data-v-86e7044b] .el-statistic__head{font-size:14px;color:#909399}[data-v-86e7044b] .el-statistic__number{font-size:24px;font-weight:700;color:#303133}[data-v-86e7044b] .success .el-statistic__number{color:#67c23a}[data-v-86e7044b] .info .el-statistic__number{color:#409eff}[data-v-86e7044b] .warning .el-statistic__number{color:#e6a23c}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-D-wmqqFl.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-D6V01uPr.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-D7v9lqfP.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-D8YZo7Ai.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-DLIfzCMM.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-DLdwA7Zg.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
portal/dist/assets/index-DNed_5gS.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
portal/dist/assets/index-DnG4kEH9.js


+ 0 - 1
portal/dist/assets/index-Dti5aB1X.css

@@ -1 +0,0 @@
-[data-v-e17a2035] .el-checkbox{width:100%;margin-right:0}[data-v-e17a2035] .el-checkbox__label{width:100%;white-space:normal;word-break:break-all}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-Dwsg_cRN.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-PcFjskg_.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/index-UKNlr1Ec.js


+ 1 - 0
portal/dist/assets/index-vV63W3OI.css

@@ -0,0 +1 @@
+.btn-primary[data-v-f01c5d8c]{background:linear-gradient(135deg,#667eea,#764ba2);border:none;color:#fff}.btn-primary[data-v-f01c5d8c]:hover{background:linear-gradient(135deg,#764ba2,#667eea)}.btn-secondary[data-v-f01c5d8c]{border-color:#e5e7eb;color:#6b7280}.btn-secondary[data-v-f01c5d8c]:hover{background-color:#f9fafb}[data-v-f01c5d8c] .el-upload-dragger{border:2px dashed #d1d5db;border-radius:8px;background-color:#f9fafb;transition:all .3s}[data-v-f01c5d8c] .el-upload-dragger:hover{border-color:#667eea;background-color:#f3f4f6}

+ 1 - 1
portal/dist/assets/loadPageConf-lkCwt0Nn.js → portal/dist/assets/loadPageConf-DnpuseAO.js

@@ -1 +1 @@
-import{r as o}from"./request-CR7c-BgI.js";function t(a){return o({url:"/api/load-page-conf/list",method:"get",params:a})}function n(a){return o({url:`/api/load-page-conf/${a}`,method:"get"})}function r(a){return o({url:"/api/load-page-conf",method:"post",data:a})}function u(a){return o({url:"/api/load-page-conf",method:"put",data:a})}function d(){return o({url:"/api/load-page-conf/all",method:"get"})}export{t as a,n as b,r as c,d as g,u};
+import{r as o}from"./request-CLvfKS5c.js";function t(a){return o({url:"/api/load-page-conf/list",method:"get",params:a})}function n(a){return o({url:`/api/load-page-conf/${a}`,method:"get"})}function r(a){return o({url:"/api/load-page-conf",method:"post",data:a})}function u(a){return o({url:"/api/load-page-conf",method:"put",data:a})}function d(){return o({url:"/api/load-page-conf/all",method:"get"})}export{t as a,n as b,r as c,d as g,u};

+ 1 - 1
portal/dist/assets/ossFile-BfUsVtEh.js → portal/dist/assets/ossFile-0305LXXw.js

@@ -1 +1 @@
-import{r as t}from"./request-CR7c-BgI.js";function i(e){return t({timeout:12e5,url:"/api/oss-file/upload",method:"post",data:e,headers:{"Content-Type":"multipart/form-data"}})}function o(e){return t({url:"/api/oss-file/list",method:"get",params:e})}function r(e){return t({url:`/api/oss-file/${e}`,method:"delete"})}function l(e){return t({url:"/api/oss-file/batch",method:"delete",params:{fileIds:e}})}export{l as b,r as d,o as g,i as u};
+import{r as t}from"./request-CLvfKS5c.js";function i(e){return t({timeout:12e5,url:"/api/oss-file/upload",method:"post",data:e,headers:{"Content-Type":"multipart/form-data"}})}function o(e){return t({url:"/api/oss-file/list",method:"get",params:e})}function r(e){return t({url:`/api/oss-file/${e}`,method:"delete"})}function l(e){return t({url:"/api/oss-file/batch",method:"delete",params:{fileIds:e}})}export{l as b,r as d,o as g,i as u};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
portal/dist/assets/request-CLvfKS5c.js


+ 1 - 1
portal/dist/assets/user-D3BazsWI.js → portal/dist/assets/user-B5XygfYO.js

@@ -1 +1 @@
-import{r as e}from"./request-CR7c-BgI.js";function s(){return e({url:"/api/user/list",method:"get"})}function u(r){return e({url:"/api/user/info",method:"get",params:r})}function n(r){return e({url:"/api/user/user-token-url",method:"get",params:r})}function o(r){return e({url:"/api/user/login",method:"post",params:r})}function a(r){return e({url:"/api/user/change-password",method:"post",params:r})}export{u as a,s as b,a as c,n as g,o as l};
+import{r as e}from"./request-CLvfKS5c.js";function s(){return e({url:"/api/user/list",method:"get"})}function u(r){return e({url:"/api/user/info",method:"get",params:r})}function n(r){return e({url:"/api/user/user-token-url",method:"get",params:r})}function o(r){return e({url:"/api/user/login",method:"post",params:r})}function a(r){return e({url:"/api/user/change-password",method:"post",params:r})}export{u as a,s as b,a as c,n as g,o as l};

+ 14 - 14
portal/dist/index.html

@@ -1,14 +1,14 @@
-<!doctype html>
-<html lang="en">
-  <head>
-    <meta charset="UTF-8" />
-    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>腾讯广告自动化管理后台</title>
-    <script type="module" crossorigin src="/assets/index-DnG4kEH9.js"></script>
-    <link rel="stylesheet" crossorigin href="/assets/index-5wHpskw5.css">
-  </head>
-  <body>
-    <div id="app"></div>

-  </body>
-</html>
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>腾讯广告自动化管理后台</title>
+    <script type="module" crossorigin src="/assets/index-DNed_5gS.js"></script>
+    <link rel="stylesheet" crossorigin href="/assets/index-DLIfzCMM.css">
+  </head>
+  <body>
+    <div id="app"></div>
+  </body>
+</html>

+ 3 - 2
portal/src/api/adPlanConf.js

@@ -70,12 +70,13 @@ export function deleteAdPlanConf(confId) {
  * 获取广告计划配置列表(分页)
  * @param {Number} pageNum 页码
  * @param {Number} pageSize 每页数量
+ * @param {Object} params 查询参数
  */
-export function getAdPlanConfList(pageNum = 1, pageSize = 10) {
+export function getAdPlanConfList(pageNum = 1, pageSize = 10, params = {}) {
   return request({
     url: '/api/ad-plan-conf/list',
     method: 'get',
-    params: { pageNum, pageSize }
+    params: { pageNum, pageSize, ...params }
   })
 }
 

+ 9 - 1
portal/src/layout/index.vue

@@ -87,7 +87,11 @@
       <!-- 主内容区 -->
       <div class="flex-1 overflow-y-auto bg-gray-50 p-6">
         <div class="max-w-9xl">
-          <router-view />
+          <router-view v-slot="{ Component, route }">
+            <keep-alive>
+              <component :is="Component" :key="route.fullPath" />
+            </keep-alive>
+          </router-view>
         </div>
       </div>
     </main>
@@ -127,6 +131,10 @@ const isAuthenticated = computed(() => {
   return expiresAt > new Date()
 })
 
+const key = computed(() => {
+  return route.fullPath
+})
+
 // 从路由配置中获取菜单路由
 const menuRoutes = computed(() => {
   const routes = router.getRoutes()

+ 12 - 12
portal/src/router/index.js

@@ -57,6 +57,18 @@ const routes = [
         component: () => import('@/views/ad-plan-conf/detail.vue'),
         meta: { title: '广告计划配置详情', icon: 'Document', hideInMenu: true }
       },
+      {
+        path: 'ad-auto-conf',
+        name: 'AdAutoConf',
+        component: () => import('@/views/ad-auto-conf/index.vue'),
+        meta: { title: '广告自动划配置', icon: 'Setting' }
+      },
+      {
+        path: 'ad-auto-conf/edit',
+        name: 'AdAutoConfEdit',
+        component: () => import('@/views/ad-auto-conf/edit.vue'),
+        meta: { title: '编辑广告自动划配置', icon: 'Setting', hideInMenu: true }
+      },
       // {
       //   path: 'account',
       //   name: 'Account',
@@ -117,18 +129,6 @@ const routes = [
         name: 'LoadPageConf',
         component: () => import('@/views/load-page-conf/index.vue'),
         meta: { title: '落地页配置', icon: 'Document' }
-      },
-      {
-        path: 'ad-auto-conf',
-        name: 'AdAutoConf',
-        component: () => import('@/views/ad-auto-conf/index.vue'),
-        meta: { title: '广告自动划配置', icon: 'Setting' }
-      },
-      {
-        path: 'ad-auto-conf/edit',
-        name: 'AdAutoConfEdit',
-        component: () => import('@/views/ad-auto-conf/edit.vue'),
-        meta: { title: '编辑广告自动划配置', icon: 'Setting', hideInMenu: true }
       }
     ]
   }

+ 1 - 1
portal/src/views/ad-auto-conf/edit.vue

@@ -47,7 +47,7 @@
                 <span class="font-medium text-gray-700">【规则 {{ index + 1 }}】</span>
                 <div class="bg-blue-50 rounded text-xs text-blue-800">
                     <template v-if="rule.type === 1">
-                    <span class="font-medium">{{ rule.newAd === 1 ? '新广告' : '老广告' }}:</span>消耗 > {{ rule.minCost }}元 且 ROI &lt; {{ rule.minIor }} 时暂停
+                    <span class="font-medium">{{ rule.newAd === 1 ? '新广告' : '老广告' }}:</span>{{ rule.minCost > 0 ? `消耗 > ${rule.minCost}元 且 ` : '' }} ROI &lt; {{ rule.minIor }} 时暂停
                     </template>
                     <template v-else>
                     <span class="font-medium">{{ rule.newAd === 1 ? '新广告' : '老广告' }}:</span>{{ rule.minCost > 0 ? `消耗 > ${rule.minCost}元 且 ` : '' }}粉价 > {{ rule.scanMaxCost }}元 时暂停

+ 19 - 9
portal/src/views/ad-auto-conf/index.vue

@@ -105,6 +105,11 @@
                     {{ r.type === 2 ? r.scanMaxCost : '-' }}
                   </template>
                 </el-table-column>
+                <el-table-column label="说明" min-width="100">
+                  <template #default="{ row: r }">
+                    {{ getDesc(r) }}
+                  </template>
+                </el-table-column>
               </el-table>
             </div>
           </template>
@@ -240,8 +245,7 @@ const router = useRouter()
 
 // 查询表单
 const queryForm = reactive({
-  jobNumber: '',
-  adGroupId: null
+  ruleName: ''
 })
 
 // 分页数据
@@ -256,6 +260,16 @@ const totalPages = computed(() => {
   return Math.ceil(pagination.total / pagination.pageSize)
 })
 
+const getDesc = (rule) => {
+  if (rule.type === 1) {
+    const costPart = rule.minCost > 0 ? `消耗 > ${rule.minCost}元 且 ` : ''
+    return `${rule.newAd === 1 ? '新广告' : '老广告'}:${costPart}ROI < ${rule.minIor} 时暂停`
+  } else {
+    const costPart = rule.minCost > 0 ? `消耗 > ${rule.minCost}元 且 ` : ''
+    return `${rule.newAd === 1 ? '新广告' : '老广告'}:${costPart}粉价 > ${rule.scanMaxCost}元 时暂停`
+  }
+}
+
 // 获取规则数量
 const parseRules = (rulesJson) => {
   if (!rulesJson) return []
@@ -325,11 +339,8 @@ const loadList = async () => {
       page: pagination.page,
       size: pagination.pageSize
     }
-    if (queryForm.jobNumber) {
-      params.jobNumber = queryForm.jobNumber
-    }
-    if (queryForm.adGroupId !== null && queryForm.adGroupId !== '') {
-      params.adGroupId = queryForm.adGroupId
+    if (queryForm.ruleName) {
+      params.ruleName = queryForm.ruleName
     }
     const response = await getAdAutoConfList(params)
     if (response.success) {
@@ -354,8 +365,7 @@ const handleQuery = () => {
 
 // 重置
 const handleReset = () => {
-  queryForm.jobNumber = ''
-  queryForm.adGroupId = null
+  queryForm.ruleName = ''
   handleQuery()
 }
 

+ 15 - 7
portal/src/views/ad-plan-conf/detail.vue

@@ -195,20 +195,28 @@
 
       <!-- 筛选条件 -->
       <div class="mb-4 flex gap-4">
-        <el-select 
+        <!-- <el-select 
           v-model="queryParams.accountId" 
           placeholder="按账户ID筛选" 
           clearable
+          filterable
           style="width: 200px"
           @change="fetchAdPlans"
         >
           <el-option
             v-for="accountId in accountIds"
             :key="accountId"
-            :label="`账户 ${accountId}`"
+            :label="`${accountId}`"
             :value="accountId"
           />
-        </el-select>
+        </el-select> -->
+        <el-input 
+          v-model="queryParams.accountId" 
+          placeholder="按账户ID筛选" 
+          clearable
+          style="width: 200px"
+          @change="fetchAdPlans"
+        />
         <el-select 
           v-model="queryParams.status" 
           placeholder="按状态筛选" 
@@ -357,17 +365,17 @@
         </el-table-column>
         <el-table-column label="花费" prop="cost" width="100">
           <template #default="{ row }">
-            ¥{{ (row.cost / 100).toFixed(2) }}
+            {{ row.cost && (row.cost / 100).toFixed(2) || '-' }}
           </template>
         </el-table-column>
-        <el-table-column label="目标转化成本" prop="conversionsCost" width="100">
+        <el-table-column label="目标转化成本" prop="conversionsCost" width="120">
           <template #default="{ row }">
-            ¥{{ (row.conversionsCost / 100).toFixed(2) }}
+            {{ row.conversionsCost && (row.conversionsCost / 100).toFixed(2) || '-' }}
           </template>
         </el-table-column>
         <el-table-column label="加粉成本" prop="scanFollowUserCost" width="100">
           <template #default="{ row }">
-            ¥{{ (row.scanFollowUserCost / 100).toFixed(2) }}
+            {{ row.scanFollowUserCost && (row.scanFollowUserCost / 100).toFixed(2) || '-' }}
           </template>
         </el-table-column>
         <el-table-column label="曝光" prop="viewCount" width="100"></el-table-column>

+ 90 - 2
portal/src/views/ad-plan-conf/index.vue

@@ -23,6 +23,60 @@
         </div>
       </div>
 
+      <!-- 查询表单 -->
+      <div class="mb-6 p-4 bg-gray-50 rounded-lg">
+        <el-form :model="searchForm" inline>
+          <el-form-item label="查询范围">
+            <el-radio-group v-model="searchForm.queryScope" @change="handleSearch">
+              <el-radio label="我的" :value="1" />
+              <el-radio label="全部" :value="2" />
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="计划名称">
+            <el-input
+              v-model="searchForm.name"
+              placeholder="请输入计划名称"
+              clearable
+              style="width: 200px"
+              @keyup.enter="handleSearch"
+            />
+          </el-form-item>
+          <el-form-item label="状态">
+            <el-select
+              v-model="searchForm.status"
+              placeholder="请选择状态"
+              clearable
+              style="width: 120px"
+              @change="handleSearch"
+            >
+              <el-option label="待执行" :value="1" />
+              <el-option label="执行中" :value="2" />
+              <el-option label="失败" :value="3" />
+              <el-option label="已结束" :value="4" />
+              <el-option label="部分失败" :value="5" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker
+              v-model="searchForm.createTimeRange"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="YYYY-MM-DD"
+              @change="handleSearch"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="handleSearch">
+              <el-icon><Search /></el-icon>
+              查询
+            </el-button>
+            <el-button @click="handleReset">重置</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+
       <!-- 配置列表 -->
       <el-table
         :data="confList"
@@ -684,7 +738,8 @@ import {
   Edit,
   Delete,
   CopyDocument,
-  Close
+  Close,
+  Search
 } from '@element-plus/icons-vue'
 import router from '@/router'
 import dayjs from 'dayjs'
@@ -699,6 +754,14 @@ const currentPage = ref(1)
 const pageSize = ref(10)
 const total = ref(0)
 
+// 查询表单
+const searchForm = ref({
+  queryScope: 1,
+  name: '',
+  status: null,
+  createTimeRange: []
+})
+
 const dramaSort = ref(1)
 const dramaList = ref([])
 const loadPageList = ref([])
@@ -847,7 +910,14 @@ const loadUserInfo = () => {
 const loadConfList = async () => {
   loading.value = true
   try {
-    const res = await getAdPlanConfList(currentPage.value, pageSize.value)
+    const params = {
+      queryScope: searchForm.value.queryScope,
+      name: searchForm.value.name || undefined,
+      status: searchForm.value.status || undefined,
+      createTimeStart: searchForm.value.createTimeRange?.[0] || undefined,
+      createTimeEnd: searchForm.value.createTimeRange?.[1] || undefined
+    }
+    const res = await getAdPlanConfList(currentPage.value, pageSize.value, params)
     if (res.success) {
       confList.value = res.data?.records || []
       total.value = res.data?.total || 0
@@ -862,6 +932,24 @@ const loadConfList = async () => {
   }
 }
 
+// 查询
+const handleSearch = () => {
+  currentPage.value = 1
+  loadConfList()
+}
+
+// 重置
+const handleReset = () => {
+  searchForm.value = {
+    queryScope: 1,
+    name: '',
+    status: null,
+    createTimeRange: []
+  }
+  currentPage.value = 1
+  loadConfList()
+}
+
 const getAdTypeText = (type) => {
   const typeMap = {
     1: '企微',

+ 36 - 2
src/main/java/com/moka/gdtauto/controller/AdPlanConfController.java

@@ -587,10 +587,44 @@ public class AdPlanConfController {
     public Result<Page<AdPlanConf>> getAdPlanConfs(
             @Parameter(description = "页码", example = "1") @RequestParam(defaultValue = "1") Integer pageNum,
             @Parameter(description = "每页大小", example = "10") @RequestParam(defaultValue = "10") Integer pageSize,
+            @Parameter(description = "查询范围:1-我的,2-全部") @RequestParam(defaultValue = "2") Integer queryScope,
+            @Parameter(description = "计划名称") @RequestParam(required = false) String name,
+            @Parameter(description = "状态") @RequestParam(required = false) Integer status,
+            @Parameter(description = "创建开始时间") @RequestParam(required = false) String createTimeStart,
+            @Parameter(description = "创建结束时间") @RequestParam(required = false) String createTimeEnd,
             @AuthUser SysUser sysUser) {
         try {
-            Page<AdPlanConf> page = adPlanConfService.getUserAdPlanConfs(
-                    sysUser.getId(), pageNum, pageSize, false);
+            LambdaQueryWrapper<AdPlanConf> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(AdPlanConf::getDeleted, 0);
+            
+            // 查询范围:1-我的,2-全部
+            if (queryScope != null && queryScope == 1) {
+                wrapper.eq(AdPlanConf::getUserId, sysUser.getId());
+            }
+            
+            // 名称模糊查询
+            if (name != null && !name.trim().isEmpty()) {
+                wrapper.like(AdPlanConf::getName, name.trim());
+            }
+            
+            // 状态查询
+            if (status != null) {
+                wrapper.eq(AdPlanConf::getStatus, status);
+            }
+            
+            // 创建时间范围查询
+            if (createTimeStart != null && !createTimeStart.isEmpty()) {
+                wrapper.ge(AdPlanConf::getCreateTime, createTimeStart);
+            }
+            if (createTimeEnd != null && !createTimeEnd.isEmpty()) {
+                wrapper.le(AdPlanConf::getCreateTime, createTimeEnd);
+            }
+            
+            // 按ID降序排列
+            wrapper.orderByDesc(AdPlanConf::getId);
+            
+            Page<AdPlanConf> page = new Page<>(pageNum, pageSize);
+            page = adPlanConfService.page(page, wrapper);
             return Result.success(page, "查询成功");
         } catch (Exception e) {
             log.error("查询广告计划配置列表失败", e);

+ 1 - 1
src/main/java/com/moka/gdtauto/entity/AdPlanConf.java

@@ -132,7 +132,7 @@ public class AdPlanConf {
      * 落地页IDs
      */
     private String pageIds;
-
+    // 1-待执行,2-执行中,3-失败,4-已结束 5-部分失败
     private Integer status;
     private String failReason;
     private LocalDateTime successTime;

+ 1 - 2
src/main/java/com/moka/gdtauto/service/AdAutoExecutor.java

@@ -77,7 +77,6 @@ public class AdAutoExecutor {
                 .eq(AdPlanConf::getJobNumber, autoConf.getJobNumber())
                 .in(AdPlanConf::getStatus, List.of(4, 5))
                 .eq(AdPlanConf::getDeleted, 0)
-                .eq(AdPlanConf::getSystemSuspendProcessStatus, 0)
                 .list();
         if (adPlanConfs == null || adPlanConfs.isEmpty()) {
             log.warn("[AdAutoExecutor] 未找到 AdPlanConf,jobNumber={}", autoConf.getJobNumber());
@@ -169,7 +168,7 @@ public class AdAutoExecutor {
                 }
                 plans = plans.stream()
                 .filter(plan -> {
-                    return plan.getConfiguredStatus().equals("") || plan.getConfiguredStatus().equals(ConfiguredStatus.SUSPEND.getValue());
+                    return plan.getConfiguredStatus().equals("") || plan.getConfiguredStatus().equals(ConfiguredStatus.NORMAL.getValue());
                 }).collect(Collectors.toList());
                 
                 adCount += plans.size();

Некоторые файлы не были показаны из-за большого количества измененных файлов