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