From d07f773123b1a0b7fe2814a699dbb22e8525021c Mon Sep 17 00:00:00 2001 From: rd <1344903914@qq.com> Date: Thu, 7 Aug 2025 18:05:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=A2=E6=88=B7=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 2 +- src/api/all/generationWorkshop.ts | 43 ++++ .../icon-confirm.png | Bin 0 -> 14796 bytes src/router/app-menus/index.ts | 20 -- src/router/index.ts | 24 +- src/router/routes/base.ts | 35 --- .../modules/creativeGenerationWorkshop.ts | 22 ++ src/utils/tools.ts | 61 +++-- .../explore/detail/index.vue | 213 ++++++++++++++++++ .../explore/detail/style.scss | 151 +++++++++++++ .../explore/list/index.vue | 102 +++++++++ .../explore/list/style.scss | 59 +++++ .../components/check-list-drawer/index.vue | 2 +- .../check/components/content-card/index.vue | 11 +- .../check/components/header-card/index.vue | 13 +- .../manuscript/check/index.vue | 25 +- .../share-manuscript-modal/share-modal.vue | 10 +- 17 files changed, 678 insertions(+), 115 deletions(-) create mode 100644 src/assets/img/creative-generation-workshop/icon-confirm.png delete mode 100644 src/router/app-menus/index.ts delete mode 100644 src/router/routes/base.ts create mode 100644 src/views/creative-generation-workshop/explore/detail/index.vue create mode 100644 src/views/creative-generation-workshop/explore/detail/style.scss create mode 100644 src/views/creative-generation-workshop/explore/list/index.vue create mode 100644 src/views/creative-generation-workshop/explore/list/style.scss diff --git a/src/App.vue b/src/App.vue index 21ab695..1ce3d3e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,6 @@ diff --git a/src/api/all/generationWorkshop.ts b/src/api/all/generationWorkshop.ts index d55ecd9..e614a6f 100644 --- a/src/api/all/generationWorkshop.ts +++ b/src/api/all/generationWorkshop.ts @@ -77,3 +77,46 @@ export const putWorkAuditsAuditPass = (params = {}) => { const { id: auditId, ...rest } = params as { id: string; [key: string]: any }; return Http.put(`/v1/work-audits/${auditId}/audit-pass`, rest); }; + +// 内容稿件-列表(客户) +export const getShareWorksList = (shareCode: string) => { + return Http.get( + '/v1/share/works/list', + {}, + { + headers: { 'share-code': shareCode }, + }, + ); +}; + +// 内容稿件-详情(客户) +export const getShareWorksDetail = (id: string, shareCode: string) => { + return Http.get( + `/v1/share/works/${id}`, + {}, + { + headers: { 'share-code': shareCode }, + }, + ); +}; + +// 内容稿件-确认(客户) +export const patchShareWorksConfirm = (id: string, params = {}, shareCode: string) => { + return Http.patch(`/v1/share/works/${id}/confirm`, params, { + headers: { 'share-code': shareCode }, + }); +}; + +// 内容稿件-评论(客户) +export const postShareWorksComments = (id: string, params = {}, shareCode: string) => { + return Http.post(`/v1/share/works/${id}/comments`, params, { + headers: { 'share-code': shareCode }, + }); +}; + +// 内容稿件-删除评论(客户) +export const deleteShareWorksComments = (id: string, commentId: string, shareCode: string) => { + return Http.delete(`/v1/share/works/${id}/comments/${commentId}`, { + headers: { 'share-code': shareCode }, + }); +}; diff --git a/src/assets/img/creative-generation-workshop/icon-confirm.png b/src/assets/img/creative-generation-workshop/icon-confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..9adbf1955f5799050d8343143491a52f25013451 GIT binary patch literal 14796 zcmV;-IWxwIP)nCx%u8gYd8eJt#bt2OsraBw0<9>z=e%1?~ro+UYkPJ9L4u!E}LAX#B8SzjP8cIp&5|bc5Kei&ZwL*m!3J82S+@K2lwJ&uotV z_1U8qU0^6K3_SoC^_36Nx-qyDB;H&!=`SSc4+o!v7uK=eqMO|b8hG`?wI+WM8+F5(-4GP zMm%lzO8k87INFs14}y0ybl~pJvWie!4m9PD{nN|c?X~}`H8kr+jksYH-!`N-s5Drf zi&~K}2j|u3&z+$oEV=yO+NM$TV9apDhXSb!f?M|g*htDZsbS2QyZcu@P~Di?1`JXg zz4wzC7hV^}N|Amh4{2I2FZUN?ZuOpxxN#yE1Hum6KNNmk`^VSo@SGp!f|Nq)_PH=7vJ=sh?kkDj{MjJ#&?zdN?ct7UaH}I^Nl)CwUYo~1( zD@S@qLXk#fYImnK7JC7FP#a`d7Jz~bgP9%^VLb0+|GcY+l{EA*y*JqqL^g?*E@V0B%=h2@*%|scfQN;V z%C~yM#OkrG=>`k`t&+{{Te(PROn76~iaT+RO~L26Loa3EOh=mNvC=kyL#J2t;jox^nPH6?p_N>u!mtRl!yRl~ z{pWCDQS>}#>^5W(gMNtwm)+R1+-4*%&`0a^a(s7{D9V*E^f5emCmjN?c*(b)K02fo zfRFVf(n2Thw$r!$LD(f`dO`i~MhuvbtXG!{e@No1B^SU!L~E_HzHvR%hCWG%BA)EA zY%<$1N3zMJH?pC8eqPuIy8@`_g&6j_ryRxDH%mP9=-sVHH|Y%HOd9&62JT}|c)0F4 zt{b`j`pF9kb5M_iaHVAaKxj!aM+kY&;->Y?8MU;t zxVf4J*x(wa>-b)J%ndX6{jy0jNj}x?pQV-X%ow`cc-e5H8MxW<-pD-S572?2|9)PP z_`6D2N1^y?jIfR91`|;jLv5|?sI4j0}CJbGYCOgGp3h$E=Pp*w5 z{NT~G{HIzMUc4A^8rZP*S4V2GHZL`kczQa5gXl3jC>)mj0SD`IB+gfK7{$@vvK#zT z8+vy0lz?4Q#U7L2L94OmSI58U?q5{wO$PA)Y`7s_{SH``d<<^Go0|Rx-?^hE=~wyg zugXoS7~ecUy{sQE>p56jL;vIJCl7@0-lg6b=~#kyw;tZdW-^Jt5ohkw1u8+W9D%sW zuCPq(-epYT{Uwh7Cb_GP(Yw@bC^^;-bCx%pSxQ4sjQn}(P)EMlo2RO~E?LGM74w0P z%)LlYUu$xKLBQanlc-sPmzRyb?`-l8#+Di@x`R>)iV)jpv#b*4>`H#(F)b06%Fu17 z64f3^yuFpVAyzki?Fk@X_->7A`xi!DJ|p(4GccGqn8>G$h}hq$0E`EY#4iy?*-5h+2!5{98vd=q$4<-b32fJ%j-|Iy(LB zX}k6zTE85r4jL-ZjD1!bAUr#R(qUT#%IdaIll6Z6dk`Jr>F+Np>|BVU+b`-kLN#4; z)P2RsA1}L+_bUhcRelL`BpF9SwPceu-IsW`DL369rM9D3*JG_ZNX7elb!9K?S{u)C z7RrXNy?*lil2ZF#(0KH~oPa`LVv}~RfHeAiVq@2yrl9ilGJaqrj+;Rm``aSAy&;yDX)+CQ%2~{Gc z>}SKufUrgK0d4;~TiT8rwzqSz>nDU(@0D4}@A}Om8%cc6EY347e)%5ToXLq~zpr^F zmgZ*Y*S>%9Lyn5-$cfzcS2@cS|Ms(;U0M*lC%^WOubz>Haof#RlL|^#*`72Bv5bBr zf3|8#Y)uuTmyL8A4CP*I`FC*dKp-Ygwmk^@O93778?4K1-V5QhV zRqRf z9rVEELyjq&{hqzC&(zTEPCQ8&hi(VU@YAh_bK8(y`^VQ0D2{)%F?d(Cg~fOQnP$Yr zS;Z?p)NEeHXH2X!?d=(o7TRpT{e1D|64$?bvTK;{d1Du*<_8**1)s&mIWt2~sHa~7 zFNx0b_pKmQI z%kl0k3>+IlB!ezii18pc;~BZ;;H|Q6VzXUEAy{RhOH#xXN(yu!uOL>p{_fVJyEH?r z>GmC58@hdaZTQW=@hX+(bf%W(4O=bzNe=9ZB7{#ju+`)oeGsw`O1cC~Q1v zNyMDrt{q1m$m<(_a=+>~A-`sNSOs48^<89&O_1_191D6pJQJzd2PjC2Va-s)hv~)X(C< zgtS>2IX0cPvJjKw`Z^dNld$!`NojU|+09?;_sM9ISpdC@#%5l7ljQ2ysYCmv%%*Vdxc0*z zUw^e#bo-w$FKEW#_tBUtbV&3IyX^?Gf8AbJfeOeveW{n&*+p+%L33IO!&JLZ@6C{6_k6dDlx30Z@ zica@E%qof#s!Kwzv5JhuruP}l(;1rwh;%$Z$JC%SdUv2dOGvRv}OA3ep~WgA1tb4-*oA*j_7@cg)wFug?N|;HR)B^}$)5yxSiVevh<{qwCyTT~GcB1s}P z6cSv9hj6#D2cQ)PydxWLP#H9*VK}CNE#ENa$l8!qPS%~DK7aUp(vZbtY(qzxYuKA} z+i2dN#>3{3D7ZdLJh=BdsGE5#S=Qf8^5L;uW3)*kVmgdoe1OtkT5(_`B=`DY`vAjH z1^qfMQ2Yh?58G6tbG4cgF4 zU)novyasP^Nhrm#9s7{UyHp>Ru=>Hgs#PoHsKx11cw@8{l7MQ~*Ws@c~ykr*=OktzL2kjUfx+yA``4aJLs z>+Kwv*P-yUfV-Hc5 zg&Aq+5c=sCZuKEXai1#2sfyOg#b7OW#5T#!JROZ)zFb&KKSFRGfL9OEjmVhJvOup4 z;7}O~5-G2a97~zUj*QWhR;Om}Vf&~MqzZv6({Q|@$yPo#vAZtYGiZ}o=WH5=lg{IH zVUS+d#MAw=!c{e}LHAgAybkqZtt|1;OZJu7SB>=OR`fFeAjQ>%DhV)g&ei%MM6!ie zr9&1pLdV?w0Vl{NguZ{WV|7GU7}&?ikEWdTXD3?!aP9TeUocqVlL|7LU^BvA-Fnb( z7eP6CV4f^GZPLfec=e%%UPLKst#_#+;7fx?MsJ|*ja(crWQp8Ksly8igYt{jc{J5u zjLQP>`h({Mf16Fn|H0^Su}_*s1Z3m47rtdO9=j?)f{$bKYxbzw9Ch&(8aj**6^enI z5Fb_6B8J8VCr#1ksZmBSPS#Va3?t-9ceNcXu#!;S0&&qEY}mIetK2ULJ)NTMc(9(6 z3X9&FZYRu`P3JHBB9l;t=vAYxT{%!|S2 zZ#D)r_ais$IwUo1(`I77ZZ(i7@UxO@M4NEewQ6^A2NRBN+c9pDeR# zbD=&=0lgTe6sad6F^wXXAHfYqB|Cm`y1}bny?5SH)XN4(4XS(TApuIhlOHGiPMlC{ zp}u_@ElJ7GZI}Zfc8b!Cj8m5P@Vn4^81U#xrCu|2sO5f$A?n&)R(fL^9u<swHl+iGKCq*A zB0L>=7rBaMG5b!!G$)DHev7;lu(pp*-XRdGiVNY z`>AbPY^9GG4r}QQ7`je0S$Yq&oOb-NR^5Asq8$v4r6~ZxAt-Cf^173%Ghd3qQmcq6 zq`5T*URRyLwE1+cNH^#=s_*Eu?m-rO6XZFXROHmkHc&Z%u5glgD#Pj+bn6tORt z{u?z>!8*j)8_v5w`F2*`J>Mi_Uo{ZEWDH$6@(g$0)foJQ!LIt?_kVw~F>OsaIP>Gn zdLM(bd>flE0+nT1mkBW3BIAVuL9bN7p`M6nRt6Y23=Aa!e&w99HEw{aHOi3|Fm?%V z5HA;IQeBp|`fx^v>Ca~VbLK;rOnff!`cX=&44w=+G_dzy3)f&8Zx zfUDUN!@8fLMQ%klzBh}w z{NzbCrzuMap@RmjcFA2B2%Ni_s*Z(8!f{SO&2Or)#I}!K2{|6QK-f&EekNKfYga z38M!qH+FbaQ=zirX8Mnwq3c0U({?ol-N(~?Ni4X+?mQFMkYE zK*|~)5^|yDiEDowEw!O*x?#pF^cuHYC~KVFWzM8%pT9#no)9|p~lgo$26ypc>!-zLGR_Zx?V$UkvXqVC$FdEi6 zv)QxpJeo%$J+jdusXc0iZ?#2VgDG({KGW0Bdz1$<)yj0gDB#=+VM<*b4j6l{0`h_} z*K*BH*1zM|3 ziEOqP_(|%2TKUI}(?##z<8NagZn-tDe==9dM)Ng=2ppCqVAk3K#k(IH3Fd(eFL<- z=$UF<&ZX>aVyz7QWpp;C?G;z`G$jjR!yO(7H>TS_!jOuD|NZ9~P#BO6vCw_~H3tkG zWgWCYqzleMSyEQqz)x%Fi6Bf5*wl>f7c2*iNYqxLwjbY3(+Dt63{Bay+R1s>M*i`d z`(HZ34qseF#prD$5$=Sv5Xap>=257`l@ykR6b9ry9TtUa(@vt87Wox3&t~~Xa?iSC zQn_-~A66AZ8?6rE)vcFEI{g>z1xBG<%0BB|jT`8j0Y0a{SfE=oJgLL2{6-Q#1Jqz? z8MYAYb0(u9^UsUVgQ@KGuIfmJWSNW{_UgHiP@y@wkU9B>w<1_w8g;~=3OTlwS3Os8i0m>7yJ(};9% zU$ImxvsH!Q?8{I5nLeauuzQ~txzJ+B`*VCa_~6_$hCxFZ zT3nSyQAmRQ0nwn5O;WFtdA$OYQ#*e8>|rbO@^WlIGbJq7T!g7+4B;GK|L)12DGq~de4g(-^H@gq z%#LY%{iH>yaQVuI%XJmSdf-a^ABg{-17JW^_?BSBUtuJL)K|E!~ndD|nBVPSoJI#Llh!ebMzEdX8R44ZB*4q^6`W(ep`~r#HjO z0s0k>o_Z{x2B#Wn&fGl=y*B=jgkShk%e4{pD4;>9CMV~rcnSBH70*}aN`4~Qi+r3v zo|~9#X;8U~&7?*s!2F8Iq-$d8n!C@0r$35~-2jjDdEUQ3^mJ^N8K?z;@F*>Lu`2z1Oa&*Tu!27Ohpj2YG z`8fRs6}&DIP523qizOc`!$3SONvQIzb=U+Bh9r0mj?AF;yQ~aE0Zt=Noslh(n*9Q#i&m1 zr2$Sp-m^J&RH6Lcs)99wh^07!^o299EFz(!k7?I91_T`AuD>nFsuaIkiy$eI4P|Ud z;x~Q%wW#1ik(C4&+x{ets(tBDKT%PkLPq<%qDsl#p^WBidRo7 zQIRu%`r2`=l1U6=QWS=#b=5@BLLR zgmmVhYWu+fbGfMj66>iJGNZ$$2P^~79iLaC>SMZEkp9yQ^2F$9DSq8S2Bet6OcW7=8} zi-69Gb{ov*kVj=0kN}10-k+hpkd}KRh%x#HNu}u@&k1p%S17b5u;`?*c>qyibQ(?$ls@#W3` z5`d!jJka6qo=62_dpcK$?8qP?5Q67RMe%9>2I$o(^}x3uEgGK;YMcy1-~&#tT{1$n z#~L1ng;CC{CJac=V6Ern0k*=fI*?*3S+{-^>hK2>l1N>oU>b|iCSN4%gu_7s!D{*s zur5gV>H@xaUdS{ek39Lw6uMY_5xRBST99Hb6E_J2hG*{=D7(#HWFc0?d2m0lY$OVm z0M<;P_0e|oFDI&I^;~3f49|qRoU|jbzpD>d0$t%+|Be=fKqGPyl4ZPm(`tkSy_$v1 zNYaETuFW?MXiECOQUXH#d*tHqaf`S@_2NZJ09r*Mqi)g?!sb1M681?pssQh-ykP`s zm6zF7*!`|T$pxcSCE`WnV7PX87NFolLOl@hp+E?OjO0u1fIUXBK|UE27c4_yYnka;DHJ}Idk z?%;}?-rjn2H?&zU+Vt5+PDnQz9%?L^@T6d@c!mKP?$yzlp>C$z^gq`<4U>=f+W_?&`^$0`9>Nj6=ekt5#$E*M%y^aPx$7erES z&-SYST7HC37!Btg)q`1N*~&K}JEI87x($0wXwyf7Oh`o-$cBcry3>QQ3dWHX*1LzB zBV6`3G%O3@4l=H^gviym*Vk&QO%*|DdV^v#HYveTLw!RJFbi$_rOVZz^q`>4q$uBr z3|O6$k3)3YC=3Y?>QzW3(})C3==Jl1vO-=uKX=E&$*q}zQUV{2Sz~t@(heH9m)4V0 zzA>WOo>OSlTT-B=ulA26tc!iQEVHnOB^0$T#+XiCR&5fD7$B8{ZGx~xPSYf^K9b65H5W2a&Iq%6%Ty=IJ$+4fUrjW5@R-<6RHk9 z#fj9O#kVjzkDlFd-AHa|;^*7Xr~Bf{4Un?%ad;IYy@%-x(lo7SKu{_oR}YTYA7o7W zI_IJA#V8)GvfIyq_DTTGoGNijU=<&sZn#NnP!8z&Ag1y$IZU%D0q@v)tuDTbYnlOYvBIYZ6w0YZ#Pn*Bk&d+z1x!&V!c zE0FgxPy%p9kd4o|RkbuBB9Lr}Za-GX1a#jvh7)2>(&gjYCR6t?R?!Rj9mh)>AU+Hv z=t}95Sh~05vXfh0l&sEPP3{_uGCEUD{6(e~KPO&f6qbF@+J?qzG?%1VY zs4G2k)0jolOxqlOuYMd}rDQ_7HfF?Tw}Y8VldM+hlM`k`c*|c5w(U*zH%1;lyBVS` zmr2E}YGmT`*@z##$<#!dzD=vlo%(3nnr~MtF;?A6s3bLoUfRA&15a`Czfg&!Q_=X7 zaZ$vEU=J{SZ{o6>p*k9-)s-5_=-(Lq>Jz8IQW+$yYo-5At6B67J>N~EdDD5t@vgk$ z>?H5|BB&}iP`TQeVx(Hus$4P)sLbZby$P#@7S7EZ{Q(2An)jMTE>o3&++qJOZl}+4 z&(IO4=N@+eof6Gv?CBKQW`MpnNtFgZMs3VM%Ub0K)Ponpg>7$d{q-)!#nU-KZ@_@W z&C0~}(<}P0>KI+Z$h0~_D}7td|ALrYSdw;6w}a@a)_QN!jiQrJGY9WJd$dm#0?VD| z=viE1^StVFVigiH zBWd)j^zF6Gy|GJWClg>GAFa8A_!lCL<6eEEyr+xLE|=bUdr6CO;y;MPqxd4b2bPKR@wql!wUH;!zneam zlDoFZ7`l^T>lN!aFRcl`jrZp2x$ja1fWfYvs-0LiX`nF6JTH;}EVNyTvVov#Z5dc; zzidpxreF5tW0zsW7emiSr}8>K>8gJ+P5@SJ?8VL9n65* zT&AcCaZ~EyjT5bZuo@|b-b`E1?U|7@6EUhzJl#h*nl403+vHhQ4UeM@-dB@SUO8X( zIShSuu0DPG?k|5`IS)N9gxj_u9r_4Ds>0L4k6=vURsKF1Lr<2JR{l;V;*X}CYh>xP z022|a6SuW7CHp9QS=FSaZBh)OMemKnw=2{AqH6l|ECbG}$F`X9iH$PI^7ARV>-2r{ z2V{jAxEe6o>*SQC!Vp91)rn`k{>VPcf>}ZnqM+^@s3TKMC4o)-S)GbK3%DuNgw*^I zB8FLfHyM6jE~t=`88GyGRUP_AWmEd<^tY2~oOlfD{y~k%_432A3TFvTi=x@8$Q08B z#)cyt;IOzuru$|VMvnbkF05^Z?l)lQ`Kmfp)PWkRqK>;jYzL^D(KYJ5tm>@lJ&Hm% zL37&D-m?Ta9lJN05;513u+%if$+c(l9p;n{Ou;3^2*;pW(@99-|&ma&Mh6SKlvbWKA zolHtSNPcc%GDf6MD>ZUlbWX)B&CGFo*veCA=z|P|X)5A7jLswGooPp?3>*80C6ne1 zOKrY>@}fAT;+0SQsH6-bjd80zk^ev!5zehRjV1=1CH)SS;mQX$@F8<>a9Upmg@ztx zAY?gmu~)N58m%lW-B|GEW+Y2dh~CtUVf%(5%i^ja;iDx^@2g#na~}G1VxlY|;gB)a z$ys;=WE4C3+Lk=jup5UnB&IR#RE&aAg1}rxl%&-OhEbcgyx`BPoyx~|fqAJ28&N_G z#V~l~vcr|_z; z8>TYq1bBbbmKU4_V1-T7w=mEX$yt3>QG6+dWB&cje$vAzbu2Af37iJ~;Ce0%Cud3i0 zVS3t36^bnq%*h@HQ%q(Er1^cwg6uVvj%WGZ^~(wXZk2ULBMlwMR~{x0f>8ZBx?`$f zNQ&vk$;Y#dThG2K<+WJ3`k&X#%%fW>G4ZbO>Z&7 z+ZXHMc4WF=NUD5SUJfGw+f^6{!jytZ%N?)**} zhVDd0?`l=e)B;>Aa@DqI&_Mk(=%F<>={7wYiOJjUmI!oC#zDmK{#o_-C~LZQ)l*3JSBOzGNz=J?yxruXA< z&td7%#RC#-{V&vPDnlFcq3^%_eCP1m-@ZOvV>?>CRFa_x#nKT*V(;!RNtth*j;T3H z#?--;`@UP@KF%RwpM{g$=uTYE@Af_RyyNjl!ew`mFr*m)7gdeoc5HZ4t1g(n299Gj zp2Sg=4qZF~5)E~u9EF8tbkecnX$)(-1CpAQCXIxfLAr=?-+3d^F>Dsy9%*V#Zsh;l zNM^obRcwi)>zIiDjf5f10OBy$8BWcS9SzA4ZMs{yU8CAQO@Oft9T=P@A?fC>xIfjKc4h8Co=SKJ$Zkc1HPOpHl{`6S%#p~8}2oaw!0Z1Nr*JZ&Q16l@Z>vi zMOi7?2i9XVV~CH%=zd7idiMK-fd8!YYHR{Z-haA4%z^i(aav<s$_nZcv_Tf zq`w1kKD$mkM-1iG!_t&oIvE6@bXOU*{o%@SXYD_0jae8vym^;v8|+jUnyH&Q$huCm zf=p%TuFj#BFLCY2vx2LA1$9$d>Rw?2GED(Ac|?Yv1+trG*1*%~8)F!gunf89Z*s(U z-u?OENY!7TY{Q5Y+b_Uql;%Tb(|-HuqX`<@%fpYT%uNwNciZ-~V}GVHbYO_bwVu7o zY?(E9P3vs96SFy5r4447QkBhg%y;J{Yj^$or}xA$!Jz60du+2b+XjmDnCSg1$2#Hy zlYPVnnr4kVkWX6~sawcfptopVIB-BskStAu=qFtCiFPwUCcB9)KW z^~WF*B@U$lJp>(#vCa5mbE?hJdYs7xWb-D|V4}@v9^vK*vu;NaDmsK3?|Bjcngo3j zdv4Jj(UZDJjGPlCG<5DGT)-seNU52Hg$c`KLr~sjG z&4e*)$$4ssQ+kQ+{fO2!=MgUX3k@rWJs>n@|5k280-P#DC83K4cyIZ4lRWn=OAklp z4w_kA%beLpJ@Ls5TI4P;8h*&JZF}p}!gZ8fL!AvqeyX}-^X=om4@{^~O{jN8O4r56 z2jX(77?pZ-k3YPAx|K|RK*b|;8;$31k%Tz86z^R~E6)#hnunw8n(m0LA#WQ^FBO|Q zSS*xrpgV|W3?vg(6gS!E!%)va(x=;^iczUY_eiDhB{ru!NIduw0n=44liKp70;o&G zi&gcgE*eSc@`fKUOc{fM3Y$LaN^;58lM7V~BcHXF4!&C$`H#20d>(5n{g+)m3?0mB zPcjpa4uq0Pv$|TVK#n36?)FjT%jdjMkYIx_Q44ICVbf7DAHcx>HOKP-<_+<`-F%-! z-=?$bvz8T^nV|z%rjq!}dkUM%jk&ue49vb~VDP~g8OkK@^M~wFS>A;jjbiiiUuPgO z<--%3(M;*97^veK;lxQcpY|YMB}~C%zP~62%uXfGG{{uPmlt8Ch7J^z3AE6D1yx;% z)9``s$u+(I?$(!M45qCH3AOhN4K{9c`p3AflzGl^?d38gzTg>Ab8`8=wM|{4tH~t2 zX73IRnh@U7JQvUYQfSJpIO2VD0WH$0q%*Jmqq8@1`zkaCB=r;Um}z73Up73>7vf>o zr>$q01lG`n6@okjydUbVU161N74s#c-so-90VzIGU3x$7r9a7FHs$*&5MRQ3Hb;5*YG9M+qp3UT@(1y`ofWly zTMbB2V^Kzq3E$Y{BCP6?oj~|)<~`5J$bq>TI*_6rvyiYrX?l;{I4u}1UN_IgTklDF zZrv!pBL>`tKD>NcF8+0)0gS6z@HD=HvqL$p8u^@W{O>O8fZ_IH>c;4y!5%D(3B6&( zE!8#RM5054Gs{BTqFLVW0qj6z#aC0A&$${oFjqqd21^CR5QGH~qi9T9b6h37cNfFl zkSwCG6lz~bdQ;x}Jx0binVrej>+`yNlbF&mX|g51LZpxhp;GtfLyTdO4d}s4JMhPZ zt7cU@?ws+{JY^^K&mx&J-I5FGe($zKa5WJI zviJ2yj`|PDJbw&tE-TJUy!KKVIeI-A#cAmCB=mjO#mHaKf{on1GA#fh9+j}ki`9Ky z(~Zc640H#@KFi?Y|M2&xTjHUx%r@Z}-X?r6_-Zr=$8_3+S{b_Hu>weZFB?LGxEj+z zZp+V?HPe+$Aa5Cp+E~#H=|iQ}d*QU}@^=d(+9kP$Ci8XF2(gKU=jKkV(gy1_ZUsl)H-Q6=`G z{ZAs6uk=>F_TCMy>Pz5IVe&k6UW71heQEmUi;Fkl5l5d0Z#aRp7bQWQ04BewZcd;WY;$!ga zh;dQJd{O2*f4~``?4VZTRvfEN9GyN0h`P?5BQJxcGjw2x{6j~MKcBVi!UYCl%Q#f@ zBFB{Fu)JFHOKIo;JhyoEozNFsRPJlbQ|0H|CE}J>0rp%J*4H?gC7<56w1y72maAyj zYw&qUBImB+_{jDgYEuXO_($Qokp>5+EyVL}rOeTfe}1&`LvUw_q&_LtnG^!IDCX^D z3sv%1YD4$1wGytnu;GrNR$L!)YLQc#sLK|DNBE0srDq-gle-e81 zR5qFNo%+3!Z+K5*saTa!I1`5MQ4qWLB=D%eiIrHfcHeiiTx?v+A)DC@*4QLCdvl-8 zl%WH;a7Ne|ejFP~qucp5)FPu_NeFXCPSCm?D2B!kq}B}|p+4l~g0Tt0N?@dh;)XHZ z#EeDa%o(~zpf3_~8g^naZmY%I(28!j@!7|u)!H-Rd@V=9m z=}@W?XWr0(Bo)1xir+htp}QLO7nw{eE`(Svgyk3Tc={@a6`Te5-dKz>q#>PAtDrX@!b%yshc|dv3qGnfE$I?sYS>}3Ob7Xd zlT!ljHsXlyxQ=^sv|2CEGMpo7yXKKCu^x=V(UX%TSq|Nuz zav0Na`aOn3Ru#z%Zy2Y3d*nv1jP-f&`Uk79!5jzY#?aG%Aqq8#4u1)4^hVjo`6+K0 zd4i#2tlVRvUl`F^3kei7U6@#-P6rLStvE7wz|FDYUky~Ugy%oKq7RD<-p?CKM2X1C zXgI@ekWG%+P^--`R-BO@+ru_f%Le@5JZ`>$b7|;lSbCBmGa)g0shEBcUiyvP#O!7w zae?-+Z72yOe7{u|#{K<;p;dQ1l)$nBY)Lo8kgu}QyY?}L9=l<(-9|ie6uO0DPK-Vn zc43_toO?r0!^ZSRGO3Dh$e(Tb*ANqHj(VIJ<6~oGJJh}O{gIf$9Q&lu?4DTbdnVmh zq*{F$XY)qx`EPrFCz4dB04tJQOpU_#fRQZ7A;<-WIiSm=@v;oKF!T}d9-kob#*lF+ z)NX+{Z_s%0aw}nd>VutCqmdZ@N+fhx(WtqwSj=P*{~ m%d#PD`RmuTr1k}>!T$&Pj^Wa$y*v^C0000 { - const { name, path, meta, redirect, children } = el; - return { - name, - path, - meta, - redirect, - children, - }; -}); - -export default mixinRoutes; diff --git a/src/router/index.ts b/src/router/index.ts index aa86ee7..c041c60 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -4,7 +4,6 @@ */ import { createRouter, createWebHistory } from 'vue-router'; import { appRoutes } from './routes'; -import { NOT_FOUND_ROUTE } from './routes/base'; import NProgress from 'nprogress'; import 'nprogress/nprogress.css'; import { MENU_GROUP_IDS } from './constants'; @@ -35,27 +34,18 @@ export const router = createRouter({ id: MENU_GROUP_IDS.WORK_BENCH_ID, }, }, + + ...appRoutes, { - path: '/permission', - name: 'permission', - component: () => import('@/views/components/permission/choose-enterprise.vue'), + path: '/:pathMatch(.*)*', + name: 'notFound', + component: () => import('@/layouts/NotFound.vue'), meta: { requiresAuth: false, - requireLogin: true, + hideInMenu: true, + hideSidebar: true, }, }, - // { - // path: '/auth', - // name: 'auth', - // component: () => import('@/views/components/permission/auth.vue'), - // meta: { - // requiresAuth: false, - // requireLogin: true, - // }, - // }, - ...appRoutes, - // REDIRECT_MAIN, - NOT_FOUND_ROUTE, ], scrollBehavior() { return { top: 0 }; diff --git a/src/router/routes/base.ts b/src/router/routes/base.ts deleted file mode 100644 index f10ef89..0000000 --- a/src/router/routes/base.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router'; -import { REDIRECT_ROUTE_NAME } from '@/router/constants'; - -// export const REDIRECT_MAIN: RouteRecordRaw = { -// path: '/redirect', -// name: 'redirect', -// meta: { -// requiresAuth: false, -// requireLogin: false, -// hideInMenu: true, -// }, -// children: [ -// { -// path: '/redirect/:path', -// name: REDIRECT_ROUTE_NAME, -// component: () => import('@/layouts/Basic.vue'), -// meta: { -// requiresAuth: false, -// requireLogin: false, -// hideInMenu: true, -// }, -// }, -// ], -// }; - -export const NOT_FOUND_ROUTE: RouteRecordRaw = { - path: '/:pathMatch(.*)*', - name: 'notFound', - component: () => import('@/layouts/NotFound.vue'), - meta: { - requiresAuth: false, - hideInMenu: true, - hideSidebar: true, - }, -}; diff --git a/src/router/routes/modules/creativeGenerationWorkshop.ts b/src/router/routes/modules/creativeGenerationWorkshop.ts index c426c3e..92393fd 100644 --- a/src/router/routes/modules/creativeGenerationWorkshop.ts +++ b/src/router/routes/modules/creativeGenerationWorkshop.ts @@ -111,6 +111,28 @@ const COMPONENTS: AppRouteRecordRaw[] = [ }, ], }, + { + path: '/explore/list/:shareCode', + name: 'ExploreList', + meta: { + locale: '分享链接列表', + requiresAuth: false, + requireLogin: false, + roles: ['*'], + }, + component: () => import('@/views/creative-generation-workshop/explore/list/index.vue'), + }, + { + path: '/explore/detail/:shareCode/:id', + name: 'ExploreDetail', + meta: { + locale: '分享链接详情', + requiresAuth: false, + requireLogin: false, + roles: ['*'], + }, + component: () => import('@/views/creative-generation-workshop/explore/detail/index.vue'), + }, ]; export default COMPONENTS; diff --git a/src/utils/tools.ts b/src/utils/tools.ts index e78aa17..687c535 100644 --- a/src/utils/tools.ts +++ b/src/utils/tools.ts @@ -131,101 +131,101 @@ export function getVideoInfo(file: File): Promise<{ duration: number; firstFrame video.style.position = 'fixed'; // 确保视频元素在DOM中 video.style.top = '-1000px'; // 但不可见 document.body.appendChild(video); // 添加到DOM - + let hasResolved = false; - + // 先获取元数据(时长) video.onloadedmetadata = function () { // 视频时长 const duration = video.duration; - + // 尝试将视频定位到非常小的时间点,确保有帧可捕获 if (duration > 0) { video.currentTime = Math.min(0.1, duration / 2); } }; - + // 当视频定位完成后尝试捕获首帧 video.onseeked = function () { if (hasResolved) return; - + const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; - + const ctx = canvas.getContext('2d'); if (ctx) { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); } - + // 清理 window.URL.revokeObjectURL(video.src); document.body.removeChild(video); - + // 返回结果 hasResolved = true; resolve({ duration: video.duration, - firstFrame: canvas.toDataURL('image/jpeg', 0.9) // 提高质量 + firstFrame: canvas.toDataURL('image/jpeg', 0.9), // 提高质量 }); }; - + // 作为备选方案,监听loadeddata事件 video.onloadeddata = function () { if (hasResolved) return; - + // 尝试捕获帧 const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; - + const ctx = canvas.getContext('2d'); if (ctx) { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); } - + // 检查是否捕获到有效帧(非全黑) const imageData = ctx?.getImageData(0, 0, canvas.width, canvas.height); if (imageData) { let isAllBlack = true; for (let i = 0; i < imageData.data.length; i += 4) { - if (imageData.data[i] > 10 || imageData.data[i+1] > 10 || imageData.data[i+2] > 10) { + if (imageData.data[i] > 10 || imageData.data[i + 1] > 10 || imageData.data[i + 2] > 10) { isAllBlack = false; break; } } - + if (!isAllBlack) { // 清理 window.URL.revokeObjectURL(video.src); document.body.removeChild(video); - + // 返回结果 hasResolved = true; resolve({ duration: video.duration, - firstFrame: canvas.toDataURL('image/jpeg', 0.9) + firstFrame: canvas.toDataURL('image/jpeg', 0.9), }); return; } } - + // 如果是全黑帧,尝试定位到0.1秒 if (video.duration > 0) { video.currentTime = 0.1; } }; - + // 设置视频源以触发加载 video.src = URL.createObjectURL(file); - + // 设置超时,防止长时间无响应 setTimeout(() => { if (!hasResolved) { document.body.removeChild(video); resolve({ duration: 0, - firstFrame: '' + firstFrame: '', }); } }, 5000); // 5秒超时 @@ -266,7 +266,7 @@ export const formatUploadSpeed = (bytesPerSecond: number): string => { } }; - export function convertVideoUrlToCoverUrl(videoUrl: string): string { +export function convertVideoUrlToCoverUrl(videoUrl: string): string { if (!videoUrl || typeof videoUrl !== 'string') { console.error('Invalid video URL'); return ''; @@ -281,3 +281,20 @@ export const formatUploadSpeed = (bytesPerSecond: number): string => { return urlWithCovers + '.jpg'; } + +/** + * 生成包含协议、域名和参数的完整URL + */ +export const generateFullUrl = (pathTemplate: string, params: Record = {}): string => { + const protocol = window.location.protocol; + const hostname = window.location.hostname; + const port = window.location.port ? `:${window.location.port}` : ''; + const baseUrl = `${protocol}//${hostname}${port}`; + + let path = pathTemplate; + Object.entries(params).forEach(([key, value]) => { + path = path.replace(`:${key}`, String(value)); + }); + + return `${baseUrl}${path}`; +}; diff --git a/src/views/creative-generation-workshop/explore/detail/index.vue b/src/views/creative-generation-workshop/explore/detail/index.vue new file mode 100644 index 0000000..09ab964 --- /dev/null +++ b/src/views/creative-generation-workshop/explore/detail/index.vue @@ -0,0 +1,213 @@ + + + diff --git a/src/views/creative-generation-workshop/explore/detail/style.scss b/src/views/creative-generation-workshop/explore/detail/style.scss new file mode 100644 index 0000000..dbc1b58 --- /dev/null +++ b/src/views/creative-generation-workshop/explore/detail/style.scss @@ -0,0 +1,151 @@ +.explore-page { + position: relative; + padding-top: $navbar-height; + min-width: 1200px; + height: 100vh; + background: #fff; + display: flex; + flex-direction: column; + .page-header { + position: fixed; + left: 0; + right: 0; + top: 0; + z-index: 1000; + min-width: 1200px; + .content { + height: $navbar-height; + border-bottom: 1px solid var(--Border-1, #d7d7d9); + } + } + .cts { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + + .page-wrap { + flex: 1; + display: flex; + justify-content: center; + .explore-detail-wrap { + min-height: 500px; + width: 684px; + .title { + color: var(--Text-1, #211f24); + font-family: $font-family-medium; + font-size: 28px; + font-style: normal; + font-weight: 400; + line-height: 40px; /* 142.857% */ + } + } + .fold-box { + width: 40px; + height: 40px; + border-radius: 30px; + border: 1px solid var(--Border-1, #d7d7d9); + background: #fff; + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.15); + position: absolute; + right: 16px; + top: 32px; + display: flex; + justify-content: center; + align-items: center; + } + .main-video-box { + width: 320px; + height: auto; + background: #fff; + } + .main-img-box { + width: 347px; + height: auto; + background: #fff; + aspect-ratio: 3/4; + } + .desc-img-wrap { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 24px; + .desc-img-box { + width: 212px; + height: 283px; + background: #fff; + object-fit: contain; + aspect-ratio: 3/4; + } + } + .play-icon { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 222; + width: 64px; + height: 64px; + background-image: url('@/assets/img/creative-generation-workshop/icon-play.png'); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + transition: background-image 0.3s ease; + } + + .play-icon:hover { + background-image: url('@/assets/img/creative-generation-workshop/icon-play-hover.png'); + } + .ai-suggest-box { + width: 440px; + height: fit-content; + max-height: 100%; + border-radius: 16px; + background: linear-gradient(126deg, #eef2fd 8.36%, #f5ebfe 49.44%, #fdebf3 90.52%); + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); + .ai-text { + font-family: $font-family-medium; + font-size: 16px; + font-style: normal; + font-weight: 400; + line-height: 24px; + background: linear-gradient(85deg, #7d419d 4.56%, #31353d 94.75%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + .result-box { + background: rgba(255, 255, 255, 0.8); + backdrop-filter: blur(4px); + .result-item { + .s1 { + color: var(--Brand-6, #6d4cfe); + font-family: $font-family-manrope-regular; + font-size: 24px; + font-style: normal; + font-weight: 700; + line-height: 32px; /* 133.333% */ + } + &:first-child { + position: relative; + &::after { + content: ''; + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 0; + width: 1px; + height: 32px; + background: var(--Border-1, #d7d7d9); + } + } + } + } + } + } +} diff --git a/src/views/creative-generation-workshop/explore/list/index.vue b/src/views/creative-generation-workshop/explore/list/index.vue new file mode 100644 index 0000000..3be908e --- /dev/null +++ b/src/views/creative-generation-workshop/explore/list/index.vue @@ -0,0 +1,102 @@ + + + diff --git a/src/views/creative-generation-workshop/explore/list/style.scss b/src/views/creative-generation-workshop/explore/list/style.scss new file mode 100644 index 0000000..f9e8045 --- /dev/null +++ b/src/views/creative-generation-workshop/explore/list/style.scss @@ -0,0 +1,59 @@ +.explore-page { + position: relative; + padding-top: $navbar-height; + min-width: 1200px; + background: #fff; + .page-header { + position: fixed; + left: 0; + right: 0; + top: 0; + z-index: 1000; + min-width: 1200px; + .content { + height: $navbar-height; + border-bottom: 1px solid var(--Border-1, #d7d7d9); + } + } + .page-wrapper { + min-height: 500px; + .explore-container { + width: 1200px; + .explore-list-wrap { + .cts { + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + } + :deep(.overflow-text) { + color: var(--Text-1, #211f24); + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .card-container { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 24px; + .card-item { + border: 1px solid var(--Border-1, #d7d7d9); + cursor: pointer; + transition: all 0.3s; + &:hover { + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.15); + border: 1.01px solid var(--Border-1, #d7d7d9); + border-radius: 8.08px; + } + } + } + } + } + } +} diff --git a/src/views/creative-generation-workshop/manuscript/check/components/check-list-drawer/index.vue b/src/views/creative-generation-workshop/manuscript/check/components/check-list-drawer/index.vue index 42a9cc0..fa0040b 100644 --- a/src/views/creative-generation-workshop/manuscript/check/components/check-list-drawer/index.vue +++ b/src/views/creative-generation-workshop/manuscript/check/components/check-list-drawer/index.vue @@ -39,7 +39,7 @@ export default { 批量审核列表 {`共${dataSource.value.length}个`} - +
{dataSource.value.map((item) => ( diff --git a/src/views/creative-generation-workshop/manuscript/check/components/content-card/index.vue b/src/views/creative-generation-workshop/manuscript/check/components/content-card/index.vue index 65111b7..f5d880b 100644 --- a/src/views/creative-generation-workshop/manuscript/check/components/content-card/index.vue +++ b/src/views/creative-generation-workshop/manuscript/check/components/content-card/index.vue @@ -22,6 +22,7 @@ import 'swiper/css/navigation'; import { Navigation } from 'swiper/modules'; import { FORM_RULES, enumTab, TAB_LIST, RESULT_LIST } from './constants'; import { getImagePreSignedUrl } from '@/api/all/common'; +import { EnumManuscriptType } from '@/views/creative-generation-workshop/manuscript/list/constants'; import icon1 from '@/assets/img/creative-generation-workshop/icon-magic.png'; import icon2 from '@/assets/img/creative-generation-workshop/icon-line.png'; @@ -53,6 +54,12 @@ export default { const modules = [Navigation]; const checkLoading = ref(false); + const tabList = computed(() => { + if (props.modelValue.type === EnumManuscriptType.Image) { + return TAB_LIST; + } + return TAB_LIST.filter((item) => item.value !== enumTab.IMAGE); + }); const isTextTab = computed(() => activeTab.value === enumTab.TEXT); const onAiReplace = () => { @@ -336,7 +343,7 @@ export default { ))}
-
+
AI 审核建议
@@ -434,7 +441,7 @@ export default {
- {TAB_LIST.map((item) => ( + {tabList.value.map((item) => ( ))} diff --git a/src/views/creative-generation-workshop/manuscript/check/components/header-card/index.vue b/src/views/creative-generation-workshop/manuscript/check/components/header-card/index.vue index a00b885..ea569c7 100644 --- a/src/views/creative-generation-workshop/manuscript/check/components/header-card/index.vue +++ b/src/views/creative-generation-workshop/manuscript/check/components/header-card/index.vue @@ -17,18 +17,13 @@ export default { type: Array, default: () => [], }, - modelValue: { - type: Object, - default: {}, - }, selectCardInfo: { type: Object, default: {}, }, }, - emits: ['update:modelValue', 'cardClick'], + emits: ['cardClick', 'platformChange'], setup(props, { emit, expose }) { - const selectedPlatform = ref(1); const modules = [Navigation]; const handleCardClick = (item) => { // emit('update:modelValue', item); @@ -94,15 +89,15 @@ export default {
{ - selectedPlatform.value = item.value; + emit('platformChange', item.value); }} class={`w-100px flex items-center mr-16px py-8px px-12px flex border-1px border-solid border-transparent transition-all items-center rounded-8px cursor-pointer bg-#F2F3F5 hover:bg-#E6E6E8 ${ - selectedPlatform.value === item.value ? '!bg-#F0EDFF !border-#6D4CFE' : '' + props.selectCardInfo.platform === item.value ? '!bg-#F0EDFF !border-#6D4CFE' : '' }`} > - + {item.label}
diff --git a/src/views/creative-generation-workshop/manuscript/check/index.vue b/src/views/creative-generation-workshop/manuscript/check/index.vue index 66cac56..166d2d9 100644 --- a/src/views/creative-generation-workshop/manuscript/check/index.vue +++ b/src/views/creative-generation-workshop/manuscript/check/index.vue @@ -64,10 +64,15 @@ export default { const getWorkAudits = async () => { const { code, data } = await getWorkAuditsBatchDetail({ ids: workIds.value }); if (code === 200) { - dataSource.value = data ?? []; - remoteDataSource.value = cloneDeep(data ?? []); - selectCardInfo.value = cloneDeep(data?.[0] ?? {}); - selectedImageInfo.value = data?.[0].files?.[0] ?? {}; + const _data = (data ?? []).map((item) => ({ + ...item, + platform: item.platform === 0 ? 1 : item.platform, + })); + + dataSource.value = _data; + remoteDataSource.value = cloneDeep(_data); + selectCardInfo.value = cloneDeep(_data?.[0] ?? {}); + selectedImageInfo.value = cloneDeep(_data?.[0].files?.[0] ?? {}); } }; @@ -77,6 +82,9 @@ export default { resolve(!isEqual(selectCardInfo.value, _item) && !isSaved.value); }); }; + const onPlatformChange = (platform) => { + selectCardInfo.value.platform = platform; + }; const onExit = async () => { const isModified = await isSelectCardModified(); @@ -165,13 +173,18 @@ export default { class="check-list-icon" onClick={() => checkListDrawerRef.value.open(dataSource.value, selectCardInfo.value)} > - + 审核列表
)}
- +