import{_ as e,r as t,w as a,a as n,c as l,o,b as i,d as s,t as u,e as r,v as d,f as p,F as c,g as v,h as f,i as g,j as m,k as y,n as x,l as b,m as h,p as w,q as S,P as z,s as k,u as A,x as C,y as P,z as F,A as D}from"./styles-YQqUhjjA.js";import"./pdfjs-DXqArq6h.js";import"./pdf-lib-AfLQbX6n.js";const V={key:0,class:"annotation-detail-panel"},U={class:"panel-header"},I={class:"detail-content"},N={class:"detail-row"},E={class:"label-preview"},R={class:"detail-row"},$={class:"detail-row"},j={class:"detail-row"},L={class:"detail-row"},O={class:"detail-row"},T={key:0,class:"detail-row"},_={key:1,class:"detail-row"},B={class:"detail-row"},M={class:"detail-row readonly"},J={class:"detail-row readonly"},X={style:{"margin-top":"16px","padding-top":"12px","border-top":"1px solid #e5e7eb"}},Y={style:{display:"flex","flex-direction":"column",gap:"8px"}},W={style:{display:"flex","flex-direction":"column",gap:"6px"}},G={key:0,style:{"margin-top":"12px","border-top":"1px solid #e5e7eb","padding-top":"10px"}},q={style:{"font-size":"12px","font-weight":"600",color:"#0369a1","margin-bottom":"6px"}},Z=["onClick"],H={style:{"font-size":"12px","font-weight":"600",color:"#0369a1"}},K={style:{display:"flex","align-items":"center",gap:"6px"}},Q={style:{"font-size":"11px",color:"#64748b"}},ee={style:{"font-size":"10px",color:"#94a3b8"}},te=["onClick"],ae={key:0,style:{padding:"6px 8px","max-height":"160px","overflow-y":"auto"}},ne={style:{background:"#f8fafc",border:"1px solid #e2e8f0","border-radius":"8px",padding:"10px 12px","margin-bottom":"12px"}},le={style:{display:"grid","grid-template-columns":"max-content 1fr","align-items":"center",gap:"6px 10px"}},oe={style:{display:"flex",gap:"12px"}},ie={style:{display:"flex","align-items":"center",gap:"4px","font-size":"12px",color:"#334155",cursor:"pointer"}},se={style:{display:"flex","align-items":"center",gap:"4px","font-size":"12px",color:"#334155",cursor:"pointer"}},ue={style:{display:"flex","align-items":"center",gap:"6px","font-size":"12px",color:"#334155",cursor:"pointer"}},re={style:{display:"flex","flex-direction":"column",gap:"4px"}},de={style:{display:"flex","align-items":"center",gap:"4px","font-size":"12px",color:"#334155",cursor:"pointer"}},pe={style:{display:"flex","align-items":"center",gap:"4px","font-size":"12px",color:"#334155",cursor:"pointer"}},ce={style:{display:"flex","align-items":"center",gap:"4px","font-size":"12px",color:"#334155",cursor:"pointer"}},ve={style:{display:"none","flex-direction":"column","margin-top":"24px","padding-top":"16px","border-top":"1px solid #e5e7eb"}},fe={style:{"margin-bottom":"12px"}},ge={style:{"margin-bottom":"12px"}},me=e({__name:"LeftPanel",props:{autoAnnotating:{type:Boolean,default:!1},selectedAnnotation:{type:Object,default:null},selectedAnnotationPage:{type:Number,default:null},selectedAnnotationIndex:{type:Number,default:null},annotationsJson:{type:String,default:"{}"},initialCsvData:{type:String,default:""},groups:{type:Array,default:()=>[]},groupMode:{type:Boolean,default:!1}},emits:["file-selected","open-pdf","save-pdf-editable","saveas-pdf-editable","export-pdf-embedded","save-pdf-final","export-csv","export-json","import-annotations","import-csv","import-image","undo-annotation","clear-page-annotations","delete-selected-annotation","apply-settings","update-annotation","delete-annotation","deselect-annotation","load-pdf-url","renumber-page-annotations","auto-annotate-page","toggle-group-mode","delete-group"],setup(e,{emit:h}){const w=e,S=h,z=t(0),k=t(""),A=t(""),C=t(10),P=t(!1),F=t(""),D=t(""),me=t("");function ye(){if(!w.selectedAnnotation)return;const e={...w.selectedAnnotation,displayValue:z.value,settings:{...w.selectedAnnotation.settings,prefix:k.value,suffix:A.value,fontSize:C.value},completed:P.value,completedTime:P.value?F.value:"",completedBy:P.value?D.value:"",note:me.value};S("update-annotation",e)}function xe(){confirm("确定要删除这个标注吗?")&&S("delete-annotation")}a(()=>w.selectedAnnotation,e=>{e&&(z.value=e.displayValue||0,k.value=e.settings?.prefix??"",A.value=e.settings?.suffix??"",C.value=e.settings?.fontSize??10,P.value=e.completed||!1,F.value=e.completedTime||"",D.value=e.completedBy||"",me.value=e.note||"")},{immediate:!0,deep:!0});const be=t(null),he=t(null),we=t(null),Se=t(null),ze=n(new Set);const ke=t(1),Ae=t(1),Ce=t(""),Pe=t("");t("hexagon");const Fe=t(10),De=t("none"),Ve=t("circle-outline"),Ue=t(!0),Ie=t(!0),Ne=t(80),Ee=t("测试数据A,测试数据B,测试数据C,测试数据D,测试数据E\n13213213,13213213,13213213,13213213,13213213\n312321312,312321312,312321312,312321312,312321312\n611429411,611429411,611429411,611429411,611429411\n910537510,910537510,910537510,910537510,910537510\n1209645609,1209645609,1209645609,1209645609,1209645609\n1508753708,1508753708,1508753708,1508753708,1508753708\n1807861807,1807861807,1807861807,1807861807,1807861807\n2106969906,2106969906,2106969906,2106969906,2106969906\n2406078005,2406078005,2406078005,2406078005,2406078005\n2705186104,2705186104,2705186104,2705186104,2705186104\n3004294203,3004294203,3004294203,3004294203,3004294203\n3303402302,3303402302,3303402302,3303402302,3303402302\n3602510401,3602510401,3602510401,3602510401,3602510401\n3901618500,3901618500,3901618500,3901618500,3901618500\n4200726599,4200726599,4200726599,4200726599,4200726599\n4499834698,4499834698,4499834698,4499834698,4499834698\n4798942797,4798942797,4798942797,4798942797,4798942797\n5098050896,5098050896,5098050896,5098050896,5098050896\n5397158995,5397158995,5397158995,5397158995,5397158995\n5696267094,5696267094,5696267094,5696267094,5696267094\n5995375193,5995375193,5995375193,5995375193,5995375193\n6294483292,6294483292,6294483292,6294483292,6294483292\n6593591391,6593591391,6593591391,6593591391,6593591391"),Re=t(""),$e=t("{}"),je=t(!1),Le=t(""),Oe=t("");a(()=>w.annotationsJson,e=>{e&&($e.value=e)},{immediate:!0}),a(()=>w.initialCsvData,e=>{e&&e.trim()&&(Ee.value=e,console.log("CSV table data updated from props:",e.substring(0,100)+"..."))},{immediate:!0}),a($e,e=>{try{const t=document.getElementById("hdworkRecord");t&&(t.value=e||"{}",console.log("Synced JSON data to workRecord-inputEl:",e?.substring(0,100)+"..."))}catch(t){console.warn("Error syncing to workRecord-inputEl:",t)}},{immediate:!0});let Te=null;function _e(e){const t=e.target.files&&e.target.files[0];t&&S("file-selected",t)}async function Be(){if(Re.value&&$e.value.trim()){je.value=!0,Le.value="";try{let t;try{t=JSON.parse($e.value)}catch(e){throw new Error("JSON 格式错误: "+e.message)}const a=await async function(e,t){try{const a=await fetch("http://localhost:8000/api/pdf/process",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:e,pdfPath:t,timestamp:(new Date).toISOString()})});if(!a.ok)throw new Error(`API Error: ${a.status} ${a.statusText}`);return await a.json()}catch(a){throw console.error("API call failed:",a),a}}(t,Re.value);Le.value="提交成功!",Oe.value="success",console.log("API Response:",a)}catch(t){Le.value="错误: "+(t.message||"网络请求失败"),Oe.value="error",console.error("Submit failed:",t)}finally{je.value=!1}}}function Me(){confirm("确定要清除本页所有标注吗?此操作不可撤销。")&&S("clear-page-annotations")}function Je(e){const t=e.target.files&&e.target.files[0];t&&S("import-annotations",t)}function Xe(e){const t=e.target.files&&e.target.files[0];t&&S("import-csv",t)}function Ye(e){const t=e.target.files&&e.target.files[0];t&&S("import-image",{file:t,size:Ne.value})}return a(Re,(e,t)=>{Te&&clearTimeout(Te),e&&e.trim()&&(Te=setTimeout(()=>{const t=e.trim();(t.startsWith("http://")||t.startsWith("https://"))&&S("load-pdf-url",t)},500))},{immediate:!0}),a([ke,Ae,Ce,Pe,Fe,De,Ve,Ue],()=>{S("apply-settings",{startNumber:ke.value,increment:Ae.value,prefix:Ce.value,suffix:Pe.value,fontSize:Fe.value,borderStyle:De.value,annotationStyle:Ve.value,highDpi:!!Ie.value,singleClickMode:Ue.value})}),(t,a)=>(o(),l("div",null,[e.selectedAnnotation?(o(),l("div",V,[s("div",U,[a[33]||(a[33]=s("h3",{style:{margin:"0","font-size":"14px"}},"标注详情",-1)),s("div",{class:"btn close-btn",onClick:a[0]||(a[0]=e=>S("deselect-annotation")),title:"关闭"},"×")]),s("div",I,[s("div",N,[a[34]||(a[34]=s("label",null,"标签内容:",-1)),s("div",E,u(k.value)+u(z.value)+u(A.value),1)]),s("div",R,[a[35]||(a[35]=s("label",null,"编号:",-1)),r(s("input",{"onUpdate:modelValue":a[1]||(a[1]=e=>z.value=e),type:"number",min:"0",class:"detail-input"},null,512),[[d,z.value,void 0,{number:!0}]])]),s("div",$,[a[36]||(a[36]=s("label",null,"前缀:",-1)),r(s("input",{"onUpdate:modelValue":a[2]||(a[2]=e=>k.value=e),type:"text",class:"detail-input"},null,512),[[d,k.value]])]),s("div",j,[a[37]||(a[37]=s("label",null,"后缀:",-1)),r(s("input",{"onUpdate:modelValue":a[3]||(a[3]=e=>A.value=e),type:"text",class:"detail-input"},null,512),[[d,A.value]])]),s("div",L,[a[38]||(a[38]=s("label",null,"字体大小:",-1)),r(s("input",{"onUpdate:modelValue":a[4]||(a[4]=e=>C.value=e),type:"number",min:"6",max:"72",class:"detail-input"},null,512),[[d,C.value,void 0,{number:!0}]])]),a[46]||(a[46]=s("div",{class:"detail-divider"},null,-1)),s("div",O,[a[40]||(a[40]=s("label",null,"状态:",-1)),r(s("select",{"onUpdate:modelValue":a[5]||(a[5]=e=>P.value=e),class:"detail-input"},[...a[39]||(a[39]=[s("option",{value:!1},"未完成",-1),s("option",{value:!0},"已完成",-1)])],512),[[p,P.value]])]),P.value?(o(),l("div",T,[a[41]||(a[41]=s("label",null,"完成时间:",-1)),r(s("input",{"onUpdate:modelValue":a[6]||(a[6]=e=>F.value=e),type:"datetime-local",class:"detail-input"},null,512),[[d,F.value]])])):i("",!0),P.value?(o(),l("div",_,[a[42]||(a[42]=s("label",null,"完成人:",-1)),r(s("input",{"onUpdate:modelValue":a[7]||(a[7]=e=>D.value=e),type:"text",placeholder:"输入完成人姓名",class:"detail-input"},null,512),[[d,D.value]])])):i("",!0),s("div",B,[a[43]||(a[43]=s("label",null,"备注:",-1)),r(s("textarea",{"onUpdate:modelValue":a[8]||(a[8]=e=>me.value=e),placeholder:"添加备注...",class:"detail-textarea"},null,512),[[d,me.value]])]),s("div",M,[a[44]||(a[44]=s("label",null,"页码:",-1)),s("span",null,"第 "+u(e.selectedAnnotationPage)+" 页",1)]),s("div",J,[a[45]||(a[45]=s("label",null,"位置:",-1)),s("span",null,"X: "+u(Math.round(e.selectedAnnotation.x))+", Y: "+u(Math.round(e.selectedAnnotation.y)),1)]),s("div",{class:"detail-actions"},[s("div",{class:"btn btn-primary",onClick:ye},"保存修改"),s("div",{class:"btn btn-danger",onClick:xe},"删除标注")])])])):i("",!0),s("div",X,[a[55]||(a[55]=s("h3",{style:{margin:"0 0 12px 0"}},"设置",-1)),s("div",Y,[s("input",{ref_key:"fileInput",ref:be,type:"file",accept:"application/pdf",onChange:_e,style:{display:"none"}},null,544),s("input",{ref_key:"jsonInput",ref:he,type:"file",accept:"application/json,.json",onChange:Je,style:{display:"none"}},null,544),s("input",{ref_key:"csvInput",ref:we,type:"file",accept:"text/csv,.csv",onChange:Xe,style:{display:"none"}},null,544),s("input",{ref_key:"imageInput",ref:Se,type:"file",accept:"image/*",onChange:Ye,style:{display:"none"}},null,544),s("div",W,[i("",!0),i("",!0),i("",!0),i("",!0),i("",!0),s("div",{class:"btn btn-primary",onClick:a[13]||(a[13]=e=>S("undo-annotation")),style:{width:"100%"}},"撤销上一标注"),i("",!0)]),w.groups&&w.groups.length>0?(o(),l("div",G,[s("div",q,"焊口分组("+u(w.groups.length)+")",1),(o(!0),l(c,null,v(w.groups,e=>(o(),l("div",{key:e.id,style:{"margin-bottom":"6px",border:"1px solid #bae6fd","border-radius":"6px",overflow:"hidden",background:"#f0f9ff"}},[s("div",{style:{display:"flex","align-items":"center","justify-content":"space-between",padding:"6px 8px",cursor:"pointer",background:"#e0f2fe"},onClick:t=>{return a=e.id,void(ze.has(a)?ze.delete(a):ze.add(a));var a}},[s("span",H,u(e.name),1),s("div",K,[s("span",Q,"第"+u(e.page)+"页 · "+u(e.weldList?.length||0)+"个",1),s("span",ee,u(ze.has(e.id)?"▲":"▼"),1),s("span",{style:{"font-size":"11px",color:"#ef4444",cursor:"pointer",padding:"0 2px"},onClick:f(t=>S("delete-group",e.id),["stop"])},"×",8,te)])],8,Z),ze.has(e.id)?(o(),l("div",ae,[(o(!0),l(c,null,v(e.weldList,(e,t)=>(o(),l("div",{key:t,style:{"font-size":"11px",color:"#334155",padding:"2px 0","border-bottom":"1px solid #e0f2fe"}},u(e.label),1))),128))])):i("",!0)]))),128))])):i("",!0),i("",!0),s("div",{class:"btn btn-primary",onClick:a[19]||(a[19]=e=>S("renumber-page-annotations")),style:{width:"100%"}},"按设置重新标注"),s("div",{class:"btn btn-primary",onClick:Me,style:{width:"100%"}},"清除本页标注")])]),s("div",ne,[a[70]||(a[70]=s("div",{style:{"font-size":"11px","font-weight":"600",color:"#94a3b8","letter-spacing":"0.06em","text-transform":"uppercase","margin-bottom":"10px"}},"标注设置",-1)),s("div",le,[a[62]||(a[62]=s("span",{style:{"font-size":"12px",color:"#475569","white-space":"nowrap"}},"起始编号",-1)),r(s("input",{"onUpdate:modelValue":a[20]||(a[20]=e=>ke.value=e),type:"number",min:"0",style:{width:"100%","box-sizing":"border-box",padding:"4px 6px",border:"1px solid #cbd5e1","border-radius":"4px","font-size":"12px"}},null,512),[[d,ke.value,void 0,{number:!0}]]),a[63]||(a[63]=s("span",{style:{"font-size":"12px",color:"#475569","white-space":"nowrap"}},"增量",-1)),r(s("input",{"onUpdate:modelValue":a[21]||(a[21]=e=>Ae.value=e),type:"number",min:"1",style:{width:"100%","box-sizing":"border-box",padding:"4px 6px",border:"1px solid #cbd5e1","border-radius":"4px","font-size":"12px"}},null,512),[[d,Ae.value,void 0,{number:!0}]]),a[64]||(a[64]=s("span",{style:{"font-size":"12px",color:"#475569","white-space":"nowrap"}},"前缀",-1)),r(s("input",{"onUpdate:modelValue":a[22]||(a[22]=e=>Ce.value=e),type:"text",style:{width:"100%","box-sizing":"border-box",padding:"4px 6px",border:"1px solid #cbd5e1","border-radius":"4px","font-size":"12px"}},null,512),[[d,Ce.value]]),a[65]||(a[65]=s("span",{style:{"font-size":"12px",color:"#475569","white-space":"nowrap"}},"后缀",-1)),r(s("input",{"onUpdate:modelValue":a[23]||(a[23]=e=>Pe.value=e),type:"text",style:{width:"100%","box-sizing":"border-box",padding:"4px 6px",border:"1px solid #cbd5e1","border-radius":"4px","font-size":"12px"}},null,512),[[d,Pe.value]]),a[66]||(a[66]=s("span",{style:{"font-size":"12px",color:"#475569","white-space":"nowrap"}},"字体大小",-1)),r(s("input",{"onUpdate:modelValue":a[24]||(a[24]=e=>Fe.value=e),type:"number",min:"6",max:"72",step:"1",style:{width:"100%","box-sizing":"border-box",padding:"4px 6px",border:"1px solid #cbd5e1","border-radius":"4px","font-size":"12px"}},null,512),[[d,Fe.value,void 0,{number:!0}]]),a[67]||(a[67]=s("span",{style:{"font-size":"12px",color:"#475569","white-space":"nowrap"}},"边框样式",-1)),s("div",oe,[s("label",ie,[r(s("input",{type:"radio",value:"none","onUpdate:modelValue":a[25]||(a[25]=e=>De.value=e),style:{"accent-color":"#0ea5e9"}},null,512),[[m,De.value]]),a[56]||(a[56]=g(" 无 ",-1))]),s("label",se,[r(s("input",{type:"radio",value:"rect","onUpdate:modelValue":a[26]||(a[26]=e=>De.value=e),style:{"accent-color":"#0ea5e9"}},null,512),[[m,De.value]]),a[57]||(a[57]=g(" 矩形 ",-1))])]),a[68]||(a[68]=s("span",{style:{"font-size":"12px",color:"#475569","white-space":"nowrap","align-self":"start","padding-top":"2px"}},"点击模式",-1)),s("label",ue,[r(s("input",{type:"checkbox","onUpdate:modelValue":a[27]||(a[27]=e=>Ue.value=e),style:{"accent-color":"#0ea5e9",width:"14px",height:"14px"}},null,512),[[y,Ue.value]]),a[58]||(a[58]=g(" 单击模式 ",-1))]),a[69]||(a[69]=s("span",{style:{"font-size":"12px",color:"#475569","white-space":"nowrap","align-self":"start","padding-top":"2px"}},"标注样式",-1)),s("div",re,[s("label",de,[r(s("input",{type:"radio",value:"circle-outline","onUpdate:modelValue":a[28]||(a[28]=e=>Ve.value=e),style:{"accent-color":"#0ea5e9"}},null,512),[[m,Ve.value]]),a[59]||(a[59]=g(" 圆圈 ",-1))]),s("label",pe,[r(s("input",{type:"radio",value:"arrow","onUpdate:modelValue":a[29]||(a[29]=e=>Ve.value=e),style:{"accent-color":"#0ea5e9"}},null,512),[[m,Ve.value]]),a[60]||(a[60]=g(" 箭头 ",-1))]),s("label",ce,[r(s("input",{type:"radio",value:"dot","onUpdate:modelValue":a[30]||(a[30]=e=>Ve.value=e),style:{"accent-color":"#0ea5e9"}},null,512),[[m,Ve.value]]),a[61]||(a[61]=g(" 圆点 ",-1))])])])]),s("div",ve,[a[73]||(a[73]=s("h4",{style:{margin:"0 0 12px 0"}},"网络接口",-1)),s("div",fe,[a[71]||(a[71]=s("label",{style:{display:"block","font-size":"12px","margin-bottom":"4px",color:"#6b7280"}},"PDF 目录路径",-1)),r(s("input",{"onUpdate:modelValue":a[31]||(a[31]=e=>Re.value=e),type:"text",placeholder:"/path/to/pdf",style:{width:"100%",padding:"6px",border:"1px solid #d1d5db","border-radius":"4px","font-size":"12px"}},null,512),[[d,Re.value]])]),s("div",ge,[a[72]||(a[72]=s("label",{style:{display:"block","font-size":"12px","margin-bottom":"4px",color:"#6b7280"}},"数据 (JSON)",-1)),r(s("textarea",{"onUpdate:modelValue":a[32]||(a[32]=e=>$e.value=e),placeholder:'{"key":"value"}',style:{width:"100%",height:"100px",padding:"6px",border:"1px solid #d1d5db","border-radius":"4px","font-size":"12px","font-family":"monospace",resize:"vertical"}},null,512),[[d,$e.value]])]),s("div",{class:x(["btn",{disabled:!Re.value||!$e.value}]),onClick:Be,style:{width:"100%",padding:"8px",background:"#3b82f6",color:"white",border:"none","border-radius":"4px",cursor:"pointer","font-size":"14px"}},u(je.value?"提交中...":"提交数据"),3),Le.value?(o(),l("div",{key:0,style:b({marginTop:"8px",padding:"8px",borderRadius:"4px",fontSize:"12px",color:"success"===Oe.value?"#10b981":"#ef4444",background:"success"===Oe.value?"#d1fae5":"#fee2e2"})},u(Le.value),5)):i("",!0)])]))}},[["__scopeId","data-v-af288edf"]]);function ye(e){const t=[];let a="",n=!1;for(let l=0;l{_.value.show=!1},2500)}let J=null;const X=t(null),Y=t(null),W=t(100),G=t(1),q=h(()=>{const e=null!==Y.value?Y.value:G.value;return Math.round(100*e)}),Z=h(()=>{if(!y.value)return 0;const e=y.value.getAnnotations();let t=0;for(const a in e)t+=e[a].length;return t});function H(){if(y.value&&D.value)try{const e=y.value.getAnnotations();I.value=function(e,t,a,n=[]){const l={version:"1.0",exportDate:(new Date).toISOString(),sourceFile:a,globalSettings:t,annotations:{}};for(const o in e){const a=e[o];Array.isArray(a)&&a.length>0&&(l.annotations[o]=a.map(e=>{const a=e.settings?.prefix??t.prefix??"",n=e.settings?.suffix??t.suffix??"",l=a+e.displayValue+n;return{x:e.x,y:e.y,x2:e.x2,y2:e.y2,displayValue:e.displayValue,label:l,style:e.style,annotationStyle:e.annotationStyle}}))}return n&&n.length>0&&(l.groups=n.map(e=>({id:e.id,name:e.name,page:e.page,weldList:e.weldList}))),JSON.stringify(l,null,2)}(e,{startNumber:pe.value,increment:ce.value,prefix:ve.value,suffix:fe.value,fontSize:ge.value,borderStyle:ie.value,annotationStyle:se.value},D.value,re.value)}catch(e){console.error("Failed to generate annotations JSON:",e)}else I.value="{}"}function K(){de.value=!de.value,de.value?(m.value=!1,M("分组模式已开启,拖动鼠标框选焊口")):M("分组模式已关闭")}function Q(e){if(!e.weldList||0===e.weldList.length)return void M("框选区域内没有焊口","error");const t=(D.value||"XXXXXX").replace(/\.[^.]+$/,"").slice(-6).toUpperCase(),a=re.value.filter(t=>t.page===e.page),n=String(a.length+1).padStart(3,"0"),l=`${t}-${e.page}-${n}`;re.value.push({id:`grp_${Date.now()}`,name:l,page:e.page,weldList:e.weldList,rect:e.rect}),H(),M(`已创建分组: ${l}(${e.weldList.length}个焊口)`)}function ee(e){re.value=re.value.filter(t=>t.id!==e),H(),M("分组已删除")}function te(e){n.value=e,D.value=e.name,v.value=1,f.value=1,Y.value=1,W.value=100,X.value=null;const t=new FileReader;t.onload=async e=>{J=e.target.result;const t=await P(J);t&&(X.value=t,p.value&&y.value&&F(()=>ne()))},t.readAsArrayBuffer(e),async function(e){$e.value="vector";try{const t=new FormData;t.append("pdf",e);const a=await fetch(`${Ve}/pdf-type`,{method:"POST",body:t});if(a.ok){const e=await a.json();$e.value=e.type||"vector"}}catch(t){console.warn("PDF类型检测失败,使用默认矢量模式:",t)}}(e)}function ae(e){p.value=e.pdf,c.value=e.numPages,v.value=1,f.value=1,X.value&&F(()=>ne());const t=document.getElementById("annotionData");if(t&&"string"==typeof t.value&&t.value.trim())try{const e=JSON.parse(t.value.trim());if(e&&e.annotations&&y.value){y.value.setAnnotations(e.annotations);const t=e.globalSettings||e.settings;t&&(pe.value=t.startNumber||1,ce.value=t.increment||1,ve.value=t.prefix||"",fe.value=t.suffix||"",ge.value=t.fontSize||10,ie.value=t.borderStyle||"none",se.value=t.annotationStyle||"circle-outline"),Array.isArray(e.groups)&&(re.value=e.groups),H()}}catch(a){console.warn("annotionData 解析失败:",a)}}function ne(){const e=X.value;e&&y.value&&(X.value=null,y.value.setAnnotations(e.annotations),e.settings&&(pe.value=e.settings.startNumber||1,ce.value=e.settings.increment||1,ve.value=e.settings.prefix||"",fe.value=e.settings.suffix||"",ge.value=e.settings.fontSize||10,ie.value=e.settings.borderStyle||"none",se.value=e.settings.annotationStyle||"circle-outline"),e.groups&&e.groups.length>0&&(re.value=e.groups),H(),M("已自动恢复PDF中的标注数据"))}function le(e){G.value=e}function oe(e){Y.value=e,W.value=Math.round(100*e)}const ie=t("none"),se=t("circle-outline"),ue=t(!0),re=t([]),de=t(!1),pe=t(1),ce=t(1),ve=t(""),fe=t(""),ge=t(10);function Ue(e){ie.value=e.borderStyle,se.value=e.annotationStyle,ue.value=e.singleClickMode??!0,pe.value=e.startNumber,ce.value=e.increment,ve.value=e.prefix,fe.value=e.suffix,ge.value=e.fontSize,M("设置已应用")}function Ie(){Y.value=+W.value/100}function Ne(){y.value&&(y.value.clearCurrentPageAnnotations(),H())}function Ee(){y.value&&(y.value.renumberCurrentPageAnnotations(pe.value,ce.value,ve.value,fe.value,ge.value),H(),M("本页焊口编号已重新标注"))}const Re=t(!1),$e=t("vector");async function je(e){if(n.value){Re.value=!0;try{let t;t="hexagon"===e?"vector"===$e.value?"detect-vector-hexagon-2":"detect-solid-hexagon":"hexagon-outline"===e?"detect-vector":"circle"===e?"detect-vector-circle":"detect-vector-hexagon-2";const a=new FormData;a.append("pdf",n.value),a.append("page",String(v.value)),"detect"===t&&(a.append("sensitivity","70"),a.append("min_size","20"),a.append("dpi","100"));const l=await fetch(`${Ve}/${t}`,{method:"POST",body:a});if(!l.ok){const e=await l.json().catch(()=>({detail:l.statusText}));throw new Error(e.detail||l.statusText)}const{welds:o}=await l.json();if(!o||0===o.length)return void M("未检测到焊口","error");let i=pe.value-ce.value;if(y.value){const e=y.value.getAnnotations();for(const t in e)for(const a of e[t])a.displayValue>i&&(i=a.displayValue)}const s=o.map((e,t)=>{const a=e.r||8,n=Math.max(2*a,20),l=i+(t+1)*ce.value;return{x:e.x+n,y:e.y-n,x2:e.x,y2:e.y,displayValue:l,text:ve.value+l+fe.value,style:ie.value,annotationStyle:se.value,settings:{prefix:ve.value,suffix:fe.value,startNumber:pe.value,increment:ce.value,fontSize:ge.value}}});y.value&&(y.value.addAnnotationsToPage(v.value,s),H(),M(`已自动标注 ${o.length} 个焊口`))}catch(t){console.error("自动标注失败:",t),M("自动标注失败: "+t.message,"error")}finally{Re.value=!1}}else M("请先打开PDF文件","error")}function Le(){y.value&&(y.value.undoLastAnnotation(),H())}async function Oe(){if(J&&y.value)try{const e=y.value.getAnnotations(),t=y.value.getPageRotations(),a=await k(J,e,U.value,{startNumber:pe.value,increment:ce.value,prefix:ve.value,suffix:fe.value,fontSize:ge.value,borderStyle:ie.value,annotationStyle:se.value},t);A(a,`annotated_${D.value||Date.now()}.pdf`),M("PDF已生成并下载")}catch(e){console.error("Failed to generate PDF:",e),M("生成PDF失败: "+e.message,"error")}else M("请先打开PDF文件","error")}async function Te(){if(J&&y.value)try{const e=y.value.getAnnotations(),t=await C(J,e,{startNumber:pe.value,increment:ce.value,prefix:ve.value,suffix:fe.value,fontSize:ge.value,borderStyle:ie.value,annotationStyle:se.value},re.value);A(t,`weld_data_${D.value||Date.now()}.pdf`),M("已导出带焊口数据的PDF(无可视标注)")}catch(e){console.error("Failed to export embedded PDF:",e),M("导出失败: "+e.message,"error")}else M("请先打开PDF文件","error")}async function _e(){if(J&&y.value)try{const e=y.value.getAnnotations(),t=y.value.getPageRotations(),a=await k(J,e,U.value,{startNumber:pe.value,increment:ce.value,prefix:ve.value,suffix:fe.value,fontSize:ge.value,borderStyle:ie.value,annotationStyle:se.value},t);A(a,`final_${D.value||Date.now()}.pdf`),M("PDF已生成并下载")}catch(e){console.error("Failed to generate PDF:",e),M("生成PDF失败: "+e.message,"error")}else M("请先打开PDF文件","error")}function Be(){if(y.value&&D.value)try{!function(e,t,a,n=[]){const{startNumber:l,increment:o,prefix:i,suffix:s}=t,u=[];u.push(["页码","标签","显示值","标签X坐标","标签Y坐标","指向X坐标","指向Y坐标","边框样式","标注样式","字体大小","前缀","后缀","起始值","增量"]);for(const v in e){const t=e[v];Array.isArray(t)&&t.forEach(e=>{const t=e.settings?.prefix??i,a=e.settings?.suffix??s,n=e.settings?.startNumber??l,r=e.settings?.increment??o,d=e.settings?.fontSize??10,p=t+e.displayValue+a;u.push([v,p,e.displayValue,Math.round(1e3*e.x)/1e3,Math.round(1e3*e.y)/1e3,void 0!==e.x2?Math.round(1e3*e.x2)/1e3:"",void 0!==e.y2?Math.round(1e3*e.y2)/1e3:"",e.style||"none",e.annotationStyle||"arrow",d,t,a,n,r])})}n&&n.length>0&&(u.push([]),u.push(["=== 焊口分组 ==="]),u.push(["分组名称","页码","焊口数量","焊口标签列表"]),n.forEach(e=>{const t=(e.weldList||[]).map(e=>e.label).join(" | ");u.push([e.name,e.page,e.weldList?.length||0,t])}));const r=u.map(e=>e.map(e=>{const t=String(e);return t.includes(",")||t.includes('"')||t.includes("\n")?`"${t.replace(/"/g,'""')}"`:t}).join(",")).join("\n"),d=new Blob(["\ufeff"+r],{type:"text/csv;charset=utf-8;"}),p=document.createElement("a"),c=URL.createObjectURL(d);p.href=c,p.download=`${a.replace(/\.[^.]+$/,"")}_annotations.csv`,document.body.appendChild(p),p.click(),document.body.removeChild(p),URL.revokeObjectURL(c)}(y.value.getAnnotations(),{startNumber:pe.value,increment:ce.value,prefix:ve.value,suffix:fe.value},D.value,re.value),M("CSV数据已导出")}catch(e){M("导出CSV失败: "+e.message,"error")}else M("请先打开PDF文件","error")}function Me(){if(y.value&&D.value)try{!function(e,t,a,n=[]){const l={version:"1.0",exportDate:(new Date).toISOString(),sourceFile:a,globalSettings:t,annotations:{}};for(const r in e){const a=e[r];Array.isArray(a)&&a.length>0&&(l.annotations[r]=a.map(e=>{const a=e.settings?.prefix??t.prefix??"",n=e.settings?.suffix??t.suffix??"",l=a+e.displayValue+n;return{x:e.x,y:e.y,x2:e.x2,y2:e.y2,displayValue:e.displayValue,label:l,style:e.style,annotationStyle:e.annotationStyle}}))}n&&n.length>0&&(l.groups=n.map(e=>({id:e.id,name:e.name,page:e.page,weldList:e.weldList})));const o=JSON.stringify(l,null,2),i=new Blob([o],{type:"application/json;charset=utf-8;"}),s=document.createElement("a"),u=URL.createObjectURL(i);s.href=u,s.download=`${a.replace(/\.[^.]+$/,"")}_annotations.json`,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(u)}(y.value.getAnnotations(),{startNumber:pe.value,increment:ce.value,prefix:ve.value,suffix:fe.value,fontSize:ge.value,borderStyle:ie.value,annotationStyle:se.value},D.value,re.value),M("JSON数据已导出(可用于还原标注)")}catch(e){M("导出JSON失败: "+e.message,"error")}else M("请先打开PDF文件","error")}async function Je(e){if(e)try{const t=await async function(e){return new Promise((t,a)=>{const n=new FileReader;n.onload=e=>{try{const a=JSON.parse(e.target.result);if(!a.annotations||!a.globalSettings)throw new Error("无效的标注数据格式");t({annotations:a.annotations,settings:a.globalSettings,sourceFile:a.sourceFile,version:a.version})}catch(n){a(new Error("解析JSON文件失败: "+n.message))}},n.onerror=()=>{a(new Error("读取文件失败"))},n.readAsText(e)})}(e);if(!window.confirm(`确定要导入标注数据吗?\n来源文件: ${t.sourceFile||"未知"}\n版本: ${t.version||"未知"}\n当前标注将被覆盖。`))return;y.value&&(y.value.setAnnotations(t.annotations),t.settings&&(pe.value=t.settings.startNumber||1,ce.value=t.settings.increment||1,ve.value=t.settings.prefix||"",fe.value=t.settings.suffix||"",ge.value=t.settings.fontSize||10,ie.value=t.settings.borderStyle||"none",se.value=t.settings.annotationStyle||"circle-outline"),M("标注数据导入成功"),H())}catch(t){M("导入失败: "+t.message,"error")}}async function Xe(e){if(e)try{const t=await async function(e){return new Promise((t,a)=>{const n=new FileReader;n.onload=n=>{try{const a=n.target.result.trim().split("\n");if(a.length<2)throw new Error("CSV文件内容不足,至少需要标题行和数据行");const l=ye(a[0]),o=["页码","标签X坐标","标签Y坐标"];for(const e of o)if(!l.includes(e))throw new Error(`缺少必要的列: ${e}`);const i={};let s={startNumber:1,increment:1,prefix:"",suffix:"",fontSize:10,borderStyle:"none",annotationStyle:"arrow"};for(let e=1;e!e))continue;const n={};for(let e=0;e{a(new Error("读取文件失败"))},n.readAsText(e,"utf-8")})}(e);if(!window.confirm(`确定要导入CSV标注数据吗?\n来源文件: ${t.sourceFile||"未知"}\n当前标注将被覆盖。`))return;y.value&&(y.value.setAnnotations(t.annotations),t.settings&&(pe.value=t.settings.startNumber||1,ce.value=t.settings.increment||1,ve.value=t.settings.prefix||"",fe.value=t.settings.suffix||"",ge.value=t.settings.fontSize||10,ie.value=t.settings.borderStyle||"none",se.value=t.settings.annotationStyle||"circle-outline"),M("CSV标注数据导入成功"),H())}catch(t){M("导入CSV失败: "+t.message,"error")}}function Ye(e){const t=v.value;U.value[t]||(U.value[t]=[]),U.value[t].push(e),y.value&&y.value.setImages(U.value),M("图片已放置")}function We(){M("已取消图片放置")}function Ge(e){U.value[e.page]=e.images,M("图片已删除")}async function qe(e){const t=e?.file,a=e?.size||80,n=e?.imageData;try{if(n)return y.value?(y.value.setTemporaryImage(n,a),void M("点击PDF上要放置表格的位置,按ESC取消")):void M("请先加载PDF","error");if(!t)return void M("请先选择图片文件","error");const e=new FileReader;e.onload=e=>{y.value?(y.value.setTemporaryImage(e.target.result,a),M("点击PDF上要放置图片的位置,按ESC取消")):M("请先加载PDF","error")},e.readAsDataURL(t)}catch(l){M("导入图片失败: "+l.message,"error")}}function Ze(){let e=V.value;if(!e){const t=document.getElementById("hdpdfurl");t&&t.value&&(e=t.value.trim())}if(!e&&n.value&&(e=URL.createObjectURL(n.value)),e){let t=`/viewer.html?url=${encodeURIComponent(e)}`;const a=document.getElementById("imgurl1"),n=document.getElementById("imgurl2");a?.value?.trim()&&(t+=`&imgurl1=${encodeURIComponent(a.value.trim())}`),n?.value?.trim()&&(t+=`&imgurl2=${encodeURIComponent(n.value.trim())}`),window.open(t,"_blank")}else M("未找到PDF地址","error")}async function He(e){if(e){V.value=e,M("正在加载在线PDF...");try{const a=await fetch(e);if(!a.ok)throw new Error(`加载失败: ${a.status} ${a.statusText}`);const l=await a.arrayBuffer(),o=new Blob([l],{type:"application/pdf"});let i="online.pdf";try{const t=new URL(e).pathname.split("/"),a=t[t.length-1];a&&a.includes(".pdf")&&(i=decodeURIComponent(a))}catch(t){}const s=new File([o],i,{type:"application/pdf"});J=l,n.value=s,D.value=i,v.value=1,f.value=1,Y.value=1,W.value=100,M("PDF加载成功")}catch(a){M("加载PDF失败: "+a.message,"error")}}}return w(()=>{try{const e=document.getElementById("hdpdfurl");if(e&&"string"==typeof e.value&&e.value.trim()){const t=e.value.trim();V.value=t,He(t)}const t=document.getElementById("hdjoinInfo");t&&"string"==typeof t.value&&t.value.trim()&&(N.value=t.value.trim())}catch(e){console.warn("Error checking for elements:",e)}}),a(v,e=>{}),(e,t)=>(o(),l("div",xe,[_.value.show?(o(),l("div",{key:0,style:b({position:"fixed",top:"20px",right:"20px",padding:"12px 16px",background:"success"===_.value.type?"#d1fae5":"#fee2e2",color:"success"===_.value.type?"#065f46":"#991b1b",borderRadius:"4px",boxShadow:"0 4px 12px rgba(0,0,0,0.15)",zIndex:9999,animation:"slideIn 0.3s ease-out",fontSize:"14px",fontWeight:"500"})},u(_.value.message),5)):i("",!0),s("div",be,[S(me,{"selected-annotation":E.value,"selected-annotation-page":R.value,"selected-annotation-index":$.value,"annotations-json":I.value,"initial-csv-data":N.value,"auto-annotating":Re.value,groups:re.value,"group-mode":de.value,onFileSelected:te,onApplySettings:Ue,onClearPageAnnotations:Ne,onRenumberPageAnnotations:Ee,onAutoAnnotatePage:je,onUndoAnnotation:Le,onSavePdfEditable:Oe,onExportPdfEmbedded:Te,onSavePdfFinal:_e,onExportCsv:Be,onExportJson:Me,onImportAnnotations:Je,onImportCsv:Xe,onImportImage:qe,onUpdateAnnotation:L,onDeleteAnnotation:O,onDeselectAnnotation:T,onLoadPdfUrl:He,onToggleGroupMode:K,onDeleteGroup:ee},null,8,["selected-annotation","selected-annotation-page","selected-annotation-index","annotations-json","initial-csv-data","auto-annotating","groups","group-mode"])]),s("div",he,[s("div",we,[s("div",{onClick:t[0]||(t[0]=e=>{m.value=!m.value,m.value&&(de.value=!1)}),style:b({background:m.value?"#334155":"#e2e8f0",color:m.value?"white":"#475569",padding:"4px 8px",borderRadius:"4px",cursor:"pointer",userSelect:"none",fontSize:"11px",whiteSpace:"nowrap"})},"标注模式"+u(m.value?":开":":关"),5),t[10]||(t[10]=s("div",{style:{width:"1px",background:"#e5e7eb",height:"26px",margin:"0 6px"}},null,-1)),s("div",{class:x(["btn",{disabled:!p.value||v.value<=1}]),onClick:t[1]||(t[1]=e=>!(!p.value||v.value<=1)&&void(v.value>1&&(v.value--,f.value=v.value,de.value=!1))),style:{"font-size":"13px",padding:"6px 10px"}},"上一页",2),s("div",{class:x(["btn",{disabled:!p.value||v.value>=c.value}]),onClick:t[2]||(t[2]=e=>!(!p.value||v.value>=c.value)&&void(v.value!p.value||(null===Y.value&&(Y.value=G.value),Y.value=Math.max(.5,+(Y.value/1.2).toFixed(2)),void(W.value=Math.round(100*Y.value)))),style:{"font-size":"13px",padding:"6px 8px"}},"-",2),s("div",{class:x(["btn",{disabled:!p.value}]),onClick:t[4]||(t[4]=e=>!p.value||(null===Y.value&&(Y.value=G.value),Y.value=Math.min(3,+(1.2*Y.value).toFixed(2)),void(W.value=Math.round(100*Y.value)))),style:{"font-size":"13px",padding:"6px 8px"}},"+",2),r(s("input",{"onUpdate:modelValue":t[5]||(t[5]=e=>W.value=e),onInput:Ie,type:"range",min:"50",max:"300",style:{width:"90px"},disabled:!p.value},null,40,Se),[[d,W.value,void 0,{number:!0}]]),s("div",ze,u(q.value)+"%",1),t[12]||(t[12]=s("div",{style:{width:"1px",background:"#e5e7eb",height:"26px",margin:"0 6px"}},null,-1)),t[13]||(t[13]=s("div",{style:{"margin-left":"4px","font-size":"13px"}},"第",-1)),r(s("input",{type:"number","onUpdate:modelValue":t[6]||(t[6]=e=>f.value=e),min:1,max:c.value,style:{width:"50px","margin-left":"4px","font-size":"13px",padding:"2px 4px"}},null,8,ke),[[d,f.value,void 0,{number:!0}]]),s("div",{class:x(["btn",{disabled:!p.value}]),onClick:t[7]||(t[7]=e=>!p.value||void(f.value>=1&&f.value<=c.value&&(v.value=f.value,de.value=!1))),style:{"font-size":"13px",padding:"6px 10px"}},"跳转",2),s("div",Ae,"/ "+u(c.value||0)+" 页",1),t[14]||(t[14]=s("div",{style:{width:"1px",background:"#e5e7eb",height:"26px",margin:"0 6px"}},null,-1)),D.value?(o(),l("div",Ce,[s("div",Pe,[t[8]||(t[8]=s("strong",null,"文件:",-1)),g(" "+u(D.value),1)]),s("div",Fe,[t[9]||(t[9]=s("strong",null,"标签:",-1)),g(" "+u(Z.value),1)])])):i("",!0),t[15]||(t[15]=s("div",{style:{flex:"1"}},null,-1)),s("div",{class:"btn",onClick:Ze,title:"在新窗口中打开纯PDF预览",style:{"font-size":"13px",padding:"6px 10px","white-space":"nowrap"}},"PDF预览")]),s("div",De,[S(z,{file:n.value,page:v.value,scale:Y.value,"annotation-mode":m.value,"border-style":ie.value,"annotation-style":se.value,"single-click-mode":ue.value,"start-number":pe.value,increment:ce.value,prefix:ve.value,suffix:fe.value,"font-size":ge.value,"group-mode":de.value,groups:re.value,ref_key:"pdfViewerRef",ref:y,onLoaded:ae,onScaleChanged:le,onWheelZoom:oe,onPlaceImage:Ye,onAnnotationSelected:j,onImagePlacingCancelled:We,onImageDeleted:Ge,onAnnotationChanged:H,onGroupCreated:Q},null,8,["file","page","scale","annotation-mode","border-style","annotation-style","single-click-mode","start-number","increment","prefix","suffix","font-size","group-mode","groups"])])])]))}}).mount("#app");