فهرست منبع

feat:丰富创建广告计划默认值

pudongliang 4 ماه پیش
والد
کامیت
2639c22395
43فایلهای تغییر یافته به همراه226 افزوده شده و 61 حذف شده
  1. 1 1
      portal/dist/assets/accountGroup-DW0jOhBF.js
  2. 1 1
      portal/dist/assets/adAutoConf-B7qdKu4B.js
  3. 0 1
      portal/dist/assets/adPlanConf-DFdiy7m1.js
  4. 1 0
      portal/dist/assets/adPlanConf-DX2nu9yS.js
  5. 1 1
      portal/dist/assets/auth-B7Nu_vCq.js
  6. 1 1
      portal/dist/assets/conversion-B6S0Mg_5.js
  7. 0 0
      portal/dist/assets/detail-Bo8IoIhm.js
  8. 1 1
      portal/dist/assets/drama-BNUj9Ik4.js
  9. 0 1
      portal/dist/assets/edit-Blj7A4CV.css
  10. 0 0
      portal/dist/assets/edit-CWnQueoT.js
  11. 1 0
      portal/dist/assets/edit-pu_LsWtY.css
  12. 0 1
      portal/dist/assets/index-0MmA-K0O.css
  13. 0 0
      portal/dist/assets/index-5wHpskw5.css
  14. 1 0
      portal/dist/assets/index-BKtci71u.css
  15. 0 0
      portal/dist/assets/index-BguwAwOI.js
  16. 0 0
      portal/dist/assets/index-BowrH8he.js
  17. 0 0
      portal/dist/assets/index-BvN5aExN.js
  18. 0 0
      portal/dist/assets/index-Bvlc7Z7p.js
  19. 0 0
      portal/dist/assets/index-Byj-TIio.js
  20. 0 0
      portal/dist/assets/index-C59pEWcr.js
  21. 0 0
      portal/dist/assets/index-CC9yKosn.js
  22. 0 0
      portal/dist/assets/index-CY8uvpcx.js
  23. 1 0
      portal/dist/assets/index-Cd8ld78-.css
  24. 0 0
      portal/dist/assets/index-Ct02MUry.js
  25. 0 0
      portal/dist/assets/index-CvfrM1iB.js
  26. 0 1
      portal/dist/assets/index-CvzQKMxG.css
  27. 0 0
      portal/dist/assets/index-D8ucX4jQ.js
  28. 1 1
      portal/dist/assets/index-DALuELrA.js
  29. 1 0
      portal/dist/assets/index-Dti5aB1X.css
  30. 0 0
      portal/dist/assets/index-aqmsxMwK.js
  31. 0 0
      portal/dist/assets/index-cYEcTYxc.js
  32. 0 0
      portal/dist/assets/index-j2gT7qTS.js
  33. 0 0
      portal/dist/assets/index-n5YbSimr.js
  34. 0 1
      portal/dist/assets/index-vV63W3OI.css
  35. 1 1
      portal/dist/assets/loadPageConf-Czxsd5JV.js
  36. 1 1
      portal/dist/assets/ossFile-DhgjARPw.js
  37. 0 0
      portal/dist/assets/request-CIfv11EJ.js
  38. 1 1
      portal/dist/assets/user-Pn8WeDQ6.js
  39. 14 14
      portal/dist/index.html
  40. 23 0
      portal/src/api/adPlanConf.js
  41. 126 32
      portal/src/views/ad-plan-conf/index.vue
  42. 2 1
      src/main/java/com/moka/gdtauto/controller/AccountGroupController.java
  43. 47 0
      src/main/java/com/moka/gdtauto/controller/AdPlanConfController.java

+ 1 - 1
portal/dist/assets/accountGroup-DyNykVgI.js → portal/dist/assets/accountGroup-DW0jOhBF.js

@@ -1 +1 @@
-import{r as u}from"./request-CysOvY4O.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-CIfv11EJ.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-D3ESN7ez.js → portal/dist/assets/adAutoConf-B7qdKu4B.js

@@ -1 +1 @@
-import{r as e}from"./request-CysOvY4O.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-CIfv11EJ.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-DFdiy7m1.js

@@ -1 +0,0 @@
-import{r as a}from"./request-CysOvY4O.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 l(n){return a({url:`/api/ad-plan-conf/syncSystemStatus/${n}`,method:"get"})}function u(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,t=10){return a({url:"/api/ad-plan-conf/list",method:"get",params:{pageNum:n,pageSize:t}})}function f(n){return a({url:`/api/ad-plan-conf/${n}`,method:"get"})}function i(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 m(n){return a({url:"/api/ad-plan-conf/gdtSuspendByConfId",params:{confId:n},method:"get"})}function g(n){return a({url:"/api/ad-plan-conf/gdtDeleteByConfId",params:{confId:n},method:"get"})}function h(n,t){return a({url:`/api/ad-plan-conf/gdtSuspendByPlanIds/${n}`,method:"post",data:t})}function P(n,t){return a({url:`/api/ad-plan-conf/gdtDeleteByPlanIds/${n}`,method:"post",data:t})}export{d as a,f as b,u as c,i as d,g as e,h as f,s as g,P as h,l as i,o as j,c as k,r,m as s,p as u};

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

@@ -0,0 +1 @@
+import{r as a}from"./request-CIfv11EJ.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 - 1
portal/dist/assets/auth-BbfwFiki.js → portal/dist/assets/auth-B7Nu_vCq.js

@@ -1 +1 @@
-import{r as t}from"./request-CysOvY4O.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-CIfv11EJ.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-B7AjhImA.js → portal/dist/assets/conversion-B6S0Mg_5.js

@@ -1 +1 @@
-import{r as t}from"./request-CysOvY4O.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-CIfv11EJ.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-Bo8IoIhm.js


+ 1 - 1
portal/dist/assets/drama-elWHXNGU.js → portal/dist/assets/drama-BNUj9Ik4.js

@@ -1 +1 @@
-import{r as t}from"./request-CysOvY4O.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-CIfv11EJ.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};

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

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

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/edit-CWnQueoT.js


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

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

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

@@ -1 +0,0 @@
-[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-5wHpskw5.css


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

@@ -0,0 +1 @@
+.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-BguwAwOI.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-BowrH8he.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-BvN5aExN.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-Bvlc7Z7p.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-Byj-TIio.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-C59pEWcr.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-CC9yKosn.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-CY8uvpcx.js


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

@@ -0,0 +1 @@
+.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-Ct02MUry.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-CvfrM1iB.js


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

@@ -1 +0,0 @@
-.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-D8ucX4jQ.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
portal/dist/assets/index-DALuELrA.js


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

@@ -0,0 +1 @@
+[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-aqmsxMwK.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-cYEcTYxc.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-j2gT7qTS.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
portal/dist/assets/index-n5YbSimr.js


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

@@ -1 +0,0 @@
-.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-BgQpqnIy.js → portal/dist/assets/loadPageConf-Czxsd5JV.js

@@ -1 +1 @@
-import{r as o}from"./request-CysOvY4O.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-CIfv11EJ.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-U4ecKWb_.js → portal/dist/assets/ossFile-DhgjARPw.js

@@ -1 +1 @@
-import{r as t}from"./request-CysOvY4O.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-CIfv11EJ.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-CIfv11EJ.js


+ 1 - 1
portal/dist/assets/user-Ck1w4bPK.js → portal/dist/assets/user-Pn8WeDQ6.js

@@ -1 +1 @@
-import{r as e}from"./request-CysOvY4O.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-CIfv11EJ.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-DlhnArub.js"></script>
-    <link rel="stylesheet" crossorigin href="/assets/index-Cb0Z9rAk.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-DALuELrA.js"></script>
+    <link rel="stylesheet" crossorigin href="/assets/index-5wHpskw5.css">
+  </head>
+  <body>
+    <div id="app"></div>

+  </body>
+</html>

+ 23 - 0
portal/src/api/adPlanConf.js

@@ -148,3 +148,26 @@ export function deleteByPlanIds(confId, ids) {
     data: ids
   })
 }
+
+export function getOneCreativeImage(ids = []) {
+  return request({
+    url: '/api/ad-plan-conf/getOneCreativeImage',
+    method: 'post',
+    data: ids
+  })
+}
+
+export function getOneBrandImage() {
+  return request({
+    url: '/api/ad-plan-conf/getOneBrandImage',
+    method: 'get'
+  })
+}
+
+export function getOneCreativeVideo(ids = []) {
+  return request({
+    url: '/api/ad-plan-conf/getOneCreativeVideo',
+    method: 'post',
+    data: ids
+  })
+}

+ 126 - 32
portal/src/views/ad-plan-conf/index.vue

@@ -39,9 +39,9 @@
               {{ getPlanStatusText(row.status) }}
             </el-tag>
           </template>
-          </el-table-column>  
+          </el-table-column>
           <el-table-column prop="failReason" label="原因" width="100" show-overflow-tooltip>
-          </el-table-column> 
+          </el-table-column>
         <el-table-column label="广告类型" align="center" width="90">
           <template #default="{ row }">
             <el-tag :type="getAdTypeColor(row.adType)">
@@ -138,7 +138,7 @@
             clearable
           />
         </el-form-item>
-        
+
         <el-form-item label="广告类型" prop="adType">
           <el-radio-group v-model="formData.adType">
             <el-radio label="企微" :value="1" />
@@ -346,7 +346,11 @@
 
         <el-form-item label="创意图片/视频" prop="creativeFileArr">
           <div class="flex flex-col gap-2">
-            <el-button :disabled="valueDisabled" size="small" @click="openFileSelector('creative')" style="width: fit-content">选择文件</el-button>
+            <div class="flex flex-row gap-2">
+              <el-button  :disabled="valueDisabled" size="small" @click="openFileSelector('creative')" style="width: fit-content">选择文件</el-button>
+              <el-button type="primary" :disabled="valueDisabled" size="small" @click="addOneCreativeImage" style="width: fit-content"><el-icon><Plus /></el-icon> 加个图片</el-button>
+              <el-button type="primary" :disabled="valueDisabled" size="small" @click="addOneCreativeVideo" style="width: fit-content"><el-icon><Plus /></el-icon> 加个视频</el-button>
+            </div>
             <div v-if="formData.creativeFileArr" class="flex flex-wrap gap-2">
               <div
                 v-for="(cf, index) in formData.creativeFileArr"
@@ -367,6 +371,7 @@
                   style="width: 80px; height: 80px; display: block"
                   class="cursor-pointer rounded border"></video>
                 <button
+                  type="button"
                   :disabled="valueDisabled"
                   @click="removeFile('creative', index)"
                   class="absolute -top-1 -right-1 cursor-pointer bg-red-500 text-white rounded-full w-5 h-5 flex items-center justify-center hover:bg-red-600 transition-colors"
@@ -383,7 +388,10 @@
 
         <el-form-item label="品牌形象图片" prop="brandImageUrl">
           <div class="flex flex-col gap-2">
-            <el-button :disabled="valueDisabled" size="small" @click="openFileSelector('brand')" style="width: fit-content">选择图片</el-button>
+            <div class="flex flex-row gap-2">
+              <el-button  :disabled="valueDisabled" size="small" @click="openFileSelector('brand')" style="width: fit-content">选择图片</el-button>
+              <el-button type="primary" :disabled="valueDisabled" size="small" @click="randomOneBrandImage" style="width: fit-content"><el-icon><Refresh /></el-icon> 随机图片</el-button>
+            </div>
             <div v-if="formData.brandImageUrl">
               <div class="relative inline-block">
                 <el-image
@@ -394,6 +402,7 @@
                   class="cursor-pointer rounded border"
                 />
                 <button
+                  type="button"
                   :disabled="valueDisabled"
                   @click="removeFile('brand', 0)"
                   class="absolute -top-1 -right-1 cursor-pointer bg-red-500 text-white rounded-full w-5 h-5 flex items-center justify-center hover:bg-red-600 transition-colors"
@@ -439,7 +448,7 @@
         </el-form-item>
       </el-form>
       <el-button type="primary" @click="handleReCreate">预览</el-button>
-      <el-table :data="plans" 
+      <el-table :data="plans"
       :preserve-expanded-content="true"
         row-key="adgroupName"
         :expand-row-keys="expandedRows"
@@ -511,7 +520,7 @@
             <template #default="{ row }">
               {{ row.assetType === 1 ? row.dramaId : row.fictionId }}
             </template>
-            </el-table-column>  
+            </el-table-column>
         <el-table-column prop="dramaName" label="资产名称" width="120" show-overflow-tooltip >
           <template #default="{ row }">
             {{ row.assetType === 1 ? row.dramaName : row.fictionName }}
@@ -588,7 +597,7 @@
           </template>
         </el-table-column>
         <el-table-column prop="fileType" label="类型" width="100" />
-       
+
         <el-table-column label="业务分类" width="120">
           <template #default="{ row }">
             <el-tag v-if="row.businessType === 1" type="success">创意</el-tag>
@@ -647,7 +656,7 @@
 </template>
 
 <script setup>
-import { ref, computed, onMounted, watch } from 'vue'
+import { ref, computed, onMounted, watch, toRaw } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import {
   getAdPlanConfList,
@@ -655,7 +664,10 @@ import {
   updateAdPlanConf,
   deleteAdPlanConf,
   reCreateAdPlanConf,
-  generatePlan
+  generatePlan,
+    getOneCreativeImage,
+    getOneCreativeVideo,
+    getOneBrandImage
 } from '@/api/adPlanConf'
 import { myDramaAssetList } from '@/api/drama'
 import { getConversions } from '@/api/conversion'
@@ -670,6 +682,9 @@ import {
   Close
 } from '@element-plus/icons-vue'
 import router from '@/router'
+import dayjs from 'dayjs'
+import { de } from 'element-plus/es/locales.mjs'
+
 
 // 数据
 const loading = ref(false)
@@ -813,6 +828,16 @@ const formRules = {
   ],
 }
 
+const userInfo = ref(null)
+
+// 加载用户信息
+const loadUserInfo = () => {
+  const storedUserInfo = localStorage.getItem('userInfo')
+  if (storedUserInfo) {
+    userInfo.value = JSON.parse(storedUserInfo)
+  }
+}
+
 // 方法
 const loadConfList = async () => {
   loading.value = true
@@ -871,7 +896,7 @@ const getPlanStatusText = (status) => {
     2: '执行中',
     3: '失败',
     4: '已结束',
-    5: '部分失败'       
+    5: '部分失败'
   }
   return statusMap[status] || '未知'
 }
@@ -901,15 +926,81 @@ const handleAdTypeChange = () => {
   }
 }
 
-const handleCreate = () => {
+const addOneCreativeImage = async () => {
+  const oldIds = formData.value.creativeFileArr.map(file => file.id)
+  const creativeImage = await getOneCreativeImage(oldIds)
+  if (creativeImage.success) {
+    formData.value.creativeFileArr.push(creativeImage.data)
+    const urls = formData.value.creativeFileArr.map(file => file.fileUrl).join(',')
+    // 去除文件后缀
+    const fileNames = formData.value.creativeFileArr.map(file => file.originalFileName.split('.').slice(0, -1).join('.')).join(',')
+    formData.value.creativeFileUrls = urls
+    formData.value.creativeFileNames = fileNames
+  }
+}
+
+const addOneCreativeVideo = async () => {
+  const oldIds = formData.value.creativeFileArr.map(file => file.id)
+  const creativeVideo = await getOneCreativeVideo(oldIds)
+  if (creativeVideo.success) {
+    formData.value.creativeFileArr.push(creativeVideo.data)
+    const urls = formData.value.creativeFileArr.map(file => file.fileUrl).join(',')
+    // 去除文件后缀
+    const fileNames = formData.value.creativeFileArr.map(file => file.originalFileName.split('.').slice(0, -1).join('.')).join(',')
+    formData.value.creativeFileUrls = urls
+    formData.value.creativeFileNames = fileNames
+  }
+}
+
+const randomOneBrandImage = async () => {
+  const brandImage = await getOneBrandImage()
+  if (brandImage.success) {
+    formData.value.brandImageFile = brandImage.data
+    formData.value.brandImageUrl = brandImage.data.fileUrl
+  }
+}
+
+const handleCreate = async () => {
   //1,2,3,4,5,6,7,8,9,10,11
   //随机一个1-11
+  const name = userInfo.value.name + dayjs().format('MMDDHH')
+  const createImage = await getOneCreativeImage([])
+  console.log(createImage)
+  let creativeFileArr = []
+  let creativeFileUrls = ''
+  let creativeFileNames = ''
+  if (createImage.success) {
+    creativeFileArr = [createImage.data]
+    creativeFileUrls = createImage.data.fileUrl
+    creativeFileNames = createImage.data.originalFileName
+  }
+
+  const brandImage = await getOneBrandImage()
+  let brandImageFile = null
+  let brandImageUrl = ''
+  if (brandImage.success) {
+    brandImageFile = brandImage.data
+    brandImageUrl = brandImage.data.fileUrl
+  }
+
+  let myLoadPageList = toRaw(loadPageList.value).filter(page => page.createUserId === userInfo.value.id)
+  console.log(myLoadPageList)
+  let pageIdArr = []
+  let pageIds = ''
+  if (myLoadPageList.length > 0) {
+    pageIdArr = [myLoadPageList[0].pageId]
+    pageIds = myLoadPageList[0].pageId + ''
+  }
+
+  let accountGroupId = toRaw(accountGroupList.value)[0].id
+  
+
   const site = Math.floor(Math.random() * 11) + 1
   dialogTitle.value = '创建配置'
   editingId.value = null
   formData.value = {
-    name: '',
-    accountGroupId: null,
+    name: name,
+    accountGroupId: accountGroupId,
     adType: 2,
     bidAmount: 150,
     deepConversionWorthRate: 50.00,
@@ -923,13 +1014,13 @@ const handleCreate = () => {
     assetModel: 1,
     fictionAmount: 0,
     imageIds: '',
-    pageIds: '',
-    pageIdArr: [],
-    creativeFileArr: [],
-    creativeFileUrls: '',
-    creativeFileNames: '',
-    brandImageFile: null,
-    brandImageUrl: '',
+    pageIds: pageIds,
+    pageIdArr: pageIdArr,
+    creativeFileArr: creativeFileArr,
+    creativeFileUrls: creativeFileUrls,
+    creativeFileNames: creativeFileNames,
+    brandImageFile: brandImageFile,
+    brandImageUrl: brandImageUrl,
     creativeText: '情感美文点点看',
     brandName: '情感美文',
     buttonText: '查看详情',
@@ -1151,16 +1242,16 @@ const confirmFileSelection = () => {
     ElMessage.warning('请至少选择一个文件')
     return
   }
-  
+
   if (currentFileType.value === 'brand' && selectedFiles.value.length > 1) {
     ElMessage.warning('品牌形象图片只能选择1张')
     return
   }
-  
+
   const urls = selectedFiles.value.map(file => file.fileUrl).join(',')
   // 去除文件后缀
   const fileNames = selectedFiles.value.map(file => file.originalFileName.split('.').slice(0, -1).join('.')).join(',')
-  
+
   if (currentFileType.value === 'creative') {
     formData.value.creativeFileUrls = urls
     formData.value.creativeFileNames = fileNames
@@ -1169,7 +1260,7 @@ const confirmFileSelection = () => {
     formData.value.brandImageUrl = selectedFiles.value[0].fileUrl
     formData.value.brandImageFile = selectedFiles.value[0]
   }
-  
+
   fileSelectorVisible.value = false
   selectedFiles.value = []
 }
@@ -1177,13 +1268,15 @@ const confirmFileSelection = () => {
 // 移除文件
 const removeFile = (type, index) => {
   if (type === 'creative') {
-    const urls = formData.value.creativeFileUrls.split(',')
-    urls.splice(index, 1)
-    formData.value.creativeFileUrls = urls.filter(url => url).join(',')
-    // 同步更新 creativeFileArr
-    if (formData.value.creativeFileArr && formData.value.creativeFileArr.length > index) {
-      formData.value.creativeFileArr.splice(index, 1)
-    }
+    const arr = toRaw(formData.value.creativeFileArr)
+    arr.splice(index, 1)
+    debugger
+    formData.value.creativeFileArr = [...arr]
+    debugger
+    formData.value.creativeFileUrls = arr.map(file => file.fileUrl).join(',')
+    debugger
+    formData.value.creativeFileNames = arr.map(file => file.originalFileName).join(',')
+    debugger
   } else if (type === 'brand') {
     formData.value.brandImageUrl = ''
     formData.value.brandImageFile = null
@@ -1248,6 +1341,7 @@ onMounted(() => {
   loadAccountGroupList()
   loadDramaList()
   loadLoadPageList()
+  loadUserInfo()
 })
 </script>
 

+ 2 - 1
src/main/java/com/moka/gdtauto/controller/AccountGroupController.java

@@ -20,7 +20,7 @@ import java.util.List;
 
 /**
  * 账号组管理控制器
- * 
+ *
  * @author moka
  * @since 2026-02-24
  */
@@ -136,6 +136,7 @@ public class AccountGroupController {
         try {
             List<AccountGroup> accountGroups = accountGroupService.lambdaQuery()
                     .eq(AccountGroup::getUserId, sysUser.getId())
+                    .orderByDesc(AccountGroup::getId)
                     .list();
             return Result.success(accountGroups, "查询成功");
         } catch (Exception e) {

+ 47 - 0
src/main/java/com/moka/gdtauto/controller/AdPlanConfController.java

@@ -26,6 +26,7 @@ import com.moka.gdtauto.service.AdPlanConfService;
 import com.moka.gdtauto.service.AdPlanCreativeService;
 import com.moka.gdtauto.service.AdPlanDailyReportService;
 import com.moka.gdtauto.service.AdPlanService;
+import com.moka.gdtauto.service.OssFileService;
 
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -71,6 +72,7 @@ public class AdPlanConfController {
     private final AccountGroupService accountGroupService;
     private final TencentAssetDramaMapper tencentAssetDramaMapper;
     private final TencentAssetFictionMapper tencentAssetFictionMapper;
+    private final OssFileService ossFileService;
 
     @GetMapping("/gdtSuspendByConfId")
     public Result<Void> gdtSuspendByConfId(@NotNull Long confId) {
@@ -635,4 +637,49 @@ public class AdPlanConfController {
             return Result.fail("查询广告计划配置详情失败: " + e.getMessage());
         }
     }
+
+
+    @PostMapping("/getOneCreativeImage")
+    public Result<OssFile> getOneCreativeImage(@RequestBody List<Long> ids) {
+        try {
+            OssFile ossFile = ossFileService.lambdaQuery()
+                    .notIn(ids != null && !ids.isEmpty(), OssFile::getId, ids)
+                    .eq(OssFile::getBusinessType, 1)
+                    .eq(OssFile::getFileType, "image")
+                    .last("order by rand() limit 1").one();
+            return Result.success(ossFile, "查询成功");
+        } catch (Exception e) {
+            log.error("查询创意图片失败", e);
+            return Result.fail("查询创意图片失败: " + e.getMessage());
+        }
+    }
+
+    @PostMapping("/getOneCreativeVideo")
+    public Result<OssFile> getOneCreativeVideo(@RequestBody List<Long> ids) {
+        try {
+            OssFile ossFile = ossFileService.lambdaQuery()
+                    .notIn(ids != null && !ids.isEmpty(), OssFile::getId, ids)
+                    .eq(OssFile::getBusinessType, 1)
+                    .eq(OssFile::getFileType, "video")
+                    .last("order by rand() limit 1").one();
+            return Result.success(ossFile, "查询成功");
+        } catch (Exception e) {
+            log.error("查询创意视频失败", e);
+            return Result.fail("查询创意视频失败: " + e.getMessage());
+        }
+    }
+
+    @GetMapping("/getOneBrandImage")
+    public Result<OssFile> getOneBrandImage() {
+        try {
+            OssFile ossFile = ossFileService.lambdaQuery()
+                    .eq(OssFile::getBusinessType, 2)
+                    .eq(OssFile::getFileType, "image")
+                    .last("order by rand() limit 1").one();
+            return Result.success(ossFile, "查询成功");
+        } catch (Exception e) {
+            log.error("查询品牌图片失败", e);
+            return Result.fail("查询品牌图片失败: " + e.getMessage());
+        }
+    }
 }

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است