import{d as he,o as pe,I as ye,a as c,c as d,b as k,B as ge,e as n,R as ke,S as me,t as f,T as I,U as we,V as _e,u as C,F as D,r as x,W as Mt,n as W,f as _,X as be,Y as Ot,Z as Se,$ as Ie,g as v,h as z,E as u,a0 as Ce,a1 as Te,a2 as Pe,a3 as Ee,a4 as Ne,a5 as Re,a6 as De,a7 as $e,a8 as Lt,a9 as Fe,aa as Me,ab as Oe,i as Ut,ac as Le,ad as Ue,Q as Ae,_ as Be,p as xe,q as qe}from"./pywebview-CeWJDVeG.js";/* empty css */import{L as Ve}from"./listingFilters-BpGOU_pJ.js";const Ke={class:"page-shell module-page"},je={class:"main-content"},He={class:"left-panel"},Je={class:"input-zone"},Qe={class:"input-row"},Ge=["disabled"],We={key:0,class:"empty-candidates"},ze={key:1,class:"candidate-table-scroll"},Xe=["onClick"],Ye={class:"country-pref-checks"},Ze=["checked","disabled","onChange"],ts={class:"country-check-text"},es={key:2,class:"country-order-panel"},ss={class:"country-order-list"},as=["onDragstart","onDrop"],ns={class:"country-drag-label"},os={key:3,class:"country-pref-status"},ls={class:"listing-filter-row"},rs={class:"run-row"},us=["disabled"],is=["disabled"],cs={key:4,class:"queue-debug-card"},ds={class:"queue-debug-line"},fs={key:0,class:"queue-debug-payload"},vs={class:"right-panel"},hs={class:"task-list-wrap"},ps={class:"clean-result-summary pr-summary"},ys={class:"summary-card"},gs={class:"summary-card"},ks={class:"summary-card"},ms={class:"summary-card"},ws={key:0,class:"empty-tasks narrow"},_s=["onClick"],bs={class:"result-list-wrap"},Ss={key:0,class:"empty-tasks"},Is={key:0,class:"result-subsection"},Cs={class:"task-list clean-result-list"},Ts={class:"left split-result-main"},Ps=["title"],Es={class:"files"},Ns={key:0,class:"files"},Rs={key:1,class:"files"},Ds={class:"task-right split-result-actions"},$s=["onClick"],Fs=["onClick"],Ms={key:1,class:"result-subsection"},Os={class:"task-list clean-result-list"},Ls={class:"left split-result-main"},Us=["title"],As={class:"files"},Bs={key:0,class:"files"},xs={key:1,class:"files"},qs={class:"task-right split-result-actions"},Vs=["onClick"],Ks=["onClick"],js=he({__name:"BrandProductRiskTab",setup(Js){const $=v(""),X=v([]),dt=v([]),h=v([]),q=v(!1),V=v(!1),K=v(!1),Y=v(!1),Z=v(!1),g=v(""),j=v(""),ft=[{code:"DE",label:"德国"},{code:"UK",label:"英国"},{code:"FR",label:"法国"},{code:"IT",label:"意大利"},{code:"ES",label:"西班牙"}],p=v(["DE","UK","FR","IT","ES"]),tt=v("SearchSuppressed"),F=v(null),et=v(!1),st=v(!1);let N=null;function vt(t){return ft.find(s=>s.code===t)?.label??t}const At=z(()=>{const t=p.value,e=new Set(t),s=t.map(o=>({code:o,label:vt(o)})),l=ft.filter(o=>!e.has(o.code)).map(o=>({code:o.code,label:o.label}));return[...s,...l]});function Bt(t){return p.value.includes(t)}function ht(t){return p.value.length===1&&p.value[0]===t}function xt(t,e){const s=e.target;if(s){if(!s.checked&&ht(t)){s.checked=!0,u.warning("至少保留 1 个国家");return}qt(t,s.checked)}}function qt(t,e){if(st.value=!0,e)p.value.includes(t)||(p.value=[...p.value,t]);else{if(p.value.length<=1){u.warning("至少保留 1 个国家");return}p.value=p.value.filter(s=>s!==t)}pt()}function Vt(t){F.value=t}function Kt(){F.value=null}function jt(t){const e=F.value;if(F.value=null,e==null||e===t)return;st.value=!0;const s=[...p.value],[l]=s.splice(e,1);s.splice(t,0,l),p.value=s,pt()}function pt(){N&&clearTimeout(N),N=setTimeout(()=>{N=null,Ht()},450)}async function Ht(){if(!(p.value.length<1)){et.value=!0;try{await Ce(p.value)}catch(t){u.error(t instanceof Error?t.message:"保存国家顺序失败")}finally{et.value=!1}}}async function Jt(){try{const t=await Te();if(st.value)return;t?.country_codes?.length&&(p.value=[...t.country_codes])}catch{}}const M=v({candidateCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),T=v([]),y=v([]),P=v({}),m=v({}),b=v(null),at=v(!1);function H(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function yt(){return`product-risk:tasks:${H()}`}function gt(){return`product-risk:task-status:${H()}`}function kt(){return`product-risk:tasks-batch-snapshot:${H()}`}function mt(){return`product-risk:matched-items:${H()}`}function J(t,e,s){if(!(typeof window>"u"))try{s?window.localStorage.removeItem(t):window.localStorage.setItem(t,JSON.stringify(e))}catch{}}function Qt(){try{const t=typeof window<"u"?window.localStorage.getItem(gt()):null;if(!t)return;const e=JSON.parse(t),s={};for(const[l,o]of Object.entries(e)){const r=Number(l);r>0&&typeof o=="string"&&(s[r]=o)}P.value=s}catch{}}function nt(){J(gt(),P.value,Object.keys(P.value).length===0)}function Gt(){try{const t=typeof window<"u"?window.localStorage.getItem(kt()):null;if(!t)return;const e=JSON.parse(t),s={};for(const[l,o]of Object.entries(e)){const r=Number(l);r>0&&o&&typeof o=="object"&&(s[r]=o)}m.value=s}catch{}}function Q(){J(kt(),m.value,Object.keys(m.value).length===0)}function Wt(){try{const t=typeof window<"u"?window.localStorage.getItem(mt()):null;if(!t)return;const e=JSON.parse(t);Array.isArray(e)&&(h.value=e)}catch{}}function O(){J(mt(),h.value,h.value.length===0)}function L(t){const e=(t.shopName||"").trim(),s=t.shopId??"";return`${e}${s}`}function wt(t){const e=t instanceof Error?t.message:String(t||"");return/记录不存在|任务不存在|不存在|已删除|not\s*found|404/i.test(e)}function U(t){if(!t.length)return;const e=new Set(t.map(s=>L(s)));h.value=h.value.filter(s=>!e.has(L(s))),O()}function zt(t){T.value=T.value.filter(e=>!(t.resultId!=null&&e.resultId===t.resultId||t.taskId!=null&&e.taskId===t.taskId))}async function Xt(t){const e=L(t),s=[...h.value];h.value=h.value.filter(o=>L(o)!==e),O();const l=(t.shopName||"").trim();if(!l){u.success("已从匹配结果中移除");return}try{(await Pe(l))?.removed&&(await E(),await S(),A()),u.success("已从匹配结果中移除")}catch(o){if(wt(o)){await E(),await S(),A(),u.success("后端记录已不存在,已同步移除本地记录");return}h.value=s,O(),u.error(o instanceof Error?o.message:"同步后端失败")}}function A(){for(const t of[...y.value])T.value.some(s=>s.taskId===t)||R(t)}async function _t(t){try{if(t.resultId!=null&&t.resultId>0)await Ee(t.resultId);else if(t.taskId!=null&&t.taskId>0)await Ne(t.taskId);else{u.warning("无法删除:缺少记录标识");return}t.taskId!=null&&t.taskId>0&&R(t.taskId),U([t]),await E(),await S(),A(),u.success("已删除")}catch(e){if(wt(e)){t.taskId!=null&&t.taskId>0&&R(t.taskId),U([t]),zt(t),await S(),A(),u.success("后端记录已不存在,已同步移除本地记录");return}u.error(e instanceof Error?e.message:"删除失败")}}function Yt(){try{const t=typeof window<"u"?window.localStorage.getItem(yt()):null;if(!t){y.value=[];return}const e=JSON.parse(t);y.value=Array.isArray(e)?e.filter(s=>typeof s=="number"):[]}catch{y.value=[]}}function bt(){J(yt(),y.value,y.value.length===0)}function Zt(t){y.value.includes(t)||(y.value=[...y.value,t],bt())}function R(t){if(y.value=y.value.filter(e=>e!==t),bt(),delete P.value[t],nt(),m.value[t]){const e={...m.value};delete e[t],m.value=e,Q()}}function te(t){dt.value=t||[]}async function S(){try{M.value=await Re()}catch{}}async function ot(){try{X.value=await De(),await S()}catch(t){u.error(t instanceof Error?t.message:"加载备选失败")}}async function E(){try{T.value=(await $e()).items||[]}catch{T.value=[]}}function St(t){return t&&P.value[t]||""}function It(t){const e=St(t);return e==="SUCCESS"||e==="FAILED"}const lt=z(()=>{const t=T.value.filter(s=>s.taskId&&y.value.includes(s.taskId)&&!It(s.taskId)),e=new Set(t.map(s=>s.taskId).filter(s=>typeof s=="number"));for(const s of y.value){if(e.has(s))continue;const r=(m.value[s]?.items||[])[0];r&&t.push(r)}return t}),rt=z(()=>T.value.filter(t=>!t.taskId||!y.value.includes(t.taskId)||It(t.taskId))),ee=z(()=>lt.value.length>0||rt.value.length>0),se=["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"];function ut(t){return new Promise(e=>{window.setTimeout(()=>e(),t)})}function Ct(t){const e=(t instanceof Error?t.message:String(t||"")).toLowerCase();return se.some(s=>e.includes(s.toLowerCase()))}async function ae(t,e=10){let s=0;for(;;)try{return await Ue(t)}catch(l){if(s+=1,!Ct(l)||s>=e)throw l;g.value=`后端服务暂时不可用,正在重试创建任务(${s}/${e})...`,await ut(B())}}async function Tt(){const t=y.value.filter(e=>e>0);if(t.length)try{const e=await Lt(t);let s=!1;const l={...m.value};for(const o of e.items||[]){const r=o.task?.id,i=o.task?.status;if(typeof r=="number"&&r>0){const a=l[r];l[r]=a?{...a,task:{...a.task||{},...o.task||{}}}:o,i&&(P.value[r]=i,(i==="SUCCESS"||i==="FAILED")&&(R(r),s=!0))}}m.value=l,Q(),nt(),s&&(await E(),await S())}catch{}}function B(){return Ae()}function Pt(t=!1){if(b.value){if(!t)return;window.clearTimeout(b.value),b.value=null}const e=async()=>{if(b.value=null,at.value){Pt();return}if(y.value.length){at.value=!0;try{await Tt()}finally{at.value=!1}y.value.length>0&&(b.value=window.setTimeout(e,B()))}};t?e():b.value=window.setTimeout(e,B())}function it(t=!1){b.value&&!t||Pt(t)}function ne(){b.value&&(window.clearTimeout(b.value),b.value=null)}async function oe(t){let e=0;const s=30;for(;;){try{const l=await Lt([t]);e>0&&(g.value=`任务 ${t} 后端已恢复,继续等待执行结果...`),e=0;const o=(l.items||[]).find(i=>i.task?.id===t),r=o?.task?.status||"";if(o){const i=m.value[t];m.value={...m.value,[t]:i?{...i,task:{...i.task||{},...o.task||{}}}:o},Q()}if(r&&(P.value[t]=r,nt()),r==="SUCCESS"||r==="FAILED")return R(t),await E(),await S(),r}catch(l){if(!Ct(l))throw l;if(e+=1,e>=s)throw new Error(`任务 ${t} 等待后端恢复超时,请稍后手动刷新查看状态`);g.value=`任务 ${t} 运行中,正在等待后端服务恢复(${e}/${s})...`,(e===1||e%5===0)&&u.warning(`任务 ${t} 运行中,后端服务暂时不可用,正在自动重试`),await ut(B());continue}await ut(B())}}async function Et(){const t=$.value.trim();if(!t){u.warning("请输入店铺名称");return}q.value=!0;try{await Fe(t),$.value="",await ot(),u.success("已加入备选")}catch(e){u.error(e instanceof Error?e.message:"保存失败")}finally{q.value=!1}}async function le(t){try{await Me(t.id),await ot(),h.value=[],O(),u.success("已删除")}catch(e){u.error(e instanceof Error?e.message:"删除失败")}}function re(){const t=new Set,e=$.value.trim();e&&t.add(e);for(const s of dt.value)s?.shop_name?.trim()&&t.add(s.shop_name.trim());return[...t]}function ue(t,e){const s=new Map;for(const r of e){const i=(r.shopName||"").trim();i&&s.set(i,r)}const l=new Set,o=[];for(const r of t){const i=(r.shopName||"").trim();i&&s.has(i)?(o.push(s.get(i)),l.add(i)):o.push(r)}for(const r of e){const i=(r.shopName||"").trim();if(!i){o.push(r);continue}l.has(i)||(o.push(r),l.add(i))}return o}async function ie(){const t=re();if(!t.length){u.warning("请勾选备选店铺,或在输入框中填写店名(可与勾选合并)");return}V.value=!0;try{const s=(await Oe(t)).items||[];h.value=ue(h.value,s),O(),Z.value&&Ft(),s.length?u.success(`本次匹配 ${s.length} 个店铺名,表格共 ${h.value.length} 条`):u.warning("未返回匹配结果")}catch(e){u.error(e instanceof Error?e.message:"匹配失败")}finally{V.value=!1}}function ct(t){const e=t.taskId;return e?St(e)||t.taskStatus||"":t.taskStatus||""}function Nt(t){const e=ct(t);return e==="SUCCESS"?"已完成":e==="FAILED"?"失败":e==="RUNNING"?"执行中":t.success?"已完成":"等待中"}function Rt(t){const e=ct(t);return e==="SUCCESS"||t.success?"success":e==="FAILED"?"failed":"running"}function Dt(t){return!t.resultId||!t.downloadUrl?!1:ct(t)==="SUCCESS"||t.success===!0}async function $t(t){if(!t.resultId)return;const e=Ut(),s=Le(t.resultId),l=t.outputFilename||`${t.shopName||"result"}.zip`;if(!e?.save_file_from_url_new){u.error("当前客户端未提供 save_file_from_url_new,无法下载文件");return}const o=await e.save_file_from_url_new(s,l);o.success?u.success(`已保存:${o.path||l}`):o.error&&o.error!=="用户取消"&&u.error(o.error)}function ce(t){const e=(t||"").trim();return{MATCHED:"已匹配",PENDING:"待匹配",CONFLICT:"需人工确认",INDEX_STALE:"索引过期"}[e]||e||"—"}function de(t){const e=(t.matchMessage||"").trim();return e||(t.matched&&t.matchStatus==="MATCHED"?"紫鸟索引已命中,可推送队列;打开店铺地址由 Python 侧处理":t.matched?"已关联索引,请结合状态列查看是否可推送":"未命中或未就绪,请检查店铺名与索引刷新")}async function fe(){Z.value=!0,await Ft()}function ve(){return h.value.find(t=>t.matched)}async function Ft(){if(Y.value)return;if(!h.value.length){u.warning("请先匹配店铺");return}const t=Ut();if(!t?.enqueue_json){u.error("当前环境未启用 pywebview enqueue_json");return}if(!h.value.filter(o=>o.matched).length){u.warning("没有已匹配的店铺可推送");return}Y.value=!0,K.value=!0,j.value="";let s=0,l=0;try{let o=0;for(;Z.value;){const r=ve();if(!r)break;o+=1;try{const i=await ae([r]),a=i.taskId;m.value={...m.value,[a]:{task:{id:a,status:"RUNNING"},items:i.items}},Q(),Zt(a),it(!0);const w={type:"product-risk-resolve-run",ts:Date.now(),data:{taskId:a,items:[r],country_codes:[...p.value],risk_listing_filter:tt.value}};j.value=JSON.stringify(w,null,2);const G=await t.enqueue_json(w);if(!G?.success){R(a),l+=1,g.value="第 "+o+" 条推送失败:"+(G?.error||"未知错误")+",已自动继续下一条",u.error(g.value),U([r]);continue}if(U([r]),g.value="任务 "+a+" 已入队,等待执行完成...",await oe(a)!=="SUCCESS"){l+=1,g.value="任务 "+a+" 执行失败,已自动继续下一条",u.error(g.value);continue}s+=1,g.value="任务 "+a+" 已完成"}catch(i){l+=1,g.value="第 "+o+" 条任务处理失败,已自动继续下一条:"+(i instanceof Error?i.message:"未知错误"),u.error(g.value),U([r]);continue}}(s>0||l>0)&&u.success("店铺推送已完成:成功 "+s+" 条,失败 "+l+" 条"),await E(),it(!0)}catch(o){g.value=o instanceof Error?o.message:"推送异常",u.error(g.value)}finally{Y.value=!1,K.value=!1}}return pe(()=>{Yt(),Qt(),Gt(),Wt(),ot().catch(()=>{}),Jt().catch(()=>{}),E().then(()=>(A(),Tt())).catch(()=>{}),S().catch(()=>{}),y.value.length&&it(!0)}),ye(()=>{ne(),N&&clearTimeout(N)}),(t,e)=>{const s=me,l=we,o=_e,r=Se,i=Ie;return c(),d("div",Ke,[k(ge,{active:"product-risk"}),n("div",je,[n("aside",He,[e[7]||(e[7]=n("div",{class:"section-title"},"店铺名称",-1)),n("div",Je,[e[3]||(e[3]=n("div",{class:"hint"},"输入店铺名后点「确认」加入下方备选区(按当前登录用户保存)。仅索引可命中的店铺可入库。勾选备选后点「匹配店铺」,再「推送到 Python 队列」。",-1)),n("div",Qe,[k(s,{modelValue:$.value,"onUpdate:modelValue":e[0]||(e[0]=a=>$.value=a),clearable:"",placeholder:"请输入店铺名称",onKeyup:ke(Et,["enter"])},null,8,["modelValue"]),n("button",{type:"button",class:"opt-btn",disabled:q.value,onClick:Et},f(q.value?"保存中…":"确认"),9,Ge)])]),e[8]||(e[8]=n("div",{class:"section-title"},"备选区域",-1)),X.value.length?(c(),d("div",ze,[k(o,{data:X.value,"row-key":"id",height:"240",class:"candidate-table",onSelectionChange:te},{default:I(()=>[k(l,{type:"selection",width:"42"}),k(l,{prop:"shop_name",label:"店铺名","min-width":"120","show-overflow-tooltip":""}),k(l,{label:"操作",width:"72",align:"center"},{default:I(({row:a})=>[n("button",{type:"button",class:"link-danger",onClick:w=>le(a)},"删除",8,Xe)]),_:1})]),_:1},8,["data"])])):(c(),d("div",We,"暂无备选店铺,请先输入并确认")),e[9]||(e[9]=n("div",{class:"section-title"},"处理国家与顺序",-1)),e[10]||(e[10]=n("p",{class:"hint country-pref-hint"},[C(" 勾选需要处理的站点(可只选 2~3 国);上方勾选区"),n("strong",null,"先按已选顺序"),C("排列,其余未选国家排在后面。拖拽下方列表调整顺序后会与上方同步。设置会按当前登录用户保存。 ")],-1)),n("div",Ye,[(c(!0),d(D,null,x(At.value,a=>(c(),d("label",{key:a.code,class:"country-check-row"},[n("input",{type:"checkbox",class:"country-check-input",checked:Bt(a.code),disabled:ht(a.code),onChange:w=>xt(a.code,w)},null,40,Ze),n("span",ts,f(a.label)+"("+f(a.code)+")",1)]))),128))]),p.value.length?(c(),d("div",es,[e[5]||(e[5]=n("div",{class:"country-order-caption"},"已选顺序(拖拽 ⋮⋮ 调整)",-1)),n("div",ss,[(c(!0),d(D,null,x(p.value,(a,w)=>(c(),d("div",{key:a,class:W(["country-drag-row",{dragging:F.value===w}]),draggable:"true",onDragstart:G=>Vt(w),onDragend:Kt,onDragover:e[1]||(e[1]=Mt(()=>{},["prevent"])),onDrop:Mt(G=>jt(w),["prevent"])},[e[4]||(e[4]=n("span",{class:"drag-handle",title:"拖动排序"},"⋮⋮",-1)),n("span",ns,f(vt(a))+"("+f(a)+")",1)],42,as))),128))])])):_("",!0),et.value?(c(),d("div",os,"保存中…")):_("",!0),e[11]||(e[11]=n("div",{class:"section-title"},"商品列表筛选",-1)),e[12]||(e[12]=n("p",{class:"hint listing-filter-hint"},"与「推送到 Python 队列」一并下发,供 Python 区分处理场景。",-1)),n("div",ls,[k(i,{modelValue:tt.value,"onUpdate:modelValue":e[2]||(e[2]=a=>tt.value=a),class:"listing-filter-select",teleported:"",placeholder:"选择筛选类型"},{default:I(()=>[(c(!0),d(D,null,x(be(Ve),a=>(c(),Ot(r,{key:a.value,label:a.label,value:a.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),n("div",rs,[n("button",{type:"button",class:"btn-run",disabled:V.value,onClick:ie},f(V.value?"匹配中…":"匹配店铺"),9,us),n("button",{type:"button",class:"btn-run btn-queue",disabled:K.value||!h.value.length,onClick:fe},f(K.value?"推送中…":"推送到 Python 队列"),9,is)]),e[13]||(e[13]=n("p",{class:"loading-msg"},[C("与删除 ASIN 品牌相同:先创建任务,再按店铺"),n("strong",null,"逐条"),C("入队(每条 "),n("code",null,"data.items"),C(" 仅含一个店铺)。队列串行执行;Python 每处理完一店可 POST "),n("code",null,"/api/product-risk-resolve/tasks/{taskId}/result"),C("(可多次,每次可只含已完成的店铺);全部完成后任务结束。前端轮询任务状态。 ")],-1)),g.value?(c(),d("div",cs,[e[6]||(e[6]=n("div",{class:"section-title queue-debug-title"},"推送结果",-1)),n("div",ds,f(g.value),1),j.value?(c(),d("pre",fs,f(j.value),1)):_("",!0)])):_("",!0)]),n("section",vs,[e[22]||(e[22]=n("div",{class:"panel-header"},"匹配与任务",-1)),n("div",hs,[n("div",ps,[n("div",ys,[e[14]||(e[14]=n("span",{class:"summary-label"},"备选店铺数",-1)),n("strong",null,f(M.value.candidateCount),1)]),n("div",gs,[e[15]||(e[15]=n("span",{class:"summary-label"},"已结束任务",-1)),n("strong",null,f(M.value.processedTaskCount),1)]),n("div",ks,[e[16]||(e[16]=n("span",{class:"summary-label"},"成功任务",-1)),n("strong",null,f(M.value.successTaskCount),1)]),n("div",ms,[e[17]||(e[17]=n("span",{class:"summary-label"},"失败任务",-1)),n("strong",null,f(M.value.failedTaskCount),1)])]),e[21]||(e[21]=n("div",{class:"subsection-title"},"匹配结果",-1)),h.value.length?(c(),Ot(o,{key:1,data:h.value,"row-key":L,"highlight-current-row":!1,class:"result-table match-table"},{default:I(()=>[k(l,{prop:"shopName",label:"店铺名","min-width":"100"}),k(l,{label:"匹配",width:"72",align:"center"},{default:I(({row:a})=>[n("span",{class:W(a.matched?"ok":"fail")},f(a.matched?"是":"否"),3)]),_:1}),k(l,{prop:"shopId",label:"店铺ID","min-width":"120","show-overflow-tooltip":""}),k(l,{prop:"platform",label:"平台",width:"88","show-overflow-tooltip":""}),k(l,{prop:"companyName",label:"公司","min-width":"100","show-overflow-tooltip":""}),k(l,{label:"状态",width:"100","show-overflow-tooltip":""},{default:I(({row:a})=>[C(f(ce(a.matchStatus)),1)]),_:1}),k(l,{label:"说明","min-width":"140","show-overflow-tooltip":""},{default:I(({row:a})=>[C(f(de(a)),1)]),_:1}),k(l,{label:"操作",width:"72",align:"center"},{default:I(({row:a})=>[n("button",{type:"button",class:"link-danger",onClick:w=>Xt(a)},"删除",8,_s)]),_:1})]),_:1},8,["data"])):(c(),d("div",ws,"完成「匹配店铺」后,在此展示紫鸟索引匹配结果,供核对后再推送队列。")),n("div",bs,[e[20]||(e[20]=n("div",{class:"result-list-header"},[n("span",null,"处理记录")],-1)),ee.value?(c(),d(D,{key:1},[lt.value.length?(c(),d("div",Is,[e[18]||(e[18]=n("div",{class:"result-subsection-title"},"当前任务",-1)),n("ul",Cs,[(c(!0),d(D,null,x(lt.value,a=>(c(),d("li",{key:`cur-${a.resultId}-${a.taskId}`,class:"task-item split-result-item"},[n("div",Ts,[n("span",{class:"id",title:a.shopName||""},f(a.shopName||"-"),9,Ps),n("div",Es,"任务 ID:"+f(a.taskId??"-"),1),a.platform?(c(),d("div",Ns,"平台:"+f(a.platform),1)):_("",!0),a.error?(c(),d("div",Rs,"错误:"+f(a.error),1)):_("",!0)]),n("div",Ds,[n("span",{class:W(["status",Rt(a)])},f(Nt(a)),3),Dt(a)?(c(),d("button",{key:0,type:"button",class:"download",onClick:w=>$t(a)}," 下载 ",8,$s)):_("",!0),n("button",{type:"button",class:"btn-delete",onClick:w=>_t(a)},"删除",8,Fs)])]))),128))])])):_("",!0),rt.value.length?(c(),d("div",Ms,[e[19]||(e[19]=n("div",{class:"result-subsection-title"},"历史记录",-1)),n("ul",Os,[(c(!0),d(D,null,x(rt.value,a=>(c(),d("li",{key:`his-${a.resultId}-${a.taskId}`,class:"task-item split-result-item"},[n("div",Ls,[n("span",{class:"id",title:a.shopName||""},f(a.shopName||"-"),9,Us),n("div",As,"任务 ID:"+f(a.taskId??"-"),1),a.outputFilename?(c(),d("div",Bs,"文件:"+f(a.outputFilename),1)):_("",!0),a.error?(c(),d("div",xs,"错误:"+f(a.error),1)):_("",!0)]),n("div",qs,[n("span",{class:W(["status",Rt(a)])},f(Nt(a)),3),Dt(a)?(c(),d("button",{key:0,type:"button",class:"download",onClick:w=>$t(a)}," 下载 ",8,Vs)):_("",!0),n("button",{type:"button",class:"btn-delete",onClick:w=>_t(a)},"删除",8,Ks)])]))),128))])])):_("",!0)],64)):(c(),d("div",Ss,"暂无处理记录。推送队列并等待 Python 回传后,将在此显示下载链接。"))])])])])])}}}),Hs=Be(js,[["__scopeId","data-v-b7d469f5"]]);xe(Hs).use(qe).mount("#app");