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