2 lines
21 KiB
JavaScript
2 lines
21 KiB
JavaScript
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,ac as Mt,ad as pe,t as r,ae as S,af as he,ag as me,F as W,r as ut,w as ve,v as ye,f as v,aj as _e,n as ct,x as At,g as p,h as M,b9 as we,ba as ge,bb as ke,bc as be,E as c,bd as Se,be as Ie,bf as Te,bg as Ce,bh as Ee,i as Lt,bi as De,bj as Pe,bk as Ne,bl as $e,bm as Re,U as X,bn as Me,_ as Ae,aP as Le,q as qe,s as Be}from"./pywebview-3bFwh9Cg.js";import{z as xe}from"./zh-cn-CfXLYURP.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");
|