投放指南
+账户列表
+投放优化建议
+投放行动指南
+{{ item.name }}
+账号管理
+{{ item.name }}
+账户管理
+投放指南
-账户列表
-投放优化建议
-本月摘要。
+ +投放建议优化。
+ +投放行动指南
-本月摘要。
- -投放建议优化。
- -本周总消耗
+ +本周总消耗环比
+ +roi
+ +ctr
+ +本月摘要。
+ +投放建议优化。
+ +W;9 z;ju%WN_8i`6bGVoZ2O$9&`aehtV zbEuYAjIVX`I#l3^ajpCS-03d-Qo8vP)DwcGvoQ8cji`QPmuS!-4tw9*;sl-iFqBoL zg&rZ#B;Zb#{aBrpSmz%%3743Al;(iJnlTKjpoLOg^$PkKDL@caqG)}HiaXvJy#ko{?_y <&A1!+KQ1; zQ--9GwTvzu)4wl6F~-X}wyHm%+U8!t6?^m+)gD)^NXQg>Drc04mYO<}K+CAqDsbYT zRi}y%#5z^!>PJ#73`r`al*^DOx#|Y4PDaL12;G PRSu5@Rt~A7?xq?X*DV=&Q7dKwZKlO$ z;ufgnVaJ3zBvis66yUMiW=2~>x-YV<7^o$ST~IcGQj!G~%?6Z_I7~8lM&<+=@zKx% zF3r~_tr>s`Ncv8?R7N2$Ha^|;9Cd669`2^BwD#o_JvB|K-4%b$0s}DePe)bsh3>Ae zHG#)=_&vt@Rd1lHmd(~i2Uco?_V=WXF&rq}Qa&~a9cf`wK|x4`-L_F;7y)~l;=%M& zz(5!O7znIfjb{e}nO)ziU*7iw0y&rjK%}eYN_iFFbDm~f>BigNh9?O70@g0V%_Iho znk319qU=Z*6$xg&93@Ot+aRc9iRLpfne)V*iM&owR5Ub+qmqWf2tjQdskEcIOdiu* z#;AasC82UV%;3ui&x~O*E%i$8Ug|9V<=`~bC{}`3D@ux>;z0$j0wgXgNDizdoTUMG z&ztn}@Am=~449*&S6_?+65?tIPL` nu z5(x!Bt*4^`N^QGKA^x6#)S1(m7NC7AMag1s-(jKcv#(M~zKtKpC-s!^vNRk&Z0gNz z|L5=oVPC*X#J$avyk_qN?@ib4fm#J5Qvq{uVwM-=HqO+uvdFE1f^D(fVJwv<;LZw& zq)5&&SwiVY>+-Pz`MLmI%N?b>b|;c 1mP~nQuGRdTXndtM8cHT(Rh-AsXlLE}RaF;uJ6i7PQ zM%lwRNz!L*>Y;!Xt!`$^kxI54Cj-dqr>lF%I)^rr57WJ3W%C$eg(p`7T{@AgZBE X46+o;H>H!5 zX?dHJwOZN7+)E!B2vN#TDo}g$1bi2sAnXfRi$~#hyA=eA5_AskZ8OPJh}_)U0*atM zYCM;KBh54aOrXp^rU&h~15hYnYIjxAO?D-%gGcSFT}?Drl`-307H1UZM)E(YBVXq` zMN|0fiv^cRL7f^DP?gOTwoDN9fk6ZFI=T1C4r7R_WdTR2w-9U#MY@19xN?obF2N$P zIELCJ`L4mBx #Jq9P}JV7OZd;NVosal6vS?y-umY9^KJii!eOYyWlQT>;~&n-QQH zIMHcf;BxQ)6ooi|2RkliDiYYzwt8crWTPL86mb_g=iRDmrK%!EJ4?Agh&0Smb}E%j z;&9zs2>CVc^#he~E@42^Kmd#~7zd!uv!Vir+fnv#b-j?%Csb@hw*U6Ij46hF0Soh4 z?pJ6lHF|-d9N8QQPAWJG)dZDh3ZCq+7^@Q@yUbnU$un_k>;{RVo;?Ln%XSbIkQhKl zs?J5}W3^a3BvLECQ(H oBsKrt&cX3shR^fT28h+sw@jmB`%BBWV)_@HKiwAFHiRZ8t_05{j2mswLlF z<8*C(;+Q$*q_$J|eR#sKFJR@+EWlPmM-v P7+dAl*)R>ZlS-8~6Zu#=#_a-j zqpQ6WB?{*sKr<>k?6|S|P8t!_z5*cHm3sy!$+i>B@43g)-|j9LXMH28Z@KrwK`H@s z8jIy+8I7)uFv6|WDkC~jpoKw=1L%ZqZ9$+Q$=t|?qC&YB3_`jHmP%>_H!;^G8u3sY z@&@i!B?X9qWITlr<}r1z3AR=wPJ*CP1+|Z4D-nC>sMtMjccpr5Yu}Xew0xfZpfVT5 z;MYE)@?3r!?T=u~>Dt2rC@3d^**gQ1F$H57x^uv$0J!X=SzUuC4EqKa?ZDks(&G4# zs)891=nexRV&zDzvVnWs3?$t72>^U{J3x^jKn|FyNK4B%1Mdw)DwSBZGiL _Qn$kBQo=N$@ zp{6${i83u4i$^C;;3as%uy0_cavnCq^+~0N0S8pu;`^+&sf*k+!wMY1Y2XrRG%D{y zk<|I^#nH5^LV8326HBh$q-=~AR61qgsT9dB^Hv9WaRJVzMx02!xgG5nw_}>HKodKi zjui;woQ tjdjq&~>?Fj5U%|*>AOu%gtE#JL+%>7$%!yQ8z>gA*; zCD4eF{M2Fx4)zzS3K&b@v^v)(c2Db`HDAxyDkA{VOtLE2Y8$;DKtJik9!3QRhH+QP zX?wTYwy+a3QAGWw0#4RIOkHk*^n)OgL2X0eeC*?g`PCo5Q-u9XtOdA-JF<&6Ni4RP z3=jb7Oc<9AQ1y q7a9Ql#6Ovlx{7!r;7 =P#Lk )#K4H!!Zf*Fc5I(AeE~BSNk49$ z%*}3L-@r-)zPm8u&5A6s0{7xz_7SOPFUK+O-0rStBLowGWA7C(;43D8rHp%@MzSD~ zuUYLR-fYQ|XF |}n?z~|GWoj954HjoaKa=6x? zp%afVIUCdlDm%lBf0tllxcDHG<*nrq6^|+s)b3ya_u@fEZB=iY9c-mSsDPNleMkDX zCUw k>+iZXh3bQm~sO6z7FADni#LM8Xyio-hJN znmSTQ+li&$95~Vkj356-fZDh`US+IGy<$EiWf(Tr6Sx9T5%vwNtu44ePLssJ8PJnP zxh~mmNx8Z?O;CuQ KI`7c?L(8JPW0Y8AR;@XzG-1C&gWm z`tY;e1-Z{ a2X!x->JsY{q?Xmy=Un{sT+`*nz5r8cl *_Z~*i>DH}RnW+RL2Y3SLAqvl{X~^5XE3gkA ERk;mfa!932bRI+-i`wF*wz(u5bSxavh(Z8}MV-?D z%>Y23moj3sGN=H^K`0WTtb#C(t)4F?Fax?u4^weWda38rC08y&PbDThT-9tpd!`;f zk>FH3q%4U@*Vlm`jOw d#LkeL`9LLjim-2B<*>aCyGi^vnb0R~y-X-LAh^<5 zC>cP;vSdi`l_gLv)zq{6jgTD$LVC8mP{5K^!G%$gd|6uV@&(v;f{UEnkunl0F` ZNV9m};I3 TG&SV{HS(dP?JB 6odk!E1S5I@|6m(Es|zKEo3MD|OIjV(&-PSpehw9mQSouRlGw2#04GLg}j;| z0EqRzv4DOtb>g;a^;|{<>KI;0UA%3?f{h!$;sBsPfChGQ+W>+G&xll 5yH?_xj z-mML7&e8^zkaKIzjm>FQ0_z6}Mg5ecj9b?LpfDQl3zL2$wyijwuP+@z?d_x*d`(f~ zxNO}mA<{{APmnk~+DX|hZYx<@TSQIP2gR$IO@#LF3Os pKG#H#()kU6nk!y!^GUEs5W5>h9si^n5Ew zqXhxtQu^I0(uq~T#kLGk>hQDaXOjsstcs9v4+E-e)><1-1&eV*jVr@bCR|N5^L; Rp*8gc1zkWU*XWoJY}%0rrJ-w z(jgOjV}j8@BTR(}c`S|wQdQd)-Nt%5^8qL-;#54zzHBLf-f0AWz!1+@Dqy(0R=yHr z^#%8+s+Y1wRcl*GYyGX~u(T6Z-A7ihXjVx2&17HQgQpBn1gs<>ws#-FGy%j_wuP}0 zvl%htQpIS4Wrs!5<7i>m)ia8D=Qx~2mNYv-@@%Q3vV09d+vPWxzogEJoX?i#nZKT} zq|zyKW(6w)v6;e&lx{5nVcQ%Higjvi7GBj6XncWd8&tC5nc@bhq$tL^dli*?yKQ2& znh|V{X0}^!i`$%(mj|i>A-HOn)uOUu1Iv6;L)8SYOG>Q;sgc4UGQ*v1C36}G_vSi{ ziVK ZvTUM+woHgMz@fNt=jbaDc|$hV1yJ@gY_dS#`?`X&ER9B} _E_o$!h(bxvJfW) NL0=28E!p) zk`+3M{ HRpB6A5PfR zXRUpZVAS}smr6C${ELdFQjKgMRFMiy^ggG8g`goUD-vx8$mduZje}~#khrmfvw &%YvBNU ;KDedmJH!QRDM61 zhWDfL98`*oV;xLNjKOUeQhP{GH3pS3l{6k(n%%k`I@c)+2lP3oQvii$(jVLGu%gV@ zO*2{yZOzzP5 88|sX3l)$uYLaxK`|0^=D&sy#p*dbA^t%@C zbLy$8j-&>)N+SxMHINC-wsBu|GTzBIW}Dqn5po+`%WBJ!ZIM7!iAs_mf5c+shx|C0 zSar)lh>i`AMvQbqI0I!@i8()OvOOc90jo=%>R8Y`_$Y-1?c3D$g#`ukRMk0U#3Pw1 zA&9p6p fW$ zWXhw}q#r(dkhH56XjhlS=+60O@H|Mpk%5%-VBvsSI^9ViY5>=AzDHBUyGju20JrV{ z98K4^Zv!Nb1cwuMOOA_Ui7#!M`h~irC=vG5+`DXFiPsHO{UVbxt-6)P2OiWqAyR(t zTOq_jk-52i#R5cnWU!1__mnQfsjOTWjdZOXI6=F2&7=-R7e3T0yYoe(OOVV~$ 3r_7*RP$rzbRm_ufwGv%1&>skmO%HFu z&aD*p_;LM$%`!|r2=MF`o>&!3tYZ1ryU9K=RGGtINw|n!w >{z^WUG3YWuLXB}d@R?5oYSzp)px6-@yqKe|JRK{^p^_CC8pGgmYOjWXK zv8R6CgjWcdRIqs-o3RITFsSo_BboFN00@EGe2gxb)%;{`DcCR&RW}37sAKT!J5%4t zKvNFoVM(UynDj|@1Z=s40WT*{n(u c#umN_j1dq_NmB_IyFqGRboXD%CGL zq;_ 8#nmWSXnfXxx3mmRlElZD1FY-#`CD-X6bY9Ui~}+;D~}Ke>dgmQ5dx4+Ux21 zM0wt}bsqWmTqg9qc=gqP7ZrgwiUvM(?2GWH zYyV_ks|Jg_xAQ&h{KjYpsoKhChk(|LYP*KZ)@?fwKxBZiXSx!NZ1X1=nDeTcUGb)c z`pfi5u5$oPXqVeGS#wE@)ijvwgc7qr$16*dWCLfdr=(Lifr7^wVH&$>8uQ6}??HQJ zGxfv =m9^70e>_+BIUXVNxjDH4odG;N5OgdnezltO nDRKn;I86M=xq _A-0B7L>T{XafULw$F59 zXxma)4y7vx8mSOZXlCzOLYD(2qa?ed6)Y{QWQ_yJw^cMU_s77=?QIr(WrNglTczYk zy|&vTeX>-^>iOcLNXD#^8L-&!PufYE*1!Z7md*^!U71(R&$5cLkW~7thD=gD^D?yD zUn+Sh%~kH6IRowYz6b5AuZjfvsDNj$@Wc`;hf9~}#F1pvn9BAbUFTnO5^%UD;K`R6 zKzH 6rrOR7!ij5qEk1%Tnix9N-D2Y6TktHuCkW2|V8e zcr~A3@omWe!)vbr{qFBdoG*Sc)#EChPXqmB06)XMrQ%%^&J22IoLp^_QGBPwH5wI9 znHlwd;#-k$t$$G^deFu?*=Z7HTuXv+kdPE5OxV21Dp}bnAglbXetMrAHSKngkmeoR zG6w(@ui28dIjCfhR3%#hR?GO=Lv &=Zu=xvddCiEaYiHV8 z>g3<9 QBMxY18@S0?UTZ}^mi%S zJ0K2&91@6HNWgg;iW>K7@+w7@?Th(g0?@^alIFsNK4=E6VZQ_X;0}F_k31xZ6P3Ig z- cm@aVgAmaV|1t1qL=+Yrz^$pGLnWeIQ5Ft+$Jh}_7XDL#S#sG4_ zL={aI4-*~gsAxHKmdY&Jyq2yi;drKssZ`-P8Iv?7VIJu9;o>E;GS;*4pB*_j(oK>w zCSh{A#L&Q0XNUm02&^7M08{=)jtw{f&W9P^7qD_5IffD;fhDQkS?}h@`JZ1-9Pt|} zf#!uHZf((Lb{|0FfRR=942)_$Szd*|T|mGdvj`Xxu&63l0Vb(qvb+ikSh9ps#}3;u zX>v157|PyHo;5flbx5`hgGL=RtR80ubzu-N2Vj}k@V G-?bZR_-RbIBJ z9 ~6T3)TC&Md&>_sRHg-+NDNne5r@s$_dfm>doOa}YkZ zf!90UqN6u&(vft%cI{fy-jXcJ^K+Lk(@K7y{+8&E(qFQszV)r-gGf^h`ZxNG-$+hH zqDKFa>{RxHa1b { if (!errors) { const _fn = id.value ? putMediaAccounts : postMediaAccounts; - const _params = id.value ? { id: id.value } : form; + const _params = id.value ? { id: id.value, ...form.value } : form; const { code } = await _fn(_params); if (code === 200) { AMessage.success(isEdit.value ? '修改成功' : '生成授权码成功'); diff --git a/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss index 61e48a4..9e4735c 100644 --- a/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss +++ b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss @@ -1,39 +1,10 @@ +@import "@/views/property-marketing/component.scss"; .add-account-modal { border-radius: 8px; - .arco-input-wrapper, - .arco-select-view-single, - .arco-select-view-multiple { - border-radius: 4px; - border-color: #d7d7d9; - background-color: #fff; - &:focus-within, - &.arco-input-focus { - background-color: var(--color-bg-2); - border-color: rgb(var(--primary-6)); - box-shadow: 0 0 0 0 var(--color-primary-light-2); - } - } .w-240px { width: 240px !important; } - .arco-modal-header { - border-bottom: none; - height: 56px; - padding: 22px 24px 16px 24px; - .arco-modal-title { - justify-content: flex-start; - } - } .arco-modal-body { - padding: 24px 24px 20px; - .arco-form-item { - margin-bottom: 16px; - } - .cancel-btn { - border-radius: 4px; - border: 1px solid var(--BG-500, #b1b2b5); - background: var(--BG-white, #fff); - } .upload-block { width: 100%; .dt { @@ -89,8 +60,4 @@ cursor: pointer; } } - .arco-modal-footer { - border-top: none; - padding: 0; - } } diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue new file mode 100644 index 0000000..4766830 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue @@ -0,0 +1,80 @@ + + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue new file mode 100644 index 0000000..5dc0a77 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue @@ -0,0 +1,63 @@ + + ++ ++ ++ ++取消 +确认 ++ + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue index 2355602..31af8ae 100644 --- a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue @@ -5,33 +5,179 @@+++ 确认删除"{{ groupName }}"这个分组吗? +
++取消 +确认删除 +- 分组管理 - + + diff --git a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss index 318e122..0dbc882 100644 --- a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss @@ -1,19 +1,42 @@ +@import '@/views/property-marketing/component.scss'; + .tags-manage-modal { border-radius: 8px; - .arco-modal-header { - border-bottom: none; - height: 56px; - padding: 22px 24px 16px 24px; - .arco-modal-title { - justify-content: flex-start; + .arco-modal-body { + padding: 24px 24px 44px !important; + max-height: 304px; + overflow: hidden; + display: flex; + flex-direction: column; + .arco-btn { + width: fit-content; + .arco-btn-icon { + line-height: 16px; + } + } + .tag-list { + flex: 1; + overflow-y: auto; + display: flex; + flex-wrap: wrap; + .tag-item { + display: flex; + height: 32px; + padding: 0px 8px; + align-items: center; + border-radius: 2px; + background: var(--BG-200, #f2f3f5); + gap: 12px; + .text { + color: var(--Text-2, #3c4043); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + } } } - .arco-modal-body { - padding: 16px 24px 20px; - } - .arco-modal-footer { - border-top: none; - padding: 0; - } } From 7769c3b8bd9d03b73128f2ee3f7fd752115aa10d Mon Sep 17 00:00:00 2001 From: rd <> Date: Thu, 26 Jun 2025 18:31:52 +0800 Subject: [PATCH 11/78] =?UTF-8?q?feat:=20=E6=89=B9=E9=87=8F=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/all/propertyMarketing.ts | 7 +- src/assets/img/media-account/icon-close.png | Bin 0 -> 403 bytes .../account-table/delete-account.vue | 70 ++++++++ .../components/account-table/index.vue | 37 ++++- .../components/add-account-modal/index.vue | 2 +- .../components/tags-manage-modal/index.vue | 11 +- .../media-account/account-manage/index.vue | 157 ++++++++++++++---- .../media-account/account-manage/style.scss | 16 ++ 8 files changed, 252 insertions(+), 48 deletions(-) create mode 100644 src/assets/img/media-account/icon-close.png create mode 100644 src/views/property-marketing/media-account/account-manage/components/account-table/delete-account.vue diff --git a/src/api/all/propertyMarketing.ts b/src/api/all/propertyMarketing.ts index 63c8d43..cc01d23 100644 --- a/src/api/all/propertyMarketing.ts +++ b/src/api/all/propertyMarketing.ts @@ -40,7 +40,7 @@ export const putMediaAccounts = (id: string) => { }; // 媒体账号-删除 -export const deleteMediaAccounts = (id: string) => { +export const deleteMediaAccount = (id: string) => { return Http.delete(`/v1/media-accounts/${id}`); }; @@ -90,3 +90,8 @@ export const putTag = (params = {}) => { export const deleteTag = (id: string) => { return Http.delete(`/v1/media-account-tags/${id}`); }; + +// 媒体账号-批量删除 +export const batchDeleteMediaAccounts = (params = {}) => { + return Http.delete(`/v1/media-accounts/batch`, params); +}; diff --git a/src/assets/img/media-account/icon-close.png b/src/assets/img/media-account/icon-close.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa3c1dec509d8d44d4c1e2b46493477b15b327e GIT binary patch literal 403 zcmV;E0c`$>P)++ + +++ 暂无分组 ++
+ ++ + 去添加 +
+ ++ + 添加新分组 +
+ + +++ ++
编辑 +++ + ++ + ya5iOBU0(h6=q{P0XxN=CT@_4G5vV+0ANLtxyg67AZAttcy_ZPq+o9xdEeJ&)FS^ zyE9(hI`0YON4(n2l_3dnPQo=OEuT4oF`?zS(Dv&$b#e1a_{ p$6~sJTQ<%X&NYhrP0RUXE!|0H51m$?7{002ovPDHLkV1l7OpqKyv literal 0 HcmV?d00001 diff --git a/src/views/property-marketing/media-account/account-manage/components/account-table/delete-account.vue b/src/views/property-marketing/media-account/account-manage/components/account-table/delete-account.vue new file mode 100644 index 0000000..ccc91bf --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/account-table/delete-account.vue @@ -0,0 +1,70 @@ + + + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue b/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue index 7b89186..f929af4 100644 --- a/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue +++ b/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue @@ -5,7 +5,7 @@+++ 确认删除 {{ accountName }} 这个账号吗? +
++取消 +确认删除 ++ +-+ {{ item.name }}
@@ -43,14 +43,14 @@-@@ -60,7 +60,7 @@ diff --git a/src/router/routes/modules/propertyMarketing.ts b/src/router/routes/modules/propertyMarketing.ts index daaaa52..e1c14e6 100644 --- a/src/router/routes/modules/propertyMarketing.ts +++ b/src/router/routes/modules/propertyMarketing.ts @@ -128,7 +128,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ requiresAuth: true, roles: ['*'], }, - component: () => import('@/views/property-marketing/account-placement/placementGuide'), + component: () => import('@/views/property-marketing/put-account/investmentGuidelines'), }, ], }, diff --git a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less new file mode 100644 index 0000000..23e6a7c --- /dev/null +++ b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less @@ -0,0 +1,182 @@ +.placement-guide-style { + //每块div布局 + .part-div { + width: 100%; + height: 100%; + background: var(--BG-white, white); + overflow: hidden; + border-radius: 8px; + outline: 1px var(--BG-300, #E6E6E8) solid; + outline-offset: -1px; + flex-direction: column; + justify-content: flex-start; + display: inline-flex; + margin: 10px; + } + + //每块div 头部 + .part-div-header { + align-self: stretch; + height: 64px; + padding: 10px 24px 10px 24px; + justify-content: flex-start; + align-items: center; + display: inline-flex + } + + //每块div 标题 + .part-div-header-title { + justify-content: center; + display: flex; + flex-direction: column; + color: var(--Text-1, #211F24); + font-size: 18px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 26px; + word-wrap: break-word; + } + + //无数据样式 + .non-data { + display: flex; + align-items: center; /* 垂直居中 */ + justify-content: center; /* 水平居中,如果需要的话 */ + height: 50%; /* 示例:父容器高度为视口高度 */ + } + + .non-data-str { + // 暂无品牌 + color: var(--Text-3, #737478); + font-size: 14px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 22px; + word-wrap: break-word; + margin: 20px 20px; + } + + .add-btn { + font-size: 16px; + padding: 0 24px; + border-radius: 4px; + } + + .materials-page { + background: #fff; + border-radius: 8px; + padding: 32px 24px 24px 24px; + min-height: 600px; + } + + .header-row { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 24px; + } + + .page-title { + font-size: 20px; + font-weight: 600; + margin: 0; + } + + .search-row { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 20px; + } + + .search-input { + width: 240px; + } + + .search-btn, + .reset-btn { + min-width: 72px; + } + + .brand-table { + margin-bottom: 16px; + } + + .logo-cell { + display: flex; + align-items: center; + gap: 6px; + font-weight: 500; + } + + .logo-emoji { + font-size: 20px; + } + + .logo-text { + font-size: 16px; + } + + .pagination-row { + display: flex; + align-items: center; + gap: 16px; + margin-top: 8px; + } + + .page-size-select { + width: 80px; + } + + .upload-card { + width: 80px; + height: 80px; + border: 1px dashed #d9d9d9; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: #999; + font-size: 24px; + background: #fafafa; + border-radius: 6px; + } + + .upload-tip { + font-size: 12px; + color: #999; + margin-top: 4px; + } + + .form-tip { + font-size: 12px; + color: #999; + margin-top: 4px; + } + + .form-item-logo .logo-upload-row { + display: flex; + align-items: center; + gap: 16px; + } + + .logo-upload-card { + display: flex; + gap: 12px; + } + + .form-tip { + color: #999; + font-size: 13px; + margin-left: 8px; + line-height: 1.5; + } + + .a-form .a-form-item { + margin-bottom: 24px; + } + + .a-modal .a-modal-footer { + justify-content: flex-end; + } +} diff --git a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue index 3479576..3beb3aa 100644 --- a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue +++ b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue @@ -1,106 +1,133 @@ -+
![]()
暂停同步 重新授权 -+ 编辑 - -+ - - diff --git a/src/views/property-marketing/put-account/investmentGuidelines.less b/src/views/property-marketing/put-account/investmentGuidelines.less index bb64596..fd746cf 100644 --- a/src/views/property-marketing/put-account/investmentGuidelines.less +++ b/src/views/property-marketing/put-account/investmentGuidelines.less @@ -183,4 +183,16 @@ word-wrap: break-word } + //表现分析标题 + .player-title { + margin: 10px 0px 15px 20px; + // 表现分析 + color: var(--Text-1, #211F24); + font-size: 16px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 22px; + word-wrap: break-word + } + } diff --git a/src/views/property-marketing/put-account/investmentGuidelines.vue b/src/views/property-marketing/put-account/investmentGuidelines.vue index 73750e2..9e98c59 100644 --- a/src/views/property-marketing/put-account/investmentGuidelines.vue +++ b/src/views/property-marketing/put-account/investmentGuidelines.vue @@ -131,14 +131,16 @@ --+品牌物料
-+ 添加品牌 -+ ++ + {{ form.id > 0 ? '编辑品牌' : '新增品牌' }} + ++ 品牌物料 +++ - -+ ++ + 暂无品牌 + ++ ++ + ++ + 去添加 + - 品牌名称 -+- - - -- - 搜索 - - - -- - 重置 - + + ++- + +品牌物料
++ 添加品牌 ++ 品牌名称 +-+ + + ++ + 搜索 + + + ++ + 重置 + - - + - -- - - -+ + +
+ + + + + ++ +
+ + + -+ ++ 编辑 + +- - - - -- -- 编辑 - -- - - -- - + + ++ - -- -- - -- 品牌常规展示标识,支持PNG、JPG格式-- -- - - - -- 取消 -{{ btn_str }} - -+ + ++ ++ + ++ 品牌常规展示标识,支持PNG、JPG格式++ ++ + ++ 取消 +{{ btn_str }} + + ++ ++ + +@@ -146,8 +148,6 @@@@ -231,6 +231,225 @@ - - 本月摘要。
+From 7975c7bdd7fc06f954cdf6bfe263f839d5dee33b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E5=BF=97=E5=86=9B?= <543024265@qq.com> Date: Fri, 27 Jun 2025 09:34:21 +0800 Subject: [PATCH 14/78] =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enterpriseKnowledge/brandMaterials.less | 8 ++++++++ .../enterpriseKnowledge/brandMaterials.vue | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less index 23e6a7c..26aec80 100644 --- a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less +++ b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less @@ -56,12 +56,14 @@ margin: 20px 20px; } + //添加按钮 .add-btn { font-size: 16px; padding: 0 24px; border-radius: 4px; } + //分页 .materials-page { background: #fff; border-radius: 8px; @@ -179,4 +181,10 @@ .a-modal .a-modal-footer { justify-content: flex-end; } + + //弹窗样式 + .a-modal-title { + position: absolute; + left: 10px; + } } diff --git a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue index 3beb3aa..5c541d9 100644 --- a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue +++ b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue @@ -87,7 +87,7 @@ @cancel="handleModalCancel" > - {{ form.id > 0 ? '编辑品牌' : '新增品牌' }} + {{ form.id > 0 ? '编辑品牌' : '新增品牌' }}+ 投放行动指南 +++ ++ + 投放建议优化。
+ ++ 表现分析 + ++ ++ + 表现分析。
+ ++++ ++ ++ 人群分析 +++ ++ + ++ 18-24岁女性,兴趣为“美妆/穿搭”,一线城市,抖音平台 ROI 3.2 +
+ + ++ 25-34岁男性,兴趣为“数码产品”,二线城市,巨量引擎 ROI 2.8 +
+ + ++ 18-24岁男性,兴趣为“运动/健身”,三线城市,抖音 ROI 2.3 +
+ ++ 投放素材 +++ ++ + ++ 图文风格 + 明确福利点,CTR 3.2%、CVR 8.5% +
+ + ++ 场景短视频 + 明确人设定位,CTR 2.7%、CVR 7.1% +
+ + ++ 口播讲解类 + 产品对比,CTR 2.1%、CVR 6.0% +
+ ++ + ++ 投放时段 +++ ++ + ++ 晚高峰时段(19:00–21:00),ROI 3.1 +
+ + ++ 中午时段(11:30–13:00),ROI 2.5 +
+ + ++ 下午茶时段(15:00–17:00),ROI 2.3 +
+ ++ 平台表现 +++ ++ + ++ 抖音 - ROI 3.2,CVR 8.5% +
+ + ++ 聚光平台 - ROI 2.7,CVR 7.3% +
+ + ++ B站 - ROI 2.4,CVR 6.8% +
+ 新投放建议生成 + ++ ++ + 新投放建议生成。
+ ++ ++ ++ 人群建议 +++ ++ + ++ 集中在 18–24 岁女性 + 精准兴趣标签(如“护肤”、“口红”) +
+ + ++ 24–30 岁男性 + 实用类内容受众(如“工具控”、“搞机党”) +
+ + ++ 泛娱乐向受众 + 较大地域分布(兴趣“短剧”、“直播带货”) +
+ + ++ ++ 素材建议 +++ ++ + ++ 福利明确+钩子强的图文短视频,建议加限时优惠提示 +
+ + ++ 场景代入型视频,突出客户痛点与产品关联 +
+ + ++ 达人口播/测评,搭配标题党封面吸引点击 +
+ ++ ++ 投放策略建议 +++ ++ + ++ 预算前置在 ROI 最佳时段和平台,优先抢头部流量 +
+ + ++ 中等预算组合投放 + 高点击素材A/B测试 +
+ + ++ 低预算长周期测试,重点看 CVR,优胜劣汰 +
Date: Fri, 27 Jun 2025 11:56:05 +0800 Subject: [PATCH 15/78] =?UTF-8?q?feat:=20=E6=89=B9=E9=87=8F=E6=A0=87?= =?UTF-8?q?=E7=AD=BE/=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/all/propertyMarketing.ts | 10 + src/assets/img/icon-question.png | Bin 0 -> 903 bytes src/views/property-marketing/component.scss | 30 ++- .../account-table/delete-account.vue | 7 +- .../components/add-account-modal/index.vue | 14 +- .../components/batch-group-modal/index.vue | 142 +++++++++++++++ .../components/batch-group-modal/style.scss | 16 ++ .../components/batch-tag-modal/index.vue | 171 ++++++++++++++++++ .../components/batch-tag-modal/style.scss | 16 ++ .../group-manage-modal/add-group.vue | 9 +- .../group-manage-modal/delete-group.vue | 13 +- .../components/import-prompt-modal/index.vue | 10 +- .../media-account/account-manage/index.vue | 13 ++ 13 files changed, 408 insertions(+), 43 deletions(-) create mode 100644 src/assets/img/icon-question.png create mode 100644 src/views/property-marketing/media-account/account-manage/components/batch-group-modal/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/batch-group-modal/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/batch-tag-modal/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/batch-tag-modal/style.scss diff --git a/src/api/all/propertyMarketing.ts b/src/api/all/propertyMarketing.ts index cc01d23..fe8d6cd 100644 --- a/src/api/all/propertyMarketing.ts +++ b/src/api/all/propertyMarketing.ts @@ -95,3 +95,13 @@ export const deleteTag = (id: string) => { export const batchDeleteMediaAccounts = (params = {}) => { return Http.delete(`/v1/media-accounts/batch`, params); }; + +// 媒体账号-批量标签 +export const batchPutTag = (params = {}) => { + return Http.put(`/v1/media-accounts/batch-tag`, params); +}; + +// 媒体账号-批量分组 +export const batchPutGroup = (params = {}) => { + return Http.put(`/v1/media-accounts/batch-group`, params); +}; diff --git a/src/assets/img/icon-question.png b/src/assets/img/icon-question.png new file mode 100644 index 0000000000000000000000000000000000000000..a10d6ad8212450e5de0b59e0ff058d3fd04a5a66 GIT binary patch literal 903 zcmV;219<$2P) z6UVOX`HQ{-_j zV7uKuoJa5o1cwPzKo;IbZ}$S<^FovV{IY$55`~1H1;z||ln09CV0hN+UHh;DarnI? z{0j8le(jTI7+5id7%a1tme9EEUk?qXE@FId8^zM=bv^cWj0E?hL!|`Z3lw>%LL RXM1_{6s8xo{ %M_G1~ zc#=_{Qy_Vduagj)fZ{<~apIlMBw^HZdfU5xF9%aTu4L&`U4{tnl2=#1%K-mIt5BJ} zv_LClz@Z$yfEJ5d_Fk#L8ekOd1!)vyU}Svh3ofCaWHbPS{G0D1el*PQc6B BJQ_9 zS+%6oBETm1s~rykh~{wQ`-NK}ZTLVhD6?qNhIeH=K@rIip!L4fi49-PW8RVa-5Q{p zd590Og*3RhxH{g@Hm!vgLPL(@)HYU?$Z(WAh?NY@A+oWaqzbvAe`Xf4Fjry+cA$&P zucy3X{6zCO;+<&rXYK;d@}w Q3f8*xga{k=xspTSnZl%%|6ZBfZjRI-jb`tB>>+l|Cyi#H1DvymqVSKVkn=hF9g d`%QfP^bdA5e98e
- +- --确认删除 {{ accountName }} 这个账号吗?
++ diff --git a/src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue index 2a9edef..6ff4a14 100644 --- a/src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue +++ b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue @@ -7,7 +7,6 @@ v-model:visible="visible" :title="isEdit ? '编辑账号' : '添加账号'" modal-class="add-account-modal" - :footer="false" width="500px" :mask-closable="false" > @@ -82,14 +81,13 @@取消 确认删除 -- - -+ +取消 -- {{ isBatchImport ? '确定导入' : '生成授权码' }} - -取消 ++ {{ isBatchImport ? '确定导入' : '生成授权码' }} + +diff --git a/src/views/property-marketing/media-account/account-manage/components/batch-group-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/batch-group-modal/index.vue new file mode 100644 index 0000000..21f7de8 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/batch-group-modal/index.vue @@ -0,0 +1,142 @@ + + + + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/batch-group-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/batch-group-modal/style.scss new file mode 100644 index 0000000..acb2b4c --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/batch-group-modal/style.scss @@ -0,0 +1,16 @@ +@import '@/views/property-marketing/component.scss'; + +.batch-group-modal { + border-radius: 8px; + .arco-modal-body { + // min-height: 200px; + .t1 { + color: var(--Text-3, #737478); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + } +} diff --git a/src/views/property-marketing/media-account/account-manage/components/batch-tag-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/batch-tag-modal/index.vue new file mode 100644 index 0000000..99cfceb --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/batch-tag-modal/index.vue @@ -0,0 +1,171 @@ + + ++ {{ `已选${accountGroupList.length}个账号` }} +++ + ++ ++ ++ ++ 统一编辑 +++ ++
分别编辑 ++ + + + + +++ ++ + + + ++ + + + +++ ++ 取消 +确定 + ++ + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/batch-tag-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/batch-tag-modal/style.scss new file mode 100644 index 0000000..156b9c4 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/batch-tag-modal/style.scss @@ -0,0 +1,16 @@ +@import '@/views/property-marketing/component.scss'; + +.batch-tag-modal { + border-radius: 8px; + .arco-modal-body { + // min-height: 200px; + .t1 { + color: var(--Text-3, #737478); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + } +} diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue index 9781d48..d208936 100644 --- a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue @@ -8,18 +8,17 @@ :title="isEdit ? '编辑分组' : '添加新分组'" modal-class="account-manage-modal" width="400px" - :footer="false" @close="onClose" >+ {{ `已选${accountTagList.length}个账号` }} +++ + ++ ++ ++ ++ 统一编辑 +++ ++
分别编辑 ++ + + + + +++ ++ {{ `${form.tag_ids.length}/5` }} + + + + ++ + + + +++ +handleCreateTag(val, rowIndex)" + /> + {{ record.tags.length }}/5 + 取消 +确定 + ++ + - -取消 -确认 -取消 +确认 + diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue index 30a3270..8d19023 100644 --- a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue @@ -3,24 +3,17 @@ * @Date: 2025-06-26 11:45:05 --> -+ diff --git a/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/index.vue index 7b67178..5fd6c1e 100644 --- a/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/index.vue +++ b/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/index.vue @@ -8,7 +8,6 @@ width="480px" title="导入提示" modal-class="import-prompt-modal" - :footer="false" :mask-closable="false" @close="close" > @@ -17,12 +16,11 @@ -确认删除 "{{ groupName }}" 这个分组吗?
++取消 确认删除 -账号已成功导入,当前为未授权状态。请前往卡片列表手动授权,完成授权后账号可正常使用。
-取消 -去授权 -取消 +去授权 + diff --git a/src/views/property-marketing/media-account/account-manage/index.vue b/src/views/property-marketing/media-account/account-manage/index.vue index dc376ca..bc6fe2f 100644 --- a/src/views/property-marketing/media-account/account-manage/index.vue +++ b/src/views/property-marketing/media-account/account-manage/index.vue @@ -104,6 +104,8 @@+ +
本月摘要。
+ +投放建议优化。
+ +本周总消耗
+ +本周总消耗环比
+ +roi
+ +ctr
+ +本周总消耗
- -本周总消耗环比
- -roi
- -ctr
- -本月摘要。
- -投放建议优化。
- -投放建议优化。
- -表现分析。
- -新投放建议生成。
- -cHpP0SG{&U~2>dKciorgF7(HqBv<&f{+VXJY
zmNe8^bQB|1KroS+9ugmWoEpR%Vi@lQQKU4Rh=_F9T|)g>Zh6qzym@{15J^P3fS}P5
z0*H8SVw5f~Oi-9
{{ title.popover }}
+ +数据总览
+{{ item.label }}
+失败原因:{{ failReason || '-' }}
-二维码失效
请点击刷新
二维码失效
+请点击刷新
+数据同步和初始化中,请勿关闭窗口。
- -原账号:全球旅行小助手
-当前账号:环球旅行官
-原账号:全球旅行小助手
+当前账号:环球旅行官
+{{ `数据初始化${isSuccess ? '成功' : '失败'}。` }}
失败原因:{{ failReason || '-' }}
- -二维码失效
-请点击刷新
-{{ item.name }}
数据同步和初始化中,请勿关闭窗口。
+ + + +{{ `数据初始化${isSuccess ? '成功' : '失败'}。` }}
+失败原因:{{ failReason || '-' }}
+ + + +二维码失效
+请点击刷新
+账户管理
{{ column.label }}
+{{ checkColumn.label }}
+品牌物料
+竞品对比报告
+账号已导入成功,当前状态为“未授权”。
+请前往卡片列表手动完成授权,完成后账号即可正常使用。
+二维码失效
+请点击刷新
rb)dF8s)vaC&taQkIbTL9M-E! zPu5FAd<4vr-!=x5U@+I)lI^;tRm#yvwKXeYGG!R>jiUzK)Cr^JvvxA(Z2}NLO)iZM zs?4pdM6WOPpF=>YC7S<$W$9We<%sa{7#YNz)z9r^WsQn{8bJLb78})+28Qw$O%Sbd zG&kDKpiQz{zMhrY=e8)KH`DQPRW$sE_d_MO`E!f6Uj~J`*e1$eF*xF(?G-QJYJBPk z;lckXD+uFp%;qZ7v?K>X$rd}@(7vT&ZdHHmybpW`S z(0p!H3UQYqYqVZvg7n@f5V*`_tyZg-!D~o;KaoR!@7pZyUoaq3gRkR1T7%A9raVF= zTQBG%>hM^gwvm-5I>}UzlV!5X7cbJTDFQ#POI?bS)}7g?aUDHkt_J#1pN!{mj;yc{ zDZ6#^v^cLh&7#>~cOBceC7`CYnZXmT(`q+Yk&kJ4EGy(cX+l=LB2n>OtZH-YObDMf z%KULHS9GMQy6EM)!qf%TdljGUnI$R!?6Jw+bJqg7D;9 zp$L$uLDCLGiR-{Ys1cu9Pi17@gKNC yail6y;>6_pDUI*5TIa23DntK%(3aBMAn5XxQmUe6bY#&`bMu )Qq4vJ0OsHu#&ayJ2kYlzSgPeIJ!5}9)> zM!eY9`lI_|eDHLq?`X}J43Eh#UVR7GGZdGWY+NDIhn_}!QUrlzE?YOMLHG0@*&V)0 z)B8Hmh-e$Llcw%-SeV+-IEZ>Kc(leY{N7<`zU3Gz`cm_ VULRa^+YT=^Re!F`Hwg(R0jsoK=lC(zVp1k^* zTFsAG(xG+0Penf7cXkc=TG>h(zC896PUMo{La&xV&an`K$Jz`P$+09S9<}PIC%%-4 z%7q+-xk2sRPq3tQt_s$_jM-Qd1&pfW+cy9b7vJWeN1WCyuLm^Y{#1zjtULI+xBhx( z^WDxOC#Xz07S*99_ZduO;L$f^>#|zaxjXvaY(4NavbLv&%M~54%GO!^qUXw`T^U%R zgQuCf9A5`R%vk=k4>y$5Ly$-}yzahU7}j1fc9xdl1}iqNIq$$R_H6&VLbNyZ$TDBT z&$I8N;8?T?2iU%Hekx6%Yk9uByMa?;Cym-irIKSuw3ll5oDHlKn)4&!F2eh%w79^% z+R!r{{)RLZ@+bEx{~ze*nC}uD!3<^*XR-F~hjI0s;S)RkrrEf36w9+gk-Iv1z>l%= zj3A-QTY1mZC>~9GLdmc5aw;d9Y<#DBdH5Vm1q!2F0?$#&SEWq)nbLSyXFY{3mr1%@ zHc=BZMOp#`WzIMGC2Ckf%ySp+mOQEp4Hn9*2}0oTUBZ0jiy-}v!+x2mqtlt%l}|+j z2#ajTZ~DBctSdZ;AFfl5xkMipa0L9qT+Ij1G%c2DPBVtMbE}j1#MF8!AdrnG(`0n8 zcRa~*dFjnT_^7fb$wd!sIdH|je7CiA@2W~~DBQ_dYiBiDNNb3^Nfl&lov)R`1eS!(Te^(xVr}WYZ$#RD}6c$XM28bPpz)+ug7@1qz+n6}d zP5-S$0uiQ)rsU!H5lU?oF#wdJCDUBM4P&)=!^5HrVXkj<=l=HdCxQCYlHGr<7e}G% zG4A@%9!~V`)4zkb3B!&(_Bx1T8c03iPCyExex5I3cfFv?TgPwG9h!`|blR0GkwlQ% z8qcS@=-tq4V!5azp_wiqT5H=glFM0Y{q87Glj))+0}WurQ&-;R$WY1b=YnGNo8_-3 z^IU#}T3uqZ9la#qduhyu8d{RJZ;79dmIy(ULpors`N(_B$H)K}61`wg6L#-Fi7TpG zH7ej}Q~0vi|IKCdqG=^V&j^G0T+oNKwMDa4SjeQ1MN{%0W1{x(yOI$taKwdH9wX$N z`C`Rt!-$VM)mp_j8gJLKI0df=be%4*Mm;}pMYsGJ9Gfq2KJz4Zsv>?p$nr_Tb%1=X zCxocTsKp&5KoJe%C3S~d9^$jzR^-^VK411m5?&vbujH41zkm8p`%CDo#cbRg1@1b) zLOG5`?EPh5>=r)Tv+uaNT^SAIboWoJXab@QC1Mn|Z9>>-*ZVEIZdJ^l@0w}2ASJ9S z{rrIMGaQbm>u$WvQS0E3q(kfIWIY<^qX{}2o#qOkL{Ij!@0z)veE2?hoJRDzz5=pT z2w9+0u37Vk7f3|TYK=g`^2n99amEZzA-a(LpI~w8&%{V4^ -7hE)${^< zlBV_VmFVtlvlHFOjwLL8n3}ou@d-O_c9e Xnu`n--bo2-!q*It^S_{>Io z8h7#ywSk+;6%><~EFLab!$KBA$`!b%1=aHA(@eQ2*GyS$V8pEh-f+z6sQG;ikjH`X zum{ZVZ=|{4sHc_edLN^9{c{K*lzb~#=*F7Ll9Bng#6H7{vx;=0_*nckuL?m#$4o`! zu^ hi^tf(=-G*RLB3kAzka+X zffZ`o&257Er27Ukx+yIi4`ewrj@VX)&b@4W3gejkAM*aSckf<<4u8X%J}#qBWYabe zC3CHNPM$Kl$Zc|Q{t=}TTyV^fu4iH{(L*2O)d;KTs Z8!b~E)PohemBV!kXd*)S~&0nQWFE|~_Qw(jiSHh93H;aUWID|6eQ zDKAI9vC20>n~wv%&BzK_UdM9*o07}5&2G`!L5&W8dtrcqT@{4ke5H_SE|yvc#@ad$ zE9-3Wm3cQGHo8!$J{KY|deq={{N@nahVDrC ar%)D^>0kQ>MAs7F()h zOUqxGIp1}yW;8wzbg$I0jVL-28Mf AN6~~fAi<8|0>ucGG`kl4x?(2Hy;4$i$r8_=?MiI@rZg2@ z_KLw8Vf_p-`#5|@M?;5#?rYiLr0wmf0E(ZUberQsXXj|^+*5HVF;oAWBo$!*1Hxd9 z0=bSfqW3wkD2wha{9_giP^p`DtSvOT(cCB~$oz4Nl}_>ie;DEWv9AEJk9+MwxDeim z!2z(gYIxo0QM(h??{0pj)T5gGokkyd0_t)*P~!N2Rku8_iCp?-w*2qulG8RDm`OX) zUu(B0g`$!51}NfQT{9!! Jlk3JA*pMovmgc}(GyL8!Z9v04Vr6@1QG_qi;*xIMiOZOy-r(%H RBY|P7EzJQwcqHWWXiTRv4i25pm0Bs5=+5>zW zN35XEiA2a*H6F>TJVBofUu2oP;3H6T=NJzDFkDBP^U%}Op@US(>i*p#*u;#J0PQ9M zz}2~Y(`lN9^w029?<>OtQ_ZAF!Dy>Jq7wa(a#}N30eZbFK1t1@rHW`Fv3JK_6 QjGb*z;DPlBYrS@SR7# zv)wA3{fuk-qlC2lzl2?!=$(2cUh@wA?KI4=F4dyUaD|A=(m#}zxXKfILY5M|4Detr zx>U(53Q^I%^*QE!mBrFlx_qpMT-%0AJP;%M{df`B3Kx>KJfaXBwrr7eU5u+-m3z!d zWs(>YcfE{?y&tXq^CI?-N}8?A!R%K9=goxO9UVoFQXZV4xD$p IjX5@@q~ut9<;4w>@!40x&wo6 z?Yl$k9{wSedmUJ^TD+Q(`;V9vfXZU7B(8$fea^lkNsL#2;js=1w$ih_4lnwExbnB# zQS3IzXFqx@`eMKHk0>qy1Y4@jLG4if7YOb7OTd`;uN!Lw+GtZUN-l%Wb87SU^7xdq z2K6}ALA^o8ce$nLBHnjNKZR=1DENA5$>CH^7Y)6~k8}i)qw~MR$?j9I?nC|E{m3XP zYZRaC?*1|p16DilH!@Wz)SMa5F@;WkU+-m*v>pC~1wni7hM^2GD{ov}mPR4(3xuyL z9!u PTl*N4GEQN6OAXbYjca3iKe3 bOhP%Kf~5BA`dQwj(;^M M!??TNo{n9hJ&IPA zGm0w2!LbKHQ1dHIIqi^=WI;Gm9%XTR1mqd|U4%l(|53|XhD8;S%o=Q{7l_v60cnwe{_wfFNp z_qy+2kO;_Egpsji3M9=|PMR|W)1 kI0A-MB&Glcu@ZrgrHkKRKYSe28^AYeD%A&5s(F+gu+?<%>?V!G!I}C zqic&hu|%1m!=i&}xL^DkFh|~^V+ZQ7rwzrkuDWIdhP7Kk K-tg-4rT#U5{;O+z;;M5Iew?60JA;1mB^HW~BphapoY^Y1C^ zy5RbpQ~ogoT#Zg@Jbp@|*hg|$xc~3P7btevBPP-BIDwUPi;$0n g?? 7yNBcKVKSd5fo5t_@_CxPL69EUjEkb3^OG5(O>PN5D=l zSk+?BG^m{8i&(J5Sl?b-@+hQ?o5HTnkIG1tzF(zyU7z(KQnrNQ^S_m)bl44A?XXwG zDWYtl37amY!h8#5^^8l#nUntp7Ru7X0<2a3NQ5Y+t*UvL9yqpD-YP`MNmzFb${F2( zW>you$z&*wyt>+#i_O3nH84|KY(bL#f0p|{Ho~IS_p5VMm(fPPj!|5XBII^{op W^NJ~XQ zN(+evlm_tt&%d~Z*gMXbS;`%lQ0%5MIklv1`QTIWXf@zZX(h~Qw0T!*8VuoMGqjgf z4SR^c*B}y}wu5;7ML`k&@3Q0iACaIjLsGBgFyHcI{h 2jHb5VBVK|?>4dnTdKJ+CXM#Sv zo?VUE*iub8 L~FoTXW33yQqz|EfKbKr{xqpFG!BQf9|2iuME8oEHSS^+ zz)@KHu?;uCqH~NxVxBzX586*v4FwR~EhAzXidz!&i5WKXtGLDn`m&J7?KBsWF+7 zUa1hKFSXSWX|k*G%!Dqzeijj{M1O&ZuCO^=8+>C1D>jrX2gO$>RW#w>2N5H?7w~Vu zK(w}R`cu#`@@d#TqpK@MYd`8BO8`w7TeStO03na_Px+2@@d*RMg~D3z2O3{Z+i*eW zYF5*%-y<=O%m!M>T>3+o60GmH^8-_gFxZUxlUX+zw{y7a>-*C>qk$uvth?8FxoJap zw?QtC3-CCyZ9q~=SV3Uig+?o~QcuF@!I`tKgZlKrSC>}|?z3J6kmAX&-Oo}r33G0V z@arEvDKhV4`0NBtC wGW%G*JRUB^)G)jGOdCo7Hg{NF-PPAvNgy?O{9j*I_4w z&6B>KB%=iWBN5}Aa{!o-^%^q42QwOYd<=QUH^4a970jLX@%B-cQQ9N%ka zh0IHx{NX6G=#Q6Wjq<7|W__pz?sL)c7)93V@JpFE47SBxu8-1y?L{TzR<-1*?%=KJ zrS7(Ni;ir*`id7cK3I^4jTMpE#(T3nQx*9b6cC`!&|XQfS-y6beiI`mWB15ZBw5%x zUY)+RI1Sz~<>*}bH~1$iQ|CeZE9NK0{uRoK@kX|%DP}6}CU8V&rgYe<7uN~(Hq}mD zA7TZi#4`t%f)HT0pTpaqtS&R7HQUSehPh&pqS&Tu-M~l6?kSlKP8%gsZLL9$Zk+9{ zzqeVp&?>_tJ#lFxw@17Dk?j?pN271gJp}73YRrdEL2#EFaEwYCVGPdI#XtKj1Oi%& zTzb<%h@83N0V!fOQ-ScR#)c`<&0FE(Xxt!uuqbSaQkMB%s>J6$SM@%nq?knGCk*;5 z6b_56c}uEWi6WrUNN(FMxCLE_(d5@Es9-B4nh_e`J6lax8QSIYW^vz@>+LEEzn8__ zj>geZY-e-~+ZJjo@5Xy6G4yPoJwDob&IpC<1fin5)dS}bbwRAE$s%gc&=VxAjj`a_ zDyV#FTT=3)xFFqmk$7fLpba5#*j5Vg8d86^s^;!8T<-?TSjuR$K4!W#UXxSSFRcgj zx Na{c~gl3A5;~q>}`D<< {EG&3tW*9E2@qeK)mL%8E1 sow(lzk% zjmM>s)c8W~`*|ZTw@Y1OE6b~@!rR5LxQh`ybl@hKRxg!?v@7!ABr3{$tDP|PBU=V} zM~8h6h0BREaY~|P3UKD5(bwihY#n^oglx5|+v38oTaNa~5ZezadCcpHGC~#ZJDLIT zO1{%WE9K&^ACS!=te%Z;*KmA(Pu+HRA+92%ReA7Wei)6o {MsaK_$5&tE4oXAPb n9AP-5oRBsO;>M1JF|h0k*6AqdRisyV`0|$)Zk>g=ebo4i0=OdJ9v UmF;y7Kw{LLxF5@3lb+31MW8*IS)2J6qOZRp78UMbY z!QRu4pUhaxDCl|Ve8nqdzxo7%Pcqv@6{N59?U=m#bPgo2?DsKi9h7d%D$4d=^bg$c zU)7wacp>eRUmqLE3!026si)V-6%;}x=b2ZGlO}_nKOt5J^A5@EP#JzeE{FCdI)W+x zb2!G(^TB=H#;;VZoxff1HJU_Gb+0%7Bav2O3OQa#LaX#fcrpLDsA&gfl91J_-Z_U! zjsc>d&liFdjn$ATOg^$G&OsBV<0Xz`Cx95Uey3YQu6L&Y)2uUID>v0iSB-qQINOVL zpjf#8tF(wQkFz%?pE5x )!Ya=`W$Vh5j(asJ834 zInf(K)&V$(%G2)|tw}g6D_@oM|DiI6_RJ!QAagVYzhyHPKwe&G@!)hRa`OlI(%j$B z*Va3j5HRR93_=17g9&hsxa}3@fo3!UEniW<>-k(vFX?({`G8>e#F)@ZPal; NLr79*e5#>{lswSdZ|MGy0 z-TrsV$u5dwd{8XFcT? JNF6N$EV^;BtQdAeR(elWfbk_s=PcUY zkPSb|p}4aJ>}eZ>q~6v}^-{!CHaA17S&VPF22Mvs^v+p|V_%6lbM9y6Akb0PeEGq~ z|Ar)9t`UFWmfz%a^jmQ`J$+guqRT2KcH<{^9iZ#3wnT;sDrw9ed;kw1e&A0`lcmA> zJK(PD+eE(dJMme)*=(LhPk1y~s5!kAO{>+T+KG*+<(F`LkP3@`3`wLENyT(=!NoUM z!EHtx0bQOB-Ej@kTV!}Iq7{i*8FIlxUipfLavt)&R+*L3^4|RySS7#DkGGOfjDEaR zG(6oB^m@)p3BEmfU x52Pt9-_W}qZNx#bTaBtS(R^k2?ujvKTy0UjIMm~=m=d)P z=8bEyIi_TuVB-#hu!}%@?9M|RJe(6I24xP7HQP~-_sPvG3+ory)*Mr9_y391Ro2CS z1`xgT8=I5Ks${K2cDarfrxDF(>!}&Nc8||?@j1@H`Qd56ZCu6gl3+jt)^gPcbir$^ zHc`u}nBEd?i-Pa4CAsAc)Vg~YagRUcYEm6X4j%)i!Qm0*dP_x)V~B_Z!Ghw)C3I`V z{D{)Y_KdX%>K9)SFGT{zPtHa6mWzjPyg!y=UDCd#pF8IloF&M+3u)^j#=WCSadYBz zlThMG^?c jX4KR#e*Hg=G?l^eZ z+c{p(U2T7ke)tom#3bQVehv{XkHB;}`3Jn3p&-Ur@`i4>0lLy7*dO*fH{!L)Fyj5V z^<=5px!1 8kuVQMdE4L?EVapf2{Jkr+z4}R8^(wK1q2f$= zjcJwRXvChE$iwEpjY+j3g6m>1JV^X4gq+xElSb#bM_dBFT8C4l2lri-f4BBQ?}vfM zlwXUz=v<=W) Ie)8thy@cw8YGh+Y z_q;%Cc0-BZ%gmskf%%a3_V=&^r!>;wJF>hhQ`SY{GkgQ8r}QOtU?^Dj#wGvZ!beFY z#7O 04vJk};S(2Nap8 zWj^JrRkxvc{&_8gK}-z3#@gg8()F{GD=kiHKC<>&aBS0|a%q}e^oB`5c-#W$-jyKL z^EgtEL>{`VD|TF_l96LFD;VJ7Ukt4hl$Dy5tMi_VyuWU%_(7mol_A+CC<9W#* nK9Yr%Nr>geZ3F0SkZ zGQeB<) !jU (+|kD>=`!z6dn}!~R}yL1ctU;OwD%bije?u}ba7f)K;fXb4GV