You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
8.7 KiB
JavaScript
1 line
8.7 KiB
JavaScript
import{D as e,E as t,F as n,L as r,M as i,P as a,R as o,S as s,T as c,_ as l,b as u,f as d,g as f,h as p,i as m,j as h,k as g,m as _,o as v,p as y,v as b,w as x,x as S,y as C,z as w}from"./index-yNQwsZKK.js";import{t as T}from"./request-CbM-LIzp.js";import{t as E}from"./echarts-W_05fbm-.js";var ee={class:`screen-page`},te={class:`screen-header`},ne={class:`header-right`},re={class:`auto-refresh`,style:{color:`#aaa`,"font-size":`12px`,"margin-left":`8px`}},ie={class:`header-time`},ae={class:`stat-row`},oe={class:`stat-label`},se={key:0,class:`stat-sub`},ce={class:`chart-row`},le={class:`chart-card`},ue={class:`chart-card`},de={class:`bottom-row`},fe={class:`rank-card`},pe={class:`rank-list`},me={key:0,class:`no-data`},he={class:`rank-name`},ge={class:`rank-value`},_e={class:`rank-card`},ve={class:`rank-list`},ye={key:0,class:`no-data`},be={class:`rank-name`},D={class:`rank-value`},O={class:`status-card`},k={class:`status-grid`},A={key:0,class:`no-data`},j=[`title`],M=m(S({__name:`ScreenPage`,setup(m){let S=n(``),M=n(``),N=n([]),P=n([]),F=n(``),I=null,L=a([{key:`online`,label:`在线机床`,value:`--`,sub:``,color:`#00e5ff`},{key:`production`,label:`今日总产量`,value:`--`,sub:``,color:`#76ff03`},{key:`collector`,label:`采集服务`,value:`--`,sub:``,color:`#69f0ae`},{key:`alerts`,label:`活跃告警`,value:`--`,sub:``,color:`#ffd740`},{key:`avg`,label:`平均产量/台`,value:`--`,sub:``,color:`#e0e0e0`}]),R=n(),z=n(),B=null,V=null,H=n([]),U=n([]),W=n([]),G=null,K=n(1e4),q=n(10),J=n(!1),xe=y(()=>Math.max(1,Math.floor(K.value/1e3)));function Y(){F.value=new Date().toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1})}function X(){let e={};return S.value&&(e.workshop=S.value),M.value&&(e.brand=M.value),e}async function Se(){try{let e=(await T.get(`/screen/filters`)).data?.items||[];N.value=e.filter(e=>e.filterType===`workshop`).map(e=>e.filterValue),P.value=e.filter(e=>e.filterType===`brand`).map(e=>e.filterValue);let t=e.find(e=>e.filterType===`workshop`&&e.isDefault===1);t&&(S.value=t.filterValue);let n=e.find(e=>e.filterType===`brand`&&e.isDefault===1);n&&(M.value=n.filterValue)}catch{}}async function Z(){try{let e=(await T.get(`/screen/summary`,{params:X()})).data||{};L[0].value=e.onlineCount==null?`--`:String(e.onlineCount),L[0].sub=e.totalMachines?`/ `+e.totalMachines:``,L[1].value=e.todayProduction==null?`--`:e.todayProduction.toLocaleString(),L[3].value=e.activeAlerts==null?`--`:String(e.activeAlerts),L[4].value=e.avgQuantityPerMachine==null?`--`:String(e.avgQuantityPerMachine)}catch{}}async function Ce(){try{let e=(await T.get(`/screen/collector-status`)).data||{};e.status===`running`?(L[2].value=`运行中`,L[2].sub=e.uptime||``,L[2].color=`#69f0ae`):(L[2].value=`已停止`,L[2].sub=``,L[2].color=`#ff5252`)}catch{}}async function we(){try{let e=(await T.get(`/screen/workshop-production`,{params:X()})).data?.items||[];if(!B)return;B.setOption({tooltip:{trigger:`axis`},grid:{left:60,right:20,top:20,bottom:30},xAxis:{type:`category`,data:e.map(e=>e.name),axisLabel:{color:`#aaa`},axisLine:{lineStyle:{color:`#333`}}},yAxis:{type:`value`,axisLabel:{color:`#aaa`},splitLine:{lineStyle:{color:`#222`}}},series:[{type:`bar`,data:e.map(e=>e.quantity),itemStyle:{color:new E.graphic.LinearGradient(0,0,0,1,[{offset:0,color:`#00e5ff`},{offset:1,color:`#006064`}])},barWidth:30}]})}catch{}}async function Te(){try{let e=(await T.get(`/screen/production-trend`,{params:X()})).data?.items||[];if(!V)return;V.setOption({tooltip:{trigger:`axis`},grid:{left:60,right:20,top:20,bottom:30},xAxis:{type:`category`,data:e.map(e=>e.date),axisLabel:{color:`#aaa`},axisLine:{lineStyle:{color:`#333`}}},yAxis:{type:`value`,axisLabel:{color:`#aaa`},splitLine:{lineStyle:{color:`#222`}}},series:[{type:`line`,data:e.map(e=>e.quantity),smooth:!0,lineStyle:{color:`#76ff03`,width:2},itemStyle:{color:`#76ff03`},areaStyle:{color:new E.graphic.LinearGradient(0,0,0,1,[{offset:0,color:`rgba(118,255,3,0.3)`},{offset:1,color:`rgba(118,255,3,0)`}])}}]})}catch{}}async function Ee(){try{H.value=(await T.get(`/screen/machine-rank`,{params:X()})).data?.items||[]}catch{}}async function De(){try{U.value=(await T.get(`/screen/worker-rank`,{params:X()})).data?.items||[]}catch{}}async function Oe(){try{W.value=(await T.get(`/screen/machine-status`,{params:X()})).data?.items||[]}catch{}}function Q(){Z(),Ce(),we(),Te(),Ee(),De(),Oe()}function ke(){R.value&&(B=E.init(R.value),B.setOption({backgroundColor:`transparent`})),z.value&&(V=E.init(z.value),V.setOption({backgroundColor:`transparent`}))}function $(){B?.resize(),V?.resize()}x(async()=>{Y(),I=setInterval(Y,1e3),v({message:`按F11进入全屏模式`,type:`info`,duration:5e3}),await Se(),await s(),ke(),await Ae(),Q(),G=setInterval(Q,K.value),window.addEventListener(`resize`,$)}),c(()=>{I&&clearInterval(I),G&&clearInterval(G),B?.dispose(),V?.dispose(),window.removeEventListener(`resize`,$)});async function Ae(){try{K.value=(await T.get(`/screen/refresh-interval`))?.data?.interval??1e4}catch{}}h(K,e=>{G&&clearInterval(G),G=setInterval(Q,e)});function je(){q.value=Math.max(1,Math.floor(K.value/1e3)),J.value=!0}async function Me(){let e=Number(q.value);if(!Number.isFinite(e)||e<=0){v.error(`请输入有效秒数`);return}K.value=e*1e3,J.value=!1}return(n,a)=>{let s=g(`el-option`),c=g(`el-select`),m=g(`el-input-number`),h=g(`el-form-item`),v=g(`el-form`),y=g(`el-button`),x=g(`el-dialog`);return t(),l(d,null,[_(`div`,ee,[_(`header`,te,[a[5]||=_(`div`,{class:`header-left`},`CNC机床数据采集系统`,-1),_(`div`,ne,[_(`span`,re,`自动刷新: `+w(xe.value)+` 秒`,1),_(`span`,{class:`refresh-gear`,onClick:je,style:{cursor:`pointer`,"margin-left":`6px`}},`⚙`),u(c,{modelValue:S.value,"onUpdate:modelValue":a[0]||=e=>S.value=e,placeholder:`车间`,size:`small`,style:{width:`120px`,"margin-right":`8px`},onChange:Q},{default:i(()=>[u(s,{label:`全部`,value:``}),(t(!0),l(d,null,e(N.value,e=>(t(),p(s,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),u(c,{modelValue:M.value,"onUpdate:modelValue":a[1]||=e=>M.value=e,placeholder:`品牌`,size:`small`,style:{width:`120px`,"margin-right":`16px`},onChange:Q},{default:i(()=>[u(s,{label:`全部`,value:``}),(t(!0),l(d,null,e(P.value,e=>(t(),p(s,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),_(`span`,ie,w(F.value),1)])]),_(`div`,ae,[(t(!0),l(d,null,e(L,e=>(t(),l(`div`,{class:`stat-card`,key:e.key},[_(`div`,oe,w(e.label),1),_(`div`,{class:`stat-value`,style:o({color:e.color})},w(e.value),5),e.sub?(t(),l(`div`,se,w(e.sub),1)):f(``,!0)]))),128))]),_(`div`,ce,[_(`div`,le,[a[6]||=_(`div`,{class:`chart-title`},`各车间产量`,-1),_(`div`,{ref_key:`barChartRef`,ref:R,class:`chart-container`},null,512)]),_(`div`,ue,[a[7]||=_(`div`,{class:`chart-title`},`产量趋势(7天)`,-1),_(`div`,{ref_key:`lineChartRef`,ref:z,class:`chart-container`},null,512)])]),_(`div`,de,[_(`div`,fe,[a[8]||=_(`div`,{class:`chart-title`},`机床产量排行`,-1),_(`div`,pe,[H.value.length===0?(t(),l(`div`,me,`暂无数据`)):f(``,!0),(t(!0),l(d,null,e(H.value,e=>(t(),l(`div`,{key:e.rank??e.id,class:`rank-item`},[_(`span`,{class:r([`rank-num`,{"rank-top":(e.rank??99)<=3}])},w(e.rank??`-`),3),_(`span`,he,w(e.machineName),1),_(`span`,ge,w(e.quantity),1)]))),128))])]),_(`div`,_e,[a[9]||=_(`div`,{class:`chart-title`},`工人产量排行`,-1),_(`div`,ve,[U.value.length===0?(t(),l(`div`,ye,`暂无数据`)):f(``,!0),(t(!0),l(d,null,e(U.value,e=>(t(),l(`div`,{key:e.rank??e.id,class:`rank-item`},[_(`span`,{class:r([`rank-num`,{"rank-top":(e.rank??99)<=3}])},w(e.rank??`-`),3),_(`span`,be,w(e.workerName),1),_(`span`,D,w(e.totalQuantity??e.machineCount??`-`),1)]))),128))])]),_(`div`,O,[a[10]||=_(`div`,{class:`chart-title`},`机床状态总览`,-1),_(`div`,k,[W.value.length===0?(t(),l(`div`,A,`暂无机床`)):f(``,!0),(t(!0),l(d,null,e(W.value,e=>(t(),l(`div`,{key:e.machineId,class:r([`status-block`,e.isOnline?`online`:`offline`]),title:e.machineName},null,10,j))),128))]),a[11]||=b(`<div class="status-legend" data-v-bcd92283><span class="legend-item" data-v-bcd92283><span class="legend-block online" data-v-bcd92283></span> 在线</span><span class="legend-item" data-v-bcd92283><span class="legend-block offline" data-v-bcd92283></span> 离线</span></div>`,1)])])]),u(x,{modelValue:J.value,"onUpdate:modelValue":a[4]||=e=>J.value=e,title:`刷新间隔设置`,width:`320px`},{footer:i(()=>[u(y,{onClick:a[3]||=e=>J.value=!1},{default:i(()=>[...a[12]||=[C(`取消`,-1)]]),_:1}),u(y,{type:`primary`,onClick:Me},{default:i(()=>[...a[13]||=[C(`确定`,-1)]]),_:1})]),default:i(()=>[u(v,{"label-width":`90px`},{default:i(()=>[u(h,{label:`间隔(秒)`},{default:i(()=>[u(m,{modelValue:q.value,"onUpdate:modelValue":a[2]||=e=>q.value=e,min:1,step:1},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-bcd92283`]]);export{M as default}; |