Files
aiot-platform-ui/apps/web-antd/dist/js/device-detail-drawer-kWdfwcbV.js
lzh 2deb263bf9
All checks were successful
Web UI CI/CD / build-and-deploy (push) Successful in 8s
chore: build and deploy web-antd
2026-03-08 00:18:15 +08:00

4 lines
11 KiB
JavaScript

var k=(j,B,h)=>new Promise((c,f)=>{var b=m=>{try{p(h.next(m))}catch(C){f(C)}},w=m=>{try{p(h.throw(m))}catch(C){f(C)}},p=m=>m.done?c(m.value):Promise.resolve(m.value).then(b,w);p((h=h.apply(j,B)).next())});import{S as ae,au as F,cF as pe,an as x,bE as M,bX as ye,c7 as be,ay as U,aL as ge,aM as he,aO as ke,a9 as O,ac as Se}from"./bootstrap-D7yvUSkm.js";import{a as Te,b as A}from"./index-CFun89a0.js";import{u as xe,r as De}from"./index-CVM93Ie1.js";import{g as te}from"./index-BIjDa1nf.js";import{R as we,b as Ce}from"./data-DwDO8iXi.js";import{a as g}from"./index-Bzv5Y3Lm.js";import{u as Ie,_ as Ne}from"./use-echarts-DrKKJR56.js";import{_ as Oe}from"./code-editor.vue_vue_type_script_setup_true_lang-DUlprS9C.js";import{m as Re,b9 as d,aa as R,n as se,ab as D,b2 as r,bJ as n,j as o,u as l,ai as v,bp as u,ad as _,I as E,ae as s,aT as G,bb as Ee,ac as V,aR as Le,cT as ze}from"../jse/index-index-BAlyf32H.js";import{u as Ae}from"./use-drawer-CWn_8guH.js";import"./x-CIB7fInP.js";const Be={key:0,class:"traffic-realtime"},Pe={class:"traffic-stats"},Je={class:"traffic-stats__item traffic-stats__item--in"},Fe={class:"traffic-stats__value"},Me={class:"traffic-stats__item traffic-stats__item--out"},Ue={class:"traffic-stats__value"},Ge={class:"traffic-stats__item traffic-stats__item--net"},Ve={class:"traffic-stats__value"},je={key:0,class:"badge-realtime"},$e={class:"badge-row"},He={class:"badge-item"},Ke={class:"badge-item__content"},Ye={class:"badge-item"},Xe={class:"badge-item__icon badge-item__icon--bt"},qe={class:"badge-item__content"},Qe={class:"badge-item__value"},We={key:0,class:"beacon-list"},Ze={class:"beacon-item__mac"},ea={class:"beacon-item__signal"},aa={key:1,class:"beacon-empty"},ta={class:"config-form"},sa={class:"config-item"},la={class:"config-item"},oa={class:"config-item config-item--block"},ia={key:0,class:"config-error-hint"},na={class:"config-actions"},ra=Re({__name:"device-detail-drawer",emits:["success"],setup(j,{emit:B}){const h=B,c=d(null),f=d(null),b=d([]),w=d(!1),p=d(!1),m=d(!1),C=R(()=>{var a;return((a=c.value)==null?void 0:a.relationType)==="TRAFFIC_COUNTER"}),le=R(()=>{var a;return((a=c.value)==null?void 0:a.relationType)==="BADGE"}),y=d(null),$=d(),{renderEcharts:H}=Ie($);function K(){var t,i;const a=y.value;if(!((i=(t=a==null?void 0:a.hourlyTrend)==null?void 0:t.hours)!=null&&i.length))return{};const e=a.hourlyTrend;return{tooltip:{trigger:"axis"},legend:{data:["进入","离开"],top:"2%",textStyle:{fontSize:11}},grid:{left:"3%",right:"4%",bottom:"3%",top:"18%",containLabel:!0},xAxis:{type:"category",boundaryGap:!1,data:e.hours,axisLine:{lineStyle:{color:"#d9d9d9"}},axisLabel:{color:"#8c8c8c",fontSize:10}},yAxis:{type:"value",name:"人次",nameTextStyle:{color:"#8c8c8c",fontSize:11},axisLine:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:10},splitLine:{lineStyle:{color:"#f0f0f0",type:"dashed"}}},series:[{name:"进入",type:"line",smooth:!0,symbol:"circle",symbolSize:4,data:e.inData,lineStyle:{width:2,color:"#52c41a"},itemStyle:{color:"#52c41a"},areaStyle:{opacity:.12,color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(82,196,26,0.3)"},{offset:1,color:"rgba(82,196,26,0.02)"}]}}},{name:"离开",type:"line",smooth:!0,symbol:"circle",symbolSize:4,data:e.outData,lineStyle:{width:2,color:"#ff4d4f"},itemStyle:{color:"#ff4d4f"},areaStyle:{opacity:.12,color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(255,77,79,0.25)"},{offset:1,color:"rgba(255,77,79,0.02)"}]}}}]}}const S=d({}),Y=R(()=>{var a,e;return(e=(a=S.value.batteryLevel)==null?void 0:a.value)!=null?e:"--"}),P=R(()=>{const a=Number(Y.value);return Number.isNaN(a)?"#8c8c8c":a<=20?"#ff4d4f":a<=50?"#faad14":"#52c41a"}),J=R(()=>{var e;const a=(e=S.value.bluetoothDevices)==null?void 0:e.value;if(!a)return[];try{const t=typeof a=="string"?JSON.parse(a):a;return Array.isArray(t)?t:[]}catch(t){return[]}});function X(a){const e=Math.abs(a);return e<=50?"#52c41a":e<=70?"#1890ff":e<=85?"#faad14":"#ff4d4f"}const L=d(!0),z=d("{}"),I=d(!1),q=d(!1);function oe(a){z.value=a;try{JSON.parse(a),I.value=!1}catch(e){I.value=!0}}const[ie,Q]=Ae({onOpenChange:a=>k(null,null,function*(){var e;if(q.value=a,a){const t=Q.getData();t&&(c.value=t,L.value=(e=t.enabled)!=null?e:!0,z.value=t.configData&&Object.keys(t.configData).length>0?JSON.stringify(t.configData,null,2):`{
}`,I.value=!1,yield ne(t.deviceId,t.relationType))}else c.value=null,f.value=null,b.value=[],y.value=null,S.value={}})});function ne(a,e){return k(this,null,function*(){w.value=!0,p.value=!0;try{const t=Te(a);let i;e==="TRAFFIC_COUNTER"?i=te(a).then(N=>k(null,null,function*(){y.value=N,yield se(),H(K())})).catch(()=>{}):e==="BADGE"?i=A({deviceId:a}).then(N=>{const Z={};N.forEach(ee=>{Z[ee.identifier]=ee}),S.value=Z}).catch(()=>{}):i=A({deviceId:a}).then(N=>{b.value=N||[]}).catch(()=>{b.value=[]});const[T]=yield Promise.all([t,i]);f.value=T}catch(t){console.error("[loadDeviceDetail] 加载设备详情失败:",t)}finally{w.value=!1,p.value=!1}})}function re(){return k(this,null,function*(){if(!c.value)return;p.value=!0;const{deviceId:a,relationType:e}=c.value;try{if(e==="TRAFFIC_COUNTER")y.value=yield te(a),yield se(),H(K());else if(e==="BADGE"){const t=yield A({deviceId:a}),i={};t.forEach(T=>{i[T.identifier]=T}),S.value=i}else b.value=yield A({deviceId:a})}catch(t){}finally{p.value=!1}})}function ce(){return k(this,null,function*(){var e;if(!((e=c.value)!=null&&e.id))return;let a={};try{a=JSON.parse(z.value)}catch(t){O.error("配置数据 JSON 格式错误");return}m.value=!0;try{yield xe({id:c.value.id,enabled:L.value,configData:a}),O.success("保存成功"),h("success")}catch(t){console.error("[handleSaveConfig] 保存配置失败:",t),O.error("保存配置失败")}finally{m.value=!1}})}function ue(){return k(this,null,function*(){var a;if((a=c.value)!=null&&a.id)try{yield De(c.value.id),O.success("已解除绑定"),Q.close(),h("success")}catch(e){console.error("[handleUnbind] 解除绑定失败:",e),O.error("解除绑定失败")}})}function de(a){var e,t,i;return(i=(t=(e=we.find(T=>T.value===a))==null?void 0:e.label)!=null?t:a)!=null?i:"--"}function fe(a){var e;return(e=Ce[a!=null?a:""])!=null?e:"default"}function me(a){return a===1?"在线":a===0?"离线":"未知"}function ve(a){return a===1?"success":a===0?"error":"default"}function W(a){return a?ze(a):"--"}const _e=[{title:"属性名称",dataIndex:"name",key:"name",width:140},{title:"标识符",dataIndex:"identifier",key:"identifier",width:120},{title:"最新值",dataIndex:"value",key:"value",width:120},{title:"更新时间",dataIndex:"updateTime",key:"updateTime",width:170}];return(a,e)=>(r(),D(l(ie),{title:"设备详情",class:"device-detail-drawer"},{default:n(()=>[o(l(ae),{spinning:w.value},{default:n(()=>[o(l(F),{title:"基础信息",size:"small",class:"mb-4"},{default:n(()=>[o(l(g),{column:2,size:"small",bordered:""},{default:n(()=>[o(l(g).Item,{label:"设备名称"},{default:n(()=>{var t;return[v(u(((t=f.value)==null?void 0:t.deviceName)||"--"),1)]}),_:1}),o(l(g).Item,{label:"设备昵称"},{default:n(()=>{var t;return[v(u(((t=f.value)==null?void 0:t.nickname)||"--"),1)]}),_:1}),o(l(g).Item,{label:"产品"},{default:n(()=>{var t;return[v(u(((t=c.value)==null?void 0:t.productName)||"--"),1)]}),_:1}),o(l(g).Item,{label:"设备 Key"},{default:n(()=>{var t;return[v(u(((t=c.value)==null?void 0:t.deviceKey)||"--"),1)]}),_:1}),o(l(g).Item,{label:"状态"},{default:n(()=>{var t,i;return[o(l(pe),{status:ve((t=f.value)==null?void 0:t.state),text:me((i=f.value)==null?void 0:i.state)},null,8,["status","text"])]}),_:1}),o(l(g).Item,{label:"IP 地址"},{default:n(()=>{var t;return[v(u(((t=f.value)==null?void 0:t.ip)||"--"),1)]}),_:1}),o(l(g).Item,{label:"上线时间",span:2},{default:n(()=>{var t;return[v(u(W((t=f.value)==null?void 0:t.onlineTime)),1)]}),_:1})]),_:1})]),_:1}),o(l(F),{title:"实时数据",size:"small",class:"mb-4"},{extra:n(()=>[o(l(U),{type:"link",size:"small",onClick:re},{default:n(()=>[...e[1]||(e[1]=[v(" 刷新 ",-1)])]),_:1})]),default:n(()=>[o(l(ae),{spinning:p.value},{default:n(()=>[C.value?(r(),_(E,{key:0},[y.value?(r(),_("div",Be,[s("div",Pe,[s("div",Je,[o(l(x),{icon:"mdi:arrow-right-bold"}),e[2]||(e[2]=s("span",{class:"traffic-stats__label"},"今日进入",-1)),s("span",Fe,u(y.value.todayIn),1)]),s("div",Me,[o(l(x),{icon:"mdi:arrow-left-bold"}),e[3]||(e[3]=s("span",{class:"traffic-stats__label"},"今日离开",-1)),s("span",Ue,u(y.value.todayOut),1)]),s("div",Ge,[o(l(x),{icon:"mdi:account-group"}),e[4]||(e[4]=s("span",{class:"traffic-stats__label"},"在场",-1)),s("span",Ve,u(Math.max(0,y.value.todayIn-y.value.todayOut)),1)])]),o(l(Ne),{ref_key:"hourlyChartRef",ref:$,class:"traffic-chart"},null,512)])):(r(),D(l(M),{key:1,description:"暂无客流数据"}))],64)):le.value?(r(),_(E,{key:1},[Object.keys(S.value).length>0?(r(),_("div",je,[s("div",$e,[s("div",He,[s("div",{class:"badge-item__icon",style:G({color:P.value,background:`${P.value}15`})},[o(l(x),{icon:"mdi:battery"})],4),s("div",Ke,[e[5]||(e[5]=s("span",{class:"badge-item__label"},"电量",-1)),s("span",{class:"badge-item__value",style:G({color:P.value})},u(Y.value)+"% ",5)])]),s("div",Ye,[s("div",Xe,[o(l(x),{icon:"mdi:bluetooth"})]),s("div",qe,[e[6]||(e[6]=s("span",{class:"badge-item__label"},"蓝牙信标",-1)),s("span",Qe,u(J.value.length)+" 个 ",1)])])]),J.value.length>0?(r(),_("div",We,[e[7]||(e[7]=s("div",{class:"beacon-list__title"},"信标信号",-1)),(r(!0),_(E,null,Ee(J.value,(t,i)=>(r(),_("div",{key:i,class:"beacon-item"},[s("span",Ze,u(t.mac),1),s("div",ea,[o(l(ye),{percent:Math.min(100,Math.max(0,100+t.rssi)),"stroke-color":X(t.rssi),"show-info":!1,size:"small",style:{width:"60px"}},null,8,["percent","stroke-color"]),s("span",{class:"beacon-item__rssi",style:G({color:X(t.rssi)})},u(t.rssi)+"dBm ",5)])]))),128))])):(r(),_("div",aa,[o(l(x),{icon:"mdi:bluetooth-off"}),e[8]||(e[8]=s("span",null,"无信标信号",-1))]))])):(r(),D(l(M),{key:1,description:"暂无工牌数据"}))],64)):(r(),_(E,{key:2},[b.value.length>0?(r(),D(l(be),{key:0,columns:_e,"data-source":b.value,pagination:!1,size:"small","row-key":"identifier"},{bodyCell:n(({column:t,record:i})=>[t.key==="updateTime"?(r(),_(E,{key:0},[v(u(W(i.updateTime)),1)],64)):V("",!0)]),_:1},8,["data-source"])):(r(),D(l(M),{key:1,description:"暂无属性数据"}))],64))]),_:1},8,["spinning"])]),_:1}),o(l(F),{title:"业务配置",size:"small"},{default:n(()=>{var t;return[s("div",ta,[s("div",sa,[e[9]||(e[9]=s("span",{class:"config-label"},"关联类型",-1)),o(l(ge),{color:fe((t=c.value)==null?void 0:t.relationType)},{default:n(()=>{var i;return[v(u(de((i=c.value)==null?void 0:i.relationType)),1)]}),_:1},8,["color"])]),s("div",la,[e[10]||(e[10]=s("span",{class:"config-label"},"启用状态",-1)),o(l(he),{checked:L.value,"onUpdate:checked":e[0]||(e[0]=i=>L.value=i)},null,8,["checked"])]),s("div",oa,[e[11]||(e[11]=s("span",{class:"config-label"},"配置数据 (JSON)",-1)),s("div",{class:Le(["mt-2 h-[240px]",{"config-editor-error":I.value}])},[q.value?(r(),D(l(Oe),{key:0,value:z.value,bordered:!0,"auto-format":!1,onChange:oe},null,8,["value"])):V("",!0)],2),I.value?(r(),_("span",ia," JSON 格式错误 ")):V("",!0)]),s("div",na,[o(l(U),{type:"primary",loading:m.value,onClick:ce},{default:n(()=>[...e[12]||(e[12]=[v(" 保存配置 ",-1)])]),_:1},8,["loading"]),o(l(ke),{title:"确定要解除该设备的绑定吗?","ok-text":"确定","cancel-text":"取消",onConfirm:ue},{default:n(()=>[o(l(U),{danger:""},{default:n(()=>[...e[13]||(e[13]=[v("解除绑定",-1)])]),_:1})]),_:1})])])]}),_:1})]),_:1},8,["spinning"])]),_:1}))}}),ka=Se(ra,[["__scopeId","data-v-d7e27f0d"]]);export{ka as default};