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