You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

28 lines
30 KiB

import{g as fe,y as xe,j as ge,c as d,a as e,k as r,p as O,F as E,r as $,m,l as z,v as K,t as i,B as ye,q as jt,A as Gt,n as Xt,d as g,C as U,s as n,x as he,o as u}from"./ydFS6PsN.js";import{u as we}from"./CWcpm1jv.js";import{u as ke}from"./CQ70mTiW.js";const Ce={class:"space-y-6"},_e={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-4"},Se={class:"flex items-end gap-3 flex-wrap"},Me={class:"form-control"},Ue=["value"],Ve={class:"form-control"},De=["value"],Ae={class:"form-control"},je={class:"form-control"},Ne={class:"grid grid-cols-3 gap-4"},Ie={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-5"},Te={class:"text-2xl font-bold text-slate-800"},Pe={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-5"},Be={class:"text-2xl font-bold text-indigo-600"},Fe={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-5"},Le={class:"text-base font-semibold text-slate-700"},Oe={class:"bg-white rounded-xl shadow-sm border border-slate-100 mt-5"},Ee={class:"flex items-center justify-between px-5 py-3 border-b border-slate-100"},$e={class:"flex items-center gap-2"},ze={class:"text-xs text-slate-400"},qe={class:"overflow-x-auto",style:{"max-height":"360px"}},Re={class:"table table-pin-rows text-sm"},He={key:0},Ge={key:1},Xe={colspan:"8",class:"text-center text-red-400 py-8"},Ye={key:2},Je={class:"text-xs text-slate-500 whitespace-nowrap"},Ke={class:"text-xs"},Qe={class:"text-xs"},We={class:"text-xs"},Ze={class:"font-mono text-xs"},ts={class:"font-mono text-xs"},es={class:"text-right font-medium"},ss={class:"flex gap-1"},ls=["onClick"],os=["onClick"],ns={class:"bg-white rounded-xl shadow-sm border border-slate-100 mt-5"},as={class:"flex items-center justify-between px-5 py-3 border-b border-slate-100 flex-wrap gap-2"},is={class:"flex items-end gap-2 flex-wrap"},ds={class:"form-control"},us={class:"form-control"},rs={class:"form-control"},cs={class:"form-control"},vs={class:"form-control"},bs={class:"form-control"},ps={class:"form-control"},ms={class:"form-control"},fs=["disabled"],xs=["disabled"],gs=["disabled"],ys=["disabled"],hs={class:"overflow-x-auto"},ws={class:"w-8"},ks={key:0},Cs={key:1},_s={colspan:"10",class:"text-center text-red-400 py-8"},Ss={key:2},Ms=["value"],Us={class:"font-mono text-xs"},Vs={class:"font-mono text-xs"},Ds={key:0,class:"badge badge-success badge-sm"},As={key:1,class:"badge badge-warning badge-sm"},js={key:2,class:"badge badge-error badge-sm"},Ns={key:0,class:"badge badge-error badge-sm"},Is={key:1,class:"badge badge-ghost badge-sm"},Ts={class:"text-xs"},Ps={class:"text-xs text-slate-500"},Bs={class:"flex gap-1"},Fs=["onClick"],Ls=["onClick"],Os=["onClick"],Es={class:"flex items-center justify-between px-5 py-3 border-t border-slate-100"},$s={class:"text-xs text-slate-500"},zs={class:"flex items-center gap-2"},qs=["disabled"],Rs={class:"text-xs text-slate-500"},Hs=["disabled"],Gs={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-2xl"},Xs={class:"form-control mb-4"},Ys=["value"],Js={class:"form-control mb-4"},Ks=["disabled"],Qs={value:0},Ws=["value"],Zs={class:"tabs tabs-boxed mb-4 bg-slate-100 inline-flex"},tl={class:"form-control mb-4"},el={class:"form-control mb-4"},sl=["required"],ll={class:"form-control mb-2"},ol={class:"form-control mb-4"},nl={class:"flex gap-3 mt-2"},al=["disabled"],il={key:0,class:"loading loading-spinner loading-xs"},dl={class:"modal-box w-11/12 max-w-2xl"},ul={class:"grid grid-cols-2 gap-4 mb-3"},rl={class:"form-control"},cl={class:"form-control"},vl={class:"form-control mb-3"},bl={class:"form-control mb-3"},pl={class:"form-control mb-4"},ml={class:"text-sm text-slate-500"},fl={class:"modal-action"},xl=["disabled"],gl={key:0,class:"loading loading-spinner loading-xs"},yl={class:"modal-box max-w-md"},hl={class:"text-sm space-y-1 mb-4"},wl={class:"font-medium"},kl={class:"font-medium"},Cl={class:"font-mono font-medium text-red-600"},_l={class:"font-medium"},Sl={class:"form-control mb-2"},Ml={class:"label"},Ul={class:"label-text text-xs"},Vl={class:"font-mono text-red-600"},Dl={class:"text-xs text-red-500 min-h-[1em] mb-2"},Al={class:"modal-action"},jl=["disabled"],Nl={key:0,class:"loading loading-spinner loading-xs"},Fl=fe({__name:"device",setup(Il){const{webApi:y}=we(),{success:h,error:V,warn:_}=ke(),w=xe(),Yt=U(()=>w.identity===1),Jt=U(()=>w.identity>0&&w.identity<=2),D=n([]),A=n([]),j=n([]),k=n([]),x=n([]),q=n(0),C=n(0),Q=n(200),N=n("production"),W=n("main"),S=n(0),b=n(0),pt=n(""),mt=n(""),ft=n("-"),xt=n("-"),gt=n("-"),yt=n(""),ht=n(!1),Z=n(""),tt=n("1"),wt=n("usedtime"),et=n(""),kt=n(""),Ct=n(""),_t=n(""),R=n("200"),St=n(null),H=n(""),st=n(!1),I=n([]),Nt=U(()=>I.value.length),It=n(null),T=n(0),G=n(0),lt=n(!1),ot=n(null),X=n(""),nt=n(!1),Y=n(null),P=n(""),at=n(null),it=n(!1),v=he({to:"",cc:"",subject:"",content:""}),Mt=n(null),p=n(null),dt=n(""),ut=n(""),rt=n(!1),Kt=U(()=>!!p.value&&dt.value.trim()===String(p.value.probatch)),Tt=U(()=>Math.max(1,Math.ceil(q.value/Q.value))),Qt=U(()=>b.value?"第 "+(C.value+1)+" / "+Tt.value+" 页":"-"),Pt=U(()=>S.value?A.value.filter(l=>l.factoryid===S.value):A.value),Bt=U(()=>T.value?A.value.filter(l=>l.factoryid===T.value):[]);function ct(l){if(!l)return"-";const t=new Date(l*1e3);return t.getFullYear()+"-"+String(t.getMonth()+1).padStart(2,"0")+"-"+String(t.getDate()).padStart(2,"0")+" "+String(t.getHours()).padStart(2,"0")+":"+String(t.getMinutes()).padStart(2,"0")}function Ft(l,t){if(!l)return 0;const s=new Date(l+(t?"T23:59:59":"T00:00:00"));return Math.floor(s.getTime()/1e3)}function Ut(l){const t=D.value.find(s=>s.id===l);return t?t.factory:String(l||"")}function Vt(l){const t=j.value.find(s=>s.id===l);return t?t.devicename:String(l||"")}function Lt(l){return l?Number(l).toString(16).toUpperCase():""}async function Wt(){try{const[t,s]=await Promise.all([y("getfactorys",{}),y("getproducts",{})]);D.value=t?.factorys??[],j.value=s?.products??[]}catch(t){V(t?.message??"加载基础数据失败"),D.value=[],j.value=[]}const l=w.products.map(t=>parseInt(t)).filter(t=>!isNaN(t)&&t>0);w.identity!==1&&l.length>0?A.value=j.value.filter(t=>l.indexOf(t.id)>=0):A.value=j.value.slice(),A.value.length>0&&(b.value=A.value[0].id),B()}function vt(){W.value="main"}function Zt(){W.value="create",T.value=0,G.value=0,lt.value=!1,ot.value=null,X.value="",Dt("production")}function te(){b.value&&!Pt.value.find(l=>l.id===b.value)&&(b.value=0),B()}function ee(){C.value=0,B()}function Ot(){let l;if(R.value==="custom"){if(l=Number(St.value),!l||l<1)return}else l=parseInt(R.value);l>2e3&&(l=2e3),Q.value=l,F(!0)}function B(){Et(),F(!0)}async function Et(){ht.value=!0,Z.value="";const l={limit:500};S.value&&(l.factoryid=S.value),b.value&&(l.productid=b.value);const t=Ft(pt.value,!1);t&&(l.start=t);const s=Ft(mt.value,!0);s&&(l.end=s);try{const o=await y("getfactorydeliverynotes",l);k.value=o?.notes??[],ft.value=o?.total_batch??0,xt.value=o?.total_devices??0,gt.value=k.value.length?ct(k.value[0].ts):"-",yt.value="共 "+k.value.length+" 条"}catch(o){Z.value=o?.message??"",k.value=[],ft.value="0",xt.value="0",gt.value="-",yt.value=""}finally{ht.value=!1}}function se(l,t,s,o){p.value={factoryid:l,productid:t,probatch:s,devicetnum:o},dt.value="",ut.value="",Mt.value?.showModal()}function $t(){Mt.value?.close(),p.value=null}async function le(){if(p.value){rt.value=!0,ut.value="";try{const l=await y("revokefactorydevics",{factoryid:p.value.factoryid,productid:p.value.productid,probatch:p.value.probatch});$t(),h("已撤销批次,删除 "+(l?.deleted??0)+" 个设备码"),B()}catch(l){ut.value=l?.message??"撤销失败"}finally{rt.value=!1}}}function oe(l,t){b.value=l,et.value=String(t),tt.value="0",C.value=0,F(!0),setTimeout(()=>{It.value?.scrollIntoView({behavior:"smooth",block:"start"})},100)}function zt(){const l={productid:b.value,sortby:wt.value,order:"desc"},t=parseInt(tt.value);isNaN(t)||(l.status=t),S.value&&(l.factoryid=S.value);const s=parseInt(et.value);s&&(l.probatch=s);const o=kt.value.trim();o&&(l.code=o);const a=Ct.value.trim();a&&(l.devicemac=a);const f=_t.value.trim();return f&&(l.uid=f),l}async function F(l){if(l&&(C.value=0),I.value=[],st.value=!1,!b.value){x.value=[],q.value=0,H.value="";return}const t=Object.assign(zt(),{limit:Q.value,offset:C.value*Q.value});try{const s=await y("getfactorydevics",t);x.value=s?.devices??[],q.value=s?.total??0,H.value=""}catch(s){H.value=s?.message??"",x.value=[],q.value=0}}function qt(l){C.value=Math.max(0,C.value+l),F(!1)}async function ne(l){if(window.confirm("确定重置该设备授权状态?"))try{await y("resetlicensestatus",{licenses:l}),h("重置成功"),F(!1),Et()}catch(t){V(t?.message??"失败")}}function ae(){st.value?I.value=x.value.map(l=>l.code||""):I.value=[]}async function bt(l,t){if(!b.value){_("请先选择产品");return}const s=t??I.value.slice();if(!s.length){_("请先勾选设备码");return}const o=l===-1?"禁用":"恢复";if(window.confirm("确定"+o+" "+s.length+" 个设备码?"+(l===-1?`
禁用后该设备码将无法绑定。`:"")))try{const a=await y("disablefactorydevics",{productid:b.value,codes:s,disabled:l});h(o+"成功("+(a?.affected??0)+" 条)"),F(!1)}catch(a){V(a?.message??o+"失败")}}function ie(){G.value=0}function Dt(l){N.value=l}function de(l){const s=l.target.files?.[0];if(!s)return;const o=new FileReader;o.onload=a=>{const f=String(a.target?.result??"").split(`
`),c=[];f.forEach(L=>{const M=L.split(",");M[0]&&M[0].trim()&&c.push(M[0].trim())}),X.value=c.join(", "),h("读取 "+c.length+" 个 MAC 地址")},o.readAsText(s,"UTF-8")}async function ue(){const l=Number(T.value),t=Number(G.value);if(!l||!t){_("请选择厂家和产品");return}const s={factoryid:l,productid:t};if(N.value==="production"){if(s.createtype=1,s.number=Number(ot.value),s.isbindmac=lt.value,!s.number||s.number<1){_("请输入有效数量");return}}else{s.createtype=2;const o=X.value.trim();if(!o){_("请输入或上传 MAC 地址");return}s.macaddresses=o}nt.value=!0;try{const o=await y("createfactorydevics",s);o&&o.devices&&o.devices.length>0?(h("成功生成 "+o.devices.length+" 个授权码"),At(o.devices),ve(o,l,t)):(h("创建成功"),vt(),B())}catch(o){V(o?.message??"创建失败")}finally{nt.value=!1}}function At(l){const t=l.some(c=>c.devicemac),s=t?["License","Mac地址"]:["License"],o=l.map(c=>t?[c.code||"",c.devicemac||""]:[c.code||""]),a=[s.join(",")].concat(o.map(c=>c.join(","))).join(`
`);Y.value=new Blob([a],{type:"text/csv;charset=utf-8;"});const f=l[0];P.value="设备生产_"+(f.factoryid||"unknown")+"_"+(f.productid||"unknown")+"_"+new Date().toISOString().split("T")[0]+".csv"}async function re(){if(!b.value){_("请先选择产品");return}try{const l=zt(),t=2e3;let s=[],o=0,a=1/0;for(;s.length<a;){const f=Object.assign({},l,{limit:t,offset:o}),c=await y("getfactorydevics",f);a=c?.total??0;const L=c?.devices??[];if(s=s.concat(L),L.length===0)break;o+=t}if(s.length===0){_("没有数据可导出");return}At(s),Y.value&&Rt(Y.value,P.value),h("已导出全部 "+s.length+" 条")}catch(l){V(l?.message??"导出失败")}}function ce(){if(!k.value.length){_("没有数据可导出");return}const l=["生产时间","厂家","产品","批次","起始MAC","结束MAC","数量"],t=k.value.map(a=>[ct(a.ts),Ut(a.factoryid),Vt(a.productid),a.probatch||0,a.startmac||"",a.endmac||"",a.devicetnum||0]),s=[l.join(",")].concat(t.map(a=>a.join(","))).join(`
`),o=new Blob([s],{type:"text/csv;charset=utf-8;"});Rt(o,"生产记录_"+new Date().toISOString().split("T")[0]+".csv"),h("导出成功")}function Rt(l,t){const s=URL.createObjectURL(l),o=document.createElement("a");o.href=s,o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(s)}function ve(l,t,s){const o=D.value.find(J=>J.id===t),a=j.value.find(J=>J.id===s),f=a?a.devicename:"未知产品(ID:"+s+")",c=o?o.factoryflag:null,L=c!=null?parseInt(c,16):null;let M=[];o&&o.contactmails&&(M=o.contactmails.split(",").map(J=>J.trim()).filter(Boolean)),v.to=M[0]||"",v.cc=M.length>1?M.slice(1).join(","):"";const me=new Date().toLocaleDateString();v.subject="【生产通知】批次"+(l.probatch||"")+"设备生产通知 - "+me,v.content=`尊敬的合作伙伴:
我公司向贵司发送产品生产通知函。
设备地址区间为:`+(l.startmac||"")+"-"+(l.endmac||"")+`
生产批次:`+(l.probatch||"")+`
服务ID(CID): 0x`+(L!=null?L.toString(16).padStart(4,"0").toUpperCase():"N/A")+`
厂家ID(BID): 0x`+(t!=null?Number(t).toString(16).padStart(4,"0").toUpperCase():"N/A")+`
产品ID(PID): 0x`+(s!=null?Number(s).toString(16).padStart(4,"0").toUpperCase():"N/A")+`
产品名称: `+f+`
生产数量:`+(l.number||0)+`
请查收附件中的设备详细信息。
此致
敬礼!`,at.value?.showModal()}function be(){if(x.value.length===0)return;At(x.value);const l=x.value[0],t=D.value.find(c=>c.id===l.factoryid),s=j.value.find(c=>c.id===l.productid),o=s?s.devicename:"";let a=[];t&&t.contactmails&&(a=t.contactmails.split(",").map(c=>c.trim()).filter(Boolean)),v.to=a[0]||"",v.cc=a.length>1?a.slice(1).join(","):"";const f=new Date().toLocaleDateString();v.subject="【授权码清单】"+(o||"设备")+" - "+f,v.content=`尊敬的合作伙伴:
附件为当前查询的授权码清单,共 `+x.value.length+` 条记录。
`+(o?"产品:"+o+`
`:"")+`
请查收。
此致
敬礼!`,at.value?.showModal()}function Ht(){at.value?.close()}async function pe(){it.value=!0;const l=new FormData;l.append("to",v.to),l.append("subject",v.subject),l.append("content",v.content);const t=v.cc.trim();if(t&&l.append("cc",t),Y.value&&P.value){const s=new File([Y.value],P.value,{type:"text/csv"});l.append("file",s,P.value)}try{const s={};w.token&&(s.Authorization=w.token),w.currentAppId&&(s["X-App-Id"]=String(w.currentAppId));const a=await(await fetch("/web/api/api_sendsmtpemail",{method:"POST",headers:s,body:l})).json();a.code===0?(h("邮件发送成功"),Ht(),vt(),B()):V("发送失败: "+(a.msg||"未知错误"))}catch(s){V("发送失败: "+(s?.message??""))}finally{it.value=!1}}return ge(Wt),(l,t)=>(u(),d("div",Ce,[e("div",_e,[e("div",Se,[e("div",Me,[t[32]||(t[32]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"厂家")],-1)),r(e("select",{"onUpdate:modelValue":t[0]||(t[0]=s=>S.value=s),class:"select select-bordered select-sm",style:{"min-width":"160px"},onChange:te},[t[31]||(t[31]=e("option",{value:0},"全部",-1)),(u(!0),d(E,null,$(D.value,s=>(u(),d("option",{key:s.id,value:s.id},i(s.factory||""),9,Ue))),128))],544),[[O,S.value,void 0,{number:!0}]])]),e("div",Ve,[t[34]||(t[34]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"产品")],-1)),r(e("select",{"onUpdate:modelValue":t[1]||(t[1]=s=>b.value=s),class:"select select-bordered select-sm",style:{"min-width":"200px"},onChange:ee},[t[33]||(t[33]=e("option",{value:0},"请选择产品",-1)),(u(!0),d(E,null,$(Pt.value,s=>(u(),d("option",{key:s.id,value:s.id},i(s.devicename||""),9,De))),128))],544),[[O,b.value,void 0,{number:!0}]])]),e("div",Ae,[t[35]||(t[35]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"起始时间")],-1)),r(e("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>pt.value=s),type:"date",class:"input input-bordered input-sm"},null,512),[[m,pt.value]])]),e("div",je,[t[36]||(t[36]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"结束时间")],-1)),r(e("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>mt.value=s),type:"date",class:"input input-bordered input-sm"},null,512),[[m,mt.value]])]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:B},"查询"),Jt.value?(u(),d("button",{key:0,class:"btn btn-success btn-sm text-white",onClick:Zt},"+ 生成授权码")):z("",!0)])]),r(e("div",null,[e("div",Ne,[e("div",Ie,[t[37]||(t[37]=e("div",{class:"text-xs text-slate-400 mb-1"},"命中批次数",-1)),e("div",Te,i(ft.value),1)]),e("div",Pe,[t[38]||(t[38]=e("div",{class:"text-xs text-slate-400 mb-1"},"生产设备总数",-1)),e("div",Be,i(xt.value),1)]),e("div",Fe,[t[39]||(t[39]=e("div",{class:"text-xs text-slate-400 mb-1"},"最近一次生产时间",-1)),e("div",Le,i(gt.value),1)])]),e("div",Oe,[e("div",Ee,[t[40]||(t[40]=e("h3",{class:"text-sm font-semibold text-slate-700"},"生产记录(按批次)",-1)),e("div",$e,[e("span",ze,i(yt.value),1),e("button",{class:"btn btn-ghost btn-xs",onClick:ce},"导出CSV")])]),e("div",qe,[e("table",Re,[t[43]||(t[43]=e("thead",null,[e("tr",null,[e("th",{class:"w-40"},"生产时间"),e("th",null,"厂家"),e("th",null,"产品"),e("th",null,"批次"),e("th",null,"起始MAC"),e("th",null,"结束MAC"),e("th",{class:"text-right"},"数量"),e("th",null,"操作")])],-1)),e("tbody",null,[ht.value?(u(),d("tr",He,[...t[41]||(t[41]=[e("td",{colspan:"8",class:"text-center text-slate-400 py-8"},"加载中…",-1)])])):Z.value?(u(),d("tr",Ge,[e("td",Xe,"查询失败: "+i(Z.value),1)])):k.value.length?(u(!0),d(E,{key:3},$(k.value,(s,o)=>(u(),d("tr",{key:o,class:"hover"},[e("td",Je,i(ct(s.ts)),1),e("td",Ke,i(Ut(s.factoryid)),1),e("td",Qe,i(Vt(s.productid)),1),e("td",We,i(s.probatch||0),1),e("td",Ze,i(s.startmac||""),1),e("td",ts,i(s.endmac||""),1),e("td",es,i(s.devicetnum||0),1),e("td",null,[e("div",ss,[e("button",{class:"btn btn-ghost btn-xs text-indigo-500",onClick:a=>oe(s.productid,s.probatch)},"查看授权码",8,ls),Yt.value?(u(),d("button",{key:0,class:"btn btn-ghost btn-xs text-red-500",onClick:a=>se(s.factoryid,s.productid,s.probatch,s.devicetnum||0)},"撤销",8,os)):z("",!0)])])]))),128)):(u(),d("tr",Ye,[...t[42]||(t[42]=[e("td",{colspan:"8",class:"text-center text-slate-400 py-8"},"暂无数据",-1)])]))])])])]),e("div",ns,[e("div",as,[t[55]||(t[55]=e("h3",{class:"text-sm font-semibold text-slate-700"},"授权码记录",-1)),e("div",is,[e("div",ds,[t[45]||(t[45]=e("label",{class:"label py-0"},[e("span",{class:"label-text text-xs"},"状态")],-1)),r(e("select",{"onUpdate:modelValue":t[4]||(t[4]=s=>tt.value=s),class:"select select-bordered select-xs"},[...t[44]||(t[44]=[e("option",{value:"1"},"已激活",-1),e("option",{value:"-1"},"未使用",-1),e("option",{value:"2"},"已过期",-1),e("option",{value:"0"},"全部",-1)])],512),[[O,tt.value]])]),e("div",us,[t[47]||(t[47]=e("label",{class:"label py-0"},[e("span",{class:"label-text text-xs"},"排序")],-1)),r(e("select",{"onUpdate:modelValue":t[5]||(t[5]=s=>wt.value=s),class:"select select-bordered select-xs"},[...t[46]||(t[46]=[e("option",{value:"usedtime"},"激活时间",-1),e("option",{value:"createtime"},"创建时间",-1)])],512),[[O,wt.value]])]),e("div",rs,[t[48]||(t[48]=e("label",{class:"label py-0"},[e("span",{class:"label-text text-xs"},"批次")],-1)),r(e("input",{"onUpdate:modelValue":t[6]||(t[6]=s=>et.value=s),type:"number",class:"input input-bordered input-xs",placeholder:"批次号",style:{width:"90px"}},null,512),[[m,et.value]])]),e("div",cs,[t[49]||(t[49]=e("label",{class:"label py-0"},[e("span",{class:"label-text text-xs"},"授权码")],-1)),r(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>kt.value=s),type:"text",class:"input input-bordered input-xs",placeholder:"授权码"},null,512),[[m,kt.value]])]),e("div",vs,[t[50]||(t[50]=e("label",{class:"label py-0"},[e("span",{class:"label-text text-xs"},"MAC")],-1)),r(e("input",{"onUpdate:modelValue":t[8]||(t[8]=s=>Ct.value=s),type:"text",class:"input input-bordered input-xs",placeholder:"MAC"},null,512),[[m,Ct.value]])]),e("div",bs,[t[51]||(t[51]=e("label",{class:"label py-0"},[e("span",{class:"label-text text-xs"},"用户UID")],-1)),r(e("input",{"onUpdate:modelValue":t[9]||(t[9]=s=>_t.value=s),type:"text",class:"input input-bordered input-xs",placeholder:"UID"},null,512),[[m,_t.value]])]),e("div",ps,[t[53]||(t[53]=e("label",{class:"label py-0"},[e("span",{class:"label-text text-xs"},"每页数量")],-1)),r(e("select",{"onUpdate:modelValue":t[10]||(t[10]=s=>R.value=s),class:"select select-bordered select-xs",onChange:Ot},[...t[52]||(t[52]=[ye('<option value="20">20</option><option value="50">50</option><option value="100">100</option><option value="200">200</option><option value="500">500</option><option value="custom">自定义</option>',6)])],544),[[O,R.value]])]),r(e("div",ms,[t[54]||(t[54]=e("label",{class:"label py-0"},[e("span",{class:"label-text text-xs"},"自定义")],-1)),r(e("input",{"onUpdate:modelValue":t[11]||(t[11]=s=>St.value=s),type:"number",min:"1",max:"2000",class:"input input-bordered input-xs",placeholder:"1-2000",style:{width:"90px"},onChange:Ot},null,544),[[m,St.value,void 0,{number:!0}]])],512),[[K,R.value==="custom"]]),e("button",{class:"btn btn-primary btn-xs text-white",onClick:t[12]||(t[12]=s=>F(!0))},"搜索"),e("button",{class:"btn btn-error btn-xs text-white",disabled:Nt.value===0,onClick:t[13]||(t[13]=s=>bt(-1))},"批量禁用",8,fs),e("button",{class:"btn btn-warning btn-xs text-white",disabled:Nt.value===0,onClick:t[14]||(t[14]=s=>bt(0))},"批量恢复",8,xs),e("button",{class:"btn btn-ghost btn-xs",disabled:!x.value.length,onClick:re},"导出",8,gs),e("button",{class:"btn btn-ghost btn-xs",disabled:!x.value.length,onClick:be},"发邮件",8,ys)])]),e("div",hs,[e("table",{ref_key:"devicesTable",ref:It,class:"table table-zebra text-sm"},[e("thead",null,[e("tr",null,[e("th",ws,[r(e("input",{"onUpdate:modelValue":t[15]||(t[15]=s=>st.value=s),type:"checkbox",class:"checkbox checkbox-xs",onChange:ae},null,544),[[jt,st.value]])]),t[56]||(t[56]=e("th",null,"授权码",-1)),t[57]||(t[57]=e("th",null,"类型",-1)),t[58]||(t[58]=e("th",null,"批次",-1)),t[59]||(t[59]=e("th",null,"MAC",-1)),t[60]||(t[60]=e("th",null,"状态",-1)),t[61]||(t[61]=e("th",null,"封禁",-1)),t[62]||(t[62]=e("th",null,"用户UID",-1)),t[63]||(t[63]=e("th",null,"激活时间",-1)),t[64]||(t[64]=e("th",null,"操作",-1))])]),e("tbody",null,[b.value?H.value?(u(),d("tr",Cs,[e("td",_s,"查询失败: "+i(H.value),1)])):x.value.length?(u(!0),d(E,{key:3},$(x.value,(s,o)=>(u(),d("tr",{key:o},[e("td",null,[r(e("input",{"onUpdate:modelValue":t[16]||(t[16]=a=>I.value=a),type:"checkbox",class:"checkbox checkbox-xs",value:s.code||""},null,8,Ms),[[jt,I.value]])]),e("td",Us,i(s.code||""),1),e("td",null,i(s.codetype===0?"授权码":"设备码"),1),e("td",null,i(s.probatch),1),e("td",Vs,i(s.devicemac||""),1),e("td",null,[s.status===0?(u(),d("span",Ds,"未使用")):s.status===1?(u(),d("span",As,"已使用")):(u(),d("span",js,"已过期"))]),e("td",null,[s.disabled!==0?(u(),d("span",Ns,"已禁用")):(u(),d("span",Is,"正常"))]),e("td",Ts,i(s.uid||""),1),e("td",Ps,i(s.usedtime?ct(s.usedtime):"-"),1),e("td",null,[e("div",Bs,[s.disabled!==0?(u(),d("button",{key:0,class:"btn btn-ghost btn-xs text-warning",onClick:a=>bt(0,[s.code])},"恢复",8,Fs)):(u(),d("button",{key:1,class:"btn btn-ghost btn-xs text-error",onClick:a=>bt(-1,[s.code])},"禁用",8,Ls)),s.status!==0?(u(),d("button",{key:2,class:"btn btn-ghost btn-xs text-orange-500",onClick:a=>ne(s.code)},"重置",8,Os)):z("",!0)])])]))),128)):(u(),d("tr",Ss,[...t[66]||(t[66]=[e("td",{colspan:"10",class:"text-center text-slate-400 py-8"},"暂无数据",-1)])])):(u(),d("tr",ks,[...t[65]||(t[65]=[e("td",{colspan:"10",class:"text-center text-slate-400 py-8"},"请先选择产品",-1)])]))])],512)]),e("div",Es,[e("span",$s,i(b.value?"共 "+q.value+" 条":"-"),1),e("div",zs,[e("button",{class:"btn btn-ghost btn-xs",disabled:C.value<=0||!b.value,onClick:t[17]||(t[17]=s=>qt(-1))},"上一页",8,qs),e("span",Rs,i(Qt.value),1),e("button",{class:"btn btn-ghost btn-xs",disabled:!b.value||C.value+1>=Tt.value,onClick:t[18]||(t[18]=s=>qt(1))},"下一页",8,Hs)])])])],512),[[K,W.value==="main"]]),r(e("div",null,[e("div",{class:"flex items-center gap-3 mb-5"},[e("button",{class:"btn btn-ghost btn-sm",onClick:vt},"← 返回"),t[67]||(t[67]=e("h2",{class:"text-lg font-semibold text-slate-800"},"生成授权码",-1))]),e("div",Gs,[e("form",{onSubmit:Gt(ue,["prevent"])},[e("div",Xs,[t[69]||(t[69]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"厂家 *")],-1)),r(e("select",{"onUpdate:modelValue":t[19]||(t[19]=s=>T.value=s),class:"select select-bordered w-full",required:"",onChange:ie},[t[68]||(t[68]=e("option",{value:0},"请选择厂家",-1)),(u(!0),d(E,null,$(D.value,s=>(u(),d("option",{key:s.id,value:s.id},i((s.factory||"")+" ("+Lt(s.id)+")"),9,Ys))),128))],544),[[O,T.value,void 0,{number:!0}]])]),e("div",Js,[t[70]||(t[70]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"产品 *")],-1)),r(e("select",{"onUpdate:modelValue":t[20]||(t[20]=s=>G.value=s),class:"select select-bordered w-full",required:"",disabled:!Bt.value.length},[e("option",Qs,i(T.value?"请选择产品":"请先选择厂家"),1),(u(!0),d(E,null,$(Bt.value,s=>(u(),d("option",{key:s.id,value:s.id},i((s.devicename||"")+" ("+Lt(s.id)+")"),9,Ws))),128))],8,Ks),[[O,G.value,void 0,{number:!0}]])]),e("div",Zs,[e("a",{class:Xt(["tab",{"tab-active":N.value==="production"}]),onClick:t[21]||(t[21]=s=>Dt("production"))},"生产",2),e("a",{class:Xt(["tab",{"tab-active":N.value==="import"}]),onClick:t[22]||(t[22]=s=>Dt("import"))},"导入",2)]),r(e("div",null,[e("div",tl,[t[71]||(t[71]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"绑定MAC地址")],-1)),r(e("input",{"onUpdate:modelValue":t[23]||(t[23]=s=>lt.value=s),type:"checkbox",class:"toggle toggle-primary"},null,512),[[jt,lt.value]])]),e("div",el,[t[72]||(t[72]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"数量 *")],-1)),r(e("input",{"onUpdate:modelValue":t[24]||(t[24]=s=>ot.value=s),type:"number",class:"input input-bordered w-full",min:"1",max:"10000",placeholder:"请输入生产数量",required:N.value==="production"},null,8,sl),[[m,ot.value,void 0,{number:!0}]])])],512),[[K,N.value==="production"]]),r(e("div",null,[e("div",ll,[t[73]||(t[73]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"上传 CSV 文件")],-1)),e("input",{type:"file",class:"file-input file-input-bordered file-input-sm w-full",accept:".csv",onChange:de},null,32),t[74]||(t[74]=e("p",{class:"text-xs text-slate-400 mt-1"},"上传 CSV 文件,系统将读取第一列作为 MAC 地址",-1))]),e("div",ol,[t[75]||(t[75]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"MAC 地址列表 *")],-1)),r(e("textarea",{"onUpdate:modelValue":t[25]||(t[25]=s=>X.value=s),class:"textarea textarea-bordered w-full",rows:"4",placeholder:"MAC 地址以逗号分隔,可手动输入或通过CSV导入"},null,512),[[m,X.value]])])],512),[[K,N.value==="import"]]),e("div",nl,[e("button",{type:"button",class:"btn btn-ghost",onClick:vt},"取消"),e("button",{type:"submit",class:"btn btn-primary text-white",disabled:nt.value},[nt.value?(u(),d("span",il)):z("",!0),t[76]||(t[76]=g("生成 ",-1))],8,al)])],32)])],512),[[K,W.value==="create"]]),e("dialog",{ref_key:"emailModal",ref:at,class:"modal"},[e("div",dl,[t[83]||(t[83]=e("h3",{class:"font-bold text-lg mb-4 flex items-center gap-2"},[e("svg",{class:"h-5 w-5 text-blue-500",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})]),g(" 发送邮件通知 ")],-1)),e("form",{onSubmit:Gt(pe,["prevent"])},[e("div",ul,[e("div",rl,[t[77]||(t[77]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"收件人 *")],-1)),r(e("input",{"onUpdate:modelValue":t[26]||(t[26]=s=>v.to=s),type:"email",class:"input input-bordered input-sm w-full",required:""},null,512),[[m,v.to]])]),e("div",cl,[t[78]||(t[78]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"抄送")],-1)),r(e("input",{"onUpdate:modelValue":t[27]||(t[27]=s=>v.cc=s),type:"text",class:"input input-bordered input-sm w-full",placeholder:"多个邮箱用逗号分隔"},null,512),[[m,v.cc]])])]),e("div",vl,[t[79]||(t[79]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"主题 *")],-1)),r(e("input",{"onUpdate:modelValue":t[28]||(t[28]=s=>v.subject=s),type:"text",class:"input input-bordered input-sm w-full",required:""},null,512),[[m,v.subject]])]),e("div",bl,[t[80]||(t[80]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"内容 *")],-1)),r(e("textarea",{"onUpdate:modelValue":t[29]||(t[29]=s=>v.content=s),class:"textarea textarea-bordered w-full",rows:"10",required:""},null,512),[[m,v.content]])]),e("div",pl,[t[81]||(t[81]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"附件")],-1)),e("div",ml,i(P.value?"📎 "+P.value:"无附件"),1)]),e("div",fl,[e("button",{type:"button",class:"btn btn-ghost btn-sm",onClick:Ht},"取消"),e("button",{type:"submit",class:"btn btn-primary btn-sm text-white",disabled:it.value},[it.value?(u(),d("span",gl)):z("",!0),t[82]||(t[82]=g("发送邮件 ",-1))],8,xl)])],32)]),t[84]||(t[84]=e("form",{method:"dialog",class:"modal-backdrop"},[e("button",null,"close")],-1))],512),e("dialog",{ref_key:"revokeModal",ref:Mt,class:"modal"},[e("div",yl,[t[92]||(t[92]=e("h3",{class:"font-bold text-lg mb-3 flex items-center gap-2 text-red-600"},[e("svg",{class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01M4.93 19h14.14a2 2 0 001.74-3L13.74 4a2 2 0 00-3.48 0L3.19 16a2 2 0 001.74 3z"})]),g(" 撤销生产批次 ")],-1)),t[93]||(t[93]=e("div",{class:"bg-red-50 border border-red-200 rounded-lg p-3 text-sm text-red-700 mb-4"},[g(" 此操作将"),e("strong",null,"删除该批次的全部设备码"),g("以及对应的生产出货记录,"),e("strong",null,"不可恢复"),g("。"),e("br"),g(" 若该批次中已有任意设备码被激活/绑定,撤销会被拒绝。 ")],-1)),e("div",hl,[e("div",null,[t[85]||(t[85]=e("span",{class:"text-slate-500"},"厂家:",-1)),e("span",wl,i(p.value?Ut(p.value.factoryid):""),1)]),e("div",null,[t[86]||(t[86]=e("span",{class:"text-slate-500"},"产品:",-1)),e("span",kl,i(p.value?Vt(p.value.productid):""),1)]),e("div",null,[t[87]||(t[87]=e("span",{class:"text-slate-500"},"批次:",-1)),e("span",Cl,i(p.value?p.value.probatch:""),1)]),e("div",null,[t[88]||(t[88]=e("span",{class:"text-slate-500"},"设备码数量:",-1)),e("span",_l,i(p.value?p.value.devicetnum:""),1)])]),e("div",Sl,[e("label",Ml,[e("span",Ul,[t[89]||(t[89]=g("请输入批次号 ",-1)),e("span",Vl,i(p.value?p.value.probatch:""),1),t[90]||(t[90]=g(" 以确认撤销",-1))])]),r(e("input",{"onUpdate:modelValue":t[30]||(t[30]=s=>dt.value=s),type:"text",class:"input input-bordered input-sm w-full",autocomplete:"off"},null,512),[[m,dt.value]])]),e("p",Dl,i(ut.value),1),e("div",Al,[e("button",{type:"button",class:"btn btn-ghost btn-sm",onClick:$t},"取消"),e("button",{type:"button",class:"btn btn-error btn-sm text-white",disabled:!Kt.value||rt.value,onClick:le},[rt.value?(u(),d("span",Nl)):z("",!0),t[91]||(t[91]=g("确认撤销 ",-1))],8,jl)])]),t[94]||(t[94]=e("form",{method:"dialog",class:"modal-backdrop"},[e("button",null,"close")],-1))],512)]))}});export{Fl as default};