import{d as fs,o as vs,J as _s,a as l,c as o,b as ps,B as hs,e as a,F as m,r as M,t as r,f as u,K as ks,L as ss,n as es,g as f,h as C,i as S,E as c,j as ys,M as bs,N as gs,O as Is,P as ws,Q as ms,_ as Cs,q as Ss,s as Ns}from"./pywebview-C8Bik-Sc.js";const xs={class:"page-shell module-page"},$s={class:"main-content"},Ps={class:"left-panel"},Rs={class:"upload-zone"},Es={class:"selected-files clean-placeholder split-selected-files"},Fs={key:0,class:"more-line"},Ts={key:1},Ds={class:"run-row"},Us=["disabled"],Bs={class:"loading-msg"},qs={key:0,class:"queue-debug-card"},Ms={key:0,class:"queue-debug-line"},js={key:1,class:"queue-debug-payload"},As={class:"right-panel"},Gs={class:"task-list-wrap"},Vs={class:"clean-result-summary"},zs={class:"summary-card"},Hs={class:"summary-card"},Ls={class:"summary-card"},Js={class:"result-list-wrap"},Ks={key:0,class:"empty-tasks"},Os={key:0,class:"result-subsection"},Qs={class:"task-list clean-result-list"},Ws={class:"left split-result-main"},Xs=["title"],Ys={class:"files"},Zs={class:"files"},se={key:0,class:"files"},ee={key:1,class:"files"},te={key:2,class:"time"},ae={key:3,class:"delete-brand-progress-block"},ne={class:"delete-brand-progress-header"},le={class:"delete-brand-progress-bar"},oe={class:"files delete-brand-progress"},re={key:4,class:"files split-entry-list delete-brand-preview"},ue={key:5,class:"files"},ie={class:"task-right split-result-actions"},ce=["onClick"],de=["onClick"],fe=["onClick"],ve={key:1,class:"result-subsection"},_e={class:"task-list clean-result-list"},pe={class:"left split-result-main"},he=["title"],ke={class:"files"},ye={class:"files"},be={key:0,class:"files"},ge={key:1,class:"files"},Ie={key:2,class:"time"},we={key:3,class:"delete-brand-progress-block"},me={class:"delete-brand-progress-header"},Ce={class:"delete-brand-progress-bar"},Se={class:"files delete-brand-progress"},Ne={key:4,class:"files split-entry-list delete-brand-preview"},xe={key:5,class:"files"},$e={class:"task-right split-result-actions"},Pe=["onClick"],Re=["onClick"],Ee=["onClick"],Fe=fs({__name:"BrandDeleteBrandTab",setup(De){const k=f([]),N=f([]),b=f(!1),j=f([]),p=f([]),h=f([]),x=f({total:0,successCount:0,failedCount:0,items:[]}),y=f(""),g=f(""),d=f({}),_=f(null),T=f(!1),D=C(()=>k.value.slice(0,10)),ts=C(()=>h.value.filter(t=>{const s=t.taskId?d.value[t.taskId]?.task?.status:null;return s?s==="RUNNING":t.taskStatus?t.taskStatus==="RUNNING":(t.taskId||0)>0&&t.success===!1&&!t.error}).map(t=>t.taskId)),I=C(()=>{const t=[...p.value];return h.value.forEach(s=>{s.taskId&&ts.value.includes(s.taskId)&&(t.some(e=>e.taskId===s.taskId)||t.push(s))}),t}),$=C(()=>h.value.filter(t=>!I.value.some(s=>s.taskId===t.taskId||s.resultId&&s.resultId===t.resultId))),as=C(()=>I.value.length>0||$.value.length>0);function ns(t){return t&&d.value[t]?.task?.status||""}function P(t){if(t.error)return t.error;const s=t.taskId;return s&&d.value[s]?.task?.errorMessage||""}function A(t){const s=t.taskId;return s?ns(s)==="RUNNING":!1}function G(t){return t.map(s=>s.matched===!1?{...s,success:!1,error:s.error||"未匹配到紫鸟店铺",openStoreUrl:void 0}:s)}function ls(){j.value=[...I.value,...$.value]}function U(){ls(),os(j.value)}function os(t){x.value={total:t.length,successCount:t.filter(s=>s.success).length,failedCount:t.filter(s=>!s.success).length,items:t}}function V(t){if(!t)return"";const s=d.value[t],e=s?.line_progress?.info;if(!s?.line_progress?.has_progress||!e){const i=s?.task?.status;return i?`任务状态:${i}`:""}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=d.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))):d.value[t]?.task?.status==="SUCCESS"?100:0:0}function rs(t){return d.value[t]?.task?.status==="RUNNING"}function z(t){const s=d.value[t]?.task?.status;return s==="SUCCESS"||s==="FAILED"}function E(){const t=new Set;return p.value.forEach(s=>{s.taskId&&!z(s.taskId)&&t.add(s.taskId)}),h.value.forEach(s=>{s.taskId&&(d.value[s.taskId]?z(s.taskId)||t.add(s.taskId):(s.taskStatus==="RUNNING"||!s.taskStatus&&!s.success&&!s.error)&&t.add(s.taskId))}),Array.from(t)}function H(t){const s=t.taskId;return!s||!t.matched?!1:d.value[s]?.task?.status==="SUCCESS"}async function B(t){const s=t||E();if(s.length)try{const e=await ms(s);for(const n of e.items||[]){const i=n?.task?.id;typeof i=="number"&&i>0&&(d.value[i]=n)}}catch{}}function us(){return document.visibilityState==="visible"?4500:1e4}function q(t=!1){if(_.value){if(!t)return;clearTimeout(_.value),_.value=null}const s=async()=>{if(_.value=null,T.value){q();return}const e=E();if(!e.length)return;T.value=!0;try{await B(e)}finally{T.value=!1}e.some(i=>rs(i))&&q()};t?s():_.value=window.setTimeout(s,us())}function L(t=!1){_.value&&!t||q(t)}function F(t){const s=t.taskId?d.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 J(){_.value&&(window.clearTimeout(_.value),_.value=null)}async function K(t){const s=S();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const e=[];for(const n of t){const i=typeof n=="string"?n:n.absolutePath,v=typeof n=="string"?void 0:n.relativePath,w=await s.upload_file_to_java(i,v);if(!w?.success||!w.data)throw new Error(w?.error||w?.message||`上传失败:${i}`);e.push(w.data)}return e}async function is(){const t=S();if(!t?.select_brand_xlsx_files){c.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await t.select_brand_xlsx_files();if(!s?.length)return;k.value=s,N.value=await K(s),c.success(`已选择 ${s.length} 个删除品牌文件`)}catch(s){c.error(s instanceof Error?s.message:"选择失败")}}async function cs(){const t=S();if(!t?.select_brand_folder){c.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await t.select_brand_folder();if(!s)return;const e=await ys(s);if(!e.success||!e.items?.length){c.warning(e.error||"该文件夹下没有 xlsx 文件");return}k.value=e.items.map(n=>n.relativePath||n.absolutePath),N.value=await K(e.items),c.success(`已选择文件夹内 ${e.items.length} 个 xlsx 文件`)}catch(s){c.error(s instanceof Error?s.message:"选择失败")}}async function ds(){if(!N.value.length){c.warning("请先选择待处理文件");return}try{b.value=!0;const t=await bs({files:N.value.map(i=>({fileKey:i.fileKey,originalFilename:i.originalFilename,relativePath:i.relativePath}))}),s=G(t.items||[]);p.value=s,U(),await B(E()),L();const e=S(),n=s.some(i=>!i.matched);if(!n&&e?.enqueue_json){const i={type:"delete-brand-run",ts:Date.now(),data:{...t,items:s}};g.value=JSON.stringify(i,null,2);const v=await e.enqueue_json(i);v?.success?y.value=`已推送到 Python 队列,当前队列长度:${v.queue_size??"-"}`:y.value=`推送到 Python 队列失败:${v?.error||"未知错误"}`}else y.value=n?"存在未匹配到紫鸟店铺的文件,已跳过推送到 Python 队列":"当前环境未启用 pywebview enqueue_json(浏览器环境不会推送)",g.value="";n?c.error("存在未匹配到紫鸟店铺的文件,已标记为失败"):c.success("删除品牌解析完成")}catch(t){c.error(t instanceof Error?t.message:"执行失败")}finally{b.value=!1}}async function O(t){const s=t.taskId;if(!s){c.warning("未找到任务ID");return}const e=S(),n=gs(s),i=t.outputFilename||t.sourceFilename||`delete-brand_${s}.xlsx`;if(e?.save_file_from_url){const v=await e.save_file_from_url(n,i);v.success?c.success(`已保存:${v.path||i}`):v.error&&v.error!=="用户取消"&&c.error(v.error);return}window.open(n,"_blank")}async function Q(){try{const t=await Is();h.value=G(t.items||[]),U(),await B(),L(!0)}catch(t){console.error("loadHistory error:",t)}}function W(t){const e=p.value.find(n=>n.resultId===t)?.taskId;p.value=p.value.filter(n=>n.resultId!==t),h.value=h.value.filter(n=>n.resultId!==t),e&&!p.value.some(n=>n.taskId===e)&&delete d.value[e],U(),E().length===0&&J()}async function X(t){try{await ws(t),W(t),await Q(),c.success("已删除")}catch(s){const e=s instanceof Error?s.message:"删除失败";if(typeof e=="string"&&e.includes("记录不存在")){W(t),c.success("已删除");return}c.error(e)}}function Y(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 Z(t){window.open(t,"_blank")}return vs(()=>{Q().catch(()=>{})}),_s(()=>{J()}),(t,s)=>(l(),o("div",xs,[ps(hs,{active:"delete-brand"}),a("div",$s,[a("aside",Ps,[s[2]||(s[2]=a("div",{class:"section-title"},"选择文件",-1)),a("div",Rs,[s[0]||(s[0]=a("div",{class:"hint"},"上传删除品牌 Excel;无论是直接上传文件还是上传文件夹批量导入,都会按每个 Excel 文件名作为店铺名。",-1)),a("div",{class:"btns"},[a("button",{type:"button",class:"opt-btn",onClick:is},"选择 Excel 文件"),a("button",{type:"button",class:"opt-btn",onClick:cs},"选择文件夹")]),a("div",Es,[k.value.length?(l(),o(m,{key:0},[(l(!0),o(m,null,M(D.value,e=>(l(),o("span",{key:e},r(e),1))),128)),k.value.length>D.value.length?(l(),o("span",Fs," 还有 "+r(k.value.length-D.value.length)+" 个文件未展开显示 ",1)):u("",!0)],64)):(l(),o("span",Ts,"暂未选择删除品牌文件"))])]),s[3]||(s[3]=ks('