4 lines
11 KiB
JavaScript
4 lines
11 KiB
JavaScript
var S=(j,B,h)=>new Promise((c,f)=>{var b=m=>{try{p(h.next(m))}catch(I){f(I)}},C=m=>{try{p(h.throw(m))}catch(I){f(I)}},p=m=>m.done?c(m.value):Promise.resolve(m.value).then(b,C);p((h=h.apply(j,B)).next())});import{S as Z,au as F,cF as _e,an as x,bu as U,bU as ye,c4 as pe,ay as M,az as be,br as ge,bE as he,a9 as O,ac as ke}from"./bootstrap-BKs0Sk6Z.js";import{a as Se,b as A}from"./index-C1URlDX-.js";import{u as Te,r as De}from"./index-Cv5wKKSC.js";import{g as ee}from"./index-38Fmc2UN.js";import{R as xe,b as we}from"./data-CNSx6aS3.js";import{D as g}from"./index-CcksOyuQ.js";import{u as Ce,_ as Ie}from"./use-echarts-DfncVyYv.js";import{_ as Ne}from"./code-editor.vue_vue_type_script_setup_true_lang-Bg1PnfSG.js";import{m as Oe,b9 as d,aa as R,w as Re,ab as w,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 ze,cT as Le,n as Ae}from"../jse/index-index-DTH1zC_5.js";import{u as Be}from"./use-drawer-BUeOkCeT.js";import"./x-bUPAKCwj.js";const Pe={key:0,class:"traffic-realtime"},Je={class:"traffic-stats"},Fe={class:"traffic-stats__item traffic-stats__item--in"},Ue={class:"traffic-stats__value"},Me={class:"traffic-stats__item traffic-stats__item--out"},Ge={class:"traffic-stats__value"},Ve={class:"traffic-stats__item traffic-stats__item--net"},je={class:"traffic-stats__value"},$e={key:0,class:"badge-realtime"},He={class:"badge-row"},Ke={class:"badge-item"},Ye={class:"badge-item__content"},qe={class:"badge-item"},Qe={class:"badge-item__icon badge-item__icon--bt"},We={class:"badge-item__content"},Xe={class:"badge-item__value"},Ze={key:0,class:"beacon-list"},ea={class:"beacon-item__mac"},aa={class:"beacon-item__signal"},ta={key:1,class:"beacon-empty"},sa={class:"config-form"},la={class:"config-item"},oa={class:"config-item"},ia={class:"config-item config-item--block"},na={key:0,class:"config-error-hint"},ra={class:"config-actions"},ca=Oe({__name:"device-detail-drawer",emits:["success"],setup(j,{emit:B}){const h=B,c=d(null),f=d(null),b=d([]),C=d(!1),p=d(!1),m=d(!1),I=R(()=>{var e;return((e=c.value)==null?void 0:e.relationType)==="TRAFFIC_COUNTER"}),ae=R(()=>{var e;return((e=c.value)==null?void 0:e.relationType)==="BADGE"}),y=d(null),$=d(),{renderEcharts:te}=Ce($);Re(y,e=>S(null,null,function*(){e&&(yield Ae(),te(se()))}));function se(){var a,i;const e=y.value;if(!((i=(a=e==null?void 0:e.hourlyTrend)==null?void 0:a.hours)!=null&&i.length))return{};const t=e.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:t.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:t.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:t.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 T=d({}),H=R(()=>{var e,t;return(t=(e=T.value.batteryLevel)==null?void 0:e.value)!=null?t:"--"}),P=R(()=>{const e=Number(H.value);return Number.isNaN(e)?"#8c8c8c":e<=20?"#ff4d4f":e<=50?"#faad14":"#52c41a"}),J=R(()=>{var t;const e=(t=T.value.bluetoothDevices)==null?void 0:t.value;if(!e)return[];try{const a=typeof e=="string"?JSON.parse(e):e;return Array.isArray(a)?a:[]}catch(a){return[]}});function K(e){const t=Math.abs(e);return t<=50?"#52c41a":t<=70?"#1890ff":t<=85?"#faad14":"#ff4d4f"}const z=d(!0),L=d("{}"),N=d(!1),Y=d(!1);function le(e){L.value=e;try{JSON.parse(e),N.value=!1}catch(t){N.value=!0}}const[oe,q]=Be({onOpenChange:e=>S(null,null,function*(){var t;if(Y.value=e,e){const a=q.getData();a&&(c.value=a,z.value=(t=a.enabled)!=null?t:!0,L.value=a.configData&&Object.keys(a.configData).length>0?JSON.stringify(a.configData,null,2):`{
|
|
|
|
}`,N.value=!1,yield ie(a.deviceId,a.relationType))}else c.value=null,f.value=null,b.value=[],y.value=null,T.value={}})});function ie(e,t){return S(this,null,function*(){C.value=!0,p.value=!0;try{const a=Se(e);let i;t==="TRAFFIC_COUNTER"?i=ee(e).then(k=>{k&&k.hourlyTrend&&(y.value=k)}).catch(()=>{}):t==="BADGE"?i=A({deviceId:e}).then(k=>{const W={};k.forEach(X=>{W[X.identifier]=X}),T.value=W}).catch(()=>{}):i=A({deviceId:e}).then(k=>{b.value=k||[]}).catch(()=>{b.value=[]});const[D]=yield Promise.all([a,i]);f.value=D}catch(a){console.error("[loadDeviceDetail] 加载设备详情失败:",a)}finally{C.value=!1,p.value=!1}})}function ne(){return S(this,null,function*(){if(!c.value)return;p.value=!0;const{deviceId:e,relationType:t}=c.value;try{if(t==="TRAFFIC_COUNTER"){const a=yield ee(e);a&&a.hourlyTrend&&(y.value=a)}else if(t==="BADGE"){const a=yield A({deviceId:e}),i={};a.forEach(D=>{i[D.identifier]=D}),T.value=i}else b.value=yield A({deviceId:e})}catch(a){}finally{p.value=!1}})}function re(){return S(this,null,function*(){var t;if(!((t=c.value)!=null&&t.id))return;let e={};try{e=JSON.parse(L.value)}catch(a){O.error("配置数据 JSON 格式错误");return}m.value=!0;try{yield Te({id:c.value.id,enabled:z.value,configData:e}),O.success("保存成功"),h("success")}catch(a){console.error("[handleSaveConfig] 保存配置失败:",a),O.error("保存配置失败")}finally{m.value=!1}})}function ce(){return S(this,null,function*(){var e;if((e=c.value)!=null&&e.id)try{yield De(c.value.id),O.success("已解除绑定"),q.close(),h("success")}catch(t){console.error("[handleUnbind] 解除绑定失败:",t),O.error("解除绑定失败")}})}function ue(e){var t,a,i;return(i=(a=(t=xe.find(D=>D.value===e))==null?void 0:t.label)!=null?a:e)!=null?i:"--"}function de(e){var t;return(t=we[e!=null?e:""])!=null?t:"default"}function fe(e){return e===1?"在线":e===0?"离线":"未知"}function me(e){return e===1?"success":e===0?"error":"default"}function Q(e){return e?Le(e):"--"}const ve=[{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(e,t)=>(r(),w(l(oe),{title:"设备详情",class:"device-detail-drawer"},{default:n(()=>[o(l(Z),{spinning:C.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 a;return[v(u(((a=f.value)==null?void 0:a.deviceName)||"--"),1)]}),_:1}),o(l(g).Item,{label:"设备昵称"},{default:n(()=>{var a;return[v(u(((a=f.value)==null?void 0:a.nickname)||"--"),1)]}),_:1}),o(l(g).Item,{label:"产品"},{default:n(()=>{var a;return[v(u(((a=c.value)==null?void 0:a.productName)||"--"),1)]}),_:1}),o(l(g).Item,{label:"设备 Key"},{default:n(()=>{var a;return[v(u(((a=c.value)==null?void 0:a.deviceKey)||"--"),1)]}),_:1}),o(l(g).Item,{label:"状态"},{default:n(()=>{var a,i;return[o(l(_e),{status:me((a=f.value)==null?void 0:a.state),text:fe((i=f.value)==null?void 0:i.state)},null,8,["status","text"])]}),_:1}),o(l(g).Item,{label:"IP 地址"},{default:n(()=>{var a;return[v(u(((a=f.value)==null?void 0:a.ip)||"--"),1)]}),_:1}),o(l(g).Item,{label:"上线时间",span:2},{default:n(()=>{var a;return[v(u(Q((a=f.value)==null?void 0:a.onlineTime)),1)]}),_:1})]),_:1})]),_:1}),o(l(F),{title:"实时数据",size:"small",class:"mb-4"},{extra:n(()=>[o(l(M),{type:"link",size:"small",onClick:ne},{default:n(()=>[...t[1]||(t[1]=[v(" 刷新 ",-1)])]),_:1})]),default:n(()=>[o(l(Z),{spinning:p.value},{default:n(()=>[I.value?(r(),_(E,{key:0},[y.value?(r(),_("div",Pe,[s("div",Je,[s("div",Fe,[o(l(x),{icon:"mdi:arrow-right-bold"}),t[2]||(t[2]=s("span",{class:"traffic-stats__label"},"今日进入",-1)),s("span",Ue,u(y.value.todayIn),1)]),s("div",Me,[o(l(x),{icon:"mdi:arrow-left-bold"}),t[3]||(t[3]=s("span",{class:"traffic-stats__label"},"今日离开",-1)),s("span",Ge,u(y.value.todayOut),1)]),s("div",Ve,[o(l(x),{icon:"mdi:account-group"}),t[4]||(t[4]=s("span",{class:"traffic-stats__label"},"在场",-1)),s("span",je,u(Math.max(0,y.value.todayIn-y.value.todayOut)),1)])]),o(l(Ie),{ref_key:"hourlyChartRef",ref:$,class:"traffic-chart"},null,512)])):(r(),w(l(U),{key:1,description:"暂无客流数据"}))],64)):ae.value?(r(),_(E,{key:1},[Object.keys(T.value).length>0?(r(),_("div",$e,[s("div",He,[s("div",Ke,[s("div",{class:"badge-item__icon",style:G({color:P.value,background:`${P.value}15`})},[o(l(x),{icon:"mdi:battery"})],4),s("div",Ye,[t[5]||(t[5]=s("span",{class:"badge-item__label"},"电量",-1)),s("span",{class:"badge-item__value",style:G({color:P.value})},u(H.value)+"% ",5)])]),s("div",qe,[s("div",Qe,[o(l(x),{icon:"mdi:bluetooth"})]),s("div",We,[t[6]||(t[6]=s("span",{class:"badge-item__label"},"蓝牙信标",-1)),s("span",Xe,u(J.value.length)+" 个 ",1)])])]),J.value.length>0?(r(),_("div",Ze,[t[7]||(t[7]=s("div",{class:"beacon-list__title"},"信标信号",-1)),(r(!0),_(E,null,Ee(J.value,(a,i)=>(r(),_("div",{key:i,class:"beacon-item"},[s("span",ea,u(a.mac),1),s("div",aa,[o(l(ye),{percent:Math.min(100,Math.max(0,100+a.rssi)),"stroke-color":K(a.rssi),"show-info":!1,size:"small",style:{width:"60px"}},null,8,["percent","stroke-color"]),s("span",{class:"beacon-item__rssi",style:G({color:K(a.rssi)})},u(a.rssi)+"dBm ",5)])]))),128))])):(r(),_("div",ta,[o(l(x),{icon:"mdi:bluetooth-off"}),t[8]||(t[8]=s("span",null,"无信标信号",-1))]))])):(r(),w(l(U),{key:1,description:"暂无工牌数据"}))],64)):(r(),_(E,{key:2},[b.value.length>0?(r(),w(l(pe),{key:0,columns:ve,"data-source":b.value,pagination:!1,size:"small","row-key":"identifier"},{bodyCell:n(({column:a,record:i})=>[a.key==="updateTime"?(r(),_(E,{key:0},[v(u(Q(i.updateTime)),1)],64)):V("",!0)]),_:1},8,["data-source"])):(r(),w(l(U),{key:1,description:"暂无属性数据"}))],64))]),_:1},8,["spinning"])]),_:1}),o(l(F),{title:"业务配置",size:"small"},{default:n(()=>{var a;return[s("div",sa,[s("div",la,[t[9]||(t[9]=s("span",{class:"config-label"},"关联类型",-1)),o(l(be),{color:de((a=c.value)==null?void 0:a.relationType)},{default:n(()=>{var i;return[v(u(ue((i=c.value)==null?void 0:i.relationType)),1)]}),_:1},8,["color"])]),s("div",oa,[t[10]||(t[10]=s("span",{class:"config-label"},"启用状态",-1)),o(l(ge),{checked:z.value,"onUpdate:checked":t[0]||(t[0]=i=>z.value=i)},null,8,["checked"])]),s("div",ia,[t[11]||(t[11]=s("span",{class:"config-label"},"配置数据 (JSON)",-1)),s("div",{class:ze(["mt-2 h-[240px]",{"config-editor-error":N.value}])},[Y.value?(r(),w(l(Ne),{key:0,value:L.value,bordered:!0,"auto-format":!1,onChange:le},null,8,["value"])):V("",!0)],2),N.value?(r(),_("span",na," JSON 格式错误 ")):V("",!0)]),s("div",ra,[o(l(M),{type:"primary",loading:m.value,onClick:re},{default:n(()=>[...t[12]||(t[12]=[v(" 保存配置 ",-1)])]),_:1},8,["loading"]),o(l(he),{title:"确定要解除该设备的绑定吗?","ok-text":"确定","cancel-text":"取消",onConfirm:ce},{default:n(()=>[o(l(M),{danger:""},{default:n(()=>[...t[13]||(t[13]=[v("解除绑定",-1)])]),_:1})]),_:1})])])]}),_:1})]),_:1},8,["spinning"])]),_:1}))}}),Sa=ke(ca,[["__scopeId","data-v-4f023e04"]]);export{Sa as default};
|