Files
crawler-plugin/app/assets/patrol-delete.js
2026-05-15 16:06:12 +08:00

2 lines
21 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 ue,o as ce,L as de,a as i,c as u,b as m,B as fe,e as a,af as Mt,ag as pe,t as r,ah as S,ai as he,aj as me,F as W,r as ut,w as ve,v as ye,f as v,am as _e,n as ct,x as At,g as p,h as M,bc as we,bd as ge,be as ke,bf as be,E as c,bg as Se,bh as Ie,bi as Te,bj as Ce,bk as Ee,i as Lt,bl as De,bm as Pe,bn as Ne,bo as $e,bp as Re,U as X,bq as Me,_ as Ae,aS as Le,q as qe,s as Be}from"./pywebview-84Lhn3TI.js";import{z as xe}from"./zh-cn-BJtuqXkB.js";/* empty css */import{c as Ue}from"./categorized-timers-JPA-olTr.js";const Fe={class:"page-shell module-page"},He={class:"main-content"},Oe={class:"left-panel"},Ve={class:"input-zone"},Qe={class:"input-row"},Ke=["disabled"],je={key:0,class:"empty-candidates"},ze={key:1,class:"candidate-table-scroll"},Ge=["onClick"],Je={class:"condition-panel"},We={class:"condition-input-row"},Xe=["disabled"],Ye={key:0,class:"empty-conditions"},Ze={key:1,class:"condition-list"},ts={class:"condition-check"},es=["value"],ss=["title"],as=["onClick"],ns={class:"run-row"},os=["disabled"],ls=["disabled"],rs={key:2,class:"queue-debug-card"},is={class:"queue-debug-line"},us={key:0,class:"queue-debug-payload"},cs={class:"right-panel"},ds={class:"task-list-wrap"},fs={class:"clean-result-summary"},ps={class:"summary-card"},hs={class:"summary-card"},ms={class:"summary-card"},vs={class:"summary-card"},ys={key:0,class:"empty-tasks narrow"},_s=["onClick"],ws={class:"result-list-wrap"},gs={key:0,class:"empty-tasks"},ks={key:0,class:"result-subsection"},bs={class:"task-list"},Ss={class:"left split-result-main"},Is=["title"],Ts={class:"files"},Cs={key:0,class:"files"},Es={key:1,class:"files"},Ds={key:2,class:"files"},Ps={class:"files"},Ns={class:"files"},$s={key:3,class:"files"},Rs={class:"task-right"},Ms=["onClick"],As={key:1,class:"result-subsection"},Ls={class:"task-list"},qs={class:"left split-result-main"},Bs=["title"],xs={class:"files"},Us={key:0,class:"files"},Fs={key:1,class:"files"},Hs={key:2,class:"files"},Os={class:"files"},Vs={key:3,class:"files"},Qs={class:"files"},Ks={key:4,class:"files"},js={class:"task-right"},zs=["onClick"],Gs=["onClick"],qt=30,Js=ue({__name:"BrandPatrolDeleteTab",setup(Xs){const dt=["德国","英国","法国","意大利","西班牙"],A=p(""),L=p(""),Y=p([]),q=p([]),D=p([]),_=p([]),w=p([]),k=p([]),P=p({candidateCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),B=p(!1),x=p(!1),U=p(!1),F=p(!1),y=p(""),Z=p(""),h=p(null),H=p(!1);let I=null;const T=Ue("patrol-delete"),tt=M(()=>w.value.filter(t=>t.matched)),ft=M(()=>Qt(k.value)),O=M(()=>ft.value.filter(t=>!gt(t.taskStatus))),et=M(()=>ft.value.filter(t=>gt(t.taskStatus))),V=M(()=>H.value||!!h.value);function st(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function pt(){return`patrol-delete:matched:${st()}`}function ht(){return`patrol-delete:queue-state:${st()}`}function N(t){return`${(t.shopName||"").trim()}::${t.shopId||""}`}function Q(t){return`${t.taskId??0}:${t.resultId??0}`}function mt(t){return`task:${t.taskId??t.resultId??0}`}let g=!1;function vt(t){return g?Promise.resolve():T.sleep("queue-wait",t)}function Bt(){T.clearCategory("queue-wait")}function yt(t){const e=t instanceof Error?t.message.toLowerCase():String(t||"").toLowerCase();return e.includes("network error")||e.includes("failed to fetch")||e.includes("timeout")||e.includes("503")||e.includes("502")||e.includes("504")||e.includes("500")||e.includes("load failed")}async function xt(t,e,n=20){let o=0;for(;;){if(g)throw new Error("component disposed");try{return await t()}catch(l){if(!yt(l)||o>=n-1)throw l;o+=1,e?.(o,n),await vt(X())}}}function Ut(t,e){return`patrol-delete:${t}:${e||"shop"}:${Date.now()}`}function at(t){if(!t)return"-";const e=new Date(t);if(Number.isNaN(e.getTime()))return t;const n=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),l=String(e.getDate()).padStart(2,"0"),s=String(e.getHours()).padStart(2,"0"),f=String(e.getMinutes()).padStart(2,"0"),d=String(e.getSeconds()).padStart(2,"0");return`${n}-${o}-${l} ${s}:${f}:${d}`}function Ft(t){const e=(t||"").trim();return{MATCHED:"已匹配",PENDING:"待匹配",CONFLICT:"需人工确认",INDEX_STALE:"索引过期"}[e]||e||"-"}function Ht(t){const e=(t.matchMessage||"").trim();return e||(t.matched&&t.matchStatus==="MATCHED"?"索引已命中,可推送到 Python 队列":t.matched?"已命中索引,请结合状态列确认":"未命中或未就绪,请检查店铺名")}function Ot(){return dt.map(t=>({country:t,rows:[{status:"全部",quantity:"",deleteQuantity:"",processStatus:""}]}))}function Vt(){return dt.map(t=>({country:t,ratio:""}))}function _t(t){const e=t.countrySections||[],n=t.cartRatios||[],o=Math.max(...e.map(l=>l.rows.length),1);return Array.from({length:o},(l,s)=>({shopName:s===0?t.shopName:"",countries:e.map(f=>{const d=f.rows[s];return{country:f.country,status:d?.status||"",quantity:d?.quantity||"",deleteQuantity:d?.deleteQuantity||"",processStatus:d?.processStatus||""}}),cartRatios:s===0?n.map(f=>({country:f.country,ratio:f.ratio})):[]}))}function wt(t){return`${new Set([...(t.countrySections||[]).map(n=>n.country).filter(Boolean),...(t.cartRatios||[]).map(n=>n.country).filter(Boolean)]).size||0} 个国家,含状态数据和购物车比例`}function b(t){return Array.from(new Set(t.map(e=>e==null?"":String(e).trim()).filter(Boolean))).join("、")}function Qt(t){const e=new Map;for(const n of t||[]){const o=String(n.taskId??`result:${n.resultId??Math.random()}`),l=e.get(o)||[];l.push(n),e.set(o,l)}return Array.from(e.values()).map(n=>{const o=n.find(s=>St(s))||n.find(s=>s.taskStatus)||n[0],l=b(n.map(s=>s.error));return{...o,shopName:b(n.map(s=>s.shopName))||o.shopName,shopId:b(n.map(s=>s.shopId))||o.shopId,error:l||o.error,__groupItems:n}})}function C(t){return t.__groupItems||[t]}function K(t){return b(C(t).map(e=>e.shopName))||"-"}function j(t){return b(C(t).map(e=>e.resultId))}function z(t){return b(C(t).map(e=>e.shopId))}function G(t){return b(C(t).map(e=>e.error))}function gt(t){return t==="SUCCESS"||t==="FAILED"||t==="COMPLETED"}function kt(t){return t==="SUCCESS"||t==="COMPLETED"?"已完成":t==="FAILED"?"失败":"执行中"}function bt(t){return t==="SUCCESS"||t==="COMPLETED"?"success":t==="FAILED"?"failed":"running"}function St(t){return C(t).some(e=>!!(e.resultId&&(e.fileReady||e.downloadUrl)))}function It(){typeof window>"u"||window.localStorage.setItem(pt(),JSON.stringify(w.value))}function Kt(){try{const t=typeof window<"u"?window.localStorage.getItem(pt()):null;w.value=t?JSON.parse(t):[]}catch{w.value=[]}}function nt(){if(typeof window>"u")return;const t={activeTaskId:h.value};window.localStorage.setItem(ht(),JSON.stringify(t))}function jt(){try{const t=typeof window<"u"?window.localStorage.getItem(ht()):null;if(!t)return;const e=JSON.parse(t);h.value=e.activeTaskId??null}catch{h.value=null}}function E(){h.value=null,nt()}function zt(t){const e=t instanceof Error?t.message:String(t||"");return/记录不存在|任务不存在|不存在|已删除|not\s*found|404/i.test(e)}function ot(t){const e=N(t);w.value=w.value.filter(n=>N(n)!==e),It()}function Tt(t){k.value=k.value.filter(e=>!(t.resultId!=null&&e.resultId===t.resultId||t.taskId!=null&&e.taskId===t.taskId))}async function $(){Y.value=await we()}async function lt(){D.value=await ge();const t=new Set(D.value.map(e=>e.id));_.value=_.value.filter(e=>t.has(e))}async function R(){P.value=await ke()}async function rt(){const t=await be();k.value=t.items||[]}async function J(){await Promise.all([R(),rt()])}function Ct(t){if(!t.length)return;const e=new Map(t.map(o=>[Q(o),o])),n=k.value.map(o=>{const l=e.get(Q(o));return l?{...o,...l,countrySections:l.countrySections||o.countrySections||[],cartRatios:l.cartRatios||o.cartRatios||[]}:o});for(const o of t){const l=Q(o);n.some(s=>Q(s)===l)||n.push(o)}k.value=n}function Gt(t){Ct(t)}async function Et(t){const e=Array.from(new Set((t&&t.length?t:O.value.map(o=>o.taskId??0)).filter(o=>Number.isFinite(o)&&o>0)));if(!e.length)return[];const n=await Me(e);return Ct(n.items||[]),(n.missingTaskIds||[]).length&&await rt(),n.missingTaskIds||[]}function Jt(){if(it(),g||!V.value)return;const t=async()=>{I=null,!(g||!V.value)&&(await Et(),!g&&V.value&&(I=T.setTimeout("history-poll",t,X()*2)))};I=T.setTimeout("history-poll",t,X()*2)}function it(){I&&(T.clearTimer("history-poll",I),I=null)}function Wt(t){q.value=t}async function Dt(){const t=A.value.trim();if(!t){c.warning("请输入店铺名");return}B.value=!0;try{await Se(t),A.value="",await Promise.all([$(),R()]),c.success("已加入备选区")}catch(e){c.error(e instanceof Error?e.message:"添加失败")}finally{B.value=!1}}async function Pt(){const t=L.value.trim();if(!t){c.warning("请输入删除条件");return}x.value=!0;try{const e=await Ie(t);L.value="",await lt(),e?.id&&!_.value.includes(e.id)&&(_.value=[..._.value,e.id]),c.success("删除条件已保存")}catch(e){c.error(e instanceof Error?e.message:"保存失败")}finally{x.value=!1}}async function Xt(t){try{await Te(t),_.value=_.value.filter(e=>e!==t),await lt(),c.success("删除条件已删除")}catch(e){c.error(e instanceof Error?e.message:"删除失败")}}async function Yt(t){try{await Ce(t),q.value=q.value.filter(e=>e.id!==t),await Promise.all([$(),R()]),c.success("已删除")}catch(e){c.error(e instanceof Error?e.message:"删除失败")}}function Zt(t,e){const n=new Map;for(const o of t)n.set(N(o),o);for(const o of e)n.set(N(o),o);return Array.from(n.values())}async function te(){const t=q.value.map(e=>e.shop_name).filter(Boolean);if(!t.length){c.warning("请先勾选备选区店铺");return}U.value=!0;try{const e=await Ee(t);w.value=Zt(w.value,e.items||[]),It(),c.success(`本次返回 ${e.items?.length||0} 条匹配结果`)}catch(e){c.error(e instanceof Error?e.message:"匹配失败")}finally{U.value=!1}}function ee(t){ot(t),c.success("已从匹配结果移除")}function se(t){return{shopName:t.shopName,matched:t.matched,shopId:t.shopId,platform:t.platform,companyName:t.companyName,matchStatus:t.matchStatus,matchMessage:t.matchMessage,countrySections:Ot(),cartRatios:Vt()}}function ae(){const t=new Set(_.value);return D.value.filter(e=>t.has(e.id)).map(e=>({id:e.id,conditionText:e.conditionText}))}function ne(t,e){const n=e[0],o=ae();return{type:"patrol-delete-run",ts:Date.now(),data:{taskId:t,user_id:Number(st())||0,source:"frontend-vue-patrol-delete",delete_conditions:o,deleteConditions:o,items:e.map(l=>({shopName:l.shopName,shopId:l.shopId,platform:l.platform,companyName:l.companyName,matched:l.matched,matchStatus:l.matchStatus,matchMessage:l.matchMessage,countrySections:l.countrySections||[],cartRatios:l.cartRatios||[]})),template_rows:n?_t(n):[],shop_template_rows:e.map(l=>({shopName:l.shopName,shopId:l.shopId,templateRows:_t(l)})),country_sections:n?.countrySections||[],cart_ratios:n?.cartRatios||[]}}}function oe(t){return k.value.find(e=>e.taskId===t)}async function Nt(t){let e=0;for(;;){if(g)return"STOPPED";if(h.value!==t)return"DELETED";try{if((await Et([t])).includes(t))return E(),"DELETED";if(h.value!==t)return"DELETED";e>0&&(y.value=`任务 ${t} 后端已恢复,继续等待执行结果...`),e=0;const l=oe(t)?.taskStatus||"";if(l==="SUCCESS"||l==="FAILED"||l==="COMPLETED")return l}catch(n){if(!yt(n))throw n;if(e+=1,e>=qt)throw new Error(`任务 ${t} 等待后端恢复超时,请稍后刷新查看状态`);y.value=`任务 ${t} 执行中,正在等待后端服务恢复(${e}/${qt}...`}await vt(X())}}async function $t(){if(!(g||H.value)){H.value=!0,F.value=!0,Jt();try{const t=Lt();if(!t?.enqueue_json)throw new Error("当前客户端未提供 enqueue_json");if(h.value){const d=await Nt(h.value);y.value=d==="DELETED"?"任务已删除":`任务 ${h.value} ${d==="SUCCESS"?"已完成":"执行失败"}`,E();return}const e=tt.value;if(!e.length){c.warning("请先匹配可用店铺");return}const n=await xt(()=>De(e.map(se)),(d,ie)=>{y.value=`后端服务暂时不可用,正在重试创建任务(${d}/${ie}...`}),o=n.items||[];if(!n.taskId||!o.length||o.some(d=>!d.taskId||!d.resultId))throw new Error("后端未返回有效任务标识");h.value=n.taskId,nt(),Gt(o),R();const l=ne(n.taskId,o);Z.value=JSON.stringify(l,null,2);const s=await t.enqueue_json(l);if(!s?.success){await Pe(n.taskId,{shops:o.map(d=>({shopName:d.shopName||"",error:s?.error||`任务 ${n.taskId} 推送失败`,countrySections:d.countrySections||[],cartRatios:d.cartRatios||[],shopDone:!0,submissionId:Ut(n.taskId,d.shopName),chunkIndex:1,chunkTotal:1}))});for(const d of e)ot(d);await J(),y.value=`任务 ${n.taskId} 推送失败`,E();return}for(const d of e)ot(d);y.value=`任务 ${n.taskId} 已入队,共 ${o.length} 个店铺,等待执行完成`;const f=await Nt(n.taskId);y.value=`任务 ${n.taskId} ${f==="SUCCESS"?"已完成":f==="DELETED"?"已删除":"执行失败"}`,E(),await J(),c.success("巡店删除任务已完成")}catch(t){if(g)return;const e=t instanceof Error?t.message:"队列执行失败";y.value=e,c.error(e),await J()}finally{H.value=!1,F.value=!1,it(),nt()}}}async function le(){const t=tt.value;if(!t.length){c.warning("请先匹配可用店铺");return}y.value=`开始创建任务,共 ${t.length} 个店铺`,await $t()}async function re(t){const e=C(t).find(f=>!!(f.resultId&&(f.fileReady||f.downloadUrl)));if(!e?.resultId)return;const n=Lt();if(!n?.save_file_from_url_new){c.error("当前客户端未提供下载能力");return}const o=Ne(e.resultId),l=e.outputFilename||`${t.shopName||"patrol-delete-result"}.xlsx`,s=await n.save_file_from_url_new(o,l);s.success?c.success(`已保存: ${s.path||l}`):s.error&&s.error!=="用户取消"&&c.error(s.error)}async function Rt(t){try{if(t.taskId)await $e(t.taskId),h.value===t.taskId&&E();else if(t.resultId)await Re(t.resultId);else throw new Error("缺少可删除的任务标识");Tt(t),await Promise.allSettled([$(),J()]),c.success("已删除")}catch(e){if(zt(e)){t.taskId&&h.value===t.taskId&&E(),Tt(t),await $(),c.success("后端记录已不存在,已同步移除本地记录");return}c.error(e instanceof Error?e.message:"删除失败")}}return ce(async()=>{Kt(),jt(),await Promise.all([$(),lt(),R(),rt()]),h.value&&(y.value=h.value!=null?`检测到未完成任务,继续等待任务 ${h.value} 完成`:"",$t())}),de(()=>{g=!0,it(),Bt(),T.clearScope()}),(t,e)=>{const n=pe,o=he,l=me;return i(),u("div",Fe,[m(fe,{active:"patrol-delete"}),a("div",He,[a("aside",Oe,[e[5]||(e[5]=a("div",{class:"section-title"},"店铺输入",-1)),a("div",Ve,[e[3]||(e[3]=a("div",{class:"hint"}," 左侧负责录入店铺并加入备选区,点击“匹配店铺”只会生成匹配结果;确认后需手动点击“推送到 Python 队列”才会创建并执行任务。 ",-1)),a("div",Qe,[m(n,{modelValue:A.value,"onUpdate:modelValue":e[0]||(e[0]=s=>A.value=s),clearable:"",placeholder:"请输入店铺名后回车或点击添加",onKeyup:Mt(Dt,["enter"])},null,8,["modelValue"]),a("button",{type:"button",class:"opt-btn",disabled:B.value,onClick:Dt},r(B.value?"添加中...":"添加"),9,Ke)])]),e[6]||(e[6]=a("div",{class:"section-title"},"备选区",-1)),Y.value.length?(i(),u("div",ze,[m(l,{data:Y.value,"row-key":"id",height:"260",class:"candidate-table",onSelectionChange:Wt},{default:S(()=>[m(o,{type:"selection",width:"42"}),m(o,{prop:"shop_name",label:"店铺名","min-width":"140","show-overflow-tooltip":""}),m(o,{label:"操作",width:"72",align:"center"},{default:S(({row:s})=>[a("button",{type:"button",class:"link-danger",onClick:f=>Yt(s.id)}," 删除 ",8,Ge)]),_:1})]),_:1},8,["data"])])):(i(),u("div",je," 暂无备选店铺,请先输入并添加 ")),e[7]||(e[7]=a("div",{class:"section-title condition-title"},[a("span",null,"删除条件"),a("span",{class:"condition-title-hint"}," 注意删除条件的描述需要和页面描述一致 ")],-1)),a("div",Je,[a("div",We,[m(n,{modelValue:L.value,"onUpdate:modelValue":e[1]||(e[1]=s=>L.value=s),clearable:"",placeholder:"请输入删除条件",onKeyup:Mt(Pt,["enter"])},null,8,["modelValue"]),a("button",{type:"button",class:"opt-btn",disabled:x.value,onClick:Pt},r(x.value?"保存中...":"保存"),9,Xe)]),D.value.length?(i(),u("ul",Ze,[(i(!0),u(W,null,ut(D.value,s=>(i(),u("li",{key:s.id,class:"condition-item"},[a("label",ts,[ve(a("input",{"onUpdate:modelValue":e[2]||(e[2]=f=>_.value=f),type:"checkbox",value:s.id},null,8,es),[[ye,_.value]]),a("span",{title:s.conditionText},r(s.conditionText),9,ss)]),a("button",{type:"button",class:"link-danger",onClick:f=>Xt(s.id)}," 删除 ",8,as)]))),128))])):(i(),u("div",Ye," 暂无删除条件,保存后可在推送任务时多选携带。 "))]),a("div",ns,[a("button",{type:"button",class:"btn-run",disabled:U.value||V.value,onClick:te},r(U.value?"匹配中...":"匹配店铺"),9,os),a("button",{type:"button",class:"btn-run btn-queue",disabled:F.value||!tt.value.length,onClick:le},r(F.value?"任务执行中...":"推送到 Python 队列"),9,ls)]),e[8]||(e[8]=a("p",{class:"loading-msg"}," 当前页面会把匹配结果合并为一个巡店删除任务推送;多个店铺会在同一个任务和同一个结果文件中汇总。 ",-1)),y.value?(i(),u("div",rs,[e[4]||(e[4]=a("div",{class:"section-title queue-debug-title"},"队列状态",-1)),a("div",is,r(y.value),1),Z.value?(i(),u("pre",us,r(Z.value),1)):v("",!0)])):v("",!0)]),a("section",cs,[e[17]||(e[17]=a("div",{class:"panel-header"},"匹配与任务",-1)),a("div",ds,[a("div",fs,[a("div",ps,[e[9]||(e[9]=a("span",{class:"summary-label"},"备选店铺",-1)),a("strong",null,r(P.value.candidateCount),1)]),a("div",hs,[e[10]||(e[10]=a("span",{class:"summary-label"},"已处理任务",-1)),a("strong",null,r(P.value.processedTaskCount),1)]),a("div",ms,[e[11]||(e[11]=a("span",{class:"summary-label"},"成功任务",-1)),a("strong",null,r(P.value.successTaskCount),1)]),a("div",vs,[e[12]||(e[12]=a("span",{class:"summary-label"},"失败任务",-1)),a("strong",null,r(P.value.failedTaskCount),1)])]),e[16]||(e[16]=a("div",{class:"subsection-title"},"匹配结果",-1)),w.value.length?(i(),_e(l,{key:1,data:w.value,"row-key":N,"highlight-current-row":!1,class:"result-table match-table"},{default:S(()=>[m(o,{prop:"shopName",label:"店铺名","min-width":"120"}),m(o,{label:"匹配",width:"72",align:"center"},{default:S(({row:s})=>[a("span",{class:ct(s.matched?"ok":"fail")},r(s.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":"120","show-overflow-tooltip":""}),m(o,{label:"状态",width:"110","show-overflow-tooltip":""},{default:S(({row:s})=>[At(r(Ft(s.matchStatus)),1)]),_:1}),m(o,{label:"说明","min-width":"180","show-overflow-tooltip":""},{default:S(({row:s})=>[At(r(Ht(s)),1)]),_:1}),m(o,{label:"操作",width:"72",align:"center"},{default:S(({row:s})=>[a("button",{type:"button",class:"link-danger",onClick:f=>ee(s)}," 删除 ",8,_s)]),_:1})]),_:1},8,["data"])):(i(),u("div",ys," 完成“匹配店铺”后,这里会展示匹配结果。 ")),a("div",ws,[e[15]||(e[15]=a("div",{class:"result-list-header"},[a("span",null,"任务记录")],-1)),!O.value.length&&!et.value.length?(i(),u("div",gs," 暂无任务记录。推送到 Python 队列后,这里会展示当前任务和历史任务。 ")):(i(),u(W,{key:1},[O.value.length?(i(),u("div",ks,[e[13]||(e[13]=a("div",{class:"result-subsection-title"},"当前任务",-1)),a("ul",bs,[(i(!0),u(W,null,ut(O.value,s=>(i(),u("li",{key:mt(s),class:"task-item"},[a("div",Ss,[a("span",{class:"id",title:K(s)},r(K(s)),9,Is),a("div",Ts,"任务 ID: "+r(s.taskId??"-"),1),j(s)?(i(),u("div",Cs," 结果 ID: "+r(j(s)),1)):v("",!0),z(s)?(i(),u("div",Es," 店铺 ID: "+r(z(s)),1)):v("",!0),s.platform?(i(),u("div",Ds," 平台: "+r(s.platform),1)):v("",!0),a("div",Ps," 创建时间: "+r(at(s.createdAt)),1),a("div",Ns," 模板: "+r(wt(s)),1),G(s)?(i(),u("div",$s," 错误: "+r(G(s)),1)):v("",!0)]),a("div",Rs,[a("span",{class:ct(["status",bt(s.taskStatus)])},r(kt(s.taskStatus)),3),a("button",{type:"button",class:"btn-delete",onClick:f=>Rt(s)}," 删除 ",8,Ms)])]))),128))])])):v("",!0),et.value.length?(i(),u("div",As,[e[14]||(e[14]=a("div",{class:"result-subsection-title"},"历史任务",-1)),a("ul",Ls,[(i(!0),u(W,null,ut(et.value,s=>(i(),u("li",{key:mt(s),class:"task-item"},[a("div",qs,[a("span",{class:"id",title:K(s)},r(K(s)),9,Bs),a("div",xs,"任务 ID: "+r(s.taskId??"-"),1),j(s)?(i(),u("div",Us," 结果 ID: "+r(j(s)),1)):v("",!0),z(s)?(i(),u("div",Fs," 店铺 ID: "+r(z(s)),1)):v("",!0),s.platform?(i(),u("div",Hs," 平台: "+r(s.platform),1)):v("",!0),a("div",Os," 创建时间: "+r(at(s.createdAt)),1),s.finishedAt?(i(),u("div",Vs," 完成时间: "+r(at(s.finishedAt)),1)):v("",!0),a("div",Qs," 模板: "+r(wt(s)),1),G(s)?(i(),u("div",Ks," 错误: "+r(G(s)),1)):v("",!0)]),a("div",js,[a("span",{class:ct(["status",bt(s.taskStatus)])},r(kt(s.taskStatus)),3),St(s)?(i(),u("button",{key:0,type:"button",class:"archive",onClick:f=>re(s)}," 下载结果 ",8,zs)):v("",!0),a("button",{type:"button",class:"btn-delete",onClick:f=>Rt(s)}," 删除 ",8,Gs)])]))),128))])])):v("",!0)],64))])])])])])}}}),Ws=Ae(Js,[["__scopeId","data-v-b982bd51"]]);Le.locale("zh-cn");qe(Ws).use(Be,{locale:xe}).mount("#app");