import{d as Ne,o as Re,L as Ee,a as o,c as u,b as Ae,B as Ue,e as a,F as Y,r as W,t as l,w as xe,G as De,f as h,N as ue,n as $e,g as v,h as M,i as U,E as c,V as Ge,W as Ke,X as Be,U as ie,Y as Le,Z as He,$ as Me,a0 as ze,a1 as qe,a2 as je,a3 as Ve,_ as Oe,q as Je,s as Xe}from"./pywebview-BPTq9Myk.js";import{e as Qe}from"./brand-DqzUfBy1.js";import{c as Ye}from"./categorized-timers-JPA-olTr.js";const We={class:"page-shell module-page"},Ze={class:"main-content"},es={class:"left-panel"},ss={class:"upload-zone"},ts={class:"selected-files"},as={key:0},ns={class:"prompt-card"},ls={class:"run-row"},rs=["disabled"],os=["disabled"],us={key:0,class:"parse-card"},is={key:1,class:"queue-payload"},cs={class:"right-panel"},ds={class:"task-list-wrap"},fs={class:"clean-result-summary"},ps={class:"summary-card"},vs={class:"summary-card"},gs={class:"summary-card"},ys={class:"summary-card"},hs={class:"result-list-wrap"},_s={key:0,class:"empty-tasks"},ks={key:1,class:"task-list clean-result-list"},Is={class:"left"},ws={class:"id"},Ps={class:"files"},ms={class:"files"},Cs={key:0,class:"files result-hint"},Ss={key:1,class:"file-progress"},bs={class:"file-progress-meta"},Ts={class:"file-progress-track"},Fs={class:"file-progress-count"},Ns={class:"task-right"},Rs={class:"status running"},Es=["onClick"],As={class:"result-list-wrap"},Us={key:0,class:"empty-tasks"},xs={key:1,class:"task-list clean-result-list"},Ds={class:"left"},$s={class:"id"},Gs={class:"files"},Ks={key:0,class:"files"},Bs={key:1,class:"files result-hint"},Ls={key:2,class:"file-progress"},Hs={class:"file-progress-meta"},Ms={class:"file-progress-track"},zs={class:"file-progress-count"},qs={key:3,class:"files"},js={class:"task-right"},Vs=["onClick"],Os=["onClick"],ce=`请帮我排查以下亚马逊商品在英国及欧洲地区是否存在知识产权侵权风险。 请直接给出明确结论(有侵权风险 或 未发现明显侵权风险),并严格按照以下三个维度提供精简的排查理由: 外观维度: 评估产品外形、图案设计是否与欧洲/英国常见外观专利雷同。 专利维度: 评估产品的核心技术或物理结构是否存在侵权可能。 标题维度: 排查标题中是否包含大牌商标、敏感词或版权保护词汇。 结论:XX`,Js=3e3,Xs=Ne({__name:"BrandAppearancePatentTab",setup(Ys){const x=v([]),b=v([]),I=v(null),T=v(null),z=v(""),D=v(!1),$=v(!1),P=v(""),d=v([]),i=v([]),y=v(null),q=v(!1);let F=null,Z=0,N=!1;const R=Ye("appearance-patent"),E=v({pendingTaskCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),g=v([]),C=M(()=>I.value||T.value),j=M(()=>{const e=I.value;return!e?.taskId||g.value.some(t=>t.taskId===e.taskId)?null:{taskId:e.taskId,sourceFilename:e.sourceFilename,rowCount:e.acceptedRows,taskStatus:"PENDING",success:!1}}),ee=M(()=>{const e=new Set([...d.value,...i.value]),s=g.value.filter(n=>{const r=w(n);return n.taskId!=null&&(e.has(n.taskId)||r==="RUNNING"||r==="PENDING")});return j.value?s.some(n=>n.taskId===j.value?.taskId)?s:[j.value,...s]:s}),se=M(()=>g.value.filter(e=>{const s=w(e);return s!=="RUNNING"&&s!=="PENDING"}));function te(){return z.value.trim()||ce}function G(){return je("appearance-patent").trim()}function de(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function V(){return`appearance-patent:tasks:${de()}`}function fe(e){return{taskId:e.taskId,totalRows:e.totalRows,acceptedRows:e.acceptedRows,groupCount:e.groupCount,droppedRows:e.droppedRows}}function m(){if(typeof window>"u")return;const e=Array.from(new Set([...d.value,...i.value]));e.length?window.localStorage.setItem(V(),JSON.stringify(e)):window.localStorage.removeItem(V())}function pe(){if(!(typeof window>"u"))try{const e=window.localStorage.getItem(V()),s=e?JSON.parse(e):[];d.value=Array.isArray(s)?s.filter(t=>typeof t=="number"&&t>0):[]}catch{d.value=[]}}async function ae(e){const s=U();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传能力");const t=[];for(const n of e){const r=typeof n=="string"?n:n.absolutePath,f=typeof n=="string"?void 0:n.relativePath,p=await s.upload_file_to_java(r,f);if(!p?.success||!p.data)throw new Error(p?.error||p?.message||`上传失败:${r}`);t.push(p.data)}return t}async function ve(){const e=U();if(!e?.select_brand_xlsx_files||!e.upload_file_to_java){c.warning("当前环境不支持文件选择或上传");return}const s=await e.select_brand_xlsx_files();if(!s?.length)return;const t=await ae(s);b.value=t,x.value=t.map(n=>n.relativePath||n.originalFilename||n.fileKey),I.value=null,T.value=null,P.value=""}async function ge(){const e=U();if(!e?.select_brand_folder){c.warning("当前环境不支持文件夹选择,请在本地客户端中打开");return}try{const s=await e.select_brand_folder();if(!s)return;const t=await Qe(s);if(!t.success||!t.items?.length){c.warning(t.error||"该文件夹下没有可用的 xlsx 文件");return}const n=await ae(t.items);b.value=n,x.value=t.items.map(r=>r.relativePath||r.absolutePath),I.value=null,T.value=null,P.value="",c.success(`已选择文件夹内 ${t.items.length} 个 Excel 文件`)}catch(s){c.error(s instanceof Error?s.message:"选择失败")}}async function ye(){if(!b.value.length){c.warning("请先选择 Excel");return}if(!G()){c.warning("请先在左上角设置中填写外观专利密钥");return}D.value=!0;try{const e=b.value.map(t=>({fileKey:t.fileKey,originalFilename:t.originalFilename,relativePath:t.relativePath})),s=await Ge(e,te(),G());I.value=s,T.value=null,P.value="",c.success(`解析完成,共 ${s.groupCount||0} 组 / ${s.acceptedRows} 条`)}catch(e){c.error(e instanceof Error?e.message:"解析失败")}finally{D.value=!1}}async function he(){const e=U(),s=I.value,t=s?.taskId;if(!t){c.warning("请先解析文件");return}if(!e?.enqueue_json){c.error("当前环境未启用 pywebview enqueue_json");return}if(!G()){c.warning("请先在左上角设置中填写外观专利密钥");return}$.value=!0;try{const n=await Ke(t),r=n.groups||[],f={type:"appearance-patent-run",ts:Date.now(),data:{taskId:t,prompt:n.aiPrompt||s.aiPrompt||te(),api_key:G(),sourceFileCount:s.sourceFileCount||0,totalRows:s.totalRows||0,acceptedRows:s.acceptedRows||0,groupCount:s.groupCount||0,groups:r.map(_=>({sourceFileKey:_.sourceFileKey||"",sourceFilename:_.sourceFilename||"",groupKey:_.groupKey||"",baseId:_.baseId||"",displayId:_.displayId||"",items:(_.items||[]).map(k=>({sourceFileKey:k.sourceFileKey||"",sourceFilename:k.sourceFilename||"",rowToken:k.rowToken||"",groupKey:k.groupKey||"",id:k.displayId,asin:k.asin,country:k.country,url:k.url||"",title:k.title||""}))}))}};P.value=`任务 ${t} 已准备推送,共 ${r.length} 组`,await Be(t);const p=await e.enqueue_json(f);if(!p?.success){c.error(p?.error||"推送失败");return}T.value=fe(s),ke(t),_e(),await K(),await B({force:!0}),c.success("已推送到 Python 队列")}finally{$.value=!1}}function _e(){I.value=null,P.value=""}function ke(e){d.value.includes(e)||(d.value=[...d.value,e],m()),S()}function O(e){d.value=d.value.filter(s=>s!==e),m()}function Ie(e){i.value.includes(e)||(i.value=[...i.value,e],m()),S()}function J(e){i.value=i.value.filter(s=>s!==e),m()}function S(){N||y.value==null&&we(!0)}function ne(){y.value!=null&&(R.clearTimer("task-poll",y.value),y.value=null)}function we(e=!1){if(N)return;if(y.value!=null){if(!e)return;R.clearTimer("task-poll",y.value),y.value=null}const s=async()=>{y.value=null,!N&&(!d.value.length&&!i.value.length||(await Pe(),!N&&y.value==null&&(d.value.length||i.value.length)&&(y.value=R.setTimeout("task-poll",s,ie()))))};e?s():y.value=R.setTimeout("task-poll",s,ie())}async function Pe(){if(q.value||!d.value.length&&!i.value.length){!d.value.length&&!i.value.length&&ne();return}q.value=!0;try{let e=!1,s=!1;const t=Array.from(new Set([...d.value,...i.value]));if(t.length){const n=await Ve(t,{force:i.value.length>0});for(const r of n.items||[]){const f=r.task;if(!f?.id)continue;const p=r.items?.[0];if(p&&me(p),(f.status==="SUCCESS"||f.status==="FAILED")&&(O(f.id),e=!0,f.status==="SUCCESS"?Ie(f.id):J(f.id)),p&&f.status==="SUCCESS"&&i.value.includes(f.id)){const _=(p.fileStatus||"").toUpperCase();(p.fileReady||_==="SUCCESS"||_==="FAILED")&&(J(f.id),e=!0,s=!0)}}n.missingTaskIds?.length&&(n.missingTaskIds.forEach(r=>{O(r),J(r)}),s=!0,e=!0)}e&&await K(),s&&await B(),Ce()}finally{q.value=!1}}function me(e){if(!e.taskId&&!e.resultId)return;const s=g.value.findIndex(t=>e.resultId!=null&&t.resultId===e.resultId||e.taskId!=null&&t.taskId===e.taskId);s>=0?g.value[s]={...g.value[s],...e}:g.value=[e,...g.value]}function Ce(){if(!i.value.length)return;const e=[];for(const s of i.value){const t=g.value.find(f=>f.taskId===s);if(!t){e.push(s);continue}const n=(t.taskStatus||"").toUpperCase(),r=(t.fileStatus||"").toUpperCase();n==="FAILED"||t.fileReady||r==="SUCCESS"||r==="FAILED"||n==="SUCCESS"&&e.push(s)}i.value=e,m(),i.value.length&&S()}function Se(){const e=g.value.filter(s=>s.taskId!=null&&A(s)).map(s=>s.taskId);i.value=Array.from(new Set(e)),m(),i.value.length&&S()}function be(){const e=g.value.filter(s=>s.taskId!=null&&w(s)==="RUNNING").map(s=>s.taskId);e.length&&(d.value=Array.from(new Set([...d.value,...e])),m(),S())}async function K(){E.value=await Le()}async function B(e={}){const s=Date.now();if(!(!e.force&&g.value.length&&s-Z{g.value=t.items||[],Z=Date.now()}).finally(()=>{F=null}),F)}function le(e){const s=w(e);return s==="RUNNING"?"执行中":s==="PENDING"?"已解析待推送":A(e)?"结果生成中":X(e)?"结果生成失败":s==="SUCCESS"||e.success?"已完成":s==="FAILED"?"失败":"等待中"}function Te(e){const s=w(e);return s==="RUNNING"||A(e)?"running":X(e)||s==="FAILED"?"failed":s==="SUCCESS"||e.success?"success":"pending"}function A(e){const s=w(e),t=(e.fileStatus||"").toUpperCase();return!(s!=="SUCCESS"||re(e)||t==="FAILED"||t==="SUCCESS")}function w(e){return(e.taskStatus||"").toUpperCase()}function X(e){return(e.fileStatus||"").toUpperCase()==="FAILED"}function L(e){if(X(e))return e.fileError||"结果文件生成失败,请稍后重试或检查后端日志";if(w(e)==="RUNNING"&&Q(e))return e.fileProgressMessage||"任务执行中,正在接收 Python 数据并处理 Coze 结果";if(!A(e))return"";const s=(e.fileStatus||"").toUpperCase();return s==="RUNNING"?"任务已完成,正在等待 Coze 回流并组装结果文件,下载按钮稍后出现":s==="PENDING"?"任务已完成,结果文件已入队,正在等待后端开始处理":"任务已完成,正在生成结果文件,下载按钮稍后出现"}function re(e){return!!(e.resultId&&(e.fileReady||e.downloadUrl))}function H(e){const s=Number(e.fileProgressPercent||0);return Number.isFinite(s)?Math.max(0,Math.min(100,Math.round(s))):0}function Q(e){return(w(e)==="RUNNING"||A(e))&&(e.fileProgressTotal||0)>0}async function Fe(e){if(!e.resultId)return;const s=U();if(!s?.save_file_from_url_new){c.error("当前客户端未提供下载能力");return}const t=e.downloadUrl||Me(e.resultId),n=e.resultFilename||`${e.sourceFilename||"appearance-patent"}.xlsx`,r=await s.save_file_from_url_new(t,n);r.success?c.success(`已保存: ${r.path||n}`):r.error&&r.error!=="用户取消"&&c.error(r.error)}async function oe(e){try{e.taskStatus==="RUNNING"&&e.taskId?(await ze(e.taskId),O(e.taskId)):e.resultId&&await qe(e.resultId),await K(),await B({force:!0}),c.success("已删除")}catch(s){c.error(s instanceof Error?s.message:"删除失败")}}return Re(async()=>{pe(),await Promise.all([K().catch(()=>{}),B().catch(()=>{})]),be(),Se(),(d.value.length||i.value.length)&&S()}),Ee(()=>{N=!0,ne(),R.clearScope()}),(e,s)=>(o(),u("div",We,[Ae(Ue,{active:"appearance-patent"}),a("div",Ze,[a("aside",es,[s[4]||(s[4]=a("div",{class:"section-title"},"上传文件",-1)),a("div",ss,[s[1]||(s[1]=a("div",{class:"hint"},"选择 Excel 后点击解析,后端会提取 id、ASIN、国家,并保留整数 id 与子数据的第一条。",-1)),a("div",{class:"btns"},[a("button",{type:"button",class:"opt-btn",onClick:ve},"选择 Excel"),a("button",{type:"button",class:"opt-btn",onClick:ge},"选择文件夹")]),a("div",ts,[x.value.length?(o(!0),u(Y,{key:1},W(x.value,t=>(o(),u("span",{key:t},l(t),1))),128)):(o(),u("span",as,"暂未选择文件"))])]),a("div",ns,[s[2]||(s[2]=a("div",{class:"section-title"},"AI 提示词",-1)),xe(a("textarea",{"onUpdate:modelValue":s[0]||(s[0]=t=>z.value=t),class:"prompt-input",rows:"8",placeholder:"可选,留空时使用下方默认提示词"},null,512),[[De,z.value]]),s[3]||(s[3]=a("div",{class:"prompt-default-label"},"留空时默认使用以下提示词",-1)),a("div",{class:"prompt-preview"},l(ce))]),a("div",ls,[a("button",{type:"button",class:"btn-run",disabled:D.value||!b.value.length,onClick:ye},l(D.value?"解析中...":"解析并创建任务"),9,rs),a("button",{type:"button",class:"btn-run btn-queue",disabled:$.value||!I.value?.taskId,onClick:he},l($.value?"推送中...":"推送到 Python 队列"),9,os)]),s[5]||(s[5]=a("p",{class:"loading-msg"},"Python 回传字段按 asin、国家、url、标题提交;后端接收分片后累计 50 条调用 Coze,当前任务区展示 Coze 回流和结果组装进度。",-1)),C.value?(o(),u("div",us,[a("div",null,"任务 ID:"+l(C.value.taskId),1),a("div",null,"总行数:"+l(C.value.totalRows)+",有效:"+l(C.value.acceptedRows)+",分组:"+l(C.value.groupCount||0)+",过滤:"+l(C.value.droppedRows),1)])):h("",!0),P.value?(o(),u("pre",is,l(P.value),1)):h("",!0)]),a("section",cs,[s[13]||(s[13]=a("div",{class:"panel-header"},"外观专利检测",-1)),a("div",ds,[a("div",fs,[a("div",ps,[s[6]||(s[6]=a("span",{class:"summary-label"},"运行中任务",-1)),a("strong",null,l(E.value.pendingTaskCount),1)]),a("div",vs,[s[7]||(s[7]=a("span",{class:"summary-label"},"已结束任务",-1)),a("strong",null,l(E.value.processedTaskCount),1)]),a("div",gs,[s[8]||(s[8]=a("span",{class:"summary-label"},"成功任务",-1)),a("strong",null,l(E.value.successTaskCount),1)]),a("div",ys,[s[9]||(s[9]=a("span",{class:"summary-label"},"失败任务",-1)),a("strong",null,l(E.value.failedTaskCount),1)])]),s[12]||(s[12]=a("div",{class:"subsection-title"},"匹配任务",-1)),a("div",hs,[s[10]||(s[10]=a("div",{class:"result-list-header"},[a("span",null,"当前任务")],-1)),ee.value.length?(o(),u("ul",ks,[(o(!0),u(Y,null,W(ee.value,t=>(o(),u("li",{key:`cur-${t.taskId}`,class:"task-item"},[a("div",Is,[a("span",ws,l(t.sourceFilename||"外观专利检测"),1),a("div",Ps,"任务 ID:"+l(t.taskId),1),a("div",ms,"行数:"+l(t.rowCount??"-"),1),L(t)?(o(),u("div",Cs,l(L(t)),1)):h("",!0),Q(t)?(o(),u("div",Ss,[a("div",bs,[a("span",null,l(t.fileProgressMessage||"处理中"),1),a("span",null,l(H(t))+"%",1)]),a("div",Ts,[a("div",{class:"file-progress-bar",style:ue({width:`${H(t)}%`})},null,4)]),a("div",Fs,l(t.fileProgressCurrent||0)+"/"+l(t.fileProgressTotal||0),1)])):h("",!0)]),a("div",Ns,[a("span",Rs,l(le(t)),1),a("button",{type:"button",class:"btn-delete",onClick:n=>oe(t)},"删除",8,Es)])]))),128))])):(o(),u("div",_s,"暂无当前任务"))]),a("div",As,[s[11]||(s[11]=a("div",{class:"result-list-header"},[a("span",null,"历史记录")],-1)),se.value.length?(o(),u("ul",xs,[(o(!0),u(Y,null,W(se.value,t=>(o(),u("li",{key:`his-${t.resultId}-${t.taskId}`,class:"task-item"},[a("div",Ds,[a("span",$s,l(t.sourceFilename||"外观专利检测"),1),a("div",Gs,"任务 ID:"+l(t.taskId??"-"),1),t.resultFilename?(o(),u("div",Ks,l(t.resultFilename||"下载结果"),1)):h("",!0),L(t)?(o(),u("div",Bs,l(L(t)),1)):h("",!0),Q(t)?(o(),u("div",Ls,[a("div",Hs,[a("span",null,l(t.fileProgressMessage||"结果生成中"),1),a("span",null,l(H(t))+"%",1)]),a("div",Ms,[a("div",{class:"file-progress-bar",style:ue({width:`${H(t)}%`})},null,4)]),a("div",zs,l(t.fileProgressCurrent||0)+"/"+l(t.fileProgressTotal||0),1)])):h("",!0),t.error?(o(),u("div",qs,"错误:"+l(t.error),1)):h("",!0)]),a("div",js,[a("span",{class:$e(["status",Te(t)])},l(le(t)),3),re(t)?(o(),u("button",{key:0,type:"button",class:"download",onClick:n=>Fe(t)},"下载",8,Vs)):h("",!0),t.resultId?(o(),u("button",{key:1,type:"button",class:"btn-delete",onClick:n=>oe(t)},"删除",8,Os)):h("",!0)])]))),128))])):(o(),u("div",Us,"暂无历史记录"))])])])])]))}}),Qs=Oe(Xs,[["__scopeId","data-v-8e01fb1c"]]);Je(Qs).use(Xe).mount("#app");