From ca9537f862a9f7cc836ef7cbd05a7051f6a0f653 Mon Sep 17 00:00:00 2001 From: super <2903208875@qq.com> Date: Thu, 2 Apr 2026 23:29:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=A4=9A=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/.env | 6 +- app/.env copy | 15 +++ app/__pycache__/config.cpython-312.pyc | Bin 2137 -> 2602 bytes .../__pycache__/del_brand.cpython-312.pyc | Bin 0 -> 23701 bytes app/amazon/__pycache__/main.cpython-312.pyc | Bin 0 -> 25649 bytes app/assets/delete-brand.js | 2 +- .../__pycache__/brand.cpython-312.pyc | Bin 35787 -> 35720 bytes .../__pycache__/communication.cpython-312.pyc | Bin 3492 -> 4092 bytes .../__pycache__/main.cpython-312.pyc | Bin 8060 -> 8645 bytes app/new_web_source/delete-brand.html | 2 +- app/version.txt | 2 +- .../brand/components/BrandDeleteBrandTab.vue | 93 +++++++++++++++++- 12 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 app/.env copy create mode 100644 app/amazon/__pycache__/del_brand.cpython-312.pyc create mode 100644 app/amazon/__pycache__/main.cpython-312.pyc diff --git a/app/.env b/app/.env index 0f656f3..e40b987 100644 --- a/app/.env +++ b/app/.env @@ -6,10 +6,12 @@ mysql_user=aiimage proxy_url=https://api.jikip.com/ip-get?num=1&minute=1&format=json&area=all&protocol=1&mode=2&key=t24g6gi44ubufd8 proxy_mode=2 +zn_company=rongchuang123 +zn_username=%E8%87%AA%E5%8A%A8%E5%8C%96_Robot + client_name=ShuFuAI -java_api_base=http://127.0.0.1:18080 -# java_api_base=http://8.136.19.173:18080 +java_api_base=http://8.136.19.173:18080 diff --git a/app/.env copy b/app/.env copy new file mode 100644 index 0000000..0ff00cd --- /dev/null +++ b/app/.env copy @@ -0,0 +1,15 @@ +base_url=http://8.136.19.173:15124 +workflow_id=7608812635877900322 +mysql_host=8.136.19.173 +mysql_user=aiimage + +proxy_url=https://api.jikip.com/ip-get?num=1&minute=1&format=json&area=all&protocol=1&mode=2&key=t24g6gi44ubufd8 +proxy_mode=2 + +client_name=ShuFuAI + + +java_api_base=http://127.0.0.1:18080 +# java_api_base=http://8.136.19.173:18080 + + diff --git a/app/__pycache__/config.cpython-312.pyc b/app/__pycache__/config.cpython-312.pyc index f5d47634be09bdeb9bbb71da867d60ea57e881a5..23bb38a73c5f8b740956d92ef22bc9f641298cde 100644 GIT binary patch delta 726 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 Hvi<)rD~kVZ literal 0 HcmV?d00001 diff --git a/app/amazon/__pycache__/main.cpython-312.pyc b/app/amazon/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..702fd9b5266223f58b6fb523a824642bf08bd99a GIT binary patch literal 25649 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 $@D?lR~pBDmlY<9J4z_r(tHmVqtoYQ!II#w{Y zW^56=WjmXBw@=>=*%&fMX8m$O2*|Oy%YBB1iw2|9;4_q51WdmA$m)@OPqqNHS*1?v zOZT3-cRX|Mu+pDpoX9HoW|g}ZjAzXmRsmce+0T~OozJi1v&x_CUf`}^a~JyzOTIK@ zUg7{gn_uHz>0ZF*F7gcc3{9ZlJ<HApc~n~2 zR|_e9+Of?p6aEJ2kAKJdD5>I4jtyCN^{R1^t?!g3_0LdtCIBbXA6~(^mC~Kf<9Nt&>yF1u9JP9lGi*} z_W4`|`WH*qrpdmb>RJ}czo;Yrg__nX)gKjkt!1h|7AYY1k7WuBsWO3|xgUsQ2GRKi zIGuu08(xs#$Bp^=a}WyBhv<4gvGhS1BaK)$7)yI4N0d%0L>7bsmWFVpSdRw0Ir1sf z9=pu0JQImA)wBi>K1vYDV;A%-fcHN7L4+SisL=w3*M$&%Jfc`SVH(0uBnZDg23pYb zm_>rPO%hGfAI(;gM*)D(1Wjc$TfwlN6VQfak01l!>kD!b!4A%$v1^!EXx>01B#~%- zUW_`Wl9ovWBr9knN$uhQh3iCE{`FhXo)vDJp+5kY*I255utbnaK>H(l7wMSb3&G}3 zTx&qjGP~lmoC^c_R0?VTD3XtGTgNCpH%uqkR)(Y`;j%#6oKG8h)CUrT=xGW>Y2ss~ zDWnsHd=jj=d>M9C*aj8G?ZY8maiT*Hhy`uy$U~$R!W*ZXjY@41Ey&|yN-Jg%8DDW^ zABS2ox>T^lo(R1YA7l2G+VxRsDGRp>pn74f66}ne+qB0nvFq)iod&6h&K_@1IIZRq zfMjF{)M6=s6qET+K(1hliH4J`XmUcHX>tY8mpjW_furN|K68`mwWyr)VJM7W6CzdSdl(ST>y$V}_aRNicTGV^AKe zjUJdzlc~b?HFRkN+9nVOu@bSktl!wwDj;FObF;k@2L%8;GSe!Gc`ozWn?4HPD_fSA70ACSMe}i)8Fa{rdYwBtDwNt;ncH%j}-QN&6DGKA^B&Rhe<#E7!dU-_Mc~cow*9W)5T$NU-$Tm`-yegb`imMhGOR zpFw`ZhH}qafP4leyEa6eppquqVC+&bSeB#G{2N5s;b0Eto03G(d=Dhx@VNtg0hzU9 z2OMuQ?}XvFo4FSwe};|#y#vV`_jg%4cf;wY<-EKokO7MK{yxUq-T~+Jh_b$&(>Dj= zxYX<5;1JV|84=_z*zaLlQ!Bxw3n4Ju49MjB$;6R%Z0@_2?0L()evl3&} z*tYF^%>#i%u3g(P02?+C$Jreqs%QEztpD2sTgJxNb6Ctxl2b) z7YxmC%q#}Ru0f1FpVH?E3R==8>}?IBca65N>#c06jop8*PxmuOFrhPfbtYG-dyc1c zbb(LTLc|*?O$z*Sc9%X~zL3!zpKc!5K7;5475|y8W#cI`2i5+pqLWp}s@Ssmp2G30 zMT3cckhN?-vfWwdmW-#)9*n!3SL#x@_We0;*5TH{<-?hm64QQI|4qyUvMXFGT?^RT zH?owDXOw|#6byYY_kMR&3bH?x^reEO|K4_)BZ z7dT76AYij+*XV%XSmv7Psr^PKNm?oSDv8RU{q2nw36)a}fR*$fZ_zF`0yj-$G@s9C zMo0{4zQ180a9$D~Fe8ibOqe?pOb+&)o$D!MGnbEUp3t|P*S8QH-3lKS5)HZ>o0v06 z2L<|ax8!uAYd)KLyBk#Ji!Vj#n2WmP?}Hln?E4$#At?ehM7r^)cC13VyTGy@kzOJgS<|uR5<^MI;MNpmE2Q`&{Mit5wqX3uZPYOFz(; zg8zdBY2bcTP_TLlpyzsRvr76&vSzhh@kw@G(-Ore3zQK3$r1&Gd@7fL|5KG_^+Ls` z`hwN-6ravhpnr*`SuXobJ$ua(*=I`>;Qw5uX-QCguCHm)D8A4rz|Wk3(zy*5rF6`* z=o|;9Q$UsQf_6UyDbIl2^+zFPO)R8L%LNP&7oA@M?pJe0WJ3#feOg-O(200&K~LI1 z4NJEJhIGUO{)vj3X*JP`YV7fJTnOocehm0AT?EpNr{x0Dje@;t(Fr($v_hOYw2SaW zv(ycvudvnX9^BHVJ)oruAuob-1@1kZ4B8}#Pvc08QP*UVo;;CH4RuWsYbc|of!dcr z$7j<9!g)t)fmG6th>Hajhg$JrN$+}E?$Fcej-+TgJCf~*fa+F5A8{Bp8lDv_1sn#u z0nW4Op|4=f0RoKPrx|uV)Jkhl1~*eIIq5|SKs4&J#8lJSjwH}cONW{PmnShx0d*yl z`q$BUx2S)9M9Jb_lUuX+-XeCy!kb-=Ri=%C9WkjJZ$}Jtybf3oj@R?D1!i`PIuzVA zh9l~JixF1Hj|c3tq2tiT+=#EEi*8Zp8Ig4sx1>F?)=l9y_~Baj-j1_6Mm@QahUh$( zUn^i%M3!W@siczV?K>L{q6~06sc-jMNU#h6i(Z@2^J~QoFkSU0)e(cl%Ni=G>xzs6b z7uKBtJxCHz4@Dj#Nl1v%7YSht3Xn&H)+l13AX)_gN9!F4_a;DFw{yM-NrJefN=K}c za$=Sw8U;9W`O?TZzI2Q7e&I-LAh0>K;Hu`&7VuP(piwt0R$&sdE>dscb*c` z5*Wy#ay7ujCcLQOw3Qci2$bGIjFBtFJwW)(C^{?-bZcA!BgR-A^5U7iBO{JqRb8H`x%g z!dFJ_urnt(F_tm6VIjDjgyT4J8*NDt%B6<5NwH|eMyvyf(F3_G1q>GO05c{dcf1I> zZ^ztcgCmaR@<(aPLk~{A@DL~enR@CCsMgeP@8gUvfHGv_Ngc2K!ZkVgAeSds92as^ zaoj<|X|#kI|873F&|z;<9p*6%HG(tw_>n75p5!VyjWQ5L0X5qo(aTb<-_iUY{DP?A zWexK<1Tn+l1megTA|oQ?--Jgl0`bE61#xYfp=^mP06_MYhu@q!bRV30C!#aavcNS$t(_ar*egg8ozxr6E4&7kxr5C=!^+dDe(FgRzwpNpZ|{yvKp zXu?=1ET@S?MWji=z@l$IcmEAJb3lYQB4Lfvve(w$ZDDXc1+*wQ3JG)qiJ>zh5Kk5& zIC8MphUX4C1FHUxf$qKz+L8ue@#|vbFDJ4=ZEJK>3!K8MVb!(#67)hKuQ39?ecW-_ zF>wWqS|6Nf`9F=7}nR_hP)i9Dfo;eFFA-GctBeifKyyW@4 z&h73}HnY~Jue+R*Hhj+$b({x&a>5LSQ!9Y10_{l zGTh=XEE!&NvBZQK4X^!ce({JbDAi>a`a%3tSmQ0MaW5Y)oIkSs%ltyWvC5s~HO_X% z`;9a33=mtf$kXF#AFChhV_WWK?`~&JKe=G+xWvcSdAfYYRsQN4r}j%@aZp1Q?2rVt zl(FP1BL$}q9G=AUr7QgfrV(Z6K)Z8}%ivP7)s3T$(LVN$JK4=U**kZ!yLPh$a8`fM zrR>5N_Ik5tUCaS-kvHcycm8-z{pfmcP9yw&nUM=s$|(SmPSU9*=d)+~bBrff9b3hg zZe`or*&UtUwoY~{&C+Ie=RVfVu#AN*w)%2x7a`s1W2>F}j<xtI&S>?`Xu4#YbyHT&tf^&ezt6b&rZ4lxXRI2l_s(d6-@gY}NPF)L$|OI(4FOwzqJ$zp&C@ zY?>&Z<1L;8Mn3+MDt}SwrK0jnGs^rWm0u}jMOi^gR+#;jLRpj+q?Co}U!~}?lY^8# zE9EOiN_xWJ%3wJ;0F&d@<-kc95dBn#ghIo%kxe6wY~do$PR|xFJ@V;R5@}t|d0mcE z;?))WS(o$ejWx1=P+&EeGMeD@28=+y|K`7w;#q$-&7)?E>qqDL;8acd%#k(!C#T?h zxa%OZ@cSD}Ihz$NPQ=X8@cf7-V)E%%ar3awm2_;$`IK@&sJUdi!4gO~+kA$*1Y4S? zTHwo!{D{*tuDi!G7LH218TIh{Uw;p#BN5-<*diekG>K+O3<=tVZn0Oln4Iih@|^|6 zO6PR9wgUJh>`o92W2hoX8+{mH!g^0j%? zXN8((gW|J_yyis3=NctMe4eO)kk1V=^rvfDbgIvd#uk<83rYncU#Jui@`Vm#zev=q z%~pJoQ9plen&MAs3V8Wbo@QO5>`$e6>*8c=oC5qryVQw>m;8f>iO9X~2L;d%+#Ln? zcF|JNMF@hW0ffuM@(H^<+9?w8nQ^$YD0&)Y_*^-h5Q&~fd7$>0~1PijboX zy#_k@bU@O`+LA}G^^cZ=f#i@Hwi=1h%**MtFtvcI(or)%bcy>7qiIuyjfJ8>hsS9v zFMA$|smv3=mH-3<&&@FF*0_kA59Xj1+?EJd&O&a;rTj2zx|N1ke5RE!f+1ZjugrY} zRNNe&$ZK{v9+6`qIer$kj)bXYh^i4awj2YD%rvLZMYfnZh0gQnynxP&=%AREc@7+o zDHmrhaI7|>a3s`m$OYBGA!RE^2UvT<{e0J+JQg|$+iFsC94pa8)?yi`BV>>XW!&fp zx<`|aV?zZloipd{$3)XOP{O1l+G5^9XC*im9D!n9k>eDfhR}mE#LB%`%FGGm8X0ha zYcv2)$lYF4;@t1-avk6`cD4xls-IDnFT-~dX27f_aD0|$@~ynsG09XNpO z%IEo3wk5Zk$ly{zOhukOa^4sI zh2>F7%V>F*gjUdKRv6m$9P;oHMo^sy#w{p-jknNb#Dnp`s|K1Mfys*7kT zwbAn@qDIjbg#(Gx7Thv&$zQY_<3&rYa7hWtFCk*7O>`*kRSYE3TL|Pmsnl} z0t&eJS6KH1&&|u}4=;xysK=YbOgrFmFk@y%f7eX$t#LCkKg-O6s+k;WJ*ZpW*K36n zDOH=`j=6(+xB#uYtFr@f?#w+F0K2n*@UOAH4q$7!Ue=#I|swUj1M9aRmT>F!{>SsaJn1 zWZDWBLf~#2P;$3F@b_imzzHb13?i@0LNU|9JnScAx@Jg>bXF^@%RTnuMFQ_YSzK|9hpRC}wgJ=2$(y%%T>o!D(9ykCWZd#d1 zP9%-ofhg`y#YQ4(3^lX(mPK-C3flsOaNJxng3p54g>E#I<5e98_2P4>nIeR7(>?{`(ZR89IS6&WpZZeX^tC)ek^PlXt+;)pCP=}L({deuzBZI8 zmP>-0BwEEziOcF3WHxN#g7YQp7WQ`iDqTg_DfqdbAyZUw-GZIb34g+a{YWOm z{{xTse(lqtBo6MP#3+-3PXViq9GC(eKI8!uHiKALBdav+3E#p^QfQ_{!)rL#t&p!3 zmk{zmuH`XvmHx2qozIgnAELX*ums^Ot%96Kz3e$V`OxoyBdERkW?Ne+P$Jv|3+EB1 zo_^)>d#5HJe+xF>DemT0GT-qo!gNR*zHgN%5Uw3M1o%V*PRRVgxfe(RyUiVa9Sq$B zYz4#E`mNl=#3{vXzRl=s0SBhMs)xHkc=5pz8A$Hz>kX+lszcYsa@W(M3?ZO|*qvRw$PKj|q|;)C z$k0r`H($@)YhR6u2yy{1w~(Q>imXhe#h6d<^^fSxK&KF#fO;Xfh%RRQ@QUlT1)CqL zERp;>rTuqG|L;`d|E6;PLKS+c!oN^U{z45*Py=3S;4jqt|5WZ(ORB!2(EWN_l2)=F a7BEV#8$5VkmieVz{Xk<-M#-~CasMCaC=DY3 literal 0 HcmV?d00001 diff --git a/app/assets/delete-brand.js b/app/assets/delete-brand.js index 6a3dad9..4c1fe87 100644 --- a/app/assets/delete-brand.js +++ b/app/assets/delete-brand.js @@ -1 +1 @@ -import{d as ye,o as ke,J as we,a as l,c as o,b as be,B as Ie,e as a,F as x,r as z,t as r,f as c,K as me,L as le,n as oe,g as _,h as A,M as Se,i as C,E as d,j as xe,N as Ce,O as $e,P as Ne,Q as Fe,_ as Pe,q as Ee,s as Te}from"./pywebview-Dee3nQjE.js";const Re={class:"page-shell module-page"},De={class:"main-content"},Ue={class:"left-panel"},qe={class:"upload-zone"},Be={class:"selected-files clean-placeholder split-selected-files"},Ae={key:0,class:"more-line"},Me={key:1},je={class:"run-row"},Le=["disabled"],Je={class:"loading-msg"},Ve={key:0,class:"queue-debug-card"},ze={key:0,class:"queue-debug-line"},Oe={key:1,class:"queue-debug-payload"},He={class:"right-panel"},Ke={class:"task-list-wrap"},Ge={class:"clean-result-summary"},Qe={class:"summary-card"},We={class:"summary-card"},Xe={class:"summary-card"},Ye={class:"result-list-wrap"},Ze={key:0,class:"empty-tasks"},es={key:0,class:"result-subsection"},ss={class:"task-list clean-result-list"},ts={class:"left split-result-main"},as=["title"],ns={class:"files"},ls={class:"files"},os={key:0,class:"files"},rs={key:1,class:"files"},is={key:2,class:"files"},us={key:3,class:"time"},cs={key:4,class:"delete-brand-progress-block"},ds={class:"delete-brand-progress-header"},fs={class:"delete-brand-progress-bar"},vs={class:"files delete-brand-progress"},hs={key:5,class:"files split-entry-list delete-brand-preview"},_s={key:6,class:"files"},ps={class:"task-right split-result-actions"},gs=["onClick"],ys=["onClick"],ks=["onClick"],ws={key:1,class:"result-subsection"},bs={class:"task-list clean-result-list"},Is={class:"left split-result-main"},ms=["title"],Ss={class:"files"},xs={class:"files"},Cs={key:0,class:"files"},$s={key:1,class:"files"},Ns={key:2,class:"time"},Fs={key:3,class:"delete-brand-progress-block"},Ps={class:"delete-brand-progress-header"},Es={class:"delete-brand-progress-bar"},Ts={class:"files delete-brand-progress"},Rs={key:4,class:"files split-entry-list delete-brand-preview"},Ds={key:5,class:"files"},Us={class:"task-right split-result-actions"},qs=["onClick"],Bs=["onClick"],As=ye({__name:"BrandDeleteBrandTab",setup(js){function $(){return`delete-brand:current-tasks:${typeof window<"u"&&window.localStorage.getItem("uid")||"0"}`}const w=_([]),N=_([]),I=_(!1),O=_([]),i=_([]),F=_([]),P=_({total:0,successCount:0,failedCount:0,items:[]}),k=_(""),y=_(""),p=_({}),g=_(null),M=_(!1),j=A(()=>w.value.slice(0,10)),m=A(()=>{const t=[];return i.value.forEach(s=>{t.push(...s.items)}),t});function re(){try{const t=typeof window<"u"?window.localStorage.getItem($()):null;if(t){if(i.value=JSON.parse(t),i.value.length>0){const s=i.value[i.value.length-1];k.value=s.queuePushResult||"",y.value=s.queuePayloadText||""}}else i.value=[]}catch{i.value=[]}}function H(t,s,e,n){const u=s.filter(f=>f.matched!==!1&&f.success!==!1);if(u.length===0)return;const v={taskId:t,items:u,createdAt:Date.now(),queuePushResult:e,queuePayloadText:n},h=i.value.findIndex(f=>f.taskId===t);h>=0?i.value[h]=v:i.value.push(v),typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value))}function K(t){const s=i.value.length;i.value=i.value.filter(e=>e.taskId!==t),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value))}const E=A(()=>F.value.filter(t=>!m.value.some(s=>s.taskId===t.taskId||s.resultId&&s.resultId===t.resultId))),ie=A(()=>m.value.length>0||E.value.length>0);function ue(t){return t&&p.value[t]?.task?.status||""}function T(t){if(t.error)return t.error;const s=t.taskId;return s&&p.value[s]?.task?.errorMessage||""}function G(t){const s=D(t);return s==="已入队"||s==="处理中"}function Q(t){return t.map(s=>!s.success&&s.matched===!1?{...s,error:s.error||"未匹配到紫鸟店铺",openStoreUrl:void 0}:s)}function ce(){O.value=[...m.value,...E.value]}function b(){ce(),de(O.value)}function de(t){P.value={total:t.length,successCount:t.filter(s=>s.success).length,failedCount:t.filter(s=>!s.success).length,items:t}}function W(t){if(!t)return"";const s=p.value[t],e=s?.line_progress?.info;if(!s?.line_progress?.has_progress||!e){const u=s?.task?.status;return u?`任务状态:${u}`:""}const n=[];return e.phase&&n.push(`阶段:${e.phase}`),e.file_index&&e.file_total&&n.push(`文件:${e.file_index}/${e.file_total}`),e.file_name&&n.push(`当前文件:${e.file_name}`),e.current_line!=null&&e.total_lines!=null&&n.push(`进度:${e.current_line}/${e.total_lines}`),e.current_country&&n.push(`国家:${e.current_country}`),e.current_asin&&n.push(`ASIN:${e.current_asin}`),e.finished_files!=null&&n.push(`已完成文件:${e.finished_files}`),n.join("|")}function R(t){if(!t)return 0;const s=p.value[t]?.line_progress?.info;return s?s.current_line!=null&&s.total_lines&&s.total_lines>0?Math.max(0,Math.min(100,Math.round(s.current_line/s.total_lines*100))):s.finished_files!=null&&s.file_total&&s.file_total>0?Math.max(0,Math.min(100,Math.round(s.finished_files/s.file_total*100))):p.value[t]?.task?.status==="SUCCESS"?100:0:0}function X(t){const s=p.value[t]?.task?.status;return s==="SUCCESS"||s==="FAILED"}function S(){const t=new Set;return i.value.forEach(s=>{s.items.some(e=>e._pushed)&&t.add(s.taskId)}),Array.from(t)}function D(t){const s=t.taskId;if(!s)return"";const e=i.value.find(f=>f.taskId===s);if(!e)return"";const n=ue(s);if(n==="SUCCESS"||n==="FAILED"||t.taskStatus==="SUCCESS"||t.taskStatus==="FAILED")return"已被全局判定为终态";const u=e.items.find(f=>f.resultId===t.resultId||f.sourceFilename===t.sourceFilename),v=p.value[s]?.line_progress;if(n==="RUNNING"&&v?.has_progress&&v?.info?.file_name===t.sourceFilename)return"处理中";const h=p.value[s];return h?.items&&h.items.find(B=>B.sourceFilename===t.sourceFilename)?"本文件解析完毕":u&&u._pushed?"已入队":"未入队"}function Y(t){if(t.downloadUrl||t.success)return!0;const s=t.taskId;return s?p.value[s]?.task?.status==="SUCCESS":!1}async function L(t){const s=t||S();if(s.length)try{const e=await Se(s);for(const n of e.items||[]){const u=n?.task?.id;typeof u=="number"&&u>0&&(p.value[u]=n)}}catch{}}function fe(){return document.visibilityState==="visible"?4500:1e4}function J(t=!1){if(g.value){if(!t)return;clearTimeout(g.value),g.value=null}const s=async()=>{if(g.value=null,M.value){J();return}const e=S();if(!e.length)return;M.value=!0;let n=!1;try{await L(e);for(const u of e)X(u)&&(K(u),n=!0)}finally{M.value=!1}n&&(q(),b()),S().length>0&&J()};t?s():g.value=window.setTimeout(s,fe())}function V(t=!1){g.value&&!t||J(t)}function U(t){const s=t.taskId?p.value[t.taskId]?.task?.status:null;return s==="SUCCESS"?{className:"success",text:"已完成"}:s==="FAILED"?{className:"failed",text:"失败"}:s==="RUNNING"?{className:"running",text:"执行中"}:t.taskStatus==="SUCCESS"?{className:"success",text:"已完成"}:t.taskStatus==="FAILED"?{className:"failed",text:"失败"}:t.taskStatus==="RUNNING"?{className:"running",text:"执行中"}:t.success?{className:"success",text:"已完成"}:{className:"failed",text:"失败"}}function Z(){g.value&&(window.clearTimeout(g.value),g.value=null)}async function ee(t){const s=C();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const e=[];for(const n of t){const u=typeof n=="string"?n:n.absolutePath,v=typeof n=="string"?void 0:n.relativePath,h=await s.upload_file_to_java(u,v);if(!h?.success||!h.data)throw new Error(h?.error||h?.message||`上传失败:${u}`);e.push(h.data)}return e}async function ve(){const t=C();if(!t?.select_brand_xlsx_files){d.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await t.select_brand_xlsx_files();if(!s?.length)return;w.value=s,N.value=await ee(s),d.success(`已选择 ${s.length} 个删除品牌文件`)}catch(s){d.error(s instanceof Error?s.message:"选择失败")}}async function he(){const t=C();if(!t?.select_brand_folder){d.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await t.select_brand_folder();if(!s)return;const e=await xe(s);if(!e.success||!e.items?.length){d.warning(e.error||"该文件夹下没有 xlsx 文件");return}w.value=e.items.map(n=>n.relativePath||n.absolutePath),N.value=await ee(e.items),d.success(`已选择文件夹内 ${e.items.length} 个 xlsx 文件`)}catch(s){d.error(s instanceof Error?s.message:"选择失败")}}async function _e(){if(!N.value.length){d.warning("请先选择待处理文件");return}try{I.value=!0;const t=await Ce({files:N.value.map(n=>({fileKey:n.fileKey,originalFilename:n.originalFilename,relativePath:n.relativePath}))}),s=Q(t.items||[]),e=s.some(n=>!n.matched);k.value="解析完成,等待手动点击打开紫鸟进行单任务处理",y.value="",s.length&&s[0].taskId&&H(s[0].taskId,s,k.value,y.value),b(),e?d.error("存在未匹配到紫鸟店铺的文件,请检查报错内容。这些文件已自动归档至历史记录。"):d.success("删除品牌解析完成,请手动推送"),await q()}catch(t){d.error(t instanceof Error?t.message:"执行失败")}finally{I.value=!1}}async function se(t){const s=t.taskId;if(!s){d.warning("未找到任务ID");return}const e=C(),n=$e(s),u=t.outputFilename||t.sourceFilename||`delete-brand_${s}.xlsx`;if(e?.save_file_from_url){const v=await e.save_file_from_url(n,u);v.success?d.success(`已保存:${v.path||u}`):v.error&&v.error!=="用户取消"&&d.error(v.error);return}window.open(n,"_blank")}async function q(){try{const t=await Ne();F.value=Q(t.items||[]),b(),await L(),V(!0)}catch(t){console.error("loadHistory error:",t)}}function te(t){i.value.forEach(e=>{e.items=e.items.filter(n=>n.resultId!==t)});const s=i.value.length;i.value=i.value.filter(e=>e.items.length>0),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value)),F.value=F.value.filter(e=>e.resultId!==t),b(),S().length===0&&Z()}async function ae(t){try{await Fe(t),te(t),await q(),d.success("已删除")}catch(s){const e=s instanceof Error?s.message:"删除失败";if(typeof e=="string"&&e.includes("记录不存在")){te(t),d.success("已删除");return}d.error(e)}}function ne(t){const s=t.slice(0,5).map(n=>`${n.country}:${n.asin}${n.status?`(${n.status})`:""}`);return t.length-s.length>0?`${s.join("、")} 等 ${t.length} 条`:s.join("、")}function pe(){for(const t of i.value)for(const s of t.items){const e=D(s);if(e==="已入队"||e==="处理中")return!0}return!1}async function ge(t){if(pe()){d.warning("当前存在正在处理的任务,请等待其完成后再推送下一条!");return}const s=C();if(t.openStoreUrl)if(s?.open_external_url){const f=await s.open_external_url(t.openStoreUrl);if(!f?.success){d.error(f?.error||"打开紫鸟失败");return}}else window.open(t.openStoreUrl,"_self");const e=t.taskId;if(!e)return;const n=i.value.find(f=>f.taskId===e);if(!n)return;if(!s?.enqueue_json){d.error("当前环境未启用 pywebview enqueue_json(浏览器环境不会推送)");return}const u={type:"delete-brand-run",ts:Date.now(),data:{taskId:e,items:[t]}};y.value=JSON.stringify(u,null,2);const v=await s.enqueue_json(u);let h="";if(v?.success){h=`已单独推送文件 ${t.sourceFilename},当前队列长度:${v.queue_size??"-"}`;const f=n.items.find(B=>B.resultId===t.resultId||B.sourceFilename===t.sourceFilename);f&&(f._pushed=!0),H(e,n.items,h,y.value),V(!0)}else h=`推送到 Python 队列失败:${v?.error||"未知错误"}`;k.value=h}return ke(()=>{re();const t=S();t.length>0?L(t).then(()=>{let s=!1;for(const e of t)X(e)&&(K(e),s=!0);s&&b(),V(!0)}):b(),q().catch(()=>{})}),we(()=>{Z()}),(t,s)=>(l(),o("div",Re,[be(Ie,{active:"delete-brand"}),a("div",De,[a("aside",Ue,[s[2]||(s[2]=a("div",{class:"section-title"},"选择文件",-1)),a("div",qe,[s[0]||(s[0]=a("div",{class:"hint"},"上传删除品牌 Excel;无论是直接上传文件还是上传文件夹批量导入,都会按每个 Excel 文件名作为店铺名。",-1)),a("div",{class:"btns"},[a("button",{type:"button",class:"opt-btn",onClick:ve},"选择 Excel 文件"),a("button",{type:"button",class:"opt-btn",onClick:he},"选择文件夹")]),a("div",Be,[w.value.length?(l(),o(x,{key:0},[(l(!0),o(x,null,z(j.value,e=>(l(),o("span",{key:e},r(e),1))),128)),w.value.length>j.value.length?(l(),o("span",Ae," 还有 "+r(w.value.length-j.value.length)+" 个文件未展开显示 ",1)):c("",!0)],64)):(l(),o("span",Me,"暂未选择删除品牌文件"))])]),s[3]||(s[3]=me('
执行说明
',2)),a("div",je,[a("button",{type:"button",class:"btn-run",disabled:I.value,onClick:_e},r(I.value?"解析中...":"开始解析"),9,Le),a("span",Je,r(I.value?"正在读取删除品牌数据,请稍候…":"解析后会在右侧展示按国家分组的去重结果"),1)]),k.value||y.value?(l(),o("div",Ve,[s[1]||(s[1]=a("div",{class:"section-title queue-debug-title"},"Python 队列推送结果",-1)),k.value?(l(),o("div",ze,r(k.value),1)):c("",!0),y.value?(l(),o("pre",Oe,r(y.value),1)):c("",!0)])):c("",!0)]),a("section",He,[s[12]||(s[12]=a("div",{class:"panel-header"},"删除品牌结果",-1)),a("div",Ke,[a("div",Ge,[a("div",Qe,[s[4]||(s[4]=a("span",{class:"summary-label"},"已处理文件",-1)),a("strong",null,r(P.value.total),1)]),a("div",We,[s[5]||(s[5]=a("span",{class:"summary-label"},"成功结果",-1)),a("strong",null,r(P.value.successCount),1)]),a("div",Xe,[s[6]||(s[6]=a("span",{class:"summary-label"},"失败文件",-1)),a("strong",null,r(P.value.failedCount),1)])]),a("div",Ye,[s[11]||(s[11]=a("div",{class:"result-list-header"},[a("span",null,"删除品牌结果列表")],-1)),ie.value?(l(),o(x,{key:1},[m.value.length?(l(),o("div",es,[s[8]||(s[8]=a("div",{class:"result-subsection-title"},"当前任务",-1)),a("ul",ss,[(l(!0),o(x,null,z(m.value,e=>(l(),o("li",{key:`current-${e.taskId||e.resultId||e.sourceFilename}`,class:"task-item split-result-item"},[a("div",ts,[a("span",{class:"id",title:e.sourceFilename},r(e.sourceFilename||"-"),9,as),a("div",ns,"店铺名:"+r(e.shopName||"-"),1),a("div",ls,"匹配结果:"+r(e.matched?`已匹配 ${e.shopId||""}`:"未匹配到紫鸟店铺"),1),e.platform?(l(),o("div",os,"平台:"+r(e.platform),1)):c("",!0),D(e)?(l(),o("div",rs,"队列状态:"+r(D(e)),1)):c("",!0),e.countryCount!==void 0&&e.matched?(l(),o("div",is,"国家数:"+r(e.countryCount),1)):c("",!0),e.totalRows!==void 0&&e.matched?(l(),o("div",us,"去重后 "+r(e.totalRows)+" 条 ",1)):c("",!0),G(e)?(l(),o("div",cs,[a("div",ds,[s[7]||(s[7]=a("span",null,"任务进度",-1)),a("span",null,r(R(e.taskId))+"%",1)]),a("div",fs,[a("div",{class:"delete-brand-progress-bar-fill",style:le({width:`${R(e.taskId)}%`})},null,4)]),a("div",vs,r(W(e.taskId)),1)])):c("",!0),e.previewRows?.length?(l(),o("div",hs,r(ne(e.previewRows)),1)):c("",!0),T(e)?(l(),o("div",_s,"错误信息:"+r(T(e)),1)):c("",!0)]),a("div",ps,[a("span",{class:oe(["status",U(e).className])},r(U(e).text),3),e.openStoreUrl?(l(),o("button",{key:0,type:"button",class:"download",onClick:n=>ge(e)}," 打开紫鸟 ",8,gs)):c("",!0),Y(e)?(l(),o("button",{key:1,type:"button",class:"download",onClick:n=>se(e)}," 下载 ",8,ys)):c("",!0),e.resultId?(l(),o("button",{key:2,type:"button",class:"btn-delete",onClick:n=>ae(e.resultId)}," 删除 ",8,ks)):c("",!0)])]))),128))])])):c("",!0),E.value.length?(l(),o("div",ws,[s[10]||(s[10]=a("div",{class:"result-subsection-title"},"历史记录",-1)),a("ul",bs,[(l(!0),o(x,null,z(E.value,e=>(l(),o("li",{key:`history-${e.taskId||e.resultId||e.sourceFilename}`,class:"task-item split-result-item"},[a("div",Is,[a("span",{class:"id",title:e.sourceFilename},r(e.sourceFilename||"-"),9,ms),a("div",Ss,"店铺名:"+r(e.shopName||"-"),1),a("div",xs,"匹配结果:"+r(e.matched?`已匹配 ${e.shopId||""}`:"未匹配到紫鸟店铺"),1),e.platform?(l(),o("div",Cs,"平台:"+r(e.platform),1)):c("",!0),e.countryCount!==void 0&&e.matched?(l(),o("div",$s,"国家数:"+r(e.countryCount),1)):c("",!0),e.totalRows!==void 0&&e.matched?(l(),o("div",Ns,"去重后 "+r(e.totalRows)+" 条 ",1)):c("",!0),G(e)?(l(),o("div",Fs,[a("div",Ps,[s[9]||(s[9]=a("span",null,"任务进度",-1)),a("span",null,r(R(e.taskId))+"%",1)]),a("div",Es,[a("div",{class:"delete-brand-progress-bar-fill",style:le({width:`${R(e.taskId)}%`})},null,4)]),a("div",Ts,r(W(e.taskId)),1)])):c("",!0),e.previewRows?.length?(l(),o("div",Rs,r(ne(e.previewRows)),1)):c("",!0),T(e)?(l(),o("div",Ds,"错误信息:"+r(T(e)),1)):c("",!0)]),a("div",Us,[a("span",{class:oe(["status",U(e).className])},r(U(e).text),3),Y(e)?(l(),o("button",{key:0,type:"button",class:"download",onClick:n=>se(e)}," 下载 ",8,qs)):c("",!0),e.resultId?(l(),o("button",{key:1,type:"button",class:"btn-delete",onClick:n=>ae(e.resultId)}," 删除 ",8,Bs)):c("",!0)])]))),128))])])):c("",!0)],64)):(l(),o("div",Ze," 暂无删除品牌结果,完成解析后会在这里展示按国家分组的去重结果 "))])])])])]))}}),Ms=Pe(As,[["__scopeId","data-v-401c4349"]]);Ee(Ms).use(Te).mount("#app"); +import{d as Ae,o as Me,J as Re,a as o,c as u,b as Be,B as qe,e as a,F as D,r as Z,t as c,f,K as Ue,L as ke,n as me,g as p,h as L,M as He,i as A,E as v,j as Je,N as Ke,O as Oe,P as Le,Q as je,_ as Ve,q as ze,s as Ge}from"./pywebview-Dee3nQjE.js";const Qe={class:"page-shell module-page"},Xe={class:"main-content"},We={class:"left-panel"},Ye={class:"upload-zone"},Ze={class:"selected-files clean-placeholder split-selected-files"},es={key:0,class:"more-line"},ss={key:1},ts={class:"run-row"},ns=["disabled"],as={class:"loading-msg"},ls={key:0,class:"queue-debug-card"},rs={key:0,class:"queue-debug-line"},os={key:1,class:"queue-debug-payload"},us={class:"right-panel"},is={class:"task-list-wrap"},cs={class:"clean-result-summary"},ds={class:"summary-card"},fs={class:"summary-card"},vs={class:"summary-card"},hs={class:"result-list-wrap"},ps={key:0,class:"empty-tasks"},_s={key:0,class:"result-subsection"},gs={class:"task-list clean-result-list"},ys={class:"left split-result-main"},ks=["title"],ms={class:"files"},Is={class:"files"},bs={key:0,class:"files"},ws={key:1,class:"files"},Ss={key:2,class:"files"},Cs={key:3,class:"time"},Ts={key:4,class:"delete-brand-progress-block"},xs={class:"delete-brand-progress-header"},Fs={class:"delete-brand-progress-bar"},Ns={class:"files delete-brand-progress"},$s={key:5,class:"files split-entry-list delete-brand-preview"},Es={key:6,class:"files"},Ps={class:"task-right split-result-actions"},Ds=["onClick"],As=["onClick"],Ms=["onClick"],Rs={key:1,class:"result-subsection"},Bs={class:"task-list clean-result-list"},qs={class:"left split-result-main"},Us=["title"],Hs={class:"files"},Js={class:"files"},Ks={key:0,class:"files"},Os={key:1,class:"files"},Ls={key:2,class:"time"},js={key:3,class:"delete-brand-progress-block"},Vs={class:"delete-brand-progress-header"},zs={class:"delete-brand-progress-bar"},Gs={class:"files delete-brand-progress"},Qs={key:4,class:"files split-entry-list delete-brand-preview"},Xs={key:5,class:"files"},Ws={class:"task-right split-result-actions"},Ys=["onClick"],Zs=["onClick"],et=Ae({__name:"BrandDeleteBrandTab",setup(tt){function F(){return`delete-brand:current-tasks:${typeof window<"u"&&window.localStorage.getItem("uid")||"0"}`}const S=p([]),M=p([]),N=p(!1),ee=p([]),d=p([]),R=p([]),B=p({total:0,successCount:0,failedCount:0,items:[]}),I=p(""),k=p(""),_=p({}),g=p(null),j=p(!1),C=p(!1),T=p(""),q=p(!1),V=L(()=>S.value.slice(0,10)),m=L(()=>{const e=[];return d.value.forEach(s=>{e.push(...s.items)}),e});function Ie(){try{const e=typeof window<"u"?window.localStorage.getItem(F()):null;if(e){if(d.value=JSON.parse(e),d.value.length>0){const s=d.value[d.value.length-1];I.value=s.queuePushResult||"",k.value=s.queuePayloadText||""}}else d.value=[]}catch{d.value=[]}}function se(e,s,t,n){const l=s.filter(h=>h.matchStatus==="MATCHED"&&h.success!==!1);if(l.length===0)return;const i={taskId:e,items:l,createdAt:Date.now(),queuePushResult:t,queuePayloadText:n},r=d.value.findIndex(h=>h.taskId===e);r>=0?d.value[r]=i:d.value.push(i),typeof window<"u"&&window.localStorage.setItem(F(),JSON.stringify(d.value))}function te(e){const s=d.value.length;d.value=d.value.filter(t=>t.taskId!==e),d.value.length!==s&&typeof window<"u"&&window.localStorage.setItem(F(),JSON.stringify(d.value))}const U=L(()=>R.value.filter(e=>!m.value.some(s=>s.taskId===e.taskId||s.resultId&&s.resultId===e.resultId))),be=L(()=>m.value.length>0||U.value.length>0);function ne(){typeof window<"u"&&window.localStorage.setItem(F(),JSON.stringify(d.value))}function $(e){return e?(d.value.find(t=>t.taskId===e)?.items.length||0)>1:!1}function z(e){return e&&d.value.find(s=>s.taskId===e)||null}function G(e,s){return!e||!s?!1:e.resultId!=null&&s.resultId!=null?e.resultId===s.resultId:e.fileKey&&s.fileKey?e.fileKey===s.fileKey:e.sourceFilename===s.sourceFilename}function x(e,s){const t=z(e);return t&&t.items.find(n=>G(n,s))||null}function ae(e){if(!e)return!1;const s=z(e);if(!s)return!1;let t=!1;const n=_.value[e]?.line_progress?.info;if($(e)&&n?.finished_files!=null&&n.finished_files>=0){const l=s.items.filter(r=>r._pushed),i=Math.max(0,Math.min(n.finished_files,l.length));for(let r=0;r0&&n.current_line>=n.total_lines){const l=m.value.find(r=>P(r)===T.value),i=l&&l.taskId===e?x(e,l):s.items.find(r=>r.sourceFilename===n.file_name);i&&!i._completed&&(i._completed=!0,t=!0)}return t&&ne(),t}function we(e){return e&&_.value[e]?.task?.status||""}function H(e){if(e.error)return e.error;if(e.matchStatus&&e.matchStatus!=="MATCHED")return e.matchMessage||"";const s=e.taskId;return s&&_.value[s]?.task?.errorMessage||""}function le(e){const s=e.taskId;if(!s)return!1;const t=_.value[s]?.line_progress,n=$(s),l=w(e);return l==="本文件解析完毕"||l==="已被全局判定为终态"?!1:n?x(s,e)?._pushed?t?.has_progress&&t?.info?.file_name?t.info.file_name===e.sourceFilename:!0:!1:t?.has_progress||t?.info?!0:l==="已入队"||l==="处理中"}function re(e){return e.map(s=>s.matchStatus==="MATCHED"?{...s,_pushed:!1,_completed:!1}:{...s,matched:!1,openStoreUrl:void 0,error:s.error||void 0,_pushed:!1,_completed:!1})}function oe(e){return e.matchStatus==="MATCHED"?`已匹配 ${e.shopId||""}`.trim():e.matchMessage?e.matchMessage:e.matchStatus==="CONFLICT"?"存在多个同名店铺,请人工确认":e.matchStatus==="PENDING"||e.matchStatus==="INDEX_STALE"?"店铺索引暂未就绪":e.matchStatus?e.matchStatus:e.matched?`已匹配 ${e.shopId||""}`.trim():"待匹配"}function Se(){ee.value=[...m.value,...U.value]}function b(){Se(),Ce(ee.value)}function Ce(e){B.value={total:e.length,successCount:e.filter(s=>s.success).length,failedCount:e.filter(s=>!s.success).length,items:e}}function ue(e){if(!e)return"";const s=_.value[e],t=s?.line_progress?.info;if(!s?.line_progress?.has_progress||!t){const l=s?.task?.status;return l?`任务状态:${l}`:""}const n=[];if(t.phase&&n.push(`阶段:${t.phase}`),t.file_index&&t.file_total&&n.push(`文件:${t.file_index}/${t.file_total}`),t.file_name&&n.push(`当前文件:${t.file_name}`),t.current_line!=null&&t.total_lines!=null&&n.push(`${$(e)?"当前文件进度":"进度"}:${t.current_line}/${t.total_lines}`),t.current_country&&n.push(`国家:${t.current_country}`),t.current_asin&&n.push(`ASIN:${t.current_asin}`),t.finished_files!=null){const l=t.file_total&&t.file_total>0?`/${t.file_total}`:"";n.push(`已完成文件:${t.finished_files}${l}`)}return n.join("|")}function J(e){if(!e)return 0;const s=_.value[e]?.line_progress?.info;return s?s.current_line!=null&&s.total_lines&&s.total_lines>0?Math.max(0,Math.min(100,Math.round(s.current_line/s.total_lines*100))):s.finished_files!=null&&s.file_total&&s.file_total>0?Math.max(0,Math.min(100,Math.round(s.finished_files/s.file_total*100))):_.value[e]?.task?.status==="SUCCESS"?100:0:0}function ie(e){const s=_.value[e]?.task?.status;return s==="SUCCESS"||s==="FAILED"}function E(){const e=new Set;return d.value.forEach(s=>{s.items.some(t=>t._pushed)&&e.add(s.taskId)}),Array.from(e)}function w(e){const s=e.taskId;if(!s||!z(s))return"";const n=x(s,e),l=we(s),i=_.value[s]?.line_progress,r=$(s);if(!r&&(l==="SUCCESS"||l==="FAILED"||e.taskStatus==="SUCCESS"||e.taskStatus==="FAILED"))return"已被全局判定为终态";if(r&&!n?._pushed&&!n?._completed)return"未入队";if(n?._completed)return"本文件解析完毕";if(l==="RUNNING"&&i?.has_progress&&i?.info?.file_name===e.sourceFilename)return"处理中";if(r&&l==="SUCCESS")return"本文件解析完毕";if(!r){const h=_.value[s];if(h?.items&&h.items.find(Y=>G(Y,e))&&l==="SUCCESS")return"本文件解析完毕"}return n?._pushed?"已入队":"未入队"}function ce(e){if(e.downloadUrl)return!0;const s=e.taskId;return s?_.value[s]?.task?.status==="SUCCESS":!1}function Te(e){const s=e?.task?.id;if(!s||!e?.items?.length)return!1;const t=d.value.find(r=>r.taskId===s);if(!t)return!1;let n=!1;const i=t.items.map(r=>{const h=e.items?.find(Y=>G(Y,r));if(!h)return r;const y={...r,...h,success:r.success??h.success,_pushed:r._pushed,_completed:r._completed};return JSON.stringify(y)!==JSON.stringify(r)&&(n=!0),y}).filter(r=>r.matchStatus==="MATCHED"&&r.success!==!1);return JSON.stringify(i)!==JSON.stringify(t.items)&&(t.items=i,n=!0),n&&ne(),n}async function Q(e){const s=e||E();if(s.length)try{const t=await He(s);let n=!1;for(const l of t.items||[]){const i=l?.task?.id;typeof i=="number"&&i>0&&(_.value[i]=l,Te(l)&&(n=!0),ae(i)&&(n=!0))}n&&b()}catch{}}function xe(){return document.visibilityState==="visible"?4500:1e4}function X(e=!1){if(g.value){if(!e)return;clearTimeout(g.value),g.value=null}const s=async()=>{if(g.value=null,j.value){X();return}const t=E();if(!t.length)return;j.value=!0;let n=!1;try{await Q(t),await Pe();for(const l of t)ie(l)&&(te(l),n=!0)}finally{j.value=!1}n&&(O(),b()),E().length>0&&X()};e?s():g.value=window.setTimeout(s,xe())}function W(e=!1){g.value&&!e||X(e)}function K(e){const s=e.taskId?_.value[e.taskId]?.task?.status:null;return s==="SUCCESS"?{className:"success",text:"已完成"}:s==="FAILED"?{className:"failed",text:"失败"}:s==="RUNNING"?{className:"running",text:"执行中"}:e.taskStatus==="SUCCESS"?{className:"success",text:"已完成"}:e.taskStatus==="FAILED"?{className:"failed",text:"失败"}:e.taskStatus==="RUNNING"?{className:"running",text:"执行中"}:e.success?{className:"success",text:"已完成"}:{className:"failed",text:"失败"}}function de(){g.value&&(window.clearTimeout(g.value),g.value=null)}async function fe(e){const s=A();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const n of e){const l=typeof n=="string"?n:n.absolutePath,i=typeof n=="string"?void 0:n.relativePath,r=await s.upload_file_to_java(l,i);if(!r?.success||!r.data)throw new Error(r?.error||r?.message||`上传失败:${l}`);t.push(r.data)}return t}async function Fe(){const e=A();if(!e?.select_brand_xlsx_files){v.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await e.select_brand_xlsx_files();if(!s?.length)return;S.value=s,M.value=await fe(s),v.success(`已选择 ${s.length} 个删除品牌文件`)}catch(s){v.error(s instanceof Error?s.message:"选择失败")}}async function Ne(){const e=A();if(!e?.select_brand_folder){v.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await e.select_brand_folder();if(!s)return;const t=await Je(s);if(!t.success||!t.items?.length){v.warning(t.error||"该文件夹下没有 xlsx 文件");return}S.value=t.items.map(n=>n.relativePath||n.absolutePath),M.value=await fe(t.items),v.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`)}catch(s){v.error(s instanceof Error?s.message:"选择失败")}}async function $e(){if(!M.value.length){v.warning("请先选择待处理文件");return}try{N.value=!0;const e=await Ke({files:M.value.map(l=>({fileKey:l.fileKey,originalFilename:l.originalFilename,relativePath:l.relativePath}))}),s=re(e.items||[]),t=s.some(l=>l.matchStatus==="MATCHED"),n=s.some(l=>l.matchStatus&&l.matchStatus!=="MATCHED");I.value="解析完成,等待手动点击打开紫鸟进行单任务处理",k.value="",s.length&&s[0].taskId&&se(s[0].taskId,s,I.value,k.value),b(),n?v.warning("部分文件尚未命中可用店铺索引,已保留状态信息,请等待后台刷新后重试。"):t?v.success("删除品牌解析完成,请手动推送"):v.warning("当前没有可推送的已匹配文件,请先等待店铺索引刷新。"),await O()}catch(e){v.error(e instanceof Error?e.message:"执行失败")}finally{N.value=!1}}async function ve(e){const s=e.taskId;if(!s){v.warning("未找到任务ID");return}const t=A(),n=Oe(s),l=e.outputFilename||e.sourceFilename||`delete-brand_${s}.xlsx`;if(t?.save_file_from_url){const i=await t.save_file_from_url(n,l);i.success?v.success(`已保存:${i.path||l}`):i.error&&i.error!=="用户取消"&&v.error(i.error);return}window.open(n,"_blank")}async function O(){try{const e=await Le();R.value=re(e.items||[]),b(),await Q(),W(!0)}catch(e){console.error("loadHistory error:",e)}}function he(e){d.value.forEach(t=>{t.items=t.items.filter(n=>n.resultId!==e)});const s=d.value.length;d.value=d.value.filter(t=>t.items.length>0),d.value.length!==s&&typeof window<"u"&&window.localStorage.setItem(F(),JSON.stringify(d.value)),R.value=R.value.filter(t=>t.resultId!==e),b(),E().length===0&&de()}async function pe(e){try{await je(e),he(e),await O(),v.success("已删除")}catch(s){const t=s instanceof Error?s.message:"删除失败";if(typeof t=="string"&&t.includes("记录不存在")){he(e),v.success("已删除");return}v.error(t)}}function _e(e){const s=e.slice(0,5).map(n=>`${n.country}:${n.asin}${n.status?`(${n.status})`:""}`);return e.length-s.length>0?`${s.join("、")} 等 ${e.length} 条`:s.join("、")}function nt(e,s){}function ge(){for(const e of d.value)for(const s of e.items){const t=w(s);if(t==="已入队"||t==="处理中")return!0}return!1}function P(e){return e.resultId!=null?`result:${e.resultId}`:`task:${e.taskId||0}:${e.sourceFilename||""}`}function Ee(){return m.value.find(e=>!e.openStoreUrl||P(e)===T.value||x(e.taskId,e)?._completed?!1:w(e)==="未入队")}async function ye(e,s){if(s?.auto&&ge())return e.taskId,e.sourceFilename,!1;const t=A(),n=e.taskId;if(!n)return!1;const l=d.value.find(y=>y.taskId===n);if(!l)return!1;if(!t?.enqueue_json)return v.error("当前环境未启用 pywebview enqueue_json(浏览器环境不会推送)"),!1;const i={type:"delete-brand-run",ts:Date.now(),data:{taskId:n,items:[e]}};k.value=JSON.stringify(i,null,2);const r=await t.enqueue_json(i);let h="";if(r?.success){h=`已推送文件 ${e.sourceFilename},当前队列长度:${r.queue_size??"-"}`;const y=x(n,e);y&&(y._pushed=!0,y._completed=!1),T.value=P(e),se(n,l.items,h,k.value),W(!0)}else h=`推送到 Python 队列失败:${r?.error||"未知错误"}`;return I.value=h,!!r?.success}async function Pe(){if(!C.value||q.value){C.value,q.value;return}if(ge())return;const e=T.value;if(e){const t=m.value.find(n=>P(n)===e);if(t){const n=t.taskId,l=$(n);l&&(ae(n),w(t),void 0);const i=w(t);if(i==="已入队"||i==="处理中"){t.sourceFilename;return}if(l){const r=x(n,t);if(r&&!r._completed){t.sourceFilename,r._pushed,r._completed;return}}}}const s=Ee();if(!s){T.value="",C.value=!1;return}q.value=!0;try{s.taskId,s.sourceFilename,P(s),await ye(s,{auto:!0})||(s.taskId,s.sourceFilename,C.value=!1)}finally{q.value=!1}}async function De(e){C.value=!0,await ye(e)||(C.value=!1,T.value="")}return Me(()=>{Ie();const e=E();e.length>0?Q(e).then(()=>{let s=!1;for(const t of e)ie(t)&&(te(t),s=!0);s&&b(),W(!0)}):b(),O().catch(()=>{})}),Re(()=>{de()}),(e,s)=>(o(),u("div",Qe,[Be(qe,{active:"delete-brand"}),a("div",Xe,[a("aside",We,[s[2]||(s[2]=a("div",{class:"section-title"},"选择文件",-1)),a("div",Ye,[s[0]||(s[0]=a("div",{class:"hint"},"上传删除品牌 Excel;无论是直接上传文件还是上传文件夹批量导入,都会按每个 Excel 文件名作为店铺名。",-1)),a("div",{class:"btns"},[a("button",{type:"button",class:"opt-btn",onClick:Fe},"选择 Excel 文件"),a("button",{type:"button",class:"opt-btn",onClick:Ne},"选择文件夹")]),a("div",Ze,[S.value.length?(o(),u(D,{key:0},[(o(!0),u(D,null,Z(V.value,t=>(o(),u("span",{key:t},c(t),1))),128)),S.value.length>V.value.length?(o(),u("span",es," 还有 "+c(S.value.length-V.value.length)+" 个文件未展开显示 ",1)):f("",!0)],64)):(o(),u("span",ss,"暂未选择删除品牌文件"))])]),s[3]||(s[3]=Ue('
执行说明
',2)),a("div",ts,[a("button",{type:"button",class:"btn-run",disabled:N.value,onClick:$e},c(N.value?"解析中...":"开始解析"),9,ns),a("span",as,c(N.value?"正在读取删除品牌数据,请稍候…":"解析后会在右侧展示按国家分组的去重结果"),1)]),I.value||k.value?(o(),u("div",ls,[s[1]||(s[1]=a("div",{class:"section-title queue-debug-title"},"Python 队列推送结果",-1)),I.value?(o(),u("div",rs,c(I.value),1)):f("",!0),k.value?(o(),u("pre",os,c(k.value),1)):f("",!0)])):f("",!0)]),a("section",us,[s[12]||(s[12]=a("div",{class:"panel-header"},"删除品牌结果",-1)),a("div",is,[a("div",cs,[a("div",ds,[s[4]||(s[4]=a("span",{class:"summary-label"},"已处理文件",-1)),a("strong",null,c(B.value.total),1)]),a("div",fs,[s[5]||(s[5]=a("span",{class:"summary-label"},"成功结果",-1)),a("strong",null,c(B.value.successCount),1)]),a("div",vs,[s[6]||(s[6]=a("span",{class:"summary-label"},"失败文件",-1)),a("strong",null,c(B.value.failedCount),1)])]),a("div",hs,[s[11]||(s[11]=a("div",{class:"result-list-header"},[a("span",null,"删除品牌结果列表")],-1)),be.value?(o(),u(D,{key:1},[m.value.length?(o(),u("div",_s,[s[8]||(s[8]=a("div",{class:"result-subsection-title"},"当前任务",-1)),a("ul",gs,[(o(!0),u(D,null,Z(m.value,t=>(o(),u("li",{key:`current-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[a("div",ys,[a("span",{class:"id",title:t.sourceFilename},c(t.sourceFilename||"-"),9,ks),a("div",ms,"店铺名:"+c(t.shopName||"-"),1),a("div",Is,"匹配结果:"+c(oe(t)),1),t.platform?(o(),u("div",bs,"平台:"+c(t.platform),1)):f("",!0),w(t)?(o(),u("div",ws,"队列状态:"+c(w(t)),1)):f("",!0),t.countryCount!==void 0&&t.matched?(o(),u("div",Ss,"国家数:"+c(t.countryCount),1)):f("",!0),t.totalRows!==void 0&&t.matched?(o(),u("div",Cs,"去重后 "+c(t.totalRows)+" 条 ",1)):f("",!0),le(t)?(o(),u("div",Ts,[a("div",xs,[s[7]||(s[7]=a("span",null,"任务进度",-1)),a("span",null,c(J(t.taskId))+"%",1)]),a("div",Fs,[a("div",{class:"delete-brand-progress-bar-fill",style:ke({width:`${J(t.taskId)}%`})},null,4)]),a("div",Ns,c(ue(t.taskId)),1)])):f("",!0),t.previewRows?.length?(o(),u("div",$s,c(_e(t.previewRows)),1)):f("",!0),H(t)?(o(),u("div",Es,"错误信息:"+c(H(t)),1)):f("",!0)]),a("div",Ps,[a("span",{class:me(["status",K(t).className])},c(K(t).text),3),t.openStoreUrl?(o(),u("button",{key:0,type:"button",class:"download",onClick:n=>De(t)}," 打开紫鸟 ",8,Ds)):f("",!0),ce(t)?(o(),u("button",{key:1,type:"button",class:"download",onClick:n=>ve(t)}," 下载 ",8,As)):f("",!0),t.resultId?(o(),u("button",{key:2,type:"button",class:"btn-delete",onClick:n=>pe(t.resultId)}," 删除 ",8,Ms)):f("",!0)])]))),128))])])):f("",!0),U.value.length?(o(),u("div",Rs,[s[10]||(s[10]=a("div",{class:"result-subsection-title"},"历史记录",-1)),a("ul",Bs,[(o(!0),u(D,null,Z(U.value,t=>(o(),u("li",{key:`history-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[a("div",qs,[a("span",{class:"id",title:t.sourceFilename},c(t.sourceFilename||"-"),9,Us),a("div",Hs,"店铺名:"+c(t.shopName||"-"),1),a("div",Js,"匹配结果:"+c(oe(t)),1),t.platform?(o(),u("div",Ks,"平台:"+c(t.platform),1)):f("",!0),t.countryCount!==void 0&&t.matched?(o(),u("div",Os,"国家数:"+c(t.countryCount),1)):f("",!0),t.totalRows!==void 0&&t.matched?(o(),u("div",Ls,"去重后 "+c(t.totalRows)+" 条 ",1)):f("",!0),le(t)?(o(),u("div",js,[a("div",Vs,[s[9]||(s[9]=a("span",null,"任务进度",-1)),a("span",null,c(J(t.taskId))+"%",1)]),a("div",zs,[a("div",{class:"delete-brand-progress-bar-fill",style:ke({width:`${J(t.taskId)}%`})},null,4)]),a("div",Gs,c(ue(t.taskId)),1)])):f("",!0),t.previewRows?.length?(o(),u("div",Qs,c(_e(t.previewRows)),1)):f("",!0),H(t)?(o(),u("div",Xs,"错误信息:"+c(H(t)),1)):f("",!0)]),a("div",Ws,[a("span",{class:me(["status",K(t).className])},c(K(t).text),3),ce(t)?(o(),u("button",{key:0,type:"button",class:"download",onClick:n=>ve(t)}," 下载 ",8,Ys)):f("",!0),t.resultId?(o(),u("button",{key:1,type:"button",class:"btn-delete",onClick:n=>pe(t.resultId)}," 删除 ",8,Zs)):f("",!0)])]))),128))])])):f("",!0)],64)):(o(),u("div",ps," 暂无删除品牌结果,完成解析后会在这里展示按国家分组的去重结果 "))])])])])]))}}),st=Ve(et,[["__scopeId","data-v-7fbcf490"]]);ze(st).use(Ge).mount("#app"); diff --git a/app/blueprints/__pycache__/brand.cpython-312.pyc b/app/blueprints/__pycache__/brand.cpython-312.pyc index 777482c8735e419714aa6c6405fee02b2e39f024..2fef1f49d257e0cbc1ceffe9abdfb9bf8346ec55 100644 GIT binary patch delta 53 zcmX>-ovC9w6YptWUM>b8Xpugf`E?_2whZHv&6P6sjGHy&)R>t5GfWOpc+Dchz{<5b INU<^t0KuCOJ^%m! delta 111 zcmeB}&UAV@6YptWUM>b8cu{;R^W#R|Y#GKYn=57N8P#fdS2Kbn7#J8CN`xUS28J4j z8pax?)yxn+Bg5u*vIa~{LX49Y6kdx9FtBoUsI++BVd3mhn;VOP;b=S&x~1K)ez?|Gm1dEfIlXZlmF z{jAZb02yJ^7uRcbL|Y7hN9x+DhFJ#-0Rsd%k_qZ1hEf1pT0wk44@HqQ0??t$NwNF*Vghomm_?xZNMh~*RvLUg2%IWJ%#;=7MOq@Fz8S$>(CUf3CbwL3eJejZLe znEC!}E|iMiO^;7(udk;b&hDE@cHR&si?r2o!1`STHHut9RP%Y-%h+S@JkL1H3@y~Smy>? zxWyICG`%&&jpq_vYfRC)r87-(5pG76(482&w80iof;DFCh+VbEjXepjH>T*_VhvN` z!u5Fm=>*#xlQ!d0B5XF2hHhYiN95Ar;{-{{ZUuyZfa$hjX>>|m%V1@6U0va>p;74- zU;hxUrolRD=eJJ1&T5$^r(UbPi60;|P5N-n9 zCSbpTV`*TC14|mzN6%{<);*>gHt*TU>oR6GJLn3TrC&Y9^30149%~CPNf2 zP?RA{W@3-DFnXB#9fB0B9)Aqypz=!O@$b5@p}dP`^ASi z27AW`hPsBjZmwcypMS+Bk$%C7Jn8-&B;eNoH#X^ie!OS6vdDok4!3z7GN^~K6zR4 diff --git a/app/blueprints/__pycache__/main.cpython-312.pyc b/app/blueprints/__pycache__/main.cpython-312.pyc index f8c925b9a44d48f259652fd047da1bab9900afd9..eef60daaa8f27f3819c2adf474a8f1f03b6cd380 100644 GIT binary patch delta 1315 zcmaJgMBDTOG643@u8xoS`{`Jh%EZhhZMm=V;lOSV9%JHY(kd)5C8eT z|NQg)moslazJH+pk;5SYX1{&ka(rv4M3^;R7KUrO|Z@8&2muHM^KfcQyn1FxIp z`njUD01MW$5FfPx;xMz3WeTohxIW5qr??t%p}^IQ^CIEt57r31Z4u)&GuG8%^}Y0W zdqgIc5&#VN=yuslkNaKpXRFsxsl&diB>m3s>{iU4t0$6>eOjIpS0k6CucSVR92do+ zNP=b-37d!m1#zlE%&Etufe3XgUPryzb^LeLEmC<-IO_@AriFdPQw_--%^nTE&I7}!Q% zyS(&pAkjsul!UkMmkb9mRMavS7j;HWh4UBxusz=A5E&cbP{QU8qu0hVl{)3 zMAbjnlP6WudnzB?e0?gdlPo@;kGB1v4H?TID(=_Fi6K1r*X=7qHWtaLSUs&9OkfNJ zRH7P0X5^1Cy7cvrOE+d-{`Bqao-GatFU=kbx?$Xs!|4nui-r_pAK(U-T^6x+W=PYC zj(ZrTxzL_~^FTI}(RxWbn>mPa7MFRQ;Dnt%4(&{orF4HLi#4N}GSu)uMMKYJGrES; zjOupgwozv|U>{)!8KDqIQ{f)8A_65gajX>ETk`C?*YnGYZYhx?(54MYjPweRQ^ADYn;fH=pXNbOwfbZ;_To|V@zRd;izRR5rwHN5r?su z7;4y7LpiG%A&gGWED4xAf?mVEnhCLe1nfy^eI8qMAN6;z^MbeB6C5kYS6i%44 zfTC~@q;RHiAsm#<6v+^bVfy4};!^bpbGWgZ!=1u|VU7ySZlGHXYdMhI!dt^Jn_(^! zR+IQj)M5H+IAALDK+042QLRW}sO6~R2xfrL<&5PF70i(g<&2sFlO-j!Hs6%wWn^sF z{9H{zw#K|%;mddOJMVWaexA>j&^YT)YOEUBG zT#JhGi;A>BN|}pGiZr<<=g6qr6=i|-7Nr&!0VVqFNw31*B#=cyhj6kBK2r>Y$vHt&2Xx5g8#6sc-5o z%6wGK1V|o};Q)~;YVHEe$GI4R?BfEg?xK@D U(f%_t15*m)M - +
diff --git a/app/version.txt b/app/version.txt index cb1deba..52a718a 100644 --- a/app/version.txt +++ b/app/version.txt @@ -1 +1 @@ -{"version": "1.0.22"} \ No newline at end of file +{"version": "1.0.13"} \ No newline at end of file diff --git a/frontend-vue/src/pages/brand/components/BrandDeleteBrandTab.vue b/frontend-vue/src/pages/brand/components/BrandDeleteBrandTab.vue index 10a659d..631f37a 100644 --- a/frontend-vue/src/pages/brand/components/BrandDeleteBrandTab.vue +++ b/frontend-vue/src/pages/brand/components/BrandDeleteBrandTab.vue @@ -417,7 +417,35 @@ function getDisplayError(item: DeleteBrandResultItem) { } function shouldShowProgress(item: DeleteBrandResultItem) { + const taskId = item.taskId + if (!taskId) return false + + const progress = taskDetails.value[taskId]?.line_progress + const multiFileTask = isMultiFileTask(taskId) const qs = getQueueStatus(item) + + // 已完成/终态后隐藏进度条。 + if (qs === '本文件解析完毕' || qs === '已被全局判定为终态') { + return false + } + + if (multiFileTask) { + const sessionItem = findSessionItem(taskId, item) + // 多文件任务:未入队的文件不展示同一个 task 的公共进度,避免“两个文件同时在跑”的错觉。 + if (!sessionItem?._pushed) { + return false + } + + if (progress?.has_progress && progress?.info?.file_name) { + return progress.info.file_name === item.sourceFilename + } + return true + } + + if (progress?.has_progress || progress?.info) { + return true + } + return qs === '已入队' || qs === '处理中' } @@ -550,14 +578,20 @@ function getQueueStatus(item: DeleteBrandResultItem) { return '已被全局判定为终态' } - if (status === 'RUNNING' && info?.has_progress && info?.info?.file_name === item.sourceFilename) { - return '处理中' + // 多文件:未推送的文件必须保持“未入队”,避免被同 task 的公共 RUNNING 状态误判成“处理中”。 + if (multiFileTask && !sessionItem?._pushed && !sessionItem?._completed) { + return '未入队' } + // 先看前端会话态:一旦该文件已判定完成,优先展示完成,避免被 RUNNING 覆盖导致链式推进卡住。 if (sessionItem?._completed) { return '本文件解析完毕' } + if (status === 'RUNNING' && info?.has_progress && info?.info?.file_name === item.sourceFilename) { + return '处理中' + } + if (multiFileTask && status === 'SUCCESS') { return '本文件解析完毕' } @@ -916,6 +950,11 @@ function formatPreview(rows: DeleteBrandPreviewRow[]) { return hiddenCount > 0 ? `${preview.join('、')} 等 ${rows.length} 条` : preview.join('、') } +function debugAutoAdvance(step: string, payload?: Record) { + if (!import.meta.env.DEV) return + console.log(`[DeleteBrandAutoAdvance] ${step}`, payload || {}) +} + function isPythonQueueBusy() { for (const task of sessionTasks.value) { for (const item of task.items) { @@ -945,6 +984,11 @@ function findNextAutoRunnableItem() { async function runItem(item: DeleteBrandResultItem, options?: { auto?: boolean }) { if (options?.auto && isPythonQueueBusy()) { + debugAutoAdvance('runItem blocked by busy queue', { + mode: 'auto', + taskId: item.taskId, + sourceFilename: item.sourceFilename, + }) return false } @@ -992,8 +1036,17 @@ async function runItem(item: DeleteBrandResultItem, options?: { auto?: boolean } } async function maybeAutoAdvance() { - if (!chainStarted.value || autoAdvancing.value) return - if (isPythonQueueBusy()) return + if (!chainStarted.value || autoAdvancing.value) { + debugAutoAdvance('skip: chain not started or auto advancing', { + chainStarted: chainStarted.value, + autoAdvancing: autoAdvancing.value, + }) + return + } + if (isPythonQueueBusy()) { + debugAutoAdvance('skip: queue busy') + return + } const currentKey = activeItemKey.value if (currentKey) { @@ -1002,15 +1055,33 @@ async function maybeAutoAdvance() { const taskId = currentItem.taskId const multiFileTask = isMultiFileTask(taskId) if (multiFileTask) { - updateCompletedItemsFromProgress(taskId) + const changed = updateCompletedItemsFromProgress(taskId) + debugAutoAdvance('sync completed from progress', { + taskId, + changed, + status: getQueueStatus(currentItem), + }) } const status = getQueueStatus(currentItem) if (status === '已入队' || status === '处理中') { + debugAutoAdvance('skip: current item still running', { + currentKey, + status, + taskId, + sourceFilename: currentItem.sourceFilename, + }) return } if (multiFileTask) { const sessionItem = findSessionItem(taskId, currentItem) if (sessionItem && !sessionItem._completed) { + debugAutoAdvance('skip: multi-file current not completed yet', { + currentKey, + taskId, + sourceFilename: currentItem.sourceFilename, + pushed: sessionItem._pushed, + completed: sessionItem._completed, + }) return } } @@ -1019,6 +1090,9 @@ async function maybeAutoAdvance() { const nextItem = findNextAutoRunnableItem() if (!nextItem) { + debugAutoAdvance('stop chain: no next runnable item', { + currentKey, + }) activeItemKey.value = '' chainStarted.value = false return @@ -1026,8 +1100,17 @@ async function maybeAutoAdvance() { autoAdvancing.value = true try { + debugAutoAdvance('try start next item', { + taskId: nextItem.taskId, + sourceFilename: nextItem.sourceFilename, + nextKey: getItemKey(nextItem), + }) const started = await runItem(nextItem, { auto: true }) if (!started) { + debugAutoAdvance('stop chain: runItem returned false', { + taskId: nextItem.taskId, + sourceFilename: nextItem.sourceFilename, + }) chainStarted.value = false } } finally {