Files
crawler-plugin/new_web_source/assets/delete-brand.js
2026-05-07 16:21:35 +08:00

2 lines
26 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{d as ns,o as ls,L as rs,a as d,c as f,b as os,B as us,e as o,F as z,r as ye,t as v,f as h,M as is,N as qe,n as Oe,g as y,h as V,O as cs,i as Q,E as p,P as ds,Q as fs,R as vs,S as hs,T as ps,U as _s,_ as ys,q as gs,s as ms}from"./pywebview-CcblbV5J.js";import{e as ks}from"./brand-CEi7uRFN.js";import{c as ws}from"./categorized-timers-JPA-olTr.js";const Is={class:"page-shell module-page"},bs={class:"main-content"},Ss={class:"left-panel"},Ts={class:"upload-zone"},Cs={class:"selected-files clean-placeholder split-selected-files"},Rs={key:0,class:"more-line"},Ns={key:1},Es={class:"run-row"},Fs=["disabled"],Ps=["disabled"],xs={class:"loading-msg"},$s={key:0,class:"queue-debug-card"},As={key:0,class:"queue-debug-line"},Ds={key:1,class:"queue-debug-payload"},Ms={class:"right-panel"},Bs={class:"task-list-wrap"},Us={class:"clean-result-summary"},Ls={class:"summary-card"},qs={class:"summary-card"},Os={class:"summary-card"},Ks={class:"result-list-wrap"},Gs={key:0,class:"empty-tasks"},Hs={key:0,class:"result-subsection"},Js={class:"task-list clean-result-list"},js={class:"left split-result-main"},zs=["title"],Vs={class:"files"},Qs={class:"files"},Xs={key:0,class:"files"},Ws={key:1,class:"files"},Ys={key:2,class:"files"},Zs={key:3,class:"time"},et={key:4,class:"delete-brand-progress-block"},st={class:"delete-brand-progress-header"},tt={class:"delete-brand-progress-bar"},at={class:"files delete-brand-progress"},nt={key:5,class:"files split-entry-list delete-brand-preview"},lt={key:6,class:"files"},rt={class:"task-right split-result-actions"},ot=["onClick"],ut=["onClick"],it={key:1,class:"result-subsection"},ct={class:"task-list clean-result-list"},dt={class:"left split-result-main"},ft=["title"],vt={class:"files"},ht={class:"files"},pt={key:0,class:"files"},_t={key:1,class:"files"},yt={key:2,class:"time"},gt={key:3,class:"delete-brand-progress-block"},mt={class:"delete-brand-progress-header"},kt={class:"delete-brand-progress-bar"},wt={class:"files delete-brand-progress"},It={key:4,class:"files split-entry-list delete-brand-preview"},bt={key:5,class:"files"},St={class:"task-right split-result-actions"},Tt=["onClick"],Ct=["onClick"],Rt=ns({__name:"BrandDeleteBrandTab",setup(Et){function D(){return`delete-brand:current-tasks:${typeof window<"u"&&window.localStorage.getItem("uid")||"0"}`}const M=y([]),X=y([]),O=y(!1),ge=y([]),i=y([]),K=y([]),W=y({total:0,successCount:0,failedCount:0,items:[]}),b=y(""),S=y(""),m=y({}),T=y(null),le=y(!1),Y=y(!1),R=y(!1),B=y(""),Z=y(!1),G=y(null),re=y(!1);let U=!1;const L=ws("delete-brand"),oe=V(()=>M.value.slice(0,10)),N=V(()=>{const e=[...i.value].sort((t,a)=>(a.createdAt||0)-(t.createdAt||0)),s=[];return e.forEach(t=>{s.push(...t.items)}),s});function Ke(){try{const e=typeof window<"u"?window.localStorage.getItem(D()):null;if(e){if(i.value=JSON.parse(e),i.value.length>0){const s=i.value[i.value.length-1];b.value=s.queuePushResult||"",S.value=s.queuePayloadText||""}}else i.value=[]}catch{i.value=[]}}function ue(e,s,t,a){if(!s?.length)return;const r=i.value.findIndex(c=>c.taskId===e),l=r>=0?i.value[r]:null,n=s.map(c=>{const _=l?.items.find(as=>q(as,c)),k=Array.isArray(c.countries)?c.countries:void 0,g=Array.isArray(_?.countries)?_?.countries:void 0,w=k&&k.length>0?k:g&&g.length>0?g:k??g,I=Array.isArray(c.previewRows)?c.previewRows:void 0,C=Array.isArray(_?.previewRows)?_?.previewRows:void 0,_e=I&&I.length>0?I:C&&C.length>0?C:I??C;return{...c,countries:w,previewRows:_e,_pushed:_?._pushed??c._pushed??!1,_completed:_?._completed??c._completed??!1}}),u={taskId:e,items:n,createdAt:l?.createdAt||Date.now(),queuePushResult:t??l?.queuePushResult,queuePayloadText:a??l?.queuePayloadText};r>=0?i.value[r]=u:i.value.push(u),typeof window<"u"&&window.localStorage.setItem(D(),JSON.stringify(i.value))}function me(e){const s=i.value.length;i.value=i.value.filter(t=>t.taskId!==e),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem(D(),JSON.stringify(i.value))}function ke(e){return e==="SUCCESS"||e==="FAILED"||e==="COMPLETED"}function Ge(e){if(!e?.length)return!1;const s=new Set;if(e.forEach(a=>{a.taskId&&ke(a.taskStatus)&&s.add(a.taskId)}),!s.size)return!1;const t=i.value.length;return i.value=i.value.filter(a=>!s.has(a.taskId)),i.value.length!==t?(ie(),!0):!1}const ee=V(()=>K.value.filter(e=>!N.value.some(s=>q(s,e)))),He=V(()=>N.value.length>0||ee.value.length>0),Je=V(()=>N.value.filter(e=>Me(e)&&E(e)==="未入队"));function ie(){typeof window<"u"&&(i.value.length===0?window.localStorage.removeItem(D()):window.localStorage.setItem(D(),JSON.stringify(i.value)))}function P(e){return e?(i.value.find(t=>t.taskId===e)?.items.length||0)>1:!1}function ce(e){return e&&i.value.find(s=>s.taskId===e)||null}function q(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=ce(e);return t&&t.items.find(a=>q(a,s))||null}function we(e){if(!e)return!1;const s=ce(e);if(!s)return!1;let t=!1;const a=m.value[e]?.line_progress?.info,r=P(e);if(a?.file_name&&a.current_line!=null&&a.total_lines!=null&&a.total_lines>0&&a.current_line>=a.total_lines){const l=s.items.find(n=>n.sourceFilename===a.file_name);l&&!l._completed&&(l._completed=!0,t=!0)}if(!r){const l=m.value[e]?.task?.status;if((l==="SUCCESS"||l==="FAILED")&&s.items.length===1){const n=s.items[0];n&&!n._completed&&(n._completed=!0,t=!0)}}return t&&ie(),t}function Ie(e){return e&&m.value[e]?.task?.status||""}function se(e){if(e.error)return e.error;if(e.matchStatus&&e.matchStatus!=="MATCHED")return e.matchMessage||"";const s=e.taskId;return s&&m.value[s]?.task?.errorMessage||""}function be(e){const s=e.taskId;if(!s)return!1;const t=m.value[s]?.line_progress,a=Ie(s),r=P(s),l=E(e);if(r){const n=x(s,e),u=j(e)===B.value,c=!!(t?.has_progress&&t?.info?.file_name===e.sourceFilename);return u||c||n?._pushed||(a==="RUNNING"||a==="PENDING"||!a)&&n?._completed?!0:{success:!1,retryable:!0}}return l==="本文件解析完毕"||l==="已被全局判定为终态"?!1:t?.has_progress||t?.info?!0:l==="已入队"||l==="处理中"}function Se(e){return e.map(s=>A(s)?{...s,matched:!0,_pushed:!1,_completed:!1}:{...s,matched:!1,openStoreUrl:void 0,error:s.error||void 0,_pushed:!1,_completed:!1})}function Te(e){return e.matchStatus==="INDEX_STALE"&&A(e)?`已匹配 ${e.shopId||""}(索引过期,可继续推送)`.trim():e.matchStatus==="MATCHED"||e.matched?`已匹配 ${e.shopId||""}`.trim():e.matchMessage?e.matchMessage:e.matchStatus==="CONFLICT"?"存在多个同名店铺,请人工确认":e.matchStatus==="PENDING"?"店铺索引暂未就绪":e.matchStatus?e.matchStatus:e.matched?`已匹配 ${e.shopId||""}`.trim():"待匹配"}function je(){ge.value=[...N.value,...ee.value]}function $(){je(),ze(ge.value)}function ze(e){W.value={total:e.length,successCount:e.filter(s=>s.success).length,failedCount:e.filter(s=>!s.success).length,items:e}}function de(e){const s=e.taskId;return s&&(m.value[s]?.fileProgress||[]).find(r=>r.fileKey&&e.fileKey?r.fileKey===e.fileKey:r.sourceFilename&&e.sourceFilename?r.sourceFilename===e.sourceFilename:!1)||null}function Ce(e){const s=e.taskId;if(!s)return"";const t=m.value[s],a=t?.line_progress?.info,r=de(e);if(P(s)){const u=x(s,e),c=t?.task?.status,_=!!(a?.file_name&&a.file_name===e.sourceFilename);let k=u?._completed?"COMPLETED":(u?._pushed,"PENDING"),g=0,w=Math.max(0,e.totalRows??r?.totalRows??0);c==="SUCCESS"||c==="FAILED"&&u?._completed?(k="COMPLETED",g=w):_?(k="RUNNING",g=Math.max(0,Math.min(w||Number.MAX_SAFE_INTEGER,a?.current_line??0)),!w&&a?.total_lines&&a.total_lines>0&&(w=a.total_lines)):u?._completed?(k="COMPLETED",g=w):u?._pushed&&(k="PENDING",g=0);const I=[];if(I.push(`文件状态:${k}`),I.push(`文件进度:${g}/${w}`),a?.finished_files!=null){const C=a.file_total&&a.file_total>0?`/${a.file_total}`:"";I.push(`已完成文件:${a.finished_files}${C}`)}return a?.phase&&I.push(`阶段:${a.phase}`),I.join("")}if(r){const u=[],c=r.processedRows??0,_=r.totalRows??0;if(r.status&&u.push(`文件状态:${r.status}`),u.push(`文件进度:${c}/${_}`),a?.finished_files!=null){const k=a.file_total&&a.file_total>0?`/${a.file_total}`:"";u.push(`已完成文件:${a.finished_files}${k}`)}return a?.phase&&u.push(`阶段:${a.phase}`),u.join("")}if(!t?.line_progress?.has_progress||!a){const u=t?.task?.status;return u?`任务状态:${u}`:""}const n=[];if(a.phase&&n.push(`阶段:${a.phase}`),a.file_index&&a.file_total&&n.push(`文件:${a.file_index}/${a.file_total}`),a.file_name&&n.push(`当前文件:${a.file_name}`),a.current_line!=null&&a.total_lines!=null&&n.push(`${P(s)?"当前文件进度":"进度"}${a.current_line}/${a.total_lines}`),a.current_country&&n.push(`国家:${a.current_country}`),a.current_asin&&n.push(`ASIN${a.current_asin}`),a.finished_files!=null){const u=a.file_total&&a.file_total>0?`/${a.file_total}`:"";n.push(`已完成文件:${a.finished_files}${u}`)}return n.join("")}function te(e){const s=e.taskId;if(!s)return 0;const t=m.value[s]?.line_progress?.info;if(P(s)){const n=x(s,e);if(m.value[s]?.task?.status==="SUCCESS"||n?._completed)return 100;const c=Math.max(0,e.totalRows??de(e)?.totalRows??0);if(!!(t?.file_name&&t.file_name===e.sourceFilename)){if(t?.current_line!=null&&t?.total_lines&&t.total_lines>0)return Math.max(0,Math.min(100,Math.round(t.current_line/t.total_lines*100)));if(t?.current_line!=null&&c>0)return Math.max(0,Math.min(100,Math.round(t.current_line/c*100)))}return 0}const r=de(e);return r?Math.max(0,Math.min(100,r.percent??0)):t?t.current_line!=null&&t.total_lines&&t.total_lines>0?Math.max(0,Math.min(100,Math.round(t.current_line/t.total_lines*100))):t.finished_files!=null&&t.file_total&&t.file_total>0?Math.max(0,Math.min(100,Math.round(t.finished_files/t.file_total*100))):m.value[s]?.task?.status==="SUCCESS"?100:0:0}function Re(e){const s=m.value[e]?.task?.status;return ke(s)}function H(){const e=new Set;return i.value.forEach(s=>{s.items.some(t=>t._pushed)&&e.add(s.taskId)}),Array.from(e)}function E(e){const s=e.taskId;if(!s||!ce(s))return"";const a=x(s,e),r=Ie(s),l=m.value[s]?.line_progress,n=P(s);if(!n&&(r==="SUCCESS"||r==="FAILED"||e.taskStatus==="SUCCESS"||e.taskStatus==="FAILED"))return"已被全局判定为终态";if(ae(e)||ae(a)||a?._completed)return"本文件解析完毕";if(r==="RUNNING"&&l?.has_progress&&l?.info?.file_name===e.sourceFilename)return"处理中";if(n&&!a?._pushed&&!a?._completed)return"未入队";if(n&&r==="SUCCESS")return"本文件解析完毕";if(!n){const u=m.value[s];if(u?.items&&u.items.find(_=>q(_,e))&&r==="SUCCESS")return"本文件解析完毕"}return a?._pushed?"已入队":"未入队"}function Ne(e){return!!(e.downloadUrl||e.fileReady)}function ae(e){if(!e)return!1;const s=String(e.fileStatus||"").toUpperCase();return!!(e.fileReady||e.downloadUrl||s==="SUCCESS"||s==="COMPLETED")}function F(e,s){return e??s}function Ve(e){const s=e?.task?.id;if(!s)return!1;const t=i.value.find(n=>n.taskId===s);if(!t)return{success:!1,retryable:!1};const a=e?.items||[];let r=!1;const l=t.items.map(n=>{const u=a.find(_e=>q(_e,n));if(!u)return n;const c=Array.isArray(u.countries)?u.countries:void 0,_=Array.isArray(n.countries)?n.countries:void 0,k=c&&c.length>0?c:_&&_.length>0?_:c??_,g=Array.isArray(u.previewRows)?u.previewRows:void 0,w=Array.isArray(n.previewRows)?n.previewRows:void 0,I=g&&g.length>0?g:w&&w.length>0?w:g??w,C={...n,...u,shopName:F(u.shopName,n.shopName),companyName:F(u.companyName,n.companyName),shopId:F(u.shopId,n.shopId),platform:F(u.platform,n.platform),openStoreUrl:F(u.openStoreUrl,n.openStoreUrl),matchStatus:F(u.matchStatus,n.matchStatus),matchMessage:F(u.matchMessage,n.matchMessage),matched:A(n)||A(u),countryCount:F(u.countryCount,n.countryCount),countries:k,previewRows:I,_pushed:n._pushed,_completed:n._completed||ae(u)};return JSON.stringify(C)!==JSON.stringify(n)&&(r=!0),C});for(const n of a)l.some(u=>q(u,n))||(l.push({...n,_pushed:!1,_completed:ae(n)}),r=!0);return JSON.stringify(l)!==JSON.stringify(t.items)&&(t.items=l,r=!0),r&&ie(),r}async function fe(e){const s=e||H();if(s.length)try{const t=await cs(s);re.value&&R.value&&(b.value="后端已恢复,继续执行当前任务并自动衔接后续任务..."),re.value=!1;let a=!1;for(const r of t.items||[]){const l=r?.task?.id;typeof l=="number"&&l>0&&(m.value[l]=r,Ve(r)&&(a=!0),we(l)&&(a=!0))}a&&$()}catch(t){const a=(t instanceof Error?t.message:String(t||"")).toLowerCase();["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(l=>a.includes(l.toLowerCase()))&&R.value&&(re.value=!0,b.value="当前任务运行中,正在等待后端服务恢复...")}}function Qe(){return _s()}function ve(e=!1){if(U)return;if(T.value){if(!e)return;L.clearTimer("task-poll",T.value),T.value=null}const s=async()=>{if(T.value=null,U)return;if(le.value){ve();return}const t=H();if(!t.length)return;le.value=!0;let a=!1,r=!1;try{await fe(t),await Le();for(const l of t)Re(l)&&(me(l),a=!0,r=!0)}finally{le.value=!1}r?await J():a&&$(),!U&&H().length>0&&ve()};e?s():T.value=L.setTimeout("task-poll",s,Qe())}function he(e=!1){T.value&&!e||ve(e)}function ne(e){if(e.fileReady||e.downloadUrl)return{className:"success",text:"已完成"};const s=e.taskId?m.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 Ee(){T.value&&(L.clearTimer("task-poll",T.value),T.value=null),pe()}async function Fe(e){const s=Q();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const a of e){const r=typeof a=="string"?a:a.absolutePath,l=typeof a=="string"?void 0:a.relativePath,n=await s.upload_file_to_java(r,l);if(!n?.success||!n.data)throw new Error(n?.error||n?.message||`上传失败:${r}`);t.push(n.data)}return t}async function Xe(){const e=Q();if(!e?.select_brand_xlsx_files){p.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await e.select_brand_xlsx_files();if(!s?.length)return;M.value=s,X.value=await Fe(s),p.success(`已选择 ${s.length} 个删除品牌文件`)}catch(s){p.error(s instanceof Error?s.message:"选择失败")}}async function We(){const e=Q();if(!e?.select_brand_folder){p.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await e.select_brand_folder();if(!s)return;const t=await ks(s);if(!t.success||!t.items?.length){p.warning(t.error||"该文件夹下没有 xlsx 文件");return}M.value=t.items.map(a=>a.relativePath||a.absolutePath),X.value=await Fe(t.items),p.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`)}catch(s){p.error(s instanceof Error?s.message:"选择失败")}}async function Ye(){if(!X.value.length){p.warning("请先选择待处理文件");return}try{O.value=!0;const e=await ds({files:X.value.map(l=>({fileKey:l.fileKey,originalFilename:l.originalFilename,relativePath:l.relativePath}))}),s=Se(e.items||[]),t=s.some(l=>A(l)),a=s.some(l=>l.matchStatus==="INDEX_STALE"&&l.matched),r=s.some(l=>!A(l));b.value=t?"解析完成,可在左侧点击“推送到 Python 队列”开始串行处理":"解析完成,当前没有可推送的文件",S.value="",s.length&&s[0].taskId&&ue(s[0].taskId,s,b.value,S.value),$(),r?p.warning("部分文件尚未命中可用店铺索引,已保留状态信息,请等待后台刷新后重试。"):a?p.warning("部分文件命中的是过期索引,仍可推送到 Python 队列;后台刷新后会自动重新匹配。"):t?p.success("删除品牌解析完成,请在左侧推送到 Python 队列"):p.warning("当前没有可推送的文件,请先等待店铺索引刷新。"),await J()}catch(e){p.error(e instanceof Error?e.message:"执行失败")}finally{O.value=!1}}async function Pe(e){const s=e.taskId;if(!s){p.warning("未找到任务ID");return}const t=Q(),a=e.resultId?fs(e.resultId):vs(s),r=e.outputFilename||e.sourceFilename||`delete-brand_${s}.xlsx`;if(t?.save_file_from_url_new){const l=await t.save_file_from_url_new(a,r);l.success?p.success(`已保存:${l.path||r}`):l.error&&l.error!=="用户取消"&&p.error(l.error);return}}async function J(){try{const e=await hs();K.value=Se(e.items||[]),Ge(K.value),$(),await fe(),he(!0)}catch(e){const s=(e instanceof Error?e.message:String(e||"")).toLowerCase();["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(a=>s.includes(a.toLowerCase()))||console.error("loadHistory error:",e)}}function xe(e){i.value.forEach(t=>{t.items=t.items.filter(a=>a.resultId!==e)});const s=i.value.length;i.value=i.value.filter(t=>t.items.length>0),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem(D(),JSON.stringify(i.value)),K.value=K.value.filter(t=>t.resultId!==e),$(),H().length===0&&Ee()}async function $e(e){try{await ps(e),xe(e),await J(),p.success("已删除")}catch(s){const t=s instanceof Error?s.message:"删除失败";if(typeof t=="string"&&t.includes("记录不存在")){xe(e),p.success("已删除");return}p.error(t)}}function Ae(e){const s=e.slice(0,5).map(a=>`${a.country}:${a.asin}${a.status?`${a.status}`:""}`);return e.length-s.length>0?`${s.join("、")}${e.length}`:s.join("、")}function Ft(e,s){}function pe(){G.value&&(L.clearTimer("auto-retry",G.value),G.value=null)}function Ze(e=3e3){U||(pe(),G.value=L.setTimeout("auto-retry",()=>{G.value=null,U||Le().catch(()=>{})},e))}function es(e){return e.includes("当前店铺正在执行中")}function De(){for(const e of i.value)for(const s of e.items){const t=E(s);if(t==="已入队"||t==="处理中")return!0}return!1}function j(e){return e.resultId!=null?`result:${e.resultId}`:`task:${e.taskId||0}:${e.sourceFilename||""}`}function A(e){return!!(e.matched||e.matchStatus==="MATCHED"||e.matchStatus==="INDEX_STALE"&&e.shopId)}function ss(e){return!!(e.shopName&&Array.isArray(e.countries)&&e.countries.length>0)}function Me(e){return!!(e.taskId&&(A(e)||ss(e)))}function Be(){return N.value.find(e=>!Me(e)||j(e)===B.value||x(e.taskId,e)?._completed?!1:E(e)==="未入队")}async function Ue(e,s){if(s?.auto&&De())return e.taskId,e.sourceFilename,{success:!1,retryable:!0};const t=Q(),a=e.taskId;if(!a)return{success:!1,retryable:!1};const r=i.value.find(c=>c.taskId===a);if(!r)return{success:!1,retryable:!1};if(!t?.enqueue_json)return p.error("当前环境未启用 pywebview enqueue_json浏览器环境不会推送"),{success:!1,retryable:!1};const l={type:"delete-brand-run",ts:Date.now(),data:{taskId:a,items:[e]}};S.value=JSON.stringify(l,null,2);const n=await t.enqueue_json(l);let u="";if(n?.success){u=`已推送文件 ${e.sourceFilename},当前队列长度:${n.queue_size??"-"}`;const c=x(a,e);return c&&(c._pushed=!0,c._completed=!1),B.value=j(e),ue(a,r.items,u,S.value),he(!0),b.value=u,{success:!0,retryable:!1}}else{const c=n?.error||"未知错误";if(u=`推送到 Python 队列失败:${c}`,b.value=u,ue(a,r.items,u,S.value),s?.auto&&es(c))return{success:!1,retryable:!0}}return b.value=u,{success:!1,retryable:!1}}async function ts(){const e=Be();if(!e){p.warning("当前没有可推送的文件");return}Y.value=!0,R.value=!0,pe();const s=await Ue(e);if(Y.value=!1,!s.success){R.value=!1,B.value="";return}p.success("已开始按顺序推送到 Python 队列")}async function Le(){if(!R.value||Z.value){R.value,Z.value;return}if(De())return;const e=B.value;if(e){const t=N.value.find(a=>j(a)===e);if(t){const a=t.taskId,r=P(a);r&&(we(a),E(t),void 0);const l=E(t);if(l==="已入队"||l==="处理中"){t.sourceFilename;return}if(r){const n=x(a,t);if(n&&!n._completed){t.sourceFilename,n._pushed,n._completed;return}}}}const s=Be();if(!s){B.value="",R.value=!1;return}Z.value=!0;try{s.taskId,s.sourceFilename,j(s);const t=await Ue(s,{auto:!0});if(!t.success){if(t.retryable){s.taskId,s.sourceFilename,Ze();return}s.taskId,s.sourceFilename,R.value=!1}}finally{Z.value=!1}}return ls(()=>{Ke();const e=H();e.length>0?fe(e).then(async()=>{let s=!1,t=!1;for(const a of e)Re(a)&&(me(a),s=!0,t=!0);t?await J():s&&$(),he(!0)}):$(),J().catch(()=>{})}),rs(()=>{U=!0,Ee(),L.clearScope()}),(e,s)=>(d(),f("div",Is,[os(us,{active:"delete-brand"}),o("div",bs,[o("aside",Ss,[s[2]||(s[2]=o("div",{class:"section-title"},"选择文件",-1)),o("div",Ts,[s[0]||(s[0]=o("div",{class:"hint"},"上传删除品牌 Excel无论是直接上传文件还是上传文件夹批量导入都会按每个 Excel 文件名作为店铺名。",-1)),o("div",{class:"btns"},[o("button",{type:"button",class:"opt-btn",onClick:Xe},"选择 Excel 文件"),o("button",{type:"button",class:"opt-btn",onClick:We},"选择文件夹")]),o("div",Cs,[M.value.length?(d(),f(z,{key:0},[(d(!0),f(z,null,ye(oe.value,t=>(d(),f("span",{key:t},v(t),1))),128)),M.value.length>oe.value.length?(d(),f("span",Rs," 还有 "+v(M.value.length-oe.value.length)+" 个文件未展开显示 ",1)):h("",!0)],64)):(d(),f("span",Ns,"暂未选择删除品牌文件"))])]),s[3]||(s[3]=is('<div class="section-title" data-v-ebc81d26>执行说明</div><div class="option-group" data-v-ebc81d26><label class="radio-item active" data-v-ebc81d26><input type="checkbox" checked disabled data-v-ebc81d26><div data-v-ebc81d26><span class="label" data-v-ebc81d26>文件名作为店铺名</span><div class="desc" data-v-ebc81d26>例如 鲍丽明.xlsx 会解析为店铺名 鲍丽明;并自动联动紫鸟进行店铺匹配</div></div></label><label class="radio-item active" data-v-ebc81d26><input type="checkbox" checked disabled data-v-ebc81d26><div data-v-ebc81d26><span class="label" data-v-ebc81d26>文件夹仅用于批量导入</span><div class="desc" data-v-ebc81d26>文件夹名和子目录名不会参与店铺匹配,只是方便一次上传多个 Excel</div></div></label><label class="radio-item active" data-v-ebc81d26><input type="checkbox" checked disabled data-v-ebc81d26><div data-v-ebc81d26><span class="label" data-v-ebc81d26>按国家分组去重</span><div class="desc" data-v-ebc81d26>解析后按国家返回,并在每个国家内按 ASIN 去重(保留首次出现的状态)</div></div></label></div>',2)),o("div",Es,[o("button",{type:"button",class:"btn-run",disabled:O.value,onClick:Ye},v(O.value?"解析中...":"开始解析"),9,Fs),o("button",{type:"button",class:"btn-run btn-queue",disabled:Y.value||!Je.value.length,onClick:ts},v(Y.value?"推送中...":"推送到 Python 队列"),9,Ps),o("span",xs,v(O.value?"正在读取删除品牌数据,请稍候…":"解析后会在右侧展示按国家分组的去重结果"),1)]),b.value||S.value?(d(),f("div",$s,[s[1]||(s[1]=o("div",{class:"section-title queue-debug-title"},"Python 队列推送结果",-1)),b.value?(d(),f("div",As,v(b.value),1)):h("",!0),S.value?(d(),f("pre",Ds,v(S.value),1)):h("",!0)])):h("",!0)]),o("section",Ms,[s[12]||(s[12]=o("div",{class:"panel-header"},"删除品牌结果",-1)),o("div",Bs,[o("div",Us,[o("div",Ls,[s[4]||(s[4]=o("span",{class:"summary-label"},"已处理文件",-1)),o("strong",null,v(W.value.total),1)]),o("div",qs,[s[5]||(s[5]=o("span",{class:"summary-label"},"成功结果",-1)),o("strong",null,v(W.value.successCount),1)]),o("div",Os,[s[6]||(s[6]=o("span",{class:"summary-label"},"失败文件",-1)),o("strong",null,v(W.value.failedCount),1)])]),o("div",Ks,[s[11]||(s[11]=o("div",{class:"result-list-header"},[o("span",null,"删除品牌结果列表")],-1)),He.value?(d(),f(z,{key:1},[N.value.length?(d(),f("div",Hs,[s[8]||(s[8]=o("div",{class:"result-subsection-title"},"当前任务",-1)),o("ul",Js,[(d(!0),f(z,null,ye(N.value,t=>(d(),f("li",{key:`current-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[o("div",js,[o("span",{class:"id",title:t.sourceFilename},v(t.sourceFilename||"-"),9,zs),o("div",Vs,"店铺名:"+v(t.shopName||"-"),1),o("div",Qs,"匹配结果:"+v(Te(t)),1),t.platform?(d(),f("div",Xs,"平台:"+v(t.platform),1)):h("",!0),E(t)?(d(),f("div",Ws,"队列状态:"+v(E(t)),1)):h("",!0),t.countryCount!==void 0&&t.matched?(d(),f("div",Ys,"国家数:"+v(t.countryCount),1)):h("",!0),t.totalRows!==void 0&&t.matched?(d(),f("div",Zs,"去重后 "+v(t.totalRows)+" 条 ",1)):h("",!0),be(t)?(d(),f("div",et,[o("div",st,[s[7]||(s[7]=o("span",null,"任务进度",-1)),o("span",null,v(te(t))+"%",1)]),o("div",tt,[o("div",{class:"delete-brand-progress-bar-fill",style:qe({width:`${te(t)}%`})},null,4)]),o("div",at,v(Ce(t)),1)])):h("",!0),t.previewRows?.length?(d(),f("div",nt,v(Ae(t.previewRows)),1)):h("",!0),se(t)?(d(),f("div",lt,"错误信息:"+v(se(t)),1)):h("",!0)]),o("div",rt,[o("span",{class:Oe(["status",ne(t).className])},v(ne(t).text),3),Ne(t)?(d(),f("button",{key:0,type:"button",class:"download",onClick:a=>Pe(t)}," 下载 ",8,ot)):h("",!0),t.resultId?(d(),f("button",{key:1,type:"button",class:"btn-delete",onClick:a=>$e(t.resultId)}," 删除 ",8,ut)):h("",!0)])]))),128))])])):h("",!0),ee.value.length?(d(),f("div",it,[s[10]||(s[10]=o("div",{class:"result-subsection-title"},"历史记录",-1)),o("ul",ct,[(d(!0),f(z,null,ye(ee.value,t=>(d(),f("li",{key:`history-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[o("div",dt,[o("span",{class:"id",title:t.sourceFilename},v(t.sourceFilename||"-"),9,ft),o("div",vt,"店铺名:"+v(t.shopName||"-"),1),o("div",ht,"匹配结果:"+v(Te(t)),1),t.platform?(d(),f("div",pt,"平台:"+v(t.platform),1)):h("",!0),t.countryCount!==void 0&&t.matched?(d(),f("div",_t,"国家数:"+v(t.countryCount),1)):h("",!0),t.totalRows!==void 0&&t.matched?(d(),f("div",yt,"去重后 "+v(t.totalRows)+" 条 ",1)):h("",!0),be(t)?(d(),f("div",gt,[o("div",mt,[s[9]||(s[9]=o("span",null,"任务进度",-1)),o("span",null,v(te(t))+"%",1)]),o("div",kt,[o("div",{class:"delete-brand-progress-bar-fill",style:qe({width:`${te(t)}%`})},null,4)]),o("div",wt,v(Ce(t)),1)])):h("",!0),t.previewRows?.length?(d(),f("div",It,v(Ae(t.previewRows)),1)):h("",!0),se(t)?(d(),f("div",bt,"错误信息:"+v(se(t)),1)):h("",!0)]),o("div",St,[o("span",{class:Oe(["status",ne(t).className])},v(ne(t).text),3),Ne(t)?(d(),f("button",{key:0,type:"button",class:"download",onClick:a=>Pe(t)}," 下载 ",8,Tt)):h("",!0),t.resultId?(d(),f("button",{key:1,type:"button",class:"btn-delete",onClick:a=>$e(t.resultId)}," 删除 ",8,Ct)):h("",!0)])]))),128))])])):h("",!0)],64)):(d(),f("div",Gs," 暂无删除品牌结果,完成解析后会在这里展示按国家分组的去重结果 "))])])])])]))}}),Nt=ys(Rt,[["__scopeId","data-v-ebc81d26"]]);gs(Nt).use(ms).mount("#app");