agentworkshop 0.7.16 → 0.7.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.AgentWorkShop/prompts/host-tools.json +105 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +105 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{DMdVWIGz.js → B-E8fXAO.js} +1 -1
- package/.output/public/_nuxt/{DyisHHzD.js → BA3XzwiD.js} +1 -1
- package/.output/public/_nuxt/{CD1SlCoI.js → BJem8_v5.js} +4 -4
- package/.output/public/_nuxt/{6vYobj4F.js → BWC4HQHQ.js} +1 -1
- package/.output/public/_nuxt/{kkEthL84.js → Ba7YofCb.js} +1 -1
- package/.output/public/_nuxt/{DGVAuScD.js → C_2bTK0C.js} +1 -1
- package/.output/public/_nuxt/{B53Mp7lD.js → CgT5wMfz.js} +1 -1
- package/.output/public/_nuxt/{DT-Wg8r1.js → D4CLp1hc.js} +1 -1
- package/.output/public/_nuxt/{C6m-kenn.js → DAR70Lf5.js} +1 -1
- package/.output/public/_nuxt/{B3Psw_sL.js → DBXhDLgl.js} +1 -1
- package/.output/public/_nuxt/{Cj6139IM.js → DsOkkMX3.js} +1 -1
- package/.output/public/_nuxt/DtM4RX5T.js +1 -0
- package/.output/public/_nuxt/{DaE5saZg.js → QT54MQV9.js} +1 -1
- package/.output/public/_nuxt/{Bmpvki7M.js → UtviM1bg.js} +1 -1
- package/.output/public/_nuxt/_id_.pF-B9O6u.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/6a0a88de-639e-4e7b-b7c1-7f4034e04787.json +1 -0
- package/.output/server/chunks/_/nitro.mjs +1087 -746
- package/.output/server/chunks/build/{TownView-CunmEMzS.mjs → TownView-ql2eHZOg.mjs} +4 -4
- package/.output/server/chunks/build/{TownView-CunmEMzS.mjs.map → TownView-ql2eHZOg.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-CVnMdSeG.mjs → _id_-CwR5oLu9.mjs} +4 -4
- package/.output/server/chunks/build/{_id_-CVnMdSeG.mjs.map → _id_-CwR5oLu9.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-D265Wh_k.mjs → _id_-DvJZ5Qis.mjs} +168 -120
- package/.output/server/chunks/build/_id_-DvJZ5Qis.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-eNJmBp05.mjs → _wsId_-B3aB9bIp.mjs} +5 -5
- package/.output/server/chunks/build/{_wsId_-eNJmBp05.mjs.map → _wsId_-B3aB9bIp.mjs.map} +1 -1
- package/.output/server/chunks/build/{daq-DxaXk_8N.mjs → daq-epWL_sC7.mjs} +5 -5
- package/.output/server/chunks/build/{daq-DxaXk_8N.mjs.map → daq-epWL_sC7.mjs.map} +1 -1
- package/.output/server/chunks/build/{dcw-B0dtiHFG.mjs → dcw-CBPaFj2f.mjs} +2 -2
- package/.output/server/chunks/build/{dcw-B0dtiHFG.mjs.map → dcw-CBPaFj2f.mjs.map} +1 -1
- package/.output/server/chunks/build/{logs-UWXeNKy_.mjs → logs-Bz1p6x_5.mjs} +3 -3
- package/.output/server/chunks/build/{logs-UWXeNKy_.mjs.map → logs-Bz1p6x_5.mjs.map} +1 -1
- package/.output/server/chunks/build/{pages-Aexs6LjD.mjs → pages-Dq7_H4FK.mjs} +3 -3
- package/.output/server/chunks/build/{pages-Aexs6LjD.mjs.map → pages-Dq7_H4FK.mjs.map} +1 -1
- package/.output/server/chunks/build/{town-BbaR-8io.mjs → town-CstiKxf_.mjs} +5 -5
- package/.output/server/chunks/build/{town-BbaR-8io.mjs.map → town-CstiKxf_.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDaqStream-BkmyQT06.mjs → useDaqStream-BOOZ-p-l.mjs} +2 -2
- package/.output/server/chunks/build/{useDaqStream-BkmyQT06.mjs.map → useDaqStream-BOOZ-p-l.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDcwStream-DWVoU96J.mjs → useDcwStream-DyB2ufQI.mjs} +15 -1
- package/.output/server/chunks/build/{useDcwStream-DWVoU96J.mjs.map → useDcwStream-DyB2ufQI.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDeviceTwins-34WGk9aN.mjs → useDeviceTwins-ZbT86L9O.mjs} +2 -2
- package/.output/server/chunks/build/{useDeviceTwins-34WGk9aN.mjs.map → useDeviceTwins-ZbT86L9O.mjs.map} +1 -1
- package/.output/server/chunks/build/{useOpsLog-C9zTzYof.mjs → useOpsLog-8HCYFb6n.mjs} +2 -2
- package/.output/server/chunks/build/{useOpsLog-C9zTzYof.mjs.map → useOpsLog-8HCYFb6n.mjs.map} +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +42 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +29 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/{_id_.patch.mjs → index.patch.mjs} +11 -6
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -0
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/virtual/entry.mjs +34 -8
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/app/composables/workshop/useDcwStream.ts +12 -0
- package/app/pages/dcw/[id].vue +165 -1
- package/i18n/locales/en.ts +13 -0
- package/i18n/locales/zh-CN.ts +13 -0
- package/package.json +1 -1
- package/scripts/_dbg-recipe-e2e.mjs +176 -0
- package/server/api/workshop/dcw/recipes/{[id].patch.ts → [id]/index.patch.ts} +9 -3
- package/server/api/workshop/dcw/recipes/[id]/revert.post.ts +28 -0
- package/server/api/workshop/dcw/recipes/[id]/versions.get.ts +14 -0
- package/server/data/dcw-products.json +7 -0
- package/server/data/dcw-rollback.json +9 -9
- package/server/data/dcws.json +222 -222
- package/server/services/workshop/agents/host-tool-bridge.ts +21 -1
- package/server/services/workshop/agents/industrial-tools.ts +222 -4
- package/server/services/workshop/daq/drivers.ts +16 -3
- package/server/services/workshop/dcw/dcw-controller.ts +50 -2
- package/server/services/workshop/dcw/dcw-recipe.repo.ts +81 -3
- package/server/services/workshop/dcw/drivers.ts +2 -2
- package/shared/dcw-protocol.ts +14 -2
- package/.output/public/_nuxt/Bc3PiGGr.js +0 -1
- package/.output/public/_nuxt/_id_.DTvjd6VN.css +0 -1
- package/.output/public/_nuxt/builds/meta/cf0a8831-4514-493d-ad5a-4e371a089ef9.json +0 -1
- package/.output/server/chunks/build/_id_-D265Wh_k.mjs.map +0 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,K as t,U as n,W as r,q as ee}from"./rqZ-1SoP.js";import{C as i,G as a,H as o,Ht as s,St as c,Wt as l,a as u,b as d,c as te,f,ft as p,g as m,h,m as ne,mt as g,p as _,rt as v,t as y,z as re}from"./BSCpFtzG.js";import{r as b}from"./D-Ca4BGY.js";import{t as ie}from"./G0qIw7Gq2.js";import{t as ae}from"./arUY5dyq2.js";import{t as oe}from"./
|
|
1
|
+
import{C as e,K as t,U as n,W as r,q as ee}from"./rqZ-1SoP.js";import{C as i,G as a,H as o,Ht as s,St as c,Wt as l,a as u,b as d,c as te,f,ft as p,g as m,h,m as ne,mt as g,p as _,rt as v,t as y,z as re}from"./BSCpFtzG.js";import{r as b}from"./D-Ca4BGY.js";import{t as ie}from"./G0qIw7Gq2.js";import{t as ae}from"./arUY5dyq2.js";import{t as oe}from"./DAR70Lf5.js";import{t as se}from"./UtviM1bg.js";var ce={class:`page`},le={class:`head`},ue={class:`h1`},de={class:`sub`},fe={class:`head-actions`},pe=[`title`],x={class:`live-txt mono`},S={class:`filter-card`},C={class:`flt`},w={value:``},T=[`value`],E={class:`flt`},D={value:``},O=[`value`],k={class:`flt`},A={value:``},j=[`value`],M={class:`flt`},N={value:``},P={value:`user`},F={value:`system`},I={class:`flt`},L={value:``},R=[`value`],z={class:`flt flt-grow`},B=[`placeholder`],me=[`disabled`],he={class:`table-card`},ge={key:0,class:`err`},_e={class:`log-table`},ve={class:`th-time`},ye={class:`th-src`},be={class:`th-kind`},xe={class:`th-scope`},Se={class:`th-detail`},Ce={class:`mono dim`},we={class:`actor`},Te={class:`summary`},Ee={class:`mono dim action`},De={class:`scope`},Oe=[`title`],ke=[`title`],Ae={key:2,class:`scope-chip`,title:`Recipe`},V={key:3,class:`dim`},je={class:`detail-cell`},Me=[`onClick`],Ne={key:1,class:`dim`},Pe={key:0,colspan:`7`,class:`empty`},Fe={key:1,class:`detail-box mono`},Ie={class:`modal`},Le={class:`m-title`},Re={class:`m-f`},ze=[`placeholder`],Be={class:`m-grid`},Ve={class:`m-f`},He={value:``},Ue=[`value`],We={class:`m-f`},Ge={value:``},Ke=[`value`],qe={class:`m-f`},Je={value:``},Ye=[`value`],Xe={key:0,class:`err`},Ze={class:`m-actions`},Qe=[`disabled`],H=y(i({name:`OpsLogsPage`,setup(i){let y=t=>e().$i18n.t(t),H=oe(),$e=ae(),U=se(),et=[`write`,`manual`,`alarm`,`line`,`recipe`,`rollback`,`daq`,`system`],W=p({lineId:``,productId:``,recipeId:``,actorKind:``,kind:``,text:``}),G=g(null),K=g(!1),q=p({summary:``,lineId:``,productId:``,recipeId:``}),tt=f(()=>!!(W.lineId||W.productId||W.recipeId||W.actorKind||W.kind||W.text.trim())),J=f(()=>H.products.filter(e=>!W.lineId||e.lineId===W.lineId)),Y=f(()=>H.recipes.filter(e=>(!W.lineId||e.lineId===W.lineId)&&(!W.productId||e.productId===W.productId)));function X(){U.fetchLogs({lineId:W.lineId,productId:W.productId,recipeId:W.recipeId,actorKind:W.actorKind,kind:W.kind,q:W.text.trim(),limit:300}),G.value=null}function nt(){W.lineId=``,W.productId=``,W.recipeId=``,W.actorKind=``,W.kind=``,W.text=``,X()}function rt(){q.summary=``,q.lineId=W.lineId,q.productId=W.productId,q.recipeId=W.recipeId,K.value=!0}async function it(){try{await U.postManual({summary:q.summary.trim(),lineId:q.lineId,productId:q.productId,recipeId:q.recipeId}),b.success(y(`logs.mOk`)),K.value=!1,X()}catch(e){b.error(ie(e))}}function at(e){G.value=G.value===e?null:e}function ot(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function st(e){let t=new Date(e);if(!Number.isFinite(t.getTime()))return e;let n=e=>String(e).padStart(2,`0`);return`${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function ct(e){return e===`agent`?`Agent`:y(e===`user`?`logs.src.user`:`logs.src.system`)}function lt(e){return e?y(`logs.kind.${e}`):`—`}function Z(e){return H.lines.find(t=>t.id===e)?.name??``}function Q(e){return H.products.find(t=>t.id===e)?.name??``}function $(e){return H.recipes.find(t=>t.id===e)?.name??``}return re(()=>{$e.ensureConnected(),U.ensureLive(),H.load(),X()}),(e,i)=>(o(),m(`div`,ce,[_(`header`,le,[_(`div`,null,[i[16]||=_(`p`,{class:`aw-kicker`},` agentworkshop / audit log `,-1),_(`h1`,ue,l(e.$t(`logs.title`)),1),_(`p`,de,l(e.$t(`logs.sub`)),1)]),_(`div`,fe,[_(`span`,{class:`live-dot`,title:e.$t(`logs.liveHint`)},null,8,pe),_(`span`,x,l(e.$t(`logs.live`))+` `+l(c(U).recent.length),1),_(`button`,{class:`pill-btn`,onClick:rt},[i[17]||=_(`span`,{class:`i-tabler-plus`},null,-1),d(` `+l(e.$t(`logs.manual`)),1)])])]),_(`section`,S,[_(`label`,C,[_(`span`,null,l(e.$t(`logs.fLine`)),1),v(_(`select`,{"onUpdate:modelValue":i[0]||=e=>W.lineId=e,class:`inp-sel`,onChange:i[1]||=e=>{W.productId=``,W.recipeId=``}},[_(`option`,w,l(e.$t(`logs.all`)),1),(o(!0),m(u,null,a(c(H).lines,e=>(o(),m(`option`,{key:e.id,value:e.id},l(e.name),9,T))),128))],544),[[n,W.lineId]])]),_(`label`,E,[_(`span`,null,l(e.$t(`logs.fProduct`)),1),v(_(`select`,{"onUpdate:modelValue":i[2]||=e=>W.productId=e,class:`inp-sel`,onChange:i[3]||=e=>W.recipeId=``},[_(`option`,D,l(e.$t(`logs.all`)),1),(o(!0),m(u,null,a(J.value,e=>(o(),m(`option`,{key:e.id,value:e.id},l(e.name),9,O))),128))],544),[[n,W.productId]])]),_(`label`,k,[i[18]||=_(`span`,null,`Recipe`,-1),v(_(`select`,{"onUpdate:modelValue":i[4]||=e=>W.recipeId=e,class:`inp-sel`},[_(`option`,A,l(e.$t(`logs.all`)),1),(o(!0),m(u,null,a(Y.value,e=>(o(),m(`option`,{key:e.id,value:e.id},l(e.name),9,j))),128))],512),[[n,W.recipeId]])]),_(`label`,M,[_(`span`,null,l(e.$t(`logs.fSource`)),1),v(_(`select`,{"onUpdate:modelValue":i[5]||=e=>W.actorKind=e,class:`inp-sel`},[_(`option`,N,l(e.$t(`logs.all`)),1),_(`option`,P,l(e.$t(`logs.src.user`)),1),i[19]||=_(`option`,{value:`agent`},` Agent `,-1),_(`option`,F,l(e.$t(`logs.src.system`)),1)],512),[[n,W.actorKind]])]),_(`label`,I,[_(`span`,null,l(e.$t(`logs.fKind`)),1),v(_(`select`,{"onUpdate:modelValue":i[6]||=e=>W.kind=e,class:`inp-sel`},[_(`option`,L,l(e.$t(`logs.all`)),1),(o(),m(u,null,a(et,t=>_(`option`,{key:t,value:t},l(e.$t(`logs.kind.${t}`)),9,R)),64))],512),[[n,W.kind]])]),_(`label`,z,[_(`span`,null,l(e.$t(`logs.fKeyword`)),1),v(_(`input`,{"onUpdate:modelValue":i[7]||=e=>W.text=e,class:`inp-sel`,type:`search`,placeholder:e.$t(`logs.fKeywordPh`),onKeydown:t(X,[`enter`])},null,40,B),[[r,W.text]])]),_(`button`,{class:`pill-btn`,disabled:c(U).loading.list,onClick:X},[i[20]||=_(`span`,{class:`i-tabler-search`},null,-1),d(` `+l(e.$t(`logs.query`)),1)],8,me),tt.value?(o(),m(`button`,{key:0,class:`mini-btn`,onClick:nt},l(e.$t(`logs.reset`)),1)):h(``,!0)]),_(`section`,he,[c(U).error.list?(o(),m(`p`,ge,l(c(U).error.list),1)):h(``,!0),_(`table`,_e,[_(`thead`,null,[_(`tr`,null,[_(`th`,ve,l(e.$t(`logs.thTime`)),1),_(`th`,ye,l(e.$t(`logs.fSource`)),1),_(`th`,null,l(e.$t(`logs.thActor`)),1),_(`th`,be,l(e.$t(`logs.fKind`)),1),_(`th`,null,l(e.$t(`logs.thSummary`)),1),_(`th`,xe,l(e.$t(`logs.thScope`)),1),_(`th`,Se,l(e.$t(`logs.thDetail`)),1)])]),_(`tbody`,null,[(o(!0),m(u,null,a(c(U).results,t=>(o(),m(`tr`,{key:`${t.id}-${t.at}`},[_(`td`,Ce,l(st(t.at)),1),_(`td`,null,[_(`span`,{class:s([`src-badge`,t.actorKind])},l(ct(t.actorKind)),3)]),_(`td`,we,l(t.actorName||t.actor||`—`),1),_(`td`,null,[_(`span`,{class:s([`kind-chip`,t.kind])},l(lt(t.kind)),3)]),_(`td`,Te,[d(l(t.summary)+` `,1),_(`small`,Ee,l(t.action),1)]),_(`td`,De,[Z(t.lineId)?(o(),m(`span`,{key:0,class:`scope-chip`,title:e.$t(`logs.fLine`)},l(Z(t.lineId)),9,Oe)):h(``,!0),Q(t.productId)?(o(),m(`span`,{key:1,class:`scope-chip`,title:e.$t(`logs.fProduct`)},l(Q(t.productId)),9,ke)):h(``,!0),$(t.recipeId)?(o(),m(`span`,Ae,l($(t.recipeId)),1)):h(``,!0),!t.lineId&&!t.productId&&!t.recipeId?(o(),m(`span`,V,`—`)):h(``,!0)]),_(`td`,je,[t.detailJson&&t.detailJson!==`{}`?(o(),m(`button`,{key:0,class:`mini-btn`,onClick:e=>at(t)},l(G.value===t?e.$t(`logs.fold`):e.$t(`logs.expand`)),9,Me)):(o(),m(`span`,Ne,`—`))])]))),128)),_(`tr`,null,[c(U).results.length===0?(o(),m(`td`,Pe,[c(U).loading.list?(o(),m(u,{key:0},[d(l(e.$t(`logs.loading`)),1)],64)):(o(),m(u,{key:1},[d(l(e.$t(`logs.empty`)),1)],64))])):h(``,!0)])])]),G.value?(o(),m(`pre`,Fe,l(ot(G.value.detailJson)),1)):h(``,!0)]),(o(),ne(te,{to:`body`},[K.value?(o(),m(`div`,{key:0,class:`modal-mask`,onClick:i[15]||=ee(e=>K.value=!1,[`self`])},[_(`div`,Ie,[_(`h3`,Le,l(e.$t(`logs.manual`)),1),_(`label`,Re,[_(`span`,null,l(e.$t(`logs.mSummary`))+` *`,1),v(_(`textarea`,{"onUpdate:modelValue":i[8]||=e=>q.summary=e,rows:`3`,placeholder:e.$t(`logs.mSummaryPh`)},null,8,ze),[[r,q.summary]])]),_(`div`,Be,[_(`label`,Ve,[_(`span`,null,l(e.$t(`logs.fLine`)),1),v(_(`select`,{"onUpdate:modelValue":i[9]||=e=>q.lineId=e,class:`inp-sel`,onChange:i[10]||=e=>{q.productId=``,q.recipeId=``}},[_(`option`,He,l(e.$t(`logs.all`)),1),(o(!0),m(u,null,a(c(H).lines,e=>(o(),m(`option`,{key:e.id,value:e.id},l(e.name),9,Ue))),128))],544),[[n,q.lineId]])]),_(`label`,We,[_(`span`,null,l(e.$t(`logs.fProduct`)),1),v(_(`select`,{"onUpdate:modelValue":i[11]||=e=>q.productId=e,class:`inp-sel`,onChange:i[12]||=e=>q.recipeId=``},[_(`option`,Ge,l(e.$t(`logs.all`)),1),(o(!0),m(u,null,a(J.value,e=>(o(),m(`option`,{key:e.id,value:e.id},l(e.name),9,Ke))),128))],544),[[n,q.productId]])]),_(`label`,qe,[i[21]||=_(`span`,null,`Recipe`,-1),v(_(`select`,{"onUpdate:modelValue":i[13]||=e=>q.recipeId=e,class:`inp-sel`},[_(`option`,Je,l(e.$t(`logs.all`)),1),(o(!0),m(u,null,a(Y.value,e=>(o(),m(`option`,{key:e.id,value:e.id},l(e.name),9,Ye))),128))],512),[[n,q.recipeId]])])]),c(U).error.post?(o(),m(`p`,Xe,l(c(U).error.post),1)):h(``,!0),_(`div`,Ze,[_(`button`,{class:`ghost-btn`,onClick:i[14]||=e=>K.value=!1},l(e.$t(`common.cancel`)),1),_(`button`,{class:`pill-btn`,disabled:c(U).loading.posting||!q.summary.trim(),onClick:it},l(e.$t(`logs.mSubmit`)),9,Qe)])])])):h(``,!0)]))]))}}),[[`__scopeId`,`data-v-53f2addc`]]);export{H as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{H as e,U as t,W as n,q as r}from"./rqZ-1SoP.js";import{C as i,F as a,G as o,H as s,Ht as c,St as l,Wt as u,a as d,b as f,et as p,f as m,ft as ee,g as h,h as g,mt as _,nt as v,p as y,rt as b,t as x,x as S,z as C}from"./BSCpFtzG.js";import{a as te}from"./vJ4FPb-_.js";import{t as ne}from"./D8CqF0yy.js";import{n as re}from"./BeIfu4N3.js";import{t as ie}from"./DXRZPxGs.js";import{t as ae}from"./G0qIw7Gq2.js";import{t as oe}from"./CNs_Ozdc.js";import{t as se}from"./C6m-kenn.js";import{a as ce,n as w,t as le}from"./B3Psw_sL.js";import{t as ue}from"./6vYobj4F.js";var de={class:`page`},fe={class:`aw-kicker`},pe={class:`aw-page-head`},me={key:0,class:`err`},he={key:1,class:`grid`},ge={class:`col-live`},_e={class:`aw-tile value-card`},ve={class:`aw-kicker`},ye={class:`big-val mono`},be={class:`facts mono`},xe={class:`col-form aw-tile pad`},Se={class:`sec`},Ce={class:`field`},we={class:`field`},Te={value:``},Ee=[`value`],De={class:`field`},Oe=[`value`,`disabled`],ke={class:`field row`},Ae=[`disabled`],je={class:`field row`},Me=[`disabled`],Ne=[`disabled`],Pe={class:`field row`},Fe=[`disabled`],Ie={class:`field`},Le={class:`field`},Re={class:`field-row`},ze={class:`field`},Be={class:`field`},Ve={class:`field`},He={class:`field`},Ue=[`disabled`],We={class:`sec mt`},Ge={class:`driver-grid`},Ke={key:0},qe=[`onUpdate:modelValue`],Je=[`value`],Ye=[`onUpdate:modelValue`,`type`,`placeholder`],Xe={class:`test-row`},Ze=[`disabled`],Qe={class:`sec mt`},$e={class:`bind-row`},et={value:``},tt=[`value`],nt={class:`col-hist aw-tile pad`},rt={class:`hist-hd`},it={class:`sec`},at={class:`hist-ctl mono`},ot=[`value`],st={class:`raw-table mono`},ct={key:2,class:`aw-tile pad frames-tile`},lt={class:`hist-hd`},ut={class:`sec`},dt={class:`mono frames-n`},ft=[`viewBox`],pt=[`points`],mt={class:`raw-table mono`},ht={key:0,class:`gal`},gt=[`title`,`onClick`],_t=[`src`],vt={class:`mono`},yt={key:1,class:`frames-empty`},bt=[`src`],T=320,xt=84,St=`#35e0a0`,Ct=`rgba(120,135,160,0.18)`,E=`rgba(140,155,175,0.8)`,D=x(i({__name:`[id]`,setup(i){let{t:x}=re();oe({layout:`default`});let D=te(),O=m(()=>String(D.params.id??``)),k=le(),A=se();A.load();let j=ue(),M=m(()=>k.nodeById(O.value)??null),N=m(()=>{let e=M.value?ce(M.value.templateRef):``;return k.templates.find(t=>t.key===e)??null}),wt={ok:x(`daqDetail.k41k5c026`),warn:x(`daqDetail.k49z8v027`),alarm:x(`daqDetail.k3xmid028`),offline:x(`daqDetail.k44c2n029`)},P=()=>{let e=M.value;return!e||!k.controller.running||!e.enabled?`offline`:e.state},F=null;C(()=>{F=k.ensureWsFeed(),k.load(),j.load(),L.value&&z()}),a(()=>F?.());let I=m(()=>N.value?.signalKind??`scalar`),L=m(()=>I.value!==`scalar`),R=m(()=>k.framesOf(O.value));async function z(){O.value&&await k.fetchFrames(O.value,{limit:24}).catch(()=>{})}p(O,()=>{L.value&&z()});let B=e=>new Date(e).toLocaleTimeString(`zh-CN`,{hour12:!1}),V=e=>Object.entries(e.metrics??{}).slice(0,3).map(([e,t])=>`${e}=${t}`).join(` `),Tt=m(()=>R.value.find(e=>e.kind===`vector`&&e.points?.length)),Et=m(()=>{let e=Tt.value?.points??[];if(e.length<2)return``;let t=Math.min(...e),n=Math.max(...e)-t||1;return e.map((r,i)=>`${(i/(e.length-1)*T).toFixed(1)},${(78-(r-t)/n*72).toFixed(1)}`).join(` `)}),H=_(null);function Dt(e){return e==null?x(`daqDetail.k9vnp9h053`,{p0:k.controller.defaultPublishIntervalMs}):e===0?x(`daqDetail.k1m1zwux030`):`${e}ms`}let U=ee({enabled:!0,driver:`mock`,lineId:``,followGlobal:!0,intervalMs:5e3,calKind:`none`,calScale:1,calOffset:0,publishFollow:!0,publishEveryFrame:!1,publishMs:1e3,unit:``,decimals:1,min:0,max:100,warnLow:null,warnHigh:null});p(M,e=>{e&&(U.enabled=e.enabled,U.lineId=e.lineId??``,U.driver=e.driver,U.followGlobal=e.intervalMs==null,U.intervalMs=e.intervalMs??k.controller.defaultIntervalMs,U.publishFollow=e.publishIntervalMs==null,U.publishEveryFrame=e.publishIntervalMs===0,U.publishMs=e.publishIntervalMs==null?k.controller.defaultPublishIntervalMs:e.publishIntervalMs,U.unit=e.unit,U.decimals=e.decimals,U.min=e.min,U.max=e.max,U.warnLow=e.warnLow,U.warnHigh=e.warnHigh)},{immediate:!0});let W=_({}),G=m(()=>w.find(e=>e.kind===U.driver)?.configFields??[]);p(M,e=>{e&&(W.value={...e.driverConfig})},{immediate:!0}),p(()=>U.driver,()=>{if(G.value.length&&Object.keys(W.value).length===0){let e={};for(let t of G.value)t.default!==void 0&&(e[t.key]=t.default);W.value=e}},{immediate:!0});let K=_(!1),q=_(null);async function Ot(){K.value=!0,q.value=null;try{await k.patchNode(O.value,{driver:U.driver,driverConfig:{...W.value}}),q.value=await k.testNode(O.value)}catch(e){q.value={ok:!1,message:ae(e)}}finally{K.value=!1}}let J=_(!1);async function kt(){let e=M.value;if(!(!e||J.value)){J.value=!0;try{await k.patchNode(e.id,{enabled:U.enabled,driver:U.driver,lineId:U.lineId,driverConfig:{...W.value},intervalMs:U.followGlobal?null:Math.max(1e3,Math.min(6e4,Math.round(U.intervalMs))),publishIntervalMs:U.publishFollow?null:U.publishEveryFrame?0:Math.max(0,Math.min(6e4,Math.round(U.publishMs))),unit:U.unit,decimals:Math.max(0,Math.min(6,Math.round(U.decimals))),min:U.min,max:U.max,warnLow:U.warnLow,warnHigh:U.warnHigh})}finally{J.value=!1}}}function At(e){return k.meta.drivers.find(t=>t.kind===e)?.status===`planned`}let Y=_(``),jt=m(()=>{let e=M.value?.deviceBindingId;return e?j.twins.find(t=>t.id===e)?.name??`${e.slice(0,8)}…`:``});function Mt(){k.bindNode(O.value,M.value?.deviceBindingId?null:Y.value||null)}let Nt=m(()=>j.twins.filter(e=>e.kind!==`daq`&&e.id!==M.value?.id)),X=_([]),Z=_(15e3),Pt=_(!1),Ft=[{label:`1s 桶`,ms:1e3},{label:`5s 桶`,ms:5e3},{label:`15s 桶(默认)`,ms:15e3},{label:`30s 桶`,ms:3e4},{label:`1min 桶`,ms:6e4}];async function Q(){if(O.value){Pt.value=!0;try{let e=await k.samplesOf(O.value,{toMs:Date.now(),bucketMs:Z.value||void 0,limit:400});X.value=[...e].reverse()}finally{Pt.value=!1,Lt()}}}let It=_(null);function Lt(){let e=It.value;if(!e)return;let t=Math.min(window.devicePixelRatio||1,2),n=e.clientWidth,r=e.clientHeight;(e.width!==n*t||e.height!==r*t)&&(e.width=n*t,e.height=r*t);let i=e.getContext(`2d`);if(!i)return;i.setTransform(t,0,0,t,0,0),i.clearRect(0,0,n,r);for(let e=1;e<4;e++)i.strokeStyle=Ct,i.beginPath(),i.moveTo(0,r/4*e),i.lineTo(n,r/4*e),i.stroke();let a=X.value;if(a.length<2)return;let o=1/0,s=-1/0;for(let e of a){let t=e.value??e.avg??e.min??0;o=Math.min(o,t),s=Math.max(s,t)}let c=Math.max(s-o,1e-9);i.strokeStyle=E,i.font=`10px monospace`,i.fillStyle=E,i.fillText(s.toFixed(2),4,11),i.fillText(o.toFixed(2),4,r-4),i.strokeStyle=St,i.lineWidth=1.6,i.beginPath(),a.forEach((e,t)=>{let s=t/(a.length-1)*n,l=r-((e.value??e.avg??0)-o)/c*(r-16)-8;t===0?i.moveTo(s,l):i.lineTo(s,l)}),i.stroke()}let Rt=_(null),$=null;function zt(){let e=Rt.value,t=M.value;if(!e||!t||t.hist.length<2)return;let n=Math.min(window.devicePixelRatio||1,2),r=e.clientWidth,i=e.clientHeight;(e.width!==r*n||e.height!==i*n)&&(e.width=r*n,e.height=i*n);let a=e.getContext(`2d`);if(!a)return;a.setTransform(n,0,0,n,0,0),a.clearRect(0,0,r,i);let o=Math.max(...t.hist),s=Math.min(...t.hist),c=Math.max(o-s,1e-9);a.strokeStyle=`rgba(65,200,244,0.9)`,a.lineWidth=1.5,a.beginPath(),t.hist.forEach((e,n)=>{let o=n/(t.hist.length-1)*r,l=i-(e-s)/c*(i-6)-3;n===0?a.moveTo(o,l):a.lineTo(o,l)}),a.stroke()}return C(()=>{Q(),$=ie(()=>{zt()},800)}),a(()=>{$&&clearInterval($)}),p(Z,()=>void Q()),(i,a)=>{let p=ne;return s(),h(`div`,de,[y(`p`,fe,[S(p,{to:`/daq`,class:`back`},{default:v(()=>[f(u(i.$t(`daqDetail.k1emg364001`)),1)]),_:1}),f(` / NODE `+u(O.value.slice(0,8).toUpperCase()),1)]),y(`div`,pe,[y(`h1`,null,u(M.value?.name??O.value),1),y(`span`,{class:c([`st-pill`,[P()]])},u(wt[P()]),3)]),!M.value&&l(k).error?(s(),h(`p`,me,[f(u(l(k).error)+`(`,1),S(p,{to:`/workshop`},{default:v(()=>[f(u(i.$t(`daqDetail.k1bhhheq002`)),1)]),_:1}),a[20]||=f(`) `,-1)])):g(``,!0),M.value?(s(),h(`div`,he,[y(`section`,ge,[y(`div`,_e,[y(`p`,ve,u(i.$t(`daqDetail.k1fx2vik032`))+` `+u(N.value?.ch??`-`),1),y(`div`,ye,[f(u(M.value.value==null?`--`:M.value.value.toFixed(M.value.decimals)),1),y(`small`,null,u(M.value.unit),1)]),y(`canvas`,{ref_key:`liveCanvas`,ref:Rt,class:`live-canvas`},null,512),y(`dl`,be,[y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k4a0la003`)),1),y(`dd`,null,u(M.value.driver)+u(At(M.value.driver)?i.$t(`daqDetail.kz8zr9v035`):``),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k3xg3w004`)),1),y(`dd`,null,u(M.value.intervalMs??i.$t(`daqDetail.k9vnp9h053`,{p0:l(k).controller.defaultIntervalMs})),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k3w6td005`)),1),y(`dd`,null,u(Dt(M.value.publishIntervalMs)),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k3x5tpx006`)),1),y(`dd`,null,u(M.value.warnLow??`-∞`)+` ~ `+u(M.value.warnHigh??`+∞`),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k1hjj0jf007`)),1),y(`dd`,null,u(M.value.min)+` ~ `+u(M.value.max),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k1i8rtqt008`)),1),y(`dd`,null,u(jt.value||i.$t(`daqDetail.k3own4q036`)),1)])])])]),y(`section`,xe,[y(`h3`,Se,u(i.$t(`daqDetail.kd9d69j009`)),1),y(`form`,{class:`form-grid`,onSubmit:r(kt,[`prevent`])},[y(`label`,Ce,[y(`span`,null,u(i.$t(`daqDetail.k1iw7tbf010`)),1),y(`button`,{type:`button`,class:c([`toggle`,{on:U.enabled}]),onClick:a[0]||=e=>U.enabled=!U.enabled},u(U.enabled?i.$t(`daqDetail.k3w3j8f037`):i.$t(`daqDetail.k3n5aaj045`)),3)]),y(`label`,we,[y(`span`,null,u(i.$t(`daqDetail.k12k23od011`)),1),b(y(`select`,{"onUpdate:modelValue":a[1]||=e=>U.lineId=e,class:`input`},[y(`option`,Te,u(i.$t(`daqDetail.k3ootr6012`)),1),(s(!0),h(d,null,o(l(A).lines,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,Ee))),128))],512),[[t,U.lineId]])]),y(`label`,De,[y(`span`,null,u(i.$t(`daqDetail.k1l6smxo013`)),1),b(y(`select`,{"onUpdate:modelValue":a[2]||=e=>U.driver=e,class:`input`},[(s(!0),h(d,null,o(l(w),e=>(s(),h(`option`,{key:e.kind,value:e.kind,disabled:e.status===`planned`},u(e.label)+u(e.status===`planned`?i.$t(`daqDetail.kz8zr9v035`):``),9,Oe))),128))],512),[[t,U.driver]])]),y(`label`,ke,[y(`button`,{type:`button`,class:c([`toggle slim`,{on:U.followGlobal}]),onClick:a[3]||=e=>U.followGlobal=!U.followGlobal},u(U.followGlobal?i.$t(`daqDetail.k1k2ueyq038`):i.$t(`daqDetail.k1cgi8fy046`)),3),b(y(`input`,{"onUpdate:modelValue":a[4]||=e=>U.intervalMs=e,type:`number`,min:`1000`,max:`60000`,step:`500`,class:`input`,disabled:U.followGlobal},null,8,Ae),[[n,U.intervalMs,void 0,{number:!0}]]),a[21]||=y(`small`,null,`ms`,-1)]),y(`label`,je,[y(`button`,{type:`button`,class:c([`toggle slim`,{on:U.calKind===`linear`}]),title:`采集标定 decoder:物理值 = scale × PLC采集值 + offset`,onClick:a[5]||=e=>U.calKind=U.calKind===`linear`?`none`:`linear`},u(U.calKind===`linear`?i.$t(`daqDetail.k1eru4r1039`):i.$t(`daqDetail.k3oktae047`)),3),b(y(`input`,{"onUpdate:modelValue":a[6]||=e=>U.calScale=e,type:`number`,step:`0.1`,class:`input`,disabled:U.calKind!==`linear`,title:`decode 斜率(≠0)`},null,8,Me),[[n,U.calScale,void 0,{number:!0}]]),b(y(`input`,{"onUpdate:modelValue":a[7]||=e=>U.calOffset=e,type:`number`,step:`0.1`,class:`input`,disabled:U.calKind!==`linear`,title:`decode 截距`},null,8,Ne),[[n,U.calOffset,void 0,{number:!0}]]),a[22]||=y(`small`,null,`decoder`,-1)]),y(`label`,Pe,[y(`button`,{type:`button`,class:c([`toggle slim`,{on:U.publishFollow}]),onClick:a[8]||=e=>U.publishFollow=!U.publishFollow},u(U.publishFollow?i.$t(`daqDetail.k1k2t5o7040`):i.$t(`daqDetail.k1cggz5f048`)),3),y(`span`,{class:c([`toggle slim`,{on:U.publishEveryFrame}]),style:{cursor:`pointer`},onClick:a[9]||=e=>U.publishEveryFrame=!U.publishEveryFrame},u(U.publishEveryFrame?i.$t(`daqDetail.k41mvv041`):i.$t(`daqDetail.k3n42dj049`)),3),b(y(`input`,{"onUpdate:modelValue":a[10]||=e=>U.publishMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,class:`input`,disabled:U.publishFollow||U.publishEveryFrame},null,8,Fe),[[n,U.publishMs,void 0,{number:!0}]]),a[23]||=y(`small`,null,`ms`,-1)]),y(`label`,Ie,[y(`span`,null,u(i.$t(`daqDetail.k3x4ef014`)),1),b(y(`input`,{"onUpdate:modelValue":a[11]||=e=>U.unit=e,class:`input`},null,512),[[n,U.unit]])]),y(`label`,Le,[y(`span`,null,u(i.$t(`daqDetail.k3mxmcx015`)),1),b(y(`input`,{"onUpdate:modelValue":a[12]||=e=>U.decimals=e,type:`number`,min:`0`,max:`6`,class:`input`},null,512),[[n,U.decimals,void 0,{number:!0}]])]),y(`div`,Re,[y(`label`,ze,[y(`span`,null,u(i.$t(`daqDetail.k1l9jv5m016`)),1),b(y(`input`,{"onUpdate:modelValue":a[13]||=e=>U.min=e,type:`number`,step:`any`,class:`input`},null,512),[[n,U.min,void 0,{number:!0}]])]),y(`label`,Be,[y(`span`,null,u(i.$t(`daqDetail.k1md63hm017`)),1),b(y(`input`,{"onUpdate:modelValue":a[14]||=e=>U.warnLow=e,type:`number`,step:`any`,class:`input`},null,512),[[n,U.warnLow,void 0,{number:!0}]])]),y(`label`,Ve,[y(`span`,null,u(i.$t(`daqDetail.k1md63gp018`)),1),b(y(`input`,{"onUpdate:modelValue":a[15]||=e=>U.warnHigh=e,type:`number`,step:`any`,class:`input`},null,512),[[n,U.warnHigh,void 0,{number:!0}]])]),y(`label`,He,[y(`span`,null,u(i.$t(`daqDetail.k1l9jv4p019`)),1),b(y(`input`,{"onUpdate:modelValue":a[16]||=e=>U.max=e,type:`number`,step:`any`,class:`input`},null,512),[[n,U.max,void 0,{number:!0}]])])]),y(`button`,{class:`aw-pill`,type:`submit`,disabled:J.value},u(J.value?i.$t(`daqDetail.k1as0g50042`):i.$t(`daqDetail.ksn9cgo050`)),9,Ue)],32),G.value.length?(s(),h(d,{key:0},[y(`h3`,We,u(i.$t(`daqDetail.k1p9gioa033`))+` `+u(l(w).find(e=>e.kind===U.driver)?.label),1),y(`div`,Ge,[(s(!0),h(d,null,o(G.value,n=>(s(),h(`label`,{key:n.key,class:`field`},[y(`span`,null,[f(u(n.label),1),n.required?(s(),h(`em`,Ke,`*`)):g(``,!0)]),n.type===`select`?b((s(),h(`select`,{key:0,"onUpdate:modelValue":e=>W.value[n.key]=e,class:`input`},[(s(!0),h(d,null,o(n.options,e=>(s(),h(`option`,{key:e.value,value:e.value},u(e.label),9,Je))),128))],8,qe)),[[t,W.value[n.key]]]):b((s(),h(`input`,{key:1,"onUpdate:modelValue":e=>W.value[n.key]=e,type:n.type===`number`?`number`:`text`,placeholder:n.placeholder,class:`input`},null,8,Ye)),[[e,W.value[n.key]]])]))),128))]),y(`div`,Xe,[y(`button`,{class:`pill-btn`,disabled:K.value,onClick:Ot},u(K.value?i.$t(`daqDetail.k1fsh720043`):i.$t(`daqDetail.k1fstglk051`)),9,Ze),q.value?(s(),h(`span`,{key:0,class:c([`test-out mono`,q.value.ok?`ok`:`bad`])},u(q.value.ok?`✓`:`✗`)+` `+u(q.value.message),3)):g(``,!0)])],64)):g(``,!0),y(`h3`,Qe,u(i.$t(`daqDetail.k1ie6qju020`)),1),y(`div`,$e,[b(y(`select`,{"onUpdate:modelValue":a[17]||=e=>Y.value=e,class:`input grow`},[y(`option`,et,u(i.$t(`daqDetail.kjobzu3021`)),1),(s(!0),h(d,null,o(Nt.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,tt))),128))],512),[[t,Y.value]]),y(`button`,{class:`pill-btn`,onClick:Mt},u(jt.value?i.$t(`daqDetail.k479eh044`):i.$t(`daqDetail.k452a8052`)),1)])]),y(`section`,nt,[y(`div`,rt,[y(`h3`,it,u(i.$t(`daqDetail.k1i535i5034`))+u(l(k).meta.tsdb)+`) `,1),y(`div`,at,[b(y(`select`,{"onUpdate:modelValue":a[18]||=e=>Z.value=e,class:`input`},[(s(),h(d,null,o(Ft,e=>y(`option`,{key:e.ms,value:e.ms},u(e.label),9,ot)),64))],512),[[t,Z.value,void 0,{number:!0}]]),y(`button`,{class:`pill-btn`,onClick:Q},u(i.$t(`daqDetail.k3x1jg022`)),1)])]),y(`canvas`,{ref_key:`chartCanvas`,ref:It,class:`hist-canvas`},null,512),y(`table`,st,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,u(i.$t(`daqDetail.k40vsf023`)),1),y(`th`,null,u(i.$t(`daqDetail.k48v5024`)),1),y(`th`,null,u(i.$t(`daqDetail.k4bza025`)),1)])]),y(`tbody`,null,[(s(!0),h(d,null,o(X.value.filter(e=>e.value!=null).slice(-12).reverse(),(e,t)=>(s(),h(`tr`,{key:t},[y(`td`,null,u(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour12:!1})),1),y(`td`,null,u(e.value.toFixed(M.value?.decimals??2)),1),y(`td`,null,u(e.state),1)]))),128))])])])])):g(``,!0),L.value?(s(),h(`section`,ct,[y(`div`,lt,[y(`h3`,ut,[f(u(I.value===`image`?i.$t(`daqDetail.kfrm0001`):i.$t(`daqDetail.kfrm0002`))+` `,1),y(`span`,dt,u(R.value.length),1)]),y(`button`,{class:`pill-btn`,onClick:z},u(i.$t(`daqDetail.k3x1jg022`)),1)]),I.value===`vector`?(s(),h(d,{key:0},[(s(),h(`svg`,{class:`vec-svg`,viewBox:`0 0 ${T} ${xt}`,preserveAspectRatio:`none`},[y(`polyline`,{points:Et.value,fill:`none`,stroke:`var(--accent)`,"stroke-width":`1.5`},null,8,pt)],8,ft)),y(`table`,mt,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,u(i.$t(`daqDetail.k40vsf023`)),1),y(`th`,null,u(i.$t(`daqDetail.kfrm0004`)),1),y(`th`,null,u(i.$t(`daqDetail.kfrm0005`)),1)])]),y(`tbody`,null,[(s(!0),h(d,null,o(R.value.filter(e=>e.kind===`vector`).slice(0,12),e=>(s(),h(`tr`,{key:e.at},[y(`td`,null,u(B(e.at)),1),y(`td`,null,u(e.points?.length??0),1),y(`td`,null,u(V(e)),1)]))),128))])])],64)):(s(),h(d,{key:1},[R.value.length?(s(),h(`div`,ht,[(s(!0),h(d,null,o(R.value,e=>(s(),h(`figure`,{key:e.at,class:`gal-item`,title:i.$t(`daqDetail.kfrm0006`),onClick:t=>H.value=e},[y(`img`,{src:e.thumbUrl,loading:`lazy`,alt:`daq frame`},null,8,_t),y(`figcaption`,vt,u(B(e.at))+` · `+u(V(e)),1)],8,gt))),128))])):(s(),h(`p`,yt,u(i.$t(`daqDetail.kfrm0003`)),1)),H.value?(s(),h(`div`,{key:2,class:`gal-full`,onClick:a[19]||=e=>H.value=null},[y(`img`,{src:H.value.contentUrl??H.value.thumbUrl,alt:`daq frame full`},null,8,bt)])):g(``,!0)],64))])):g(``,!0)])}}}),[[`__scopeId`,`data-v-51809669`]]);export{D as default};
|
|
1
|
+
import{H as e,U as t,W as n,q as r}from"./rqZ-1SoP.js";import{C as i,F as a,G as o,H as s,Ht as c,St as l,Wt as u,a as d,b as f,et as p,f as m,ft as ee,g as h,h as g,mt as _,nt as v,p as y,rt as b,t as x,x as S,z as C}from"./BSCpFtzG.js";import{a as te}from"./vJ4FPb-_.js";import{t as ne}from"./D8CqF0yy.js";import{n as re}from"./BeIfu4N3.js";import{t as ie}from"./DXRZPxGs.js";import{t as ae}from"./G0qIw7Gq2.js";import{t as oe}from"./CNs_Ozdc.js";import{t as se}from"./DAR70Lf5.js";import{a as ce,n as w,t as le}from"./DBXhDLgl.js";import{t as ue}from"./BWC4HQHQ.js";var de={class:`page`},fe={class:`aw-kicker`},pe={class:`aw-page-head`},me={key:0,class:`err`},he={key:1,class:`grid`},ge={class:`col-live`},_e={class:`aw-tile value-card`},ve={class:`aw-kicker`},ye={class:`big-val mono`},be={class:`facts mono`},xe={class:`col-form aw-tile pad`},Se={class:`sec`},Ce={class:`field`},we={class:`field`},Te={value:``},Ee=[`value`],De={class:`field`},Oe=[`value`,`disabled`],ke={class:`field row`},Ae=[`disabled`],je={class:`field row`},Me=[`disabled`],Ne=[`disabled`],Pe={class:`field row`},Fe=[`disabled`],Ie={class:`field`},Le={class:`field`},Re={class:`field-row`},ze={class:`field`},Be={class:`field`},Ve={class:`field`},He={class:`field`},Ue=[`disabled`],We={class:`sec mt`},Ge={class:`driver-grid`},Ke={key:0},qe=[`onUpdate:modelValue`],Je=[`value`],Ye=[`onUpdate:modelValue`,`type`,`placeholder`],Xe={class:`test-row`},Ze=[`disabled`],Qe={class:`sec mt`},$e={class:`bind-row`},et={value:``},tt=[`value`],nt={class:`col-hist aw-tile pad`},rt={class:`hist-hd`},it={class:`sec`},at={class:`hist-ctl mono`},ot=[`value`],st={class:`raw-table mono`},ct={key:2,class:`aw-tile pad frames-tile`},lt={class:`hist-hd`},ut={class:`sec`},dt={class:`mono frames-n`},ft=[`viewBox`],pt=[`points`],mt={class:`raw-table mono`},ht={key:0,class:`gal`},gt=[`title`,`onClick`],_t=[`src`],vt={class:`mono`},yt={key:1,class:`frames-empty`},bt=[`src`],T=320,xt=84,St=`#35e0a0`,Ct=`rgba(120,135,160,0.18)`,E=`rgba(140,155,175,0.8)`,D=x(i({__name:`[id]`,setup(i){let{t:x}=re();oe({layout:`default`});let D=te(),O=m(()=>String(D.params.id??``)),k=le(),A=se();A.load();let j=ue(),M=m(()=>k.nodeById(O.value)??null),N=m(()=>{let e=M.value?ce(M.value.templateRef):``;return k.templates.find(t=>t.key===e)??null}),wt={ok:x(`daqDetail.k41k5c026`),warn:x(`daqDetail.k49z8v027`),alarm:x(`daqDetail.k3xmid028`),offline:x(`daqDetail.k44c2n029`)},P=()=>{let e=M.value;return!e||!k.controller.running||!e.enabled?`offline`:e.state},F=null;C(()=>{F=k.ensureWsFeed(),k.load(),j.load(),L.value&&z()}),a(()=>F?.());let I=m(()=>N.value?.signalKind??`scalar`),L=m(()=>I.value!==`scalar`),R=m(()=>k.framesOf(O.value));async function z(){O.value&&await k.fetchFrames(O.value,{limit:24}).catch(()=>{})}p(O,()=>{L.value&&z()});let B=e=>new Date(e).toLocaleTimeString(`zh-CN`,{hour12:!1}),V=e=>Object.entries(e.metrics??{}).slice(0,3).map(([e,t])=>`${e}=${t}`).join(` `),Tt=m(()=>R.value.find(e=>e.kind===`vector`&&e.points?.length)),Et=m(()=>{let e=Tt.value?.points??[];if(e.length<2)return``;let t=Math.min(...e),n=Math.max(...e)-t||1;return e.map((r,i)=>`${(i/(e.length-1)*T).toFixed(1)},${(78-(r-t)/n*72).toFixed(1)}`).join(` `)}),H=_(null);function Dt(e){return e==null?x(`daqDetail.k9vnp9h053`,{p0:k.controller.defaultPublishIntervalMs}):e===0?x(`daqDetail.k1m1zwux030`):`${e}ms`}let U=ee({enabled:!0,driver:`mock`,lineId:``,followGlobal:!0,intervalMs:5e3,calKind:`none`,calScale:1,calOffset:0,publishFollow:!0,publishEveryFrame:!1,publishMs:1e3,unit:``,decimals:1,min:0,max:100,warnLow:null,warnHigh:null});p(M,e=>{e&&(U.enabled=e.enabled,U.lineId=e.lineId??``,U.driver=e.driver,U.followGlobal=e.intervalMs==null,U.intervalMs=e.intervalMs??k.controller.defaultIntervalMs,U.publishFollow=e.publishIntervalMs==null,U.publishEveryFrame=e.publishIntervalMs===0,U.publishMs=e.publishIntervalMs==null?k.controller.defaultPublishIntervalMs:e.publishIntervalMs,U.unit=e.unit,U.decimals=e.decimals,U.min=e.min,U.max=e.max,U.warnLow=e.warnLow,U.warnHigh=e.warnHigh)},{immediate:!0});let W=_({}),G=m(()=>w.find(e=>e.kind===U.driver)?.configFields??[]);p(M,e=>{e&&(W.value={...e.driverConfig})},{immediate:!0}),p(()=>U.driver,()=>{if(G.value.length&&Object.keys(W.value).length===0){let e={};for(let t of G.value)t.default!==void 0&&(e[t.key]=t.default);W.value=e}},{immediate:!0});let K=_(!1),q=_(null);async function Ot(){K.value=!0,q.value=null;try{await k.patchNode(O.value,{driver:U.driver,driverConfig:{...W.value}}),q.value=await k.testNode(O.value)}catch(e){q.value={ok:!1,message:ae(e)}}finally{K.value=!1}}let J=_(!1);async function kt(){let e=M.value;if(!(!e||J.value)){J.value=!0;try{await k.patchNode(e.id,{enabled:U.enabled,driver:U.driver,lineId:U.lineId,driverConfig:{...W.value},intervalMs:U.followGlobal?null:Math.max(1e3,Math.min(6e4,Math.round(U.intervalMs))),publishIntervalMs:U.publishFollow?null:U.publishEveryFrame?0:Math.max(0,Math.min(6e4,Math.round(U.publishMs))),unit:U.unit,decimals:Math.max(0,Math.min(6,Math.round(U.decimals))),min:U.min,max:U.max,warnLow:U.warnLow,warnHigh:U.warnHigh})}finally{J.value=!1}}}function At(e){return k.meta.drivers.find(t=>t.kind===e)?.status===`planned`}let Y=_(``),jt=m(()=>{let e=M.value?.deviceBindingId;return e?j.twins.find(t=>t.id===e)?.name??`${e.slice(0,8)}…`:``});function Mt(){k.bindNode(O.value,M.value?.deviceBindingId?null:Y.value||null)}let Nt=m(()=>j.twins.filter(e=>e.kind!==`daq`&&e.id!==M.value?.id)),X=_([]),Z=_(15e3),Pt=_(!1),Ft=[{label:`1s 桶`,ms:1e3},{label:`5s 桶`,ms:5e3},{label:`15s 桶(默认)`,ms:15e3},{label:`30s 桶`,ms:3e4},{label:`1min 桶`,ms:6e4}];async function Q(){if(O.value){Pt.value=!0;try{let e=await k.samplesOf(O.value,{toMs:Date.now(),bucketMs:Z.value||void 0,limit:400});X.value=[...e].reverse()}finally{Pt.value=!1,Lt()}}}let It=_(null);function Lt(){let e=It.value;if(!e)return;let t=Math.min(window.devicePixelRatio||1,2),n=e.clientWidth,r=e.clientHeight;(e.width!==n*t||e.height!==r*t)&&(e.width=n*t,e.height=r*t);let i=e.getContext(`2d`);if(!i)return;i.setTransform(t,0,0,t,0,0),i.clearRect(0,0,n,r);for(let e=1;e<4;e++)i.strokeStyle=Ct,i.beginPath(),i.moveTo(0,r/4*e),i.lineTo(n,r/4*e),i.stroke();let a=X.value;if(a.length<2)return;let o=1/0,s=-1/0;for(let e of a){let t=e.value??e.avg??e.min??0;o=Math.min(o,t),s=Math.max(s,t)}let c=Math.max(s-o,1e-9);i.strokeStyle=E,i.font=`10px monospace`,i.fillStyle=E,i.fillText(s.toFixed(2),4,11),i.fillText(o.toFixed(2),4,r-4),i.strokeStyle=St,i.lineWidth=1.6,i.beginPath(),a.forEach((e,t)=>{let s=t/(a.length-1)*n,l=r-((e.value??e.avg??0)-o)/c*(r-16)-8;t===0?i.moveTo(s,l):i.lineTo(s,l)}),i.stroke()}let Rt=_(null),$=null;function zt(){let e=Rt.value,t=M.value;if(!e||!t||t.hist.length<2)return;let n=Math.min(window.devicePixelRatio||1,2),r=e.clientWidth,i=e.clientHeight;(e.width!==r*n||e.height!==i*n)&&(e.width=r*n,e.height=i*n);let a=e.getContext(`2d`);if(!a)return;a.setTransform(n,0,0,n,0,0),a.clearRect(0,0,r,i);let o=Math.max(...t.hist),s=Math.min(...t.hist),c=Math.max(o-s,1e-9);a.strokeStyle=`rgba(65,200,244,0.9)`,a.lineWidth=1.5,a.beginPath(),t.hist.forEach((e,n)=>{let o=n/(t.hist.length-1)*r,l=i-(e-s)/c*(i-6)-3;n===0?a.moveTo(o,l):a.lineTo(o,l)}),a.stroke()}return C(()=>{Q(),$=ie(()=>{zt()},800)}),a(()=>{$&&clearInterval($)}),p(Z,()=>void Q()),(i,a)=>{let p=ne;return s(),h(`div`,de,[y(`p`,fe,[S(p,{to:`/daq`,class:`back`},{default:v(()=>[f(u(i.$t(`daqDetail.k1emg364001`)),1)]),_:1}),f(` / NODE `+u(O.value.slice(0,8).toUpperCase()),1)]),y(`div`,pe,[y(`h1`,null,u(M.value?.name??O.value),1),y(`span`,{class:c([`st-pill`,[P()]])},u(wt[P()]),3)]),!M.value&&l(k).error?(s(),h(`p`,me,[f(u(l(k).error)+`(`,1),S(p,{to:`/workshop`},{default:v(()=>[f(u(i.$t(`daqDetail.k1bhhheq002`)),1)]),_:1}),a[20]||=f(`) `,-1)])):g(``,!0),M.value?(s(),h(`div`,he,[y(`section`,ge,[y(`div`,_e,[y(`p`,ve,u(i.$t(`daqDetail.k1fx2vik032`))+` `+u(N.value?.ch??`-`),1),y(`div`,ye,[f(u(M.value.value==null?`--`:M.value.value.toFixed(M.value.decimals)),1),y(`small`,null,u(M.value.unit),1)]),y(`canvas`,{ref_key:`liveCanvas`,ref:Rt,class:`live-canvas`},null,512),y(`dl`,be,[y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k4a0la003`)),1),y(`dd`,null,u(M.value.driver)+u(At(M.value.driver)?i.$t(`daqDetail.kz8zr9v035`):``),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k3xg3w004`)),1),y(`dd`,null,u(M.value.intervalMs??i.$t(`daqDetail.k9vnp9h053`,{p0:l(k).controller.defaultIntervalMs})),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k3w6td005`)),1),y(`dd`,null,u(Dt(M.value.publishIntervalMs)),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k3x5tpx006`)),1),y(`dd`,null,u(M.value.warnLow??`-∞`)+` ~ `+u(M.value.warnHigh??`+∞`),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k1hjj0jf007`)),1),y(`dd`,null,u(M.value.min)+` ~ `+u(M.value.max),1)]),y(`div`,null,[y(`dt`,null,u(i.$t(`daqDetail.k1i8rtqt008`)),1),y(`dd`,null,u(jt.value||i.$t(`daqDetail.k3own4q036`)),1)])])])]),y(`section`,xe,[y(`h3`,Se,u(i.$t(`daqDetail.kd9d69j009`)),1),y(`form`,{class:`form-grid`,onSubmit:r(kt,[`prevent`])},[y(`label`,Ce,[y(`span`,null,u(i.$t(`daqDetail.k1iw7tbf010`)),1),y(`button`,{type:`button`,class:c([`toggle`,{on:U.enabled}]),onClick:a[0]||=e=>U.enabled=!U.enabled},u(U.enabled?i.$t(`daqDetail.k3w3j8f037`):i.$t(`daqDetail.k3n5aaj045`)),3)]),y(`label`,we,[y(`span`,null,u(i.$t(`daqDetail.k12k23od011`)),1),b(y(`select`,{"onUpdate:modelValue":a[1]||=e=>U.lineId=e,class:`input`},[y(`option`,Te,u(i.$t(`daqDetail.k3ootr6012`)),1),(s(!0),h(d,null,o(l(A).lines,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,Ee))),128))],512),[[t,U.lineId]])]),y(`label`,De,[y(`span`,null,u(i.$t(`daqDetail.k1l6smxo013`)),1),b(y(`select`,{"onUpdate:modelValue":a[2]||=e=>U.driver=e,class:`input`},[(s(!0),h(d,null,o(l(w),e=>(s(),h(`option`,{key:e.kind,value:e.kind,disabled:e.status===`planned`},u(e.label)+u(e.status===`planned`?i.$t(`daqDetail.kz8zr9v035`):``),9,Oe))),128))],512),[[t,U.driver]])]),y(`label`,ke,[y(`button`,{type:`button`,class:c([`toggle slim`,{on:U.followGlobal}]),onClick:a[3]||=e=>U.followGlobal=!U.followGlobal},u(U.followGlobal?i.$t(`daqDetail.k1k2ueyq038`):i.$t(`daqDetail.k1cgi8fy046`)),3),b(y(`input`,{"onUpdate:modelValue":a[4]||=e=>U.intervalMs=e,type:`number`,min:`1000`,max:`60000`,step:`500`,class:`input`,disabled:U.followGlobal},null,8,Ae),[[n,U.intervalMs,void 0,{number:!0}]]),a[21]||=y(`small`,null,`ms`,-1)]),y(`label`,je,[y(`button`,{type:`button`,class:c([`toggle slim`,{on:U.calKind===`linear`}]),title:`采集标定 decoder:物理值 = scale × PLC采集值 + offset`,onClick:a[5]||=e=>U.calKind=U.calKind===`linear`?`none`:`linear`},u(U.calKind===`linear`?i.$t(`daqDetail.k1eru4r1039`):i.$t(`daqDetail.k3oktae047`)),3),b(y(`input`,{"onUpdate:modelValue":a[6]||=e=>U.calScale=e,type:`number`,step:`0.1`,class:`input`,disabled:U.calKind!==`linear`,title:`decode 斜率(≠0)`},null,8,Me),[[n,U.calScale,void 0,{number:!0}]]),b(y(`input`,{"onUpdate:modelValue":a[7]||=e=>U.calOffset=e,type:`number`,step:`0.1`,class:`input`,disabled:U.calKind!==`linear`,title:`decode 截距`},null,8,Ne),[[n,U.calOffset,void 0,{number:!0}]]),a[22]||=y(`small`,null,`decoder`,-1)]),y(`label`,Pe,[y(`button`,{type:`button`,class:c([`toggle slim`,{on:U.publishFollow}]),onClick:a[8]||=e=>U.publishFollow=!U.publishFollow},u(U.publishFollow?i.$t(`daqDetail.k1k2t5o7040`):i.$t(`daqDetail.k1cggz5f048`)),3),y(`span`,{class:c([`toggle slim`,{on:U.publishEveryFrame}]),style:{cursor:`pointer`},onClick:a[9]||=e=>U.publishEveryFrame=!U.publishEveryFrame},u(U.publishEveryFrame?i.$t(`daqDetail.k41mvv041`):i.$t(`daqDetail.k3n42dj049`)),3),b(y(`input`,{"onUpdate:modelValue":a[10]||=e=>U.publishMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,class:`input`,disabled:U.publishFollow||U.publishEveryFrame},null,8,Fe),[[n,U.publishMs,void 0,{number:!0}]]),a[23]||=y(`small`,null,`ms`,-1)]),y(`label`,Ie,[y(`span`,null,u(i.$t(`daqDetail.k3x4ef014`)),1),b(y(`input`,{"onUpdate:modelValue":a[11]||=e=>U.unit=e,class:`input`},null,512),[[n,U.unit]])]),y(`label`,Le,[y(`span`,null,u(i.$t(`daqDetail.k3mxmcx015`)),1),b(y(`input`,{"onUpdate:modelValue":a[12]||=e=>U.decimals=e,type:`number`,min:`0`,max:`6`,class:`input`},null,512),[[n,U.decimals,void 0,{number:!0}]])]),y(`div`,Re,[y(`label`,ze,[y(`span`,null,u(i.$t(`daqDetail.k1l9jv5m016`)),1),b(y(`input`,{"onUpdate:modelValue":a[13]||=e=>U.min=e,type:`number`,step:`any`,class:`input`},null,512),[[n,U.min,void 0,{number:!0}]])]),y(`label`,Be,[y(`span`,null,u(i.$t(`daqDetail.k1md63hm017`)),1),b(y(`input`,{"onUpdate:modelValue":a[14]||=e=>U.warnLow=e,type:`number`,step:`any`,class:`input`},null,512),[[n,U.warnLow,void 0,{number:!0}]])]),y(`label`,Ve,[y(`span`,null,u(i.$t(`daqDetail.k1md63gp018`)),1),b(y(`input`,{"onUpdate:modelValue":a[15]||=e=>U.warnHigh=e,type:`number`,step:`any`,class:`input`},null,512),[[n,U.warnHigh,void 0,{number:!0}]])]),y(`label`,He,[y(`span`,null,u(i.$t(`daqDetail.k1l9jv4p019`)),1),b(y(`input`,{"onUpdate:modelValue":a[16]||=e=>U.max=e,type:`number`,step:`any`,class:`input`},null,512),[[n,U.max,void 0,{number:!0}]])])]),y(`button`,{class:`aw-pill`,type:`submit`,disabled:J.value},u(J.value?i.$t(`daqDetail.k1as0g50042`):i.$t(`daqDetail.ksn9cgo050`)),9,Ue)],32),G.value.length?(s(),h(d,{key:0},[y(`h3`,We,u(i.$t(`daqDetail.k1p9gioa033`))+` `+u(l(w).find(e=>e.kind===U.driver)?.label),1),y(`div`,Ge,[(s(!0),h(d,null,o(G.value,n=>(s(),h(`label`,{key:n.key,class:`field`},[y(`span`,null,[f(u(n.label),1),n.required?(s(),h(`em`,Ke,`*`)):g(``,!0)]),n.type===`select`?b((s(),h(`select`,{key:0,"onUpdate:modelValue":e=>W.value[n.key]=e,class:`input`},[(s(!0),h(d,null,o(n.options,e=>(s(),h(`option`,{key:e.value,value:e.value},u(e.label),9,Je))),128))],8,qe)),[[t,W.value[n.key]]]):b((s(),h(`input`,{key:1,"onUpdate:modelValue":e=>W.value[n.key]=e,type:n.type===`number`?`number`:`text`,placeholder:n.placeholder,class:`input`},null,8,Ye)),[[e,W.value[n.key]]])]))),128))]),y(`div`,Xe,[y(`button`,{class:`pill-btn`,disabled:K.value,onClick:Ot},u(K.value?i.$t(`daqDetail.k1fsh720043`):i.$t(`daqDetail.k1fstglk051`)),9,Ze),q.value?(s(),h(`span`,{key:0,class:c([`test-out mono`,q.value.ok?`ok`:`bad`])},u(q.value.ok?`✓`:`✗`)+` `+u(q.value.message),3)):g(``,!0)])],64)):g(``,!0),y(`h3`,Qe,u(i.$t(`daqDetail.k1ie6qju020`)),1),y(`div`,$e,[b(y(`select`,{"onUpdate:modelValue":a[17]||=e=>Y.value=e,class:`input grow`},[y(`option`,et,u(i.$t(`daqDetail.kjobzu3021`)),1),(s(!0),h(d,null,o(Nt.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,tt))),128))],512),[[t,Y.value]]),y(`button`,{class:`pill-btn`,onClick:Mt},u(jt.value?i.$t(`daqDetail.k479eh044`):i.$t(`daqDetail.k452a8052`)),1)])]),y(`section`,nt,[y(`div`,rt,[y(`h3`,it,u(i.$t(`daqDetail.k1i535i5034`))+u(l(k).meta.tsdb)+`) `,1),y(`div`,at,[b(y(`select`,{"onUpdate:modelValue":a[18]||=e=>Z.value=e,class:`input`},[(s(),h(d,null,o(Ft,e=>y(`option`,{key:e.ms,value:e.ms},u(e.label),9,ot)),64))],512),[[t,Z.value,void 0,{number:!0}]]),y(`button`,{class:`pill-btn`,onClick:Q},u(i.$t(`daqDetail.k3x1jg022`)),1)])]),y(`canvas`,{ref_key:`chartCanvas`,ref:It,class:`hist-canvas`},null,512),y(`table`,st,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,u(i.$t(`daqDetail.k40vsf023`)),1),y(`th`,null,u(i.$t(`daqDetail.k48v5024`)),1),y(`th`,null,u(i.$t(`daqDetail.k4bza025`)),1)])]),y(`tbody`,null,[(s(!0),h(d,null,o(X.value.filter(e=>e.value!=null).slice(-12).reverse(),(e,t)=>(s(),h(`tr`,{key:t},[y(`td`,null,u(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour12:!1})),1),y(`td`,null,u(e.value.toFixed(M.value?.decimals??2)),1),y(`td`,null,u(e.state),1)]))),128))])])])])):g(``,!0),L.value?(s(),h(`section`,ct,[y(`div`,lt,[y(`h3`,ut,[f(u(I.value===`image`?i.$t(`daqDetail.kfrm0001`):i.$t(`daqDetail.kfrm0002`))+` `,1),y(`span`,dt,u(R.value.length),1)]),y(`button`,{class:`pill-btn`,onClick:z},u(i.$t(`daqDetail.k3x1jg022`)),1)]),I.value===`vector`?(s(),h(d,{key:0},[(s(),h(`svg`,{class:`vec-svg`,viewBox:`0 0 ${T} ${xt}`,preserveAspectRatio:`none`},[y(`polyline`,{points:Et.value,fill:`none`,stroke:`var(--accent)`,"stroke-width":`1.5`},null,8,pt)],8,ft)),y(`table`,mt,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,u(i.$t(`daqDetail.k40vsf023`)),1),y(`th`,null,u(i.$t(`daqDetail.kfrm0004`)),1),y(`th`,null,u(i.$t(`daqDetail.kfrm0005`)),1)])]),y(`tbody`,null,[(s(!0),h(d,null,o(R.value.filter(e=>e.kind===`vector`).slice(0,12),e=>(s(),h(`tr`,{key:e.at},[y(`td`,null,u(B(e.at)),1),y(`td`,null,u(e.points?.length??0),1),y(`td`,null,u(V(e)),1)]))),128))])])],64)):(s(),h(d,{key:1},[R.value.length?(s(),h(`div`,ht,[(s(!0),h(d,null,o(R.value,e=>(s(),h(`figure`,{key:e.at,class:`gal-item`,title:i.$t(`daqDetail.kfrm0006`),onClick:t=>H.value=e},[y(`img`,{src:e.thumbUrl,loading:`lazy`,alt:`daq frame`},null,8,_t),y(`figcaption`,vt,u(B(e.at))+` · `+u(V(e)),1)],8,gt))),128))])):(s(),h(`p`,yt,u(i.$t(`daqDetail.kfrm0003`)),1)),H.value?(s(),h(`div`,{key:2,class:`gal-full`,onClick:a[19]||=e=>H.value=null},[y(`img`,{src:H.value.contentUrl??H.value.thumbUrl,alt:`daq frame full`},null,8,bt)])):g(``,!0)],64))])):g(``,!0)])}}}),[[`__scopeId`,`data-v-51809669`]]);export{D as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{H as e,U as t,W as n,q as r}from"./rqZ-1SoP.js";import{C as i,F as a,G as o,H as s,Ht as c,St as l,Ut as ee,Wt as u,a as d,b as f,et as p,f as m,ft as te,g as h,h as g,m as ne,mt as _,nt as v,p as y,rt as b,t as x,x as S,z as re}from"./BSCpFtzG.js";import{n as ie}from"./B5S_UyaC.js";import{t as ae}from"./D8CqF0yy.js";import{n as oe}from"./BeIfu4N3.js";import{r as C}from"./D-Ca4BGY.js";import{t as se}from"./C9f8QMp12.js";import{t as w}from"./G0qIw7Gq2.js";import{t as ce}from"./arUY5dyq2.js";import{t as le}from"./CNs_Ozdc.js";import{t as ue}from"./C6m-kenn.js";import{a as de,i as fe,n as pe,r as me,t as he}from"./B3Psw_sL.js";import{t as ge}from"./6vYobj4F.js";import{t as _e}from"./Bmpvki7M.js";import{t as ve}from"./CUXCQXjG.js";var ye={class:`page`},be={class:`aw-page-head`},xe={class:`sub`},Se={class:`badges mono`},Ce=[`title`],we=[`title`],Te={class:`txt`},Ee={class:`mono`},De={key:1,class:`infra-banner`},Oe={class:`txt`},ke={key:2,class:`infra-banner`},Ae={class:`txt`},je=[`disabled`],Me={key:3,class:`alarm-bar`},Ne={class:`bar-label`},Pe={class:`mono`},Fe={class:`alarm-scroll`},Ie=[`title`],Le={class:`mono dim`},Re={class:`mono`},ze={key:0,class:`esc mono`},Be=[`onClick`],Ve={class:`aw-tile ctrl-card`},He={class:`ctrl-row`},Ue={class:`ctrl-left`},We=[`title`],Ge={class:`cycle mono`},Ke=[`title`],qe={class:`ctrl-right`},Je={class:`ctrl-metrics mono`},Ye=[`title`],Xe=[`title`],Ze=[`title`],Qe=[`title`],$e={class:`line-strip`},et={class:`strip-label`},tt={class:`mono`},nt={class:`strip-scroll`},rt={key:0,class:`lp-run`},it={key:1,class:`lp-idle`},at={class:`lp-idle`},ot={class:`modal`},st={class:`m-title`},ct={class:`seg-row`},lt={class:`f-grid`},ut={class:`f`},dt=[`value`],ft={class:`f`},pt=[`placeholder`],mt={key:0,class:`f`},ht=[`placeholder`],gt={class:`f-grid`},_t={class:`f`},vt=[`value`],yt={key:0,class:`f-grid driver-form`},bt={key:0},xt=[`onUpdate:modelValue`],St=[`value`],Ct=[`onUpdate:modelValue`,`type`,`placeholder`],wt={key:2,class:`hint`},Tt={class:`test-row`},Et=[`disabled`],Dt={key:1,class:`m-err`},Ot={class:`m-actions`},kt=[`disabled`,`title`],At={class:`modal`},jt={class:`m-title`},Mt={class:`sec-label`},Nt={class:`tpl-table`},Pt={class:`mono dim`},Ft={class:`mono range`},It={class:`right actions`},Lt=[`onClick`],Rt=[`onClick`],zt={key:0},Bt={colspan:`3`,class:`empty`},Vt={class:`sec-label`},Ht={class:`f-grid`},Ut={class:`f`},Wt=[`placeholder`],Gt={class:`f`},Kt={class:`f`},qt=[`placeholder`],Jt={class:`f`},Yt=[`placeholder`],Xt={class:`f`},Zt={class:`f`},Qt={class:`f`},$t={class:`f`},en=[`value`],tn={class:`f`},nn={class:`hint`},rn={class:`f`},an={class:`hint`},on={key:0,class:`m-err`},sn={class:`m-actions`},cn=[`disabled`],ln={class:`sec-label`},un={class:`tpl-table`},dn={class:`mono dim`},fn={class:`mono range`},pn={class:`right actions`},mn=[`onClick`],hn={class:`aw-tile opt-card`},gn={class:`opt-count mono`},_n={class:`opt-filters`},vn={value:``},yn=[`value`],bn={value:``},xn=[`value`],Sn={key:0,class:`opt-empty`},Cn={class:`opt-list`},wn={class:`opt-line1`},Tn={class:`opt-node`},En={class:`mono opt-params`},Dn={class:`mono opt-time`},On=[`disabled`,`onClick`],kn=[`onClick`],An={class:`opt-line2 mono`},jn={key:1,class:`opt-open-hint`},Mn={key:2,class:`opt-agg`},Nn={key:3,class:`opt-agg`},Pn={key:0,class:`opt-series`},Fn={class:`opt-spark`,viewBox:`0 0 240 36`,preserveAspectRatio:`none`},In=[`points`],Ln={class:`mono`},Rn={key:0,class:`opt-empty`},zn={class:`aw-tile table-card`},Bn={class:`tbl-toolbar`},Vn={class:`filters`},Hn={class:`flt`},Un={value:``},Wn=[`value`],Gn={value:`none`},Kn={class:`flt`},qn={value:``},Jn=[`value`],Yn={value:`none`},Xn=[`title`],Zn={value:``},Qn={value:`on`},$n={value:`off`},er={class:`flt`},tr={value:``},nr={value:`ok`},rr={value:`warn`},ir={value:`alarm`},ar={value:`offline`},or={class:`flt`},sr={value:``},cr=[`value`],lr={class:`flt`},ur={value:``},dr=[`value`],fr=[`title`],pr={value:``},mr={value:`live`},hr={value:`hour`},gr={value:`day`},_r={value:`old`},vr={value:`never`},yr={class:`flt`},br=[`placeholder`],xr={class:`count mono`},Sr={class:`ops-panels`},Cr={class:`panel-head`},wr={class:`panel-body`},Tr={key:0,class:`panel-empty`},Er={class:`mono dim`},Dr={class:`mono`},Or={key:0,class:`esc mono`},kr=[`onClick`],Ar={class:`ops-panel event-panel`},jr={class:`panel-head`},Mr={class:`panel-body`},Nr={key:0,class:`panel-empty`},Pr={class:`mono dim t`},Fr=[`title`],Ir={class:`nodes-table`},Lr=[`title`],Rr=[`title`],zr={class:`right`},Br={class:`mono dim`},Vr={class:`mono ch`},Hr=[`title`],Ur=[`title`],Wr={class:`trend-cell`},Gr=[`title`],Kr=[`y1`,`y2`],qr=[`y1`,`y2`],Jr=[`points`],Yr={class:`mono`},Xr={class:`mono`},Zr=[`title`],Qr=[`value`,`title`,`onChange`],$r={value:``},ei=[`value`],ti=[`title`],ni={key:1,class:`run-pill na`},ri={class:`prod-cell`},ii=[`title`],ai=[`title`],oi={key:1,class:`dim`},si=[`value`,`title`,`onChange`],ci={value:``},li=[`value`],ui={class:`right`},di=[`title`,`onClick`],fi={key:0},pi={colspan:`11`},mi={class:`pane-empty`,style:{"min-height":`120px`}},hi={class:`pe-sub`},gi={key:1},_i={colspan:`11`},vi={class:`pane-empty`,style:{"min-height":`90px`}},yi={class:`pe-sub`},bi={key:6,class:`err`},xi=120,Si=26,T=x(i({__name:`index`,setup(i){let{t:x}=oe();le({layout:`default`}),ie({title:()=>x(`titles.daq`)});let T=he(),E=ue(),Ci=ce(),wi=m(()=>E.lines.some(e=>E.lineStateOf(e.id).active));async function Ti(e,t){let n=t.target.value;try{await T.patchNode(e,{lineId:n});let t=T.nodes.find(t=>t.id===e);t&&(t.lineId=n)}catch(e){C.error(w(e))}}async function Ei(e,t){let n=t.target.value;try{await T.bindNode(e,n||null)}catch(e){C.error(w(e))}}async function Di(e){let t=!e.enabled;try{await T.patchNode(e.id,{enabled:t}),e.enabled=t,t||(e.state=`offline`),C.success(x(t?`daq.k1nodestart147`:`daq.k1nodestop146`))}catch(e){C.error(w(e))}}function Oi(e){if(!e.lineId)return null;let t=E.lineStateOf(e.lineId);return!t.active||!t.recipeId?null:E.recipes.find(e=>e.id===t.recipeId)?.daqWindows?.find(t=>t.nodeId===e.id)??null}function ki(e){let t=Oi(e);return!t||e.value==null?!1:t.min!=null&&e.value<t.min||t.max!=null&&e.value>t.max}let Ai=_e();function ji(e){return{write:x(`logs.kind.write`),manual:x(`logs.kind.manual`),alarm:x(`logs.kind.alarm`),line:x(`logs.kind.line`),recipe:x(`logs.kind.recipe`),rollback:x(`logs.kind.rollback`),daq:x(`logs.kind.daq`),system:x(`logs.kind.system`)}[e]??(e||x(`logs.kind.system`))}function Mi(e){let t=new Date(e);return Number.isFinite(t.getTime())?`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`:``}function Ni(e){let t=e.filter(Number.isFinite);if(t.length<2)return``;let n=Math.min(...t),r=Math.max(...t)-n||1;return t.map((e,i)=>`${(i/(t.length-1)*xi).toFixed(1)},${(Si-(e-n)/r*24-1).toFixed(1)}`).join(` `)}function D(e,t){if(t==null||!Number.isFinite(t))return null;let n=e.filter(Number.isFinite);if(n.length<2)return null;let r=Math.min(...n,t),i=Math.max(...n,t)-r||1;return Number((Si-(t-r)/i*24-1).toFixed(1))}function O(e){let t=Oi(e);return t&&(t.min!=null||t.max!=null)?{min:t.min,max:t.max,source:`recipe`}:e.warnLow!=null||e.warnHigh!=null?{min:e.warnLow,max:e.warnHigh,source:`warn`}:{min:null,max:null,source:`warn`}}async function Pi(e){try{await T.ackAlarm(e),C.success(x(`daq.k1acked144`))}catch(e){C.error(w(e))}}let Fi=null;re(()=>{Ci.ensureConnected(),Fi=T.ensureWsFeed(),Ai.ensureLive(),T.load(),T.fetchAlarms(),E.load(),z.load(),E.loadOptimizations(),ve(()=>{T.load(),T.fetchAlarms()},5e3,{bgMs:3e4}),ve(()=>{E.load()},15e3,{bgMs:6e4})}),a(()=>{Fi?.()});let k=te({lineId:``,deviceId:``,template:``,driver:``,lineRun:``,state:``,time:``,search:``}),Ii=m(()=>!!(k.lineId||k.deviceId||k.template||k.driver||k.lineRun||k.state||k.time||k.search.trim()));function Li(){k.lineId=``,k.deviceId=``,k.template=``,k.driver=``,k.lineRun=``,k.state=``,k.time=``,k.search=``}let Ri=m(()=>{let e=new Map;for(let t of T.nodes)e.set(t.templateRef,(e.get(t.templateRef)??0)+1);return[...e.entries()].map(([e,t])=>({ref:e,count:t,label:ya(e)}))}),zi=m(()=>{let e=new Map;for(let t of T.nodes)e.set(t.driver,(e.get(t.driver)??0)+1);return[...e.entries()].map(([e,t])=>({kind:e,count:t,label:T.meta.drivers.find(t=>t.kind===e)?.label??e}))});function Bi(e){if(!e.lastAt)return`never`;let t=Date.now()-Date.parse(e.lastAt);return t<=3e5?`live`:t<=36e5?`hour`:t<=864e5?`day`:`old`}function Vi(e){return!k.time||Bi(e)===k.time}function Hi(e){let t=k.search.trim().toLowerCase();return!t||e.name.toLowerCase().includes(t)||e.id.toLowerCase().includes(t)}let A=_(!1),Ui=_(!1),j=_(``),M=_(``),N=_({}),Wi=_(``),Gi=m(()=>E.recipes.filter(e=>!j.value||e.lineId===j.value));function Ki(e){return{open:`daq.k1optst001`,judged:`daq.k1optst008`,"judged-keep":`daq.k1optst002`,"rolled-back":`daq.k1optst003`,superseded:`daq.k1optst004`,"superseded-manual":`daq.k1optst005`,"closed-line-stop":`daq.k1optst006`,failed:`daq.k1optst007`}[e]??`daq.k1optst001`}async function qi(){A.value=!A.value,A.value&&(Ui.value=!0,await P())}async function P(){await E.loadOptimizations({lineId:j.value||void 0,recipeId:M.value||void 0})}function Ji(){M.value&&!Gi.value.some(e=>e.id===M.value)&&(M.value=``),P()}async function Yi(e){Wi.value=e;try{let t=await E.optimizationSeries(e);N.value={...N.value,[e]:t}}finally{Wi.value=``}}function Xi(e,t=240,n=36){let r=e.map(e=>e.value??e.avg??0).filter(Number.isFinite);if(r.length<2)return``;let i=Math.min(...r),a=Math.max(...r)-i||1;return r.map((e,o)=>`${o/(r.length-1)*t},${n-(e-i)/a*n}`).join(` `)}async function Zi(e){await E.rollbackOptimization(e),await P()}function Qi(e){return e==null?`--`:String(Number(e.toFixed(2)))}let $i=m(()=>{let e=new Map;for(let t of T.nodes)t.deviceBindingId&&e.set(t.deviceBindingId,(e.get(t.deviceBindingId)??0)+1);return z.twins.filter(t=>e.has(t.id)).map(t=>({id:t.id,name:ca.get(t.id)??t.name,count:e.get(t.id)}))});function ea(e){if(!k.lineRun)return!0;let t=!!e.lineId&&E.lineStateOf(e.lineId).active;return k.lineRun===`on`?t:!t}let F=m(()=>E.lines.find(e=>e.id===k.lineId)??null),I=m(()=>F.value?E.lineStateOf(F.value.id):null);function ta(e){if(!e.lastAt)return!0;let t=e.intervalMs??T.controller.defaultIntervalMs;return Date.now()-Date.parse(e.lastAt)>Math.max(t*4,12e3)}function na(e){return e.enabled?e.lineId?E.lineStateOf(e.lineId).active?!T.controller.running||ta(e)?`offline`:e.state:`idle`:`unassigned`:`disabled`}function ra(e){let t=na(e);return t===`ok`||t===`warn`||t===`alarm`}let L={ok:x(`daq.k41k5c062`),warn:x(`daq.k49z8v063`),alarm:x(`daq.k3xmid064`),offline:x(`daq.k44c2n065`),idle:x(`daq.k3ozyqz117`),disabled:x(`daq.k1disabl130`),unassigned:x(`daq.k3ootr6053`)};function ia(e){let t=na(e);if(t===`offline`){if(e.lastError)return{key:t,label:L.offline,tip:e.lastError};let n=T.controller.running?x(`daq.k1staled129`,{p0:Math.round(Math.max((e.intervalMs??T.controller.defaultIntervalMs)*4,12e3)/1e3)}):x(`daq.k1gateoff140`);return{key:t,label:L.offline,tip:n}}if(t===`idle`)return{key:t,label:L.idle,tip:x(`daq.k1idlehin139`)};if((t===`ok`||t===`warn`||t===`alarm`)&&ki(e)){let t=Oi(e);return{key:`alarm`,label:x(`daq.k1l3pt51104`),tip:x(`daq.k1hrrqa1122`,{p0:t?.min??`-∞`,p1:t?.max??`+∞`,p2:``})}}return{key:t,label:L[t],tip:``}}let R=m(()=>T.nodes.filter(e=>!(k.lineId&&(k.lineId===`none`?e.lineId:(e.lineId??``)!==k.lineId)||k.deviceId&&(k.deviceId===`none`?e.deviceBindingId:e.deviceBindingId!==k.deviceId)||k.template&&e.templateRef!==k.template||k.driver&&e.driver!==k.driver||!ea(e)||k.state&&na(e)!==k.state||!Vi(e)||!Hi(e)))),aa=m(()=>{let e=new Map;for(let t of R.value)e.set(t.id,{pill:ia(t),alarm:ki(t),live:ra(t),tpl:ya(t.templateRef)});return e}),oa={pill:{key:`offline`,label:``,tip:``},alarm:!1,live:!1,tpl:`-`},sa=m(()=>R.value.map(e=>({n:e,c:aa.value.get(e.id)??oa}))),z=ge(),ca=new Map;p(()=>z.twins,e=>{for(let t of e)ca.set(t.id,t.name)},{immediate:!0,deep:!0});let la=m(()=>z.twins.filter(e=>e.kind!==`daq`&&!(e.modelRef??``).startsWith(`daq-`)&&!(e.modelRef??``).startsWith(`dcw-`))),ua=e=>e==null?x(`daq.k9vnp9h124`,{p0:T.controller.defaultIntervalMs}):`${e}ms`,da=e=>e==null?x(`daq.k9vnp9h124`,{p0:T.controller.defaultPublishIntervalMs}):e===0?x(`daq.k41mvv078`):`${e}ms`,B=_(!1),V=_(`mock`),H=_(me[0]?.key??`temp-tc`),U=_(`modbus-tcp`),W=_(``),fa=_(null),G=_({}),pa=te({kind:`none`,scale:1,offset:0}),K=_(!1),q=_(null),J=_(!1),Y=_(``),ma=m(()=>pe.find(e=>e.kind===U.value)),ha=m(()=>ma.value?.configFields??[]),ga=e=>T.meta.drivers.find(t=>t.kind===e)?.status!==`planned`&&T.meta.driverAvailable?.[e]!==!1;p(U,()=>{let e={};for(let t of ha.value)t.default!==void 0&&(e[t.key]=t.default);G.value=e,q.value=null},{immediate:!0});async function _a(){K.value=!0,q.value=null;try{q.value=await T.testDriver(U.value,G.value)}catch(e){q.value={ok:!1,message:w(e)}}finally{K.value=!1}}async function va(){J.value=!0,Y.value=``;try{let e=pa.kind===`linear`?{kind:`linear`,scale:Number(pa.scale),offset:Number(pa.offset)}:void 0;if(V.value===`mock`)await T.createFromTemplate(`daq-${H.value}`,{name:W.value?{name:W.value}.name:void 0,transform:e});else{for(let e of ha.value)if(e.required&&!G.value[e.key]&&G.value[e.key]!==0)throw Error(x(`daq.kyuadl0125`,{p0:e.label}));let t=T.templates.find(e=>e.key===H.value);await T.createFromTemplate(`daq-${H.value}`,{name:W.value||void 0,driver:U.value,driverConfig:{...G.value},transform:e,intervalMs:fa.value,unit:t?.unit,min:t?.min,max:t?.max,decimals:t?.decimals})}B.value=!1,W.value=``,q.value=null}catch(e){Y.value=w(e)}finally{J.value=!1}}function ya(e){let t=T.templates.find(t=>t.key===de(e));return t?`${t.name} · ${t.ch}`:e||`-`}let ba=_(!1),X=_(null),xa=_(!1),Z=_(``),Q=_(``),$=te({name:``,ch:``,code:``,unit:``,min:0,max:100,base:50,amp:2,decimals:2,icon:`thermo`}),Sa={thermo:x(`daq.k422b8079`),pressure:x(`daq.k3x6ff080`),tension:x(`daq.k3z9xc081`),encoder:x(`daq.k3subk4082`),camera:x(`daq.k47atw083`),gateway:x(`daq.kz7yhbj084`)},Ca=m(()=>T.templates.filter(e=>!e.builtin)),wa=m(()=>T.templates.filter(e=>e.builtin));function Ta(e,t=!1){$.name=t?x(`daq.k2hbo3c126`,{p0:e.name}):e.name,$.ch=e.ch,$.code=e.code,$.unit=e.unit,$.min=e.min,$.max=e.max,$.base=e.base,$.amp=e.amp,$.decimals=e.decimals,$.icon=e.icon}function Ea(){X.value=null,Z.value=``,Q.value=``,Ta({key:``,name:``,code:``,ch:``,unit:``,base:50,amp:2,min:0,max:100,decimals:2,icon:`thermo`})}function Da(e){X.value=e.key,Z.value=``,Ta(e)}function Oa(e){X.value=null,Z.value=``,Ta(e,!0)}async function ka(){xa.value=!0,Z.value=``;try{let e=e=>{let t=Number(e);return e===``||e==null||!Number.isFinite(t)?void 0:t},t={name:$.name.trim(),ch:$.ch.trim()||void 0,code:$.code.trim()||void 0,unit:$.unit.trim(),min:e($.min),max:e($.max),base:e($.base),amp:e($.amp),decimals:e($.decimals),icon:$.icon};X.value?await T.updateTemplate(X.value,t):await T.createTemplate(t),Ea()}catch(e){Z.value=w(e)}finally{xa.value=!1}}async function Aa(e){if(Q.value!==e.key){Q.value=e.key;return}try{await T.removeTemplate(e.key)}catch(e){Z.value=w(e)}finally{Q.value=``}}let ja=e=>T.meta.drivers.find(t=>t.kind===e)?.status===`planned`,Ma=_(!1);async function Na(){Ma.value=!0;try{await T.reconnectInfra()}catch{}finally{Ma.value=!1}}return(i,a)=>{let p=ae,m=se;return s(),h(`div`,ye,[y(`div`,be,[y(`div`,null,[a[36]||=y(`p`,{class:`aw-kicker`},` AGENTWORKSHOP / DAQ CONSOLE `,-1),y(`h1`,null,u(i.$t(`daq.k1emg364011`)),1),y(`p`,xe,u(i.$t(`daq.k1wmg2bz012`)),1)]),y(`div`,Se,[y(`span`,{class:`badge`,title:i.$t(`daq.k1tsdbtip133`)},`TSDB · `+u(l(T).meta.tsdb),9,Ce),y(`span`,{class:`badge`,title:i.$t(`daq.k1queuet134`)},`QUEUE · `+u(l(T).meta.queue),9,we)])]),l(T).loaded&&F.value&&I.value?(s(),h(`div`,{key:0,class:c([`infra-banner`,{good:I.value.active}])},[y(`span`,{class:c(I.value.active?`i-tabler-circle-check`:`i-tabler-info-circle`)},null,2),y(`span`,Te,[I.value.active?(s(),h(d,{key:0},[f(u(i.$t(`daq.k3ktxbr085`))+u(F.value.name)+`」`+u(i.$t(`daq.k15lvw0o105`)),1),y(`b`,null,u(I.value.productName),1),a[37]||=f(` · Recipe:`,-1),y(`b`,null,u(I.value.recipeName),1),y(`small`,Ee,u(i.$t(`daq.k400lb086`))+` `+u(I.value.runId?.slice(0,8))+` · `+u(i.$t(`daq.k3zkt2106`))+` `+u(I.value.startedAt?.slice(11,19))+` `+u(i.$t(`daq.k69vag8108`))+` `+u(I.value.taggedSamples)+` `+u(i.$t(`daq.k4118o092`)),1)],64)):(s(),h(d,{key:1},[f(u(i.$t(`daq.k3ktxbr085`))+u(F.value.name)+`」`+u(i.$t(`daq.k12uge2o107`)),1)],64))]),S(p,{class:`pill-btn`,to:`/dcw/${F.value.id}`},{default:v(()=>[f(u(I.value.active?i.$t(`daq.k1ukoy0v093`):i.$t(`daq.k1cg78i8109`)),1)]),_:1},8,[`to`])],2)):l(T).loaded&&!wi.value?(s(),h(`div`,De,[a[38]||=y(`span`,{class:`i-tabler-info-circle`},null,-1),y(`span`,Oe,[f(u(i.$t(`daq.k19onw5w013`)),1),S(p,{to:`/dcw`},{default:v(()=>[f(u(i.$t(`daq.k1b2tk5c014`)),1)]),_:1}),f(u(i.$t(`daq.k1u9wnlg015`)),1)])])):g(``,!0),l(T).meta.infra?.degraded?(s(),h(`div`,ke,[a[39]||=y(`span`,{class:`i-tabler-alert-triangle`},null,-1),y(`span`,Ae,u(l(T).meta.infra.warning),1),y(`button`,{class:`pill-btn`,disabled:Ma.value,onClick:Na},u(Ma.value?i.$t(`daq.k1ld43ur094`):i.$t(`daq.kzg9805110`)),9,je)])):g(``,!0),l(T).alarms.length?(s(),h(`div`,Me,[y(`span`,Ne,[a[40]||=y(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),f(` `+u(i.$t(`daq.k1alarm141`))+` `,1),y(`b`,Pe,u(l(T).alarms.length),1)]),y(`div`,Fe,[(s(!0),h(d,null,o(l(T).alarms,e=>(s(),h(`span`,{key:e.id,class:`alarm-item`,title:i.$t(`daq.k1esc143`,{p0:e.escalation})},[y(`b`,null,u(e.nodeName),1),y(`span`,Le,u(e.metric),1),y(`span`,Re,u(e.value)+` `+u(e.rule===`lt-min`?`<`:`>`)+` `+u(e.threshold),1),e.escalation>0?(s(),h(`small`,ze,`+`+u(e.escalation),1)):g(``,!0),y(`button`,{class:`mini-btn ack`,onClick:t=>Pi(e.id)},u(i.$t(`daq.k1ack142`)),9,Be)],8,Ie))),128))])])):g(``,!0),y(`section`,Ve,[y(`div`,He,[y(`div`,Ue,[y(`button`,{class:c([`aw-pill`,{running:l(T).controller.running}]),title:i.$t(`daq.k1snap145`),onClick:a[0]||=e=>l(T).controllerAction(l(T).controller.running?`pause`:`resume`)},[y(`span`,{class:c(l(T).controller.running?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),f(` `+u(l(T).controller.running?i.$t(`daq.kpui00095`):i.$t(`daq.knxpdpt111`)),1)],10,We),y(`label`,Ge,[f(u(i.$t(`daq.k1ifahxj016`))+` `,1),b(y(`input`,{"onUpdate:modelValue":a[1]||=e=>l(T).controller.defaultIntervalMs=e,type:`number`,min:`200`,max:`60000`,step:`100`,onChange:a[2]||=e=>l(T).controllerAction(`config`,l(T).controller.defaultIntervalMs)},null,544),[[n,l(T).controller.defaultIntervalMs,void 0,{number:!0}]]),a[41]||=f(`ms `,-1)]),y(`label`,{class:`cycle mono`,title:i.$t(`daq.k1e8lcoo001`)},[f(u(i.$t(`daq.k1if98n0017`))+` `,1),b(y(`input`,{"onUpdate:modelValue":a[3]||=e=>l(T).controller.defaultPublishIntervalMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,onChange:a[4]||=e=>l(T).controllerAction(`config`,l(T).controller.defaultIntervalMs,l(T).controller.defaultPublishIntervalMs)},null,544),[[n,l(T).controller.defaultPublishIntervalMs,void 0,{number:!0}]]),a[42]||=f(`ms `,-1)],8,Ke)]),y(`div`,qe,[y(`span`,Je,[y(`span`,null,u(i.$t(`daq.k45uio067`))+` `+u(l(T).controller.nodesOnline)+`/`+u(l(T).controller.nodesTotal),1),a[43]||=y(`span`,{class:`sep`},`·`,-1),y(`span`,{title:i.$t(`daq.k1yztsu4002`)},u(i.$t(`daq.k3xagp087`))+` `+u(l(T).meta.produced),9,Ye),a[44]||=y(`span`,{class:`sep`},`·`,-1),y(`span`,{title:i.$t(`daq.ko09iha003`)},u(i.$t(`daq.k427eu088`))+` `+u(l(T).meta.consumed),9,Xe),a[45]||=y(`span`,{class:`sep`},`·`,-1),y(`span`,{class:c({warn:(l(T).meta.dropped??0)>0}),title:i.$t(`daq.k1droptip135`)},u(i.$t(`daq.k3w8go089`))+` `+u(l(T).meta.dropped),11,Ze),a[46]||=y(`span`,{class:`sep`},`·`,-1),y(`span`,{title:i.$t(`daq.kj1jbmw004`)},u(i.$t(`daq.k3wusd090`))+` `+u(l(T).meta.samplesStored),9,Qe)]),y(`button`,{class:`aw-pill outline add-btn`,onClick:a[5]||=e=>{ba.value=!0,Ea()}},[a[47]||=y(`span`,{class:`i-tabler-adjustments-horizontal`},null,-1),f(` `+u(i.$t(`daq.k1f5cv0s018`)),1)]),y(`button`,{class:`aw-pill add-btn`,onClick:a[6]||=e=>B.value=!0},[a[48]||=y(`span`,{class:`i-tabler-plus`},null,-1),f(` `+u(i.$t(`daq.k1fn0ukb019`)),1)])])]),y(`div`,$e,[y(`span`,et,[a[49]||=y(`span`,{class:`i-tabler-route`},null,-1),f(` `+u(i.$t(`daq.k1b2o3b6020`)),1),y(`small`,tt,u(l(E).lines.length),1)]),y(`div`,nt,[(s(!0),h(d,null,o(l(E).lines,e=>(s(),ne(p,{key:e.id,class:c([`line-pill`,{on:l(E).lineStateOf(e.id).active}]),style:ee({"--lc":e.color}),to:`/dcw/${e.id}`,title:l(E).lineStateOf(e.id).active?i.$t(`daq.k3v957u120`,{p0:e.name,p1:l(E).lineStateOf(e.id).productName,p2:l(E).lineStateOf(e.id).recipeName}):i.$t(`daq.k1x7jnru121`,{p0:e.name})},{default:v(()=>[a[50]||=y(`span`,{class:`lp-dot`},null,-1),y(`b`,null,u(e.name),1),l(E).lineStateOf(e.id).active?(s(),h(`small`,rt,u(l(E).lineStateOf(e.id).recipeName??i.$t(`daq.k3vp67i096`)),1)):(s(),h(`small`,it,u(i.$t(`daq.k3zgkk021`)),1))]),_:2},1032,[`class`,`style`,`to`,`title`]))),128)),l(E).lines.length===0?(s(),ne(p,{key:0,class:`line-pill`,to:`/dcw`},{default:v(()=>[a[51]||=y(`span`,{class:`lp-dot`},null,-1),y(`b`,null,u(i.$t(`daq.k1el12b1022`)),1),y(`small`,at,u(i.$t(`daq.k8jxxe8023`)),1)]),_:1})):g(``,!0)])])]),B.value?(s(),h(`div`,{key:4,class:`modal-mask`,onClick:a[14]||=r(e=>B.value=!1,[`self`])},[y(`div`,ot,[y(`h3`,st,u(i.$t(`daq.k19rioqa024`)),1),y(`div`,ct,[y(`button`,{class:c([`seg`,{on:V.value===`mock`}]),onClick:a[7]||=e=>V.value=`mock`},u(i.$t(`daq.k1p5c1un025`)),3),y(`button`,{class:c([`seg`,{on:V.value===`real`}]),onClick:a[8]||=e=>V.value=`real`},u(i.$t(`daq.k1cbcp3o026`)),3)]),y(`div`,lt,[y(`label`,ut,[y(`span`,null,u(i.$t(`daq.k1fsgerc027`)),1),b(y(`select`,{"onUpdate:modelValue":a[9]||=e=>H.value=e,class:`inp`},[(s(!0),h(d,null,o(l(T).templates,e=>(s(),h(`option`,{key:e.key,value:e.key},u(e.name)+` · `+u(e.ch)+`(`+u(e.min)+`~`+u(e.max)+` `+u(e.unit)+`)`+u(e.builtin?``:i.$t(`daq.kr45rk9097`)),9,dt))),128))],512),[[t,H.value]])]),y(`label`,ft,[y(`span`,null,u(i.$t(`daq.k1ce2k1y028`)),1),b(y(`input`,{"onUpdate:modelValue":a[10]||=e=>W.value=e,class:`inp`,placeholder:i.$t(`daq.kgpxzy3005`)},null,8,pt),[[n,W.value]])]),V.value===`real`?(s(),h(`label`,mt,[y(`span`,null,u(i.$t(`daq.k13mfsfc029`)),1),b(y(`input`,{"onUpdate:modelValue":a[11]||=e=>fa.value=e,type:`number`,min:`1000`,max:`60000`,step:`500`,class:`inp`,placeholder:i.$t(`daq.k1eg1000a136`)},null,8,ht),[[n,fa.value,void 0,{number:!0}]])])):g(``,!0)]),V.value===`real`?(s(),h(d,{key:0},[y(`div`,gt,[y(`label`,_t,[y(`span`,null,u(i.$t(`daq.k1kt87rx030`)),1),b(y(`select`,{"onUpdate:modelValue":a[12]||=e=>U.value=e,class:`inp`},[(s(!0),h(d,null,o(l(pe).filter(e=>e.status!==`planned`),e=>(s(),h(`option`,{key:e.kind,value:e.kind},u(e.label)+u(ga(e.kind)?``:i.$t(`daq.kjbqphp098`)),9,vt))),128))],512),[[t,U.value]])])]),ha.value.length?(s(),h(`div`,yt,[(s(!0),h(d,null,o(ha.value,n=>(s(),h(`label`,{key:n.key,class:`f`},[y(`span`,null,[f(u(n.label),1),n.required?(s(),h(`em`,bt,`*`)):g(``,!0)]),n.type===`select`?b((s(),h(`select`,{key:0,"onUpdate:modelValue":e=>G.value[n.key]=e,class:`inp`},[(s(!0),h(d,null,o(n.options,e=>(s(),h(`option`,{key:e.value,value:e.value},u(e.label),9,St))),128))],8,xt)),[[t,G.value[n.key]]]):b((s(),h(`input`,{key:1,"onUpdate:modelValue":e=>G.value[n.key]=e,type:n.type===`number`?`number`:`text`,placeholder:n.placeholder,class:`inp`},null,8,Ct)),[[e,G.value[n.key]]]),n.hint?(s(),h(`small`,wt,u(n.hint),1)):g(``,!0)]))),128))])):g(``,!0),y(`div`,Tt,[y(`button`,{class:`pill-btn`,disabled:K.value,onClick:_a},u(K.value?i.$t(`daq.k1fsh720099`):i.$t(`daq.k1fstglk112`)),9,Et),q.value?(s(),h(`span`,{key:0,class:c([`test-result`,q.value.ok?`ok`:`bad`])},[f(u(q.value.ok?`✓`:`✗`)+` `+u(q.value.message),1),q.value.latencyMs==null?g(``,!0):(s(),h(d,{key:0},[f(`(`+u(q.value.latencyMs)+`ms)`,1)],64))],2)):g(``,!0)])],64)):g(``,!0),Y.value?(s(),h(`p`,Dt,u(Y.value),1)):g(``,!0),y(`div`,Ot,[y(`button`,{class:`aw-pill outline`,onClick:a[13]||=e=>B.value=!1},u(i.$t(`daq.k3xdnn031`)),1),y(`button`,{class:`aw-pill`,disabled:J.value||V.value===`real`&&q.value!=null&&!q.value.ok,title:V.value===`real`&&!(q.value&&q.value.ok)?i.$t(`daq.k1needtst137`):``,onClick:va},u(J.value?i.$t(`daq.k1bg4759100`):V.value===`real`?i.$t(`daq.k7pxjxo113`):i.$t(`daq.k1bge46t118`)),9,kt)])])])):g(``,!0),ba.value?(s(),h(`div`,{key:5,class:`modal-mask`,onClick:a[25]||=r(e=>ba.value=!1,[`self`])},[y(`div`,At,[y(`h3`,jt,u(i.$t(`daq.k11mv96s032`)),1),y(`p`,Mt,u(i.$t(`daq.ktji4ky033`)),1),y(`table`,Nt,[y(`tbody`,null,[(s(!0),h(d,null,o(Ca.value,e=>(s(),h(`tr`,{key:e.key},[y(`td`,null,[y(`b`,null,u(e.name),1),y(`small`,Pt,u(e.code),1)]),y(`td`,Ft,u(e.min)+`~`+u(e.max)+` `+u(e.unit)+` · `+u(e.decimals)+` `+u(i.$t(`daq.k48oi091`)),1),y(`td`,It,[y(`button`,{class:`mini-btn`,onClick:t=>Da(e)},u(i.$t(`daq.k45eb0034`)),9,Lt),y(`button`,{class:`mini-btn danger`,onClick:t=>Aa(e)},u(Q.value===e.key?i.$t(`daq.k1hhheu3101`):i.$t(`daq.k3xakp114`)),9,Rt)])]))),128)),Ca.value.length?g(``,!0):(s(),h(`tr`,zt,[y(`td`,Bt,u(i.$t(`daq.kztvzbo035`)),1)]))])]),y(`p`,Vt,u(X.value?i.$t(`daq.k1iiph0s102`):i.$t(`daq.k1efixrj115`)),1),y(`div`,Ht,[y(`label`,Ut,[y(`span`,null,[f(u(i.$t(`daq.k3xhia036`)),1),a[52]||=y(`em`,null,`*`,-1)]),b(y(`input`,{"onUpdate:modelValue":a[15]||=e=>l($).name=e,class:`inp`,placeholder:i.$t(`daq.k5opd2t006`)},null,8,Wt),[[n,l($).name]])]),y(`label`,Gt,[y(`span`,null,[f(u(i.$t(`daq.k3x4ef037`)),1),a[53]||=y(`em`,null,`*`,-1)]),b(y(`input`,{"onUpdate:modelValue":a[16]||=e=>l($).unit=e,class:`inp`,placeholder:`如 %RH`},null,512),[[n,l($).unit]])]),y(`label`,Kt,[y(`span`,null,u(i.$t(`daq.k1l477m0038`)),1),b(y(`input`,{"onUpdate:modelValue":a[17]||=e=>l($).ch=e,class:`inp`,placeholder:i.$t(`daq.kk8o4tl007`)},null,8,qt),[[n,l($).ch]])]),y(`label`,Jt,[y(`span`,null,u(i.$t(`daq.k1ayxrqb039`)),1),b(y(`input`,{"onUpdate:modelValue":a[18]||=e=>l($).code=e,class:`inp`,placeholder:i.$t(`daq.kzn3l7l008`)},null,8,Yt),[[n,l($).code]])]),y(`label`,Xt,[y(`span`,null,[f(u(i.$t(`daq.k1l9jv5m040`)),1),a[54]||=y(`em`,null,`*`,-1)]),b(y(`input`,{"onUpdate:modelValue":a[19]||=e=>l($).min=e,type:`number`,class:`inp`},null,512),[[n,l($).min,void 0,{number:!0}]])]),y(`label`,Zt,[y(`span`,null,[f(u(i.$t(`daq.k1l9jv4p041`)),1),a[55]||=y(`em`,null,`*`,-1)]),b(y(`input`,{"onUpdate:modelValue":a[20]||=e=>l($).max=e,type:`number`,class:`inp`},null,512),[[n,l($).max,void 0,{number:!0}]])]),y(`label`,Qt,[y(`span`,null,u(i.$t(`daq.k3mxmcx042`)),1),b(y(`input`,{"onUpdate:modelValue":a[21]||=e=>l($).decimals=e,type:`number`,min:`0`,max:`4`,class:`inp`},null,512),[[n,l($).decimals,void 0,{number:!0}]])]),y(`label`,$t,[y(`span`,null,u(i.$t(`daq.k3xx56043`)),1),b(y(`select`,{"onUpdate:modelValue":a[22]||=e=>l($).icon=e,class:`inp`},[(s(!0),h(d,null,o(l(fe),e=>(s(),h(`option`,{key:e,value:e},u(Sa[e]),9,en))),128))],512),[[t,l($).icon]])]),y(`label`,tn,[y(`span`,null,u(i.$t(`daq.k1f4eknv044`)),1),b(y(`input`,{"onUpdate:modelValue":a[23]||=e=>l($).base=e,type:`number`,class:`inp`},null,512),[[n,l($).base,void 0,{number:!0}]]),y(`small`,nn,u(i.$t(`daq.kytd15s045`)),1)]),y(`label`,rn,[y(`span`,null,u(i.$t(`daq.k1f4ifpo046`)),1),b(y(`input`,{"onUpdate:modelValue":a[24]||=e=>l($).amp=e,type:`number`,class:`inp`},null,512),[[n,l($).amp,void 0,{number:!0}]]),y(`small`,an,u(i.$t(`daq.ksp2aji047`)),1)])]),Z.value?(s(),h(`p`,on,u(Z.value),1)):g(``,!0),y(`div`,sn,[y(`button`,{class:`aw-pill outline`,onClick:Ea},u(i.$t(`daq.k48p40048`)),1),y(`button`,{class:`pill-btn`,disabled:xa.value,onClick:ka},u(xa.value?i.$t(`daq.k1b38d59103`):X.value?i.$t(`daq.k1b39281116`):i.$t(`daq.k1b3dtga119`)),9,cn)]),y(`p`,ln,u(i.$t(`daq.k1w8s84s049`)),1),y(`table`,un,[y(`tbody`,null,[(s(!0),h(d,null,o(wa.value,e=>(s(),h(`tr`,{key:e.key},[y(`td`,null,[y(`b`,null,u(e.name),1),y(`small`,dn,u(e.code),1)]),y(`td`,fn,u(e.min)+`~`+u(e.max)+` `+u(e.unit)+` · `+u(e.decimals)+` `+u(i.$t(`daq.k48oi091`)),1),y(`td`,pn,[y(`button`,{class:`mini-btn`,onClick:t=>Oa(e)},u(i.$t(`daq.k3y694050`)),9,mn)])]))),128))])])])])):g(``,!0),y(`section`,hn,[y(`button`,{class:`opt-head`,onClick:qi},[a[56]||=y(`span`,{class:`i-tabler-flask`},null,-1),y(`b`,null,u(i.$t(`daq.k1optt001`)),1),y(`span`,gn,u(l(E).optimizations.length),1),y(`span`,{class:c([`opt-chevron`,{open:A.value}])},null,2)]),y(`div`,{class:c([`opt-body`,{open:A.value}])},[Ui.value?(s(),h(d,{key:0},[y(`div`,_n,[b(y(`select`,{"onUpdate:modelValue":a[26]||=e=>j.value=e,class:`inp-sel`,onChange:Ji},[y(`option`,vn,u(i.$t(`daq.k1optf001`)),1),(s(!0),h(d,null,o(l(E).lines,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,yn))),128))],544),[[t,j.value]]),b(y(`select`,{"onUpdate:modelValue":a[27]||=e=>M.value=e,class:`inp-sel`,onChange:P},[y(`option`,bn,u(i.$t(`daq.k1optf004`)),1),(s(!0),h(d,null,o(Gi.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,xn))),128))],544),[[t,M.value]]),y(`button`,{class:`mini-act`,onClick:P},u(i.$t(`daq.k1optf002`)),1)]),l(E).optimizations.length===0?(s(),h(`p`,Sn,u(i.$t(`daq.k1opte001`)),1)):g(``,!0),y(`ul`,Cn,[(s(!0),h(d,null,o(l(E).optimizations.slice(0,30),e=>(s(),h(`li`,{key:e.id,class:c([`opt-row`,e.status])},[y(`div`,wn,[y(`span`,{class:c([`opt-status`,e.status])},u(i.$t(Ki(e.status))),3),y(`b`,Tn,u(e.nodeName),1),y(`span`,En,u(e.params[0]?.from??`?`)+` → `+u(e.params[0]?.to),1),y(`span`,Dn,u(e.setAt.slice(5,16).replace(`T`,` `)),1),N.value[e.id]?g(``,!0):(s(),h(`button`,{key:0,class:`mini-act`,disabled:Wi.value===e.id,onClick:t=>Yi(e.id)},u(i.$t(`daq.k1opta001`)),9,On)),e.status===`open`?(s(),h(`button`,{key:1,class:`mini-act danger`,onClick:t=>Zi(e.id)},u(i.$t(`daq.k1opta002`)),9,kn)):g(``,!0)]),y(`div`,An,[e.judge?(s(),h(`span`,{key:0,class:c([`opt-judge`,e.judge.verdict])},u(e.judge.verdict)+`(`+u(e.judge.by)+`): `+u(e.judge.reason.slice(0,70)),3)):e.status===`open`?(s(),h(`span`,jn,u(i.$t(`daq.k1opto001`)),1)):g(``,!0),e.aggPending?(s(),h(`span`,Mn,u(i.$t(`daq.k1optw001`)),1)):e.windowAgg&&e.windowAgg.channels.length?(s(),h(`span`,Nn,[(s(!0),h(d,null,o(e.windowAgg.channels,e=>(s(),h(d,{key:e.daqNodeId},[f(u(e.ch)+` `+u(Qi(e.min))+`~`+u(Qi(e.max))+`(`+u(i.$t(`daq.k1optw002`))+u(e.breaches<0?`-`:e.breaches)+`) `,1)],64))),128))])):g(``,!0)]),N.value[e.id]?(s(),h(`div`,Pn,[(s(!0),h(d,null,o(N.value[e.id].channels,e=>(s(),h(`div`,{key:e.nodeId,class:`opt-ch`},[(s(),h(`svg`,Fn,[y(`polyline`,{points:Xi(e.points)},null,8,In)])),y(`span`,Ln,u(e.ch)+` `+u(Qi(e.points.at(-1)?.value??e.points.at(-1)?.avg))+u(e.unit),1)]))),128)),N.value[e.id].channels.length===0?(s(),h(`p`,Rn,u(i.$t(`daq.k1opte002`)),1)):g(``,!0)])):g(``,!0)],2))),128))])],64)):g(``,!0)],2)]),S(m,{spinning:!l(T).loaded&&!l(T).error},{default:v(()=>[y(`section`,zn,[y(`div`,Bn,[y(`div`,Vn,[y(`label`,Hn,[y(`span`,null,u(i.$t(`daq.k3wj9n051`)),1),b(y(`select`,{"onUpdate:modelValue":a[28]||=e=>l(k).lineId=e,class:`inp-sel`},[y(`option`,Un,u(i.$t(`daq.k1bkl9uj052`)),1),(s(!0),h(d,null,o(l(E).lines,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,Wn))),128)),y(`option`,Gn,u(i.$t(`daq.k3ootr6053`)),1)],512),[[t,l(k).lineId]])]),y(`label`,Kn,[y(`span`,null,u(i.$t(`daq.k1i8rtqt054`)),1),b(y(`select`,{"onUpdate:modelValue":a[29]||=e=>l(k).deviceId=e,class:`inp-sel`},[y(`option`,qn,u(i.$t(`daq.k1bkw4m2055`)),1),(s(!0),h(d,null,o($i.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name)+`(`+u(e.count)+`) `,9,Jn))),128)),y(`option`,Yn,u(i.$t(`daq.k3own4q056`)),1)],512),[[t,l(k).deviceId]])]),y(`label`,{class:`flt`,title:i.$t(`daq.khb8mru009`)},[y(`span`,null,u(i.$t(`daq.k1b2tkyv057`)),1),b(y(`select`,{"onUpdate:modelValue":a[30]||=e=>l(k).lineRun=e,class:`inp-sel`},[y(`option`,Zn,u(i.$t(`daq.k3x4t1058`)),1),y(`option`,Qn,u(i.$t(`daq.k1nxm3p7059`)),1),y(`option`,$n,u(i.$t(`daq.k1ulx34e060`)),1)],512),[[t,l(k).lineRun]])],8,Xn),y(`label`,er,[y(`span`,null,u(i.$t(`daq.k1iwdfef061`)),1),b(y(`select`,{"onUpdate:modelValue":a[31]||=e=>l(k).state=e,class:`inp-sel`},[y(`option`,tr,u(i.$t(`daq.k3x4t1058`)),1),y(`option`,nr,u(i.$t(`daq.k41k5c062`)),1),y(`option`,rr,u(i.$t(`daq.k49z8v063`)),1),y(`option`,ir,u(i.$t(`daq.k3xmid064`)),1),y(`option`,ar,u(i.$t(`daq.k44c2n065`)),1)],512),[[t,l(k).state]])]),y(`label`,or,[y(`span`,null,u(i.$t(`daq.k1flttpl010`)),1),b(y(`select`,{"onUpdate:modelValue":a[32]||=e=>l(k).template=e,class:`inp-sel`},[y(`option`,sr,u(i.$t(`daq.k1flttpl011`)),1),(s(!0),h(d,null,o(Ri.value,e=>(s(),h(`option`,{key:e.ref,value:e.ref},u(e.label)+`(`+u(e.count)+`) `,9,cr))),128))],512),[[t,l(k).template]])]),y(`label`,lr,[y(`span`,null,u(i.$t(`daq.k1fltdrv012`)),1),b(y(`select`,{"onUpdate:modelValue":a[33]||=e=>l(k).driver=e,class:`inp-sel`},[y(`option`,ur,u(i.$t(`daq.k1fltdrv013`)),1),(s(!0),h(d,null,o(zi.value,e=>(s(),h(`option`,{key:e.kind,value:e.kind},u(e.label)+`(`+u(e.count)+`) `,9,dr))),128))],512),[[t,l(k).driver]])]),y(`label`,{class:`flt`,title:i.$t(`daq.k1flttim014`)},[y(`span`,null,u(i.$t(`daq.k1flttim015`)),1),b(y(`select`,{"onUpdate:modelValue":a[34]||=e=>l(k).time=e,class:`inp-sel`},[y(`option`,pr,u(i.$t(`daq.k1flttim016`)),1),y(`option`,mr,u(i.$t(`daq.k1timlv017`)),1),y(`option`,hr,u(i.$t(`daq.k1timhr018`)),1),y(`option`,gr,u(i.$t(`daq.k1timdy019`)),1),y(`option`,_r,u(i.$t(`daq.k1timld020`)),1),y(`option`,vr,u(i.$t(`daq.k1timnv021`)),1)],512),[[t,l(k).time]])],8,fr),y(`label`,yr,[y(`span`,null,u(i.$t(`daq.k1fltsrc022`)),1),b(y(`input`,{"onUpdate:modelValue":a[35]||=e=>l(k).search=e,class:`inp-sel flt-search`,type:`search`,placeholder:i.$t(`daq.k1fltsph023`)},null,8,br),[[n,l(k).search]])]),Ii.value?(s(),h(`button`,{key:0,class:`mini-btn clear-btn`,onClick:Li},u(i.$t(`daq.k1fygck2066`)),1)):g(``,!0)]),y(`span`,xr,u(R.value.length)+` / `+u(l(T).nodes.length)+` `+u(i.$t(`daq.k45uio067`)),1)]),y(`div`,Sr,[y(`div`,{class:c([`ops-panel alarm-panel`,{live:l(T).alarms.length>0}])},[y(`div`,Cr,[a[57]||=y(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),y(`b`,null,u(i.$t(`daq.k1alarm141`)),1),y(`span`,{class:c([`mono cnt`,{hot:l(T).alarms.length>0}])},u(l(T).alarms.length),3)]),y(`div`,wr,[l(T).alarms.length===0?(s(),h(`p`,Tr,u(i.$t(`daq.k1evt001`)),1)):(s(!0),h(d,{key:1},o(l(T).alarms,e=>(s(),h(`div`,{key:e.id,class:`alarm-row`},[a[58]||=y(`span`,{class:`i-tabler-alert-triangle tri`},null,-1),y(`b`,null,u(e.nodeName),1),y(`span`,Er,u(e.metric),1),y(`span`,Dr,u(e.value)+` `+u(e.rule===`lt-min`?`<`:`>`)+` `+u(e.threshold),1),e.escalation>0?(s(),h(`small`,Or,`+`+u(e.escalation),1)):g(``,!0),y(`button`,{class:`mini-btn ack`,onClick:t=>Pi(e.id)},u(i.$t(`daq.k1ack142`)),9,kr)]))),128))])],2),y(`div`,Ar,[y(`div`,jr,[a[60]||=y(`span`,{class:`i-tabler-activity`},null,-1),y(`b`,null,u(i.$t(`daq.k1evt002`)),1),S(p,{class:`panel-link`,to:`/logs`},{default:v(()=>[f(u(i.$t(`daq.k1evt003`)),1),a[59]||=y(`span`,{class:`i-tabler-arrow-right`},null,-1)]),_:1})]),y(`div`,Mr,[l(Ai).recent.length===0?(s(),h(`p`,Nr,u(i.$t(`daq.k1evt004`)),1)):(s(!0),h(d,{key:1},o(l(Ai).recent,(e,t)=>(s(),h(`div`,{key:`${e.at}:${e.actor}:${e.action}:${t}`,class:`evt-row`},[y(`span`,Pr,u(Mi(e.at)),1),y(`span`,{class:c([`src-badge`,e.actorKind])},u(e.actorKind===`agent`?`Agent`:e.actorKind===`user`?i.$t(`logs.src.user`):i.$t(`logs.src.system`)),3),y(`span`,{class:c([`kind-chip`,e.kind])},u(ji(e.kind)),3),y(`span`,{class:`txt`,title:e.summary},u(e.summary),9,Fr)]))),128))])])]),y(`table`,Ir,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,u(i.$t(`daq.k45uio067`)),1),y(`th`,null,u(i.$t(`daq.k42w8s068`)),1),y(`th`,null,u(i.$t(`daq.k3mv305069`)),1),y(`th`,null,u(i.$t(`daq.k1trnd001`)),1),y(`th`,null,u(i.$t(`daq.k1l6g2ga070`)),1),y(`th`,null,u(i.$t(`daq.k3zi0nf071`)),1),y(`th`,null,u(i.$t(`daq.k4a0la072`)),1),y(`th`,null,u(i.$t(`daq.k3wj9n051`)),1),y(`th`,{title:i.$t(`daq.k1runtipc131`)},u(i.$t(`daq.k1b2tkyv057`)),9,Lr),y(`th`,{title:i.$t(`daq.k1prdrtip132`)},u(i.$t(`daq.k1prodrc128`)),9,Rr),y(`th`,null,u(i.$t(`daq.k1i8rtqt054`)),1),y(`th`,zr,u(i.$t(`daq.k40aa6073`)),1)])]),y(`tbody`,null,[(s(!0),h(d,null,o(sa.value,({n:e,c:t})=>(s(),h(`tr`,{key:e.id,class:c({"row-recipe-alarm":t.alarm})},[y(`td`,null,[y(`span`,Br,u(e.id.slice(0,8)),1),y(`b`,null,u(e.name),1),y(`small`,Vr,u(t.tpl),1)]),y(`td`,null,[y(`span`,{class:c([`st-pill`,[t.pill.key]]),title:t.pill.tip},u(t.pill.label),11,Hr)]),y(`td`,{class:c([`mono val`,{stale:!t.live,"val-alarm":e.state===`alarm`||t.alarm}]),title:t.live?void 0:t.pill.tip},[f(u(e.value==null?`--`:e.value.toFixed(e.decimals))+` `,1),y(`small`,null,u(e.unit),1)],10,Ur),y(`td`,Wr,[(s(),h(`svg`,{class:`trend`,viewBox:`0 0 120 26`,preserveAspectRatio:`none`,title:i.$t(`daq.k1trnd002`)},[D(e.hist,O(e).min)==null?g(``,!0):(s(),h(`line`,{key:0,class:`lim`,x1:`0`,y1:D(e.hist,O(e).min),x2:`120`,y2:D(e.hist,O(e).min)},null,8,Kr)),D(e.hist,O(e).max)==null?g(``,!0):(s(),h(`line`,{key:1,class:`lim max`,x1:`0`,y1:D(e.hist,O(e).max),x2:`120`,y2:D(e.hist,O(e).max)},null,8,qr)),y(`polyline`,{class:c([`trace`,{alarm:e.state===`alarm`||t.alarm}]),points:Ni(e.hist)},null,10,Jr)],8,Gr))]),y(`td`,Yr,u(ua(e.intervalMs)),1),y(`td`,Xr,u(da(e.publishIntervalMs)),1),y(`td`,null,[y(`span`,{class:c([`drv-tag`,{planned:ja(e.driver)}]),title:ja(e.driver)?i.$t(`daq.k1plndrv138`):``},u(e.driver),11,Zr)]),y(`td`,null,[y(`select`,{class:`line-sel`,value:e.lineId,title:i.$t(`daq.k3q23v3010`),onChange:t=>Ti(e.id,t)},[y(`option`,$r,u(i.$t(`daq.k3ootr6053`)),1),(s(!0),h(d,null,o(l(E).lines,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,ei))),128))],40,Qr)]),y(`td`,null,[e.lineId?(s(),h(`span`,{key:0,class:c([`run-pill`,{on:l(E).lineStateOf(e.lineId).active}]),title:i.$t(`daq.k1runtipc131`)},[a[61]||=y(`span`,{class:`rp-dot`},null,-1),f(` `+u(l(E).lineStateOf(e.lineId).active?i.$t(`daq.k3vp67i096`):i.$t(`daq.k3ozyqz117`)),1)],10,ti)):(s(),h(`span`,ni,u(i.$t(`daq.k3ootr6053`)),1))]),y(`td`,ri,[e.lineId&&l(E).lineStateOf(e.lineId).active?(s(),h(d,{key:0},[y(`b`,{title:i.$t(`daq.k1prdrtip132`)},u(l(E).lineStateOf(e.lineId).productName||`--`),9,ii),y(`small`,{class:`mono`,title:i.$t(`daq.k1prdrtip132`)},u(l(E).lineStateOf(e.lineId).recipeName||`--`),9,ai)],64)):(s(),h(`span`,oi,`--`))]),y(`td`,null,[y(`select`,{class:`line-sel`,value:e.deviceBindingId??``,title:i.$t(`daq.k2bindtip137`),onChange:t=>Ei(e.id,t)},[y(`option`,ci,u(i.$t(`daq.k3own4q056`)),1),(s(!0),h(d,null,o(la.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(l(ca).get(e.id)??e.name),9,li))),128))],40,si)]),y(`td`,ui,[y(`button`,{class:c([`node-toggle`,{off:!e.enabled}]),title:e.enabled?i.$t(`daq.k1nodestop146`):i.$t(`daq.k1nodestart147`),onClick:t=>Di(e)},[y(`span`,{class:c(e.enabled?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),f(` `+u(e.enabled?i.$t(`daq.k1nodestop146`):i.$t(`daq.k1nodestart147`)),1)],10,di),S(p,{class:`console-link`,to:`/daq/${e.id}`},{default:v(()=>[a[62]||=y(`span`,{class:`i-tabler-dashboard`},null,-1),f(` `+u(i.$t(`daq.k3o3jg2074`)),1)]),_:1},8,[`to`])])],2))),128)),l(T).loaded&&l(T).nodes.length===0?(s(),h(`tr`,fi,[y(`td`,pi,[y(`div`,mi,[y(`p`,hi,u(i.$t(`daq.kvhjyc3075`)),1)])])])):l(T).loaded&&R.value.length===0?(s(),h(`tr`,gi,[y(`td`,_i,[y(`div`,vi,[y(`p`,yi,u(i.$t(`daq.k1w20qew076`)),1)])])])):g(``,!0)])])])]),_:1},8,[`spinning`]),l(T).error?(s(),h(`p`,bi,[f(u(l(T).error)+`(`,1),S(p,{to:`/workshop`},{default:v(()=>[f(u(i.$t(`daq.k1bhhheq077`)),1)]),_:1}),a[63]||=f(`) `,-1)])):g(``,!0)])}}}),[[`__scopeId`,`data-v-6b2d097f`]]);export{T as default};
|
|
1
|
+
import{H as e,U as t,W as n,q as r}from"./rqZ-1SoP.js";import{C as i,F as a,G as o,H as s,Ht as c,St as l,Ut as ee,Wt as u,a as d,b as f,et as p,f as m,ft as te,g as h,h as g,m as ne,mt as _,nt as v,p as y,rt as b,t as x,x as S,z as re}from"./BSCpFtzG.js";import{n as ie}from"./B5S_UyaC.js";import{t as ae}from"./D8CqF0yy.js";import{n as oe}from"./BeIfu4N3.js";import{r as C}from"./D-Ca4BGY.js";import{t as se}from"./C9f8QMp12.js";import{t as w}from"./G0qIw7Gq2.js";import{t as ce}from"./arUY5dyq2.js";import{t as le}from"./CNs_Ozdc.js";import{t as ue}from"./DAR70Lf5.js";import{a as de,i as fe,n as pe,r as me,t as he}from"./DBXhDLgl.js";import{t as ge}from"./BWC4HQHQ.js";import{t as _e}from"./UtviM1bg.js";import{t as ve}from"./CUXCQXjG.js";var ye={class:`page`},be={class:`aw-page-head`},xe={class:`sub`},Se={class:`badges mono`},Ce=[`title`],we=[`title`],Te={class:`txt`},Ee={class:`mono`},De={key:1,class:`infra-banner`},Oe={class:`txt`},ke={key:2,class:`infra-banner`},Ae={class:`txt`},je=[`disabled`],Me={key:3,class:`alarm-bar`},Ne={class:`bar-label`},Pe={class:`mono`},Fe={class:`alarm-scroll`},Ie=[`title`],Le={class:`mono dim`},Re={class:`mono`},ze={key:0,class:`esc mono`},Be=[`onClick`],Ve={class:`aw-tile ctrl-card`},He={class:`ctrl-row`},Ue={class:`ctrl-left`},We=[`title`],Ge={class:`cycle mono`},Ke=[`title`],qe={class:`ctrl-right`},Je={class:`ctrl-metrics mono`},Ye=[`title`],Xe=[`title`],Ze=[`title`],Qe=[`title`],$e={class:`line-strip`},et={class:`strip-label`},tt={class:`mono`},nt={class:`strip-scroll`},rt={key:0,class:`lp-run`},it={key:1,class:`lp-idle`},at={class:`lp-idle`},ot={class:`modal`},st={class:`m-title`},ct={class:`seg-row`},lt={class:`f-grid`},ut={class:`f`},dt=[`value`],ft={class:`f`},pt=[`placeholder`],mt={key:0,class:`f`},ht=[`placeholder`],gt={class:`f-grid`},_t={class:`f`},vt=[`value`],yt={key:0,class:`f-grid driver-form`},bt={key:0},xt=[`onUpdate:modelValue`],St=[`value`],Ct=[`onUpdate:modelValue`,`type`,`placeholder`],wt={key:2,class:`hint`},Tt={class:`test-row`},Et=[`disabled`],Dt={key:1,class:`m-err`},Ot={class:`m-actions`},kt=[`disabled`,`title`],At={class:`modal`},jt={class:`m-title`},Mt={class:`sec-label`},Nt={class:`tpl-table`},Pt={class:`mono dim`},Ft={class:`mono range`},It={class:`right actions`},Lt=[`onClick`],Rt=[`onClick`],zt={key:0},Bt={colspan:`3`,class:`empty`},Vt={class:`sec-label`},Ht={class:`f-grid`},Ut={class:`f`},Wt=[`placeholder`],Gt={class:`f`},Kt={class:`f`},qt=[`placeholder`],Jt={class:`f`},Yt=[`placeholder`],Xt={class:`f`},Zt={class:`f`},Qt={class:`f`},$t={class:`f`},en=[`value`],tn={class:`f`},nn={class:`hint`},rn={class:`f`},an={class:`hint`},on={key:0,class:`m-err`},sn={class:`m-actions`},cn=[`disabled`],ln={class:`sec-label`},un={class:`tpl-table`},dn={class:`mono dim`},fn={class:`mono range`},pn={class:`right actions`},mn=[`onClick`],hn={class:`aw-tile opt-card`},gn={class:`opt-count mono`},_n={class:`opt-filters`},vn={value:``},yn=[`value`],bn={value:``},xn=[`value`],Sn={key:0,class:`opt-empty`},Cn={class:`opt-list`},wn={class:`opt-line1`},Tn={class:`opt-node`},En={class:`mono opt-params`},Dn={class:`mono opt-time`},On=[`disabled`,`onClick`],kn=[`onClick`],An={class:`opt-line2 mono`},jn={key:1,class:`opt-open-hint`},Mn={key:2,class:`opt-agg`},Nn={key:3,class:`opt-agg`},Pn={key:0,class:`opt-series`},Fn={class:`opt-spark`,viewBox:`0 0 240 36`,preserveAspectRatio:`none`},In=[`points`],Ln={class:`mono`},Rn={key:0,class:`opt-empty`},zn={class:`aw-tile table-card`},Bn={class:`tbl-toolbar`},Vn={class:`filters`},Hn={class:`flt`},Un={value:``},Wn=[`value`],Gn={value:`none`},Kn={class:`flt`},qn={value:``},Jn=[`value`],Yn={value:`none`},Xn=[`title`],Zn={value:``},Qn={value:`on`},$n={value:`off`},er={class:`flt`},tr={value:``},nr={value:`ok`},rr={value:`warn`},ir={value:`alarm`},ar={value:`offline`},or={class:`flt`},sr={value:``},cr=[`value`],lr={class:`flt`},ur={value:``},dr=[`value`],fr=[`title`],pr={value:``},mr={value:`live`},hr={value:`hour`},gr={value:`day`},_r={value:`old`},vr={value:`never`},yr={class:`flt`},br=[`placeholder`],xr={class:`count mono`},Sr={class:`ops-panels`},Cr={class:`panel-head`},wr={class:`panel-body`},Tr={key:0,class:`panel-empty`},Er={class:`mono dim`},Dr={class:`mono`},Or={key:0,class:`esc mono`},kr=[`onClick`],Ar={class:`ops-panel event-panel`},jr={class:`panel-head`},Mr={class:`panel-body`},Nr={key:0,class:`panel-empty`},Pr={class:`mono dim t`},Fr=[`title`],Ir={class:`nodes-table`},Lr=[`title`],Rr=[`title`],zr={class:`right`},Br={class:`mono dim`},Vr={class:`mono ch`},Hr=[`title`],Ur=[`title`],Wr={class:`trend-cell`},Gr=[`title`],Kr=[`y1`,`y2`],qr=[`y1`,`y2`],Jr=[`points`],Yr={class:`mono`},Xr={class:`mono`},Zr=[`title`],Qr=[`value`,`title`,`onChange`],$r={value:``},ei=[`value`],ti=[`title`],ni={key:1,class:`run-pill na`},ri={class:`prod-cell`},ii=[`title`],ai=[`title`],oi={key:1,class:`dim`},si=[`value`,`title`,`onChange`],ci={value:``},li=[`value`],ui={class:`right`},di=[`title`,`onClick`],fi={key:0},pi={colspan:`11`},mi={class:`pane-empty`,style:{"min-height":`120px`}},hi={class:`pe-sub`},gi={key:1},_i={colspan:`11`},vi={class:`pane-empty`,style:{"min-height":`90px`}},yi={class:`pe-sub`},bi={key:6,class:`err`},xi=120,Si=26,T=x(i({__name:`index`,setup(i){let{t:x}=oe();le({layout:`default`}),ie({title:()=>x(`titles.daq`)});let T=he(),E=ue(),Ci=ce(),wi=m(()=>E.lines.some(e=>E.lineStateOf(e.id).active));async function Ti(e,t){let n=t.target.value;try{await T.patchNode(e,{lineId:n});let t=T.nodes.find(t=>t.id===e);t&&(t.lineId=n)}catch(e){C.error(w(e))}}async function Ei(e,t){let n=t.target.value;try{await T.bindNode(e,n||null)}catch(e){C.error(w(e))}}async function Di(e){let t=!e.enabled;try{await T.patchNode(e.id,{enabled:t}),e.enabled=t,t||(e.state=`offline`),C.success(x(t?`daq.k1nodestart147`:`daq.k1nodestop146`))}catch(e){C.error(w(e))}}function Oi(e){if(!e.lineId)return null;let t=E.lineStateOf(e.lineId);return!t.active||!t.recipeId?null:E.recipes.find(e=>e.id===t.recipeId)?.daqWindows?.find(t=>t.nodeId===e.id)??null}function ki(e){let t=Oi(e);return!t||e.value==null?!1:t.min!=null&&e.value<t.min||t.max!=null&&e.value>t.max}let Ai=_e();function ji(e){return{write:x(`logs.kind.write`),manual:x(`logs.kind.manual`),alarm:x(`logs.kind.alarm`),line:x(`logs.kind.line`),recipe:x(`logs.kind.recipe`),rollback:x(`logs.kind.rollback`),daq:x(`logs.kind.daq`),system:x(`logs.kind.system`)}[e]??(e||x(`logs.kind.system`))}function Mi(e){let t=new Date(e);return Number.isFinite(t.getTime())?`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`:``}function Ni(e){let t=e.filter(Number.isFinite);if(t.length<2)return``;let n=Math.min(...t),r=Math.max(...t)-n||1;return t.map((e,i)=>`${(i/(t.length-1)*xi).toFixed(1)},${(Si-(e-n)/r*24-1).toFixed(1)}`).join(` `)}function D(e,t){if(t==null||!Number.isFinite(t))return null;let n=e.filter(Number.isFinite);if(n.length<2)return null;let r=Math.min(...n,t),i=Math.max(...n,t)-r||1;return Number((Si-(t-r)/i*24-1).toFixed(1))}function O(e){let t=Oi(e);return t&&(t.min!=null||t.max!=null)?{min:t.min,max:t.max,source:`recipe`}:e.warnLow!=null||e.warnHigh!=null?{min:e.warnLow,max:e.warnHigh,source:`warn`}:{min:null,max:null,source:`warn`}}async function Pi(e){try{await T.ackAlarm(e),C.success(x(`daq.k1acked144`))}catch(e){C.error(w(e))}}let Fi=null;re(()=>{Ci.ensureConnected(),Fi=T.ensureWsFeed(),Ai.ensureLive(),T.load(),T.fetchAlarms(),E.load(),z.load(),E.loadOptimizations(),ve(()=>{T.load(),T.fetchAlarms()},5e3,{bgMs:3e4}),ve(()=>{E.load()},15e3,{bgMs:6e4})}),a(()=>{Fi?.()});let k=te({lineId:``,deviceId:``,template:``,driver:``,lineRun:``,state:``,time:``,search:``}),Ii=m(()=>!!(k.lineId||k.deviceId||k.template||k.driver||k.lineRun||k.state||k.time||k.search.trim()));function Li(){k.lineId=``,k.deviceId=``,k.template=``,k.driver=``,k.lineRun=``,k.state=``,k.time=``,k.search=``}let Ri=m(()=>{let e=new Map;for(let t of T.nodes)e.set(t.templateRef,(e.get(t.templateRef)??0)+1);return[...e.entries()].map(([e,t])=>({ref:e,count:t,label:ya(e)}))}),zi=m(()=>{let e=new Map;for(let t of T.nodes)e.set(t.driver,(e.get(t.driver)??0)+1);return[...e.entries()].map(([e,t])=>({kind:e,count:t,label:T.meta.drivers.find(t=>t.kind===e)?.label??e}))});function Bi(e){if(!e.lastAt)return`never`;let t=Date.now()-Date.parse(e.lastAt);return t<=3e5?`live`:t<=36e5?`hour`:t<=864e5?`day`:`old`}function Vi(e){return!k.time||Bi(e)===k.time}function Hi(e){let t=k.search.trim().toLowerCase();return!t||e.name.toLowerCase().includes(t)||e.id.toLowerCase().includes(t)}let A=_(!1),Ui=_(!1),j=_(``),M=_(``),N=_({}),Wi=_(``),Gi=m(()=>E.recipes.filter(e=>!j.value||e.lineId===j.value));function Ki(e){return{open:`daq.k1optst001`,judged:`daq.k1optst008`,"judged-keep":`daq.k1optst002`,"rolled-back":`daq.k1optst003`,superseded:`daq.k1optst004`,"superseded-manual":`daq.k1optst005`,"closed-line-stop":`daq.k1optst006`,failed:`daq.k1optst007`}[e]??`daq.k1optst001`}async function qi(){A.value=!A.value,A.value&&(Ui.value=!0,await P())}async function P(){await E.loadOptimizations({lineId:j.value||void 0,recipeId:M.value||void 0})}function Ji(){M.value&&!Gi.value.some(e=>e.id===M.value)&&(M.value=``),P()}async function Yi(e){Wi.value=e;try{let t=await E.optimizationSeries(e);N.value={...N.value,[e]:t}}finally{Wi.value=``}}function Xi(e,t=240,n=36){let r=e.map(e=>e.value??e.avg??0).filter(Number.isFinite);if(r.length<2)return``;let i=Math.min(...r),a=Math.max(...r)-i||1;return r.map((e,o)=>`${o/(r.length-1)*t},${n-(e-i)/a*n}`).join(` `)}async function Zi(e){await E.rollbackOptimization(e),await P()}function Qi(e){return e==null?`--`:String(Number(e.toFixed(2)))}let $i=m(()=>{let e=new Map;for(let t of T.nodes)t.deviceBindingId&&e.set(t.deviceBindingId,(e.get(t.deviceBindingId)??0)+1);return z.twins.filter(t=>e.has(t.id)).map(t=>({id:t.id,name:ca.get(t.id)??t.name,count:e.get(t.id)}))});function ea(e){if(!k.lineRun)return!0;let t=!!e.lineId&&E.lineStateOf(e.lineId).active;return k.lineRun===`on`?t:!t}let F=m(()=>E.lines.find(e=>e.id===k.lineId)??null),I=m(()=>F.value?E.lineStateOf(F.value.id):null);function ta(e){if(!e.lastAt)return!0;let t=e.intervalMs??T.controller.defaultIntervalMs;return Date.now()-Date.parse(e.lastAt)>Math.max(t*4,12e3)}function na(e){return e.enabled?e.lineId?E.lineStateOf(e.lineId).active?!T.controller.running||ta(e)?`offline`:e.state:`idle`:`unassigned`:`disabled`}function ra(e){let t=na(e);return t===`ok`||t===`warn`||t===`alarm`}let L={ok:x(`daq.k41k5c062`),warn:x(`daq.k49z8v063`),alarm:x(`daq.k3xmid064`),offline:x(`daq.k44c2n065`),idle:x(`daq.k3ozyqz117`),disabled:x(`daq.k1disabl130`),unassigned:x(`daq.k3ootr6053`)};function ia(e){let t=na(e);if(t===`offline`){if(e.lastError)return{key:t,label:L.offline,tip:e.lastError};let n=T.controller.running?x(`daq.k1staled129`,{p0:Math.round(Math.max((e.intervalMs??T.controller.defaultIntervalMs)*4,12e3)/1e3)}):x(`daq.k1gateoff140`);return{key:t,label:L.offline,tip:n}}if(t===`idle`)return{key:t,label:L.idle,tip:x(`daq.k1idlehin139`)};if((t===`ok`||t===`warn`||t===`alarm`)&&ki(e)){let t=Oi(e);return{key:`alarm`,label:x(`daq.k1l3pt51104`),tip:x(`daq.k1hrrqa1122`,{p0:t?.min??`-∞`,p1:t?.max??`+∞`,p2:``})}}return{key:t,label:L[t],tip:``}}let R=m(()=>T.nodes.filter(e=>!(k.lineId&&(k.lineId===`none`?e.lineId:(e.lineId??``)!==k.lineId)||k.deviceId&&(k.deviceId===`none`?e.deviceBindingId:e.deviceBindingId!==k.deviceId)||k.template&&e.templateRef!==k.template||k.driver&&e.driver!==k.driver||!ea(e)||k.state&&na(e)!==k.state||!Vi(e)||!Hi(e)))),aa=m(()=>{let e=new Map;for(let t of R.value)e.set(t.id,{pill:ia(t),alarm:ki(t),live:ra(t),tpl:ya(t.templateRef)});return e}),oa={pill:{key:`offline`,label:``,tip:``},alarm:!1,live:!1,tpl:`-`},sa=m(()=>R.value.map(e=>({n:e,c:aa.value.get(e.id)??oa}))),z=ge(),ca=new Map;p(()=>z.twins,e=>{for(let t of e)ca.set(t.id,t.name)},{immediate:!0,deep:!0});let la=m(()=>z.twins.filter(e=>e.kind!==`daq`&&!(e.modelRef??``).startsWith(`daq-`)&&!(e.modelRef??``).startsWith(`dcw-`))),ua=e=>e==null?x(`daq.k9vnp9h124`,{p0:T.controller.defaultIntervalMs}):`${e}ms`,da=e=>e==null?x(`daq.k9vnp9h124`,{p0:T.controller.defaultPublishIntervalMs}):e===0?x(`daq.k41mvv078`):`${e}ms`,B=_(!1),V=_(`mock`),H=_(me[0]?.key??`temp-tc`),U=_(`modbus-tcp`),W=_(``),fa=_(null),G=_({}),pa=te({kind:`none`,scale:1,offset:0}),K=_(!1),q=_(null),J=_(!1),Y=_(``),ma=m(()=>pe.find(e=>e.kind===U.value)),ha=m(()=>ma.value?.configFields??[]),ga=e=>T.meta.drivers.find(t=>t.kind===e)?.status!==`planned`&&T.meta.driverAvailable?.[e]!==!1;p(U,()=>{let e={};for(let t of ha.value)t.default!==void 0&&(e[t.key]=t.default);G.value=e,q.value=null},{immediate:!0});async function _a(){K.value=!0,q.value=null;try{q.value=await T.testDriver(U.value,G.value)}catch(e){q.value={ok:!1,message:w(e)}}finally{K.value=!1}}async function va(){J.value=!0,Y.value=``;try{let e=pa.kind===`linear`?{kind:`linear`,scale:Number(pa.scale),offset:Number(pa.offset)}:void 0;if(V.value===`mock`)await T.createFromTemplate(`daq-${H.value}`,{name:W.value?{name:W.value}.name:void 0,transform:e});else{for(let e of ha.value)if(e.required&&!G.value[e.key]&&G.value[e.key]!==0)throw Error(x(`daq.kyuadl0125`,{p0:e.label}));let t=T.templates.find(e=>e.key===H.value);await T.createFromTemplate(`daq-${H.value}`,{name:W.value||void 0,driver:U.value,driverConfig:{...G.value},transform:e,intervalMs:fa.value,unit:t?.unit,min:t?.min,max:t?.max,decimals:t?.decimals})}B.value=!1,W.value=``,q.value=null}catch(e){Y.value=w(e)}finally{J.value=!1}}function ya(e){let t=T.templates.find(t=>t.key===de(e));return t?`${t.name} · ${t.ch}`:e||`-`}let ba=_(!1),X=_(null),xa=_(!1),Z=_(``),Q=_(``),$=te({name:``,ch:``,code:``,unit:``,min:0,max:100,base:50,amp:2,decimals:2,icon:`thermo`}),Sa={thermo:x(`daq.k422b8079`),pressure:x(`daq.k3x6ff080`),tension:x(`daq.k3z9xc081`),encoder:x(`daq.k3subk4082`),camera:x(`daq.k47atw083`),gateway:x(`daq.kz7yhbj084`)},Ca=m(()=>T.templates.filter(e=>!e.builtin)),wa=m(()=>T.templates.filter(e=>e.builtin));function Ta(e,t=!1){$.name=t?x(`daq.k2hbo3c126`,{p0:e.name}):e.name,$.ch=e.ch,$.code=e.code,$.unit=e.unit,$.min=e.min,$.max=e.max,$.base=e.base,$.amp=e.amp,$.decimals=e.decimals,$.icon=e.icon}function Ea(){X.value=null,Z.value=``,Q.value=``,Ta({key:``,name:``,code:``,ch:``,unit:``,base:50,amp:2,min:0,max:100,decimals:2,icon:`thermo`})}function Da(e){X.value=e.key,Z.value=``,Ta(e)}function Oa(e){X.value=null,Z.value=``,Ta(e,!0)}async function ka(){xa.value=!0,Z.value=``;try{let e=e=>{let t=Number(e);return e===``||e==null||!Number.isFinite(t)?void 0:t},t={name:$.name.trim(),ch:$.ch.trim()||void 0,code:$.code.trim()||void 0,unit:$.unit.trim(),min:e($.min),max:e($.max),base:e($.base),amp:e($.amp),decimals:e($.decimals),icon:$.icon};X.value?await T.updateTemplate(X.value,t):await T.createTemplate(t),Ea()}catch(e){Z.value=w(e)}finally{xa.value=!1}}async function Aa(e){if(Q.value!==e.key){Q.value=e.key;return}try{await T.removeTemplate(e.key)}catch(e){Z.value=w(e)}finally{Q.value=``}}let ja=e=>T.meta.drivers.find(t=>t.kind===e)?.status===`planned`,Ma=_(!1);async function Na(){Ma.value=!0;try{await T.reconnectInfra()}catch{}finally{Ma.value=!1}}return(i,a)=>{let p=ae,m=se;return s(),h(`div`,ye,[y(`div`,be,[y(`div`,null,[a[36]||=y(`p`,{class:`aw-kicker`},` AGENTWORKSHOP / DAQ CONSOLE `,-1),y(`h1`,null,u(i.$t(`daq.k1emg364011`)),1),y(`p`,xe,u(i.$t(`daq.k1wmg2bz012`)),1)]),y(`div`,Se,[y(`span`,{class:`badge`,title:i.$t(`daq.k1tsdbtip133`)},`TSDB · `+u(l(T).meta.tsdb),9,Ce),y(`span`,{class:`badge`,title:i.$t(`daq.k1queuet134`)},`QUEUE · `+u(l(T).meta.queue),9,we)])]),l(T).loaded&&F.value&&I.value?(s(),h(`div`,{key:0,class:c([`infra-banner`,{good:I.value.active}])},[y(`span`,{class:c(I.value.active?`i-tabler-circle-check`:`i-tabler-info-circle`)},null,2),y(`span`,Te,[I.value.active?(s(),h(d,{key:0},[f(u(i.$t(`daq.k3ktxbr085`))+u(F.value.name)+`」`+u(i.$t(`daq.k15lvw0o105`)),1),y(`b`,null,u(I.value.productName),1),a[37]||=f(` · Recipe:`,-1),y(`b`,null,u(I.value.recipeName),1),y(`small`,Ee,u(i.$t(`daq.k400lb086`))+` `+u(I.value.runId?.slice(0,8))+` · `+u(i.$t(`daq.k3zkt2106`))+` `+u(I.value.startedAt?.slice(11,19))+` `+u(i.$t(`daq.k69vag8108`))+` `+u(I.value.taggedSamples)+` `+u(i.$t(`daq.k4118o092`)),1)],64)):(s(),h(d,{key:1},[f(u(i.$t(`daq.k3ktxbr085`))+u(F.value.name)+`」`+u(i.$t(`daq.k12uge2o107`)),1)],64))]),S(p,{class:`pill-btn`,to:`/dcw/${F.value.id}`},{default:v(()=>[f(u(I.value.active?i.$t(`daq.k1ukoy0v093`):i.$t(`daq.k1cg78i8109`)),1)]),_:1},8,[`to`])],2)):l(T).loaded&&!wi.value?(s(),h(`div`,De,[a[38]||=y(`span`,{class:`i-tabler-info-circle`},null,-1),y(`span`,Oe,[f(u(i.$t(`daq.k19onw5w013`)),1),S(p,{to:`/dcw`},{default:v(()=>[f(u(i.$t(`daq.k1b2tk5c014`)),1)]),_:1}),f(u(i.$t(`daq.k1u9wnlg015`)),1)])])):g(``,!0),l(T).meta.infra?.degraded?(s(),h(`div`,ke,[a[39]||=y(`span`,{class:`i-tabler-alert-triangle`},null,-1),y(`span`,Ae,u(l(T).meta.infra.warning),1),y(`button`,{class:`pill-btn`,disabled:Ma.value,onClick:Na},u(Ma.value?i.$t(`daq.k1ld43ur094`):i.$t(`daq.kzg9805110`)),9,je)])):g(``,!0),l(T).alarms.length?(s(),h(`div`,Me,[y(`span`,Ne,[a[40]||=y(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),f(` `+u(i.$t(`daq.k1alarm141`))+` `,1),y(`b`,Pe,u(l(T).alarms.length),1)]),y(`div`,Fe,[(s(!0),h(d,null,o(l(T).alarms,e=>(s(),h(`span`,{key:e.id,class:`alarm-item`,title:i.$t(`daq.k1esc143`,{p0:e.escalation})},[y(`b`,null,u(e.nodeName),1),y(`span`,Le,u(e.metric),1),y(`span`,Re,u(e.value)+` `+u(e.rule===`lt-min`?`<`:`>`)+` `+u(e.threshold),1),e.escalation>0?(s(),h(`small`,ze,`+`+u(e.escalation),1)):g(``,!0),y(`button`,{class:`mini-btn ack`,onClick:t=>Pi(e.id)},u(i.$t(`daq.k1ack142`)),9,Be)],8,Ie))),128))])])):g(``,!0),y(`section`,Ve,[y(`div`,He,[y(`div`,Ue,[y(`button`,{class:c([`aw-pill`,{running:l(T).controller.running}]),title:i.$t(`daq.k1snap145`),onClick:a[0]||=e=>l(T).controllerAction(l(T).controller.running?`pause`:`resume`)},[y(`span`,{class:c(l(T).controller.running?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),f(` `+u(l(T).controller.running?i.$t(`daq.kpui00095`):i.$t(`daq.knxpdpt111`)),1)],10,We),y(`label`,Ge,[f(u(i.$t(`daq.k1ifahxj016`))+` `,1),b(y(`input`,{"onUpdate:modelValue":a[1]||=e=>l(T).controller.defaultIntervalMs=e,type:`number`,min:`200`,max:`60000`,step:`100`,onChange:a[2]||=e=>l(T).controllerAction(`config`,l(T).controller.defaultIntervalMs)},null,544),[[n,l(T).controller.defaultIntervalMs,void 0,{number:!0}]]),a[41]||=f(`ms `,-1)]),y(`label`,{class:`cycle mono`,title:i.$t(`daq.k1e8lcoo001`)},[f(u(i.$t(`daq.k1if98n0017`))+` `,1),b(y(`input`,{"onUpdate:modelValue":a[3]||=e=>l(T).controller.defaultPublishIntervalMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,onChange:a[4]||=e=>l(T).controllerAction(`config`,l(T).controller.defaultIntervalMs,l(T).controller.defaultPublishIntervalMs)},null,544),[[n,l(T).controller.defaultPublishIntervalMs,void 0,{number:!0}]]),a[42]||=f(`ms `,-1)],8,Ke)]),y(`div`,qe,[y(`span`,Je,[y(`span`,null,u(i.$t(`daq.k45uio067`))+` `+u(l(T).controller.nodesOnline)+`/`+u(l(T).controller.nodesTotal),1),a[43]||=y(`span`,{class:`sep`},`·`,-1),y(`span`,{title:i.$t(`daq.k1yztsu4002`)},u(i.$t(`daq.k3xagp087`))+` `+u(l(T).meta.produced),9,Ye),a[44]||=y(`span`,{class:`sep`},`·`,-1),y(`span`,{title:i.$t(`daq.ko09iha003`)},u(i.$t(`daq.k427eu088`))+` `+u(l(T).meta.consumed),9,Xe),a[45]||=y(`span`,{class:`sep`},`·`,-1),y(`span`,{class:c({warn:(l(T).meta.dropped??0)>0}),title:i.$t(`daq.k1droptip135`)},u(i.$t(`daq.k3w8go089`))+` `+u(l(T).meta.dropped),11,Ze),a[46]||=y(`span`,{class:`sep`},`·`,-1),y(`span`,{title:i.$t(`daq.kj1jbmw004`)},u(i.$t(`daq.k3wusd090`))+` `+u(l(T).meta.samplesStored),9,Qe)]),y(`button`,{class:`aw-pill outline add-btn`,onClick:a[5]||=e=>{ba.value=!0,Ea()}},[a[47]||=y(`span`,{class:`i-tabler-adjustments-horizontal`},null,-1),f(` `+u(i.$t(`daq.k1f5cv0s018`)),1)]),y(`button`,{class:`aw-pill add-btn`,onClick:a[6]||=e=>B.value=!0},[a[48]||=y(`span`,{class:`i-tabler-plus`},null,-1),f(` `+u(i.$t(`daq.k1fn0ukb019`)),1)])])]),y(`div`,$e,[y(`span`,et,[a[49]||=y(`span`,{class:`i-tabler-route`},null,-1),f(` `+u(i.$t(`daq.k1b2o3b6020`)),1),y(`small`,tt,u(l(E).lines.length),1)]),y(`div`,nt,[(s(!0),h(d,null,o(l(E).lines,e=>(s(),ne(p,{key:e.id,class:c([`line-pill`,{on:l(E).lineStateOf(e.id).active}]),style:ee({"--lc":e.color}),to:`/dcw/${e.id}`,title:l(E).lineStateOf(e.id).active?i.$t(`daq.k3v957u120`,{p0:e.name,p1:l(E).lineStateOf(e.id).productName,p2:l(E).lineStateOf(e.id).recipeName}):i.$t(`daq.k1x7jnru121`,{p0:e.name})},{default:v(()=>[a[50]||=y(`span`,{class:`lp-dot`},null,-1),y(`b`,null,u(e.name),1),l(E).lineStateOf(e.id).active?(s(),h(`small`,rt,u(l(E).lineStateOf(e.id).recipeName??i.$t(`daq.k3vp67i096`)),1)):(s(),h(`small`,it,u(i.$t(`daq.k3zgkk021`)),1))]),_:2},1032,[`class`,`style`,`to`,`title`]))),128)),l(E).lines.length===0?(s(),ne(p,{key:0,class:`line-pill`,to:`/dcw`},{default:v(()=>[a[51]||=y(`span`,{class:`lp-dot`},null,-1),y(`b`,null,u(i.$t(`daq.k1el12b1022`)),1),y(`small`,at,u(i.$t(`daq.k8jxxe8023`)),1)]),_:1})):g(``,!0)])])]),B.value?(s(),h(`div`,{key:4,class:`modal-mask`,onClick:a[14]||=r(e=>B.value=!1,[`self`])},[y(`div`,ot,[y(`h3`,st,u(i.$t(`daq.k19rioqa024`)),1),y(`div`,ct,[y(`button`,{class:c([`seg`,{on:V.value===`mock`}]),onClick:a[7]||=e=>V.value=`mock`},u(i.$t(`daq.k1p5c1un025`)),3),y(`button`,{class:c([`seg`,{on:V.value===`real`}]),onClick:a[8]||=e=>V.value=`real`},u(i.$t(`daq.k1cbcp3o026`)),3)]),y(`div`,lt,[y(`label`,ut,[y(`span`,null,u(i.$t(`daq.k1fsgerc027`)),1),b(y(`select`,{"onUpdate:modelValue":a[9]||=e=>H.value=e,class:`inp`},[(s(!0),h(d,null,o(l(T).templates,e=>(s(),h(`option`,{key:e.key,value:e.key},u(e.name)+` · `+u(e.ch)+`(`+u(e.min)+`~`+u(e.max)+` `+u(e.unit)+`)`+u(e.builtin?``:i.$t(`daq.kr45rk9097`)),9,dt))),128))],512),[[t,H.value]])]),y(`label`,ft,[y(`span`,null,u(i.$t(`daq.k1ce2k1y028`)),1),b(y(`input`,{"onUpdate:modelValue":a[10]||=e=>W.value=e,class:`inp`,placeholder:i.$t(`daq.kgpxzy3005`)},null,8,pt),[[n,W.value]])]),V.value===`real`?(s(),h(`label`,mt,[y(`span`,null,u(i.$t(`daq.k13mfsfc029`)),1),b(y(`input`,{"onUpdate:modelValue":a[11]||=e=>fa.value=e,type:`number`,min:`1000`,max:`60000`,step:`500`,class:`inp`,placeholder:i.$t(`daq.k1eg1000a136`)},null,8,ht),[[n,fa.value,void 0,{number:!0}]])])):g(``,!0)]),V.value===`real`?(s(),h(d,{key:0},[y(`div`,gt,[y(`label`,_t,[y(`span`,null,u(i.$t(`daq.k1kt87rx030`)),1),b(y(`select`,{"onUpdate:modelValue":a[12]||=e=>U.value=e,class:`inp`},[(s(!0),h(d,null,o(l(pe).filter(e=>e.status!==`planned`),e=>(s(),h(`option`,{key:e.kind,value:e.kind},u(e.label)+u(ga(e.kind)?``:i.$t(`daq.kjbqphp098`)),9,vt))),128))],512),[[t,U.value]])])]),ha.value.length?(s(),h(`div`,yt,[(s(!0),h(d,null,o(ha.value,n=>(s(),h(`label`,{key:n.key,class:`f`},[y(`span`,null,[f(u(n.label),1),n.required?(s(),h(`em`,bt,`*`)):g(``,!0)]),n.type===`select`?b((s(),h(`select`,{key:0,"onUpdate:modelValue":e=>G.value[n.key]=e,class:`inp`},[(s(!0),h(d,null,o(n.options,e=>(s(),h(`option`,{key:e.value,value:e.value},u(e.label),9,St))),128))],8,xt)),[[t,G.value[n.key]]]):b((s(),h(`input`,{key:1,"onUpdate:modelValue":e=>G.value[n.key]=e,type:n.type===`number`?`number`:`text`,placeholder:n.placeholder,class:`inp`},null,8,Ct)),[[e,G.value[n.key]]]),n.hint?(s(),h(`small`,wt,u(n.hint),1)):g(``,!0)]))),128))])):g(``,!0),y(`div`,Tt,[y(`button`,{class:`pill-btn`,disabled:K.value,onClick:_a},u(K.value?i.$t(`daq.k1fsh720099`):i.$t(`daq.k1fstglk112`)),9,Et),q.value?(s(),h(`span`,{key:0,class:c([`test-result`,q.value.ok?`ok`:`bad`])},[f(u(q.value.ok?`✓`:`✗`)+` `+u(q.value.message),1),q.value.latencyMs==null?g(``,!0):(s(),h(d,{key:0},[f(`(`+u(q.value.latencyMs)+`ms)`,1)],64))],2)):g(``,!0)])],64)):g(``,!0),Y.value?(s(),h(`p`,Dt,u(Y.value),1)):g(``,!0),y(`div`,Ot,[y(`button`,{class:`aw-pill outline`,onClick:a[13]||=e=>B.value=!1},u(i.$t(`daq.k3xdnn031`)),1),y(`button`,{class:`aw-pill`,disabled:J.value||V.value===`real`&&q.value!=null&&!q.value.ok,title:V.value===`real`&&!(q.value&&q.value.ok)?i.$t(`daq.k1needtst137`):``,onClick:va},u(J.value?i.$t(`daq.k1bg4759100`):V.value===`real`?i.$t(`daq.k7pxjxo113`):i.$t(`daq.k1bge46t118`)),9,kt)])])])):g(``,!0),ba.value?(s(),h(`div`,{key:5,class:`modal-mask`,onClick:a[25]||=r(e=>ba.value=!1,[`self`])},[y(`div`,At,[y(`h3`,jt,u(i.$t(`daq.k11mv96s032`)),1),y(`p`,Mt,u(i.$t(`daq.ktji4ky033`)),1),y(`table`,Nt,[y(`tbody`,null,[(s(!0),h(d,null,o(Ca.value,e=>(s(),h(`tr`,{key:e.key},[y(`td`,null,[y(`b`,null,u(e.name),1),y(`small`,Pt,u(e.code),1)]),y(`td`,Ft,u(e.min)+`~`+u(e.max)+` `+u(e.unit)+` · `+u(e.decimals)+` `+u(i.$t(`daq.k48oi091`)),1),y(`td`,It,[y(`button`,{class:`mini-btn`,onClick:t=>Da(e)},u(i.$t(`daq.k45eb0034`)),9,Lt),y(`button`,{class:`mini-btn danger`,onClick:t=>Aa(e)},u(Q.value===e.key?i.$t(`daq.k1hhheu3101`):i.$t(`daq.k3xakp114`)),9,Rt)])]))),128)),Ca.value.length?g(``,!0):(s(),h(`tr`,zt,[y(`td`,Bt,u(i.$t(`daq.kztvzbo035`)),1)]))])]),y(`p`,Vt,u(X.value?i.$t(`daq.k1iiph0s102`):i.$t(`daq.k1efixrj115`)),1),y(`div`,Ht,[y(`label`,Ut,[y(`span`,null,[f(u(i.$t(`daq.k3xhia036`)),1),a[52]||=y(`em`,null,`*`,-1)]),b(y(`input`,{"onUpdate:modelValue":a[15]||=e=>l($).name=e,class:`inp`,placeholder:i.$t(`daq.k5opd2t006`)},null,8,Wt),[[n,l($).name]])]),y(`label`,Gt,[y(`span`,null,[f(u(i.$t(`daq.k3x4ef037`)),1),a[53]||=y(`em`,null,`*`,-1)]),b(y(`input`,{"onUpdate:modelValue":a[16]||=e=>l($).unit=e,class:`inp`,placeholder:`如 %RH`},null,512),[[n,l($).unit]])]),y(`label`,Kt,[y(`span`,null,u(i.$t(`daq.k1l477m0038`)),1),b(y(`input`,{"onUpdate:modelValue":a[17]||=e=>l($).ch=e,class:`inp`,placeholder:i.$t(`daq.kk8o4tl007`)},null,8,qt),[[n,l($).ch]])]),y(`label`,Jt,[y(`span`,null,u(i.$t(`daq.k1ayxrqb039`)),1),b(y(`input`,{"onUpdate:modelValue":a[18]||=e=>l($).code=e,class:`inp`,placeholder:i.$t(`daq.kzn3l7l008`)},null,8,Yt),[[n,l($).code]])]),y(`label`,Xt,[y(`span`,null,[f(u(i.$t(`daq.k1l9jv5m040`)),1),a[54]||=y(`em`,null,`*`,-1)]),b(y(`input`,{"onUpdate:modelValue":a[19]||=e=>l($).min=e,type:`number`,class:`inp`},null,512),[[n,l($).min,void 0,{number:!0}]])]),y(`label`,Zt,[y(`span`,null,[f(u(i.$t(`daq.k1l9jv4p041`)),1),a[55]||=y(`em`,null,`*`,-1)]),b(y(`input`,{"onUpdate:modelValue":a[20]||=e=>l($).max=e,type:`number`,class:`inp`},null,512),[[n,l($).max,void 0,{number:!0}]])]),y(`label`,Qt,[y(`span`,null,u(i.$t(`daq.k3mxmcx042`)),1),b(y(`input`,{"onUpdate:modelValue":a[21]||=e=>l($).decimals=e,type:`number`,min:`0`,max:`4`,class:`inp`},null,512),[[n,l($).decimals,void 0,{number:!0}]])]),y(`label`,$t,[y(`span`,null,u(i.$t(`daq.k3xx56043`)),1),b(y(`select`,{"onUpdate:modelValue":a[22]||=e=>l($).icon=e,class:`inp`},[(s(!0),h(d,null,o(l(fe),e=>(s(),h(`option`,{key:e,value:e},u(Sa[e]),9,en))),128))],512),[[t,l($).icon]])]),y(`label`,tn,[y(`span`,null,u(i.$t(`daq.k1f4eknv044`)),1),b(y(`input`,{"onUpdate:modelValue":a[23]||=e=>l($).base=e,type:`number`,class:`inp`},null,512),[[n,l($).base,void 0,{number:!0}]]),y(`small`,nn,u(i.$t(`daq.kytd15s045`)),1)]),y(`label`,rn,[y(`span`,null,u(i.$t(`daq.k1f4ifpo046`)),1),b(y(`input`,{"onUpdate:modelValue":a[24]||=e=>l($).amp=e,type:`number`,class:`inp`},null,512),[[n,l($).amp,void 0,{number:!0}]]),y(`small`,an,u(i.$t(`daq.ksp2aji047`)),1)])]),Z.value?(s(),h(`p`,on,u(Z.value),1)):g(``,!0),y(`div`,sn,[y(`button`,{class:`aw-pill outline`,onClick:Ea},u(i.$t(`daq.k48p40048`)),1),y(`button`,{class:`pill-btn`,disabled:xa.value,onClick:ka},u(xa.value?i.$t(`daq.k1b38d59103`):X.value?i.$t(`daq.k1b39281116`):i.$t(`daq.k1b3dtga119`)),9,cn)]),y(`p`,ln,u(i.$t(`daq.k1w8s84s049`)),1),y(`table`,un,[y(`tbody`,null,[(s(!0),h(d,null,o(wa.value,e=>(s(),h(`tr`,{key:e.key},[y(`td`,null,[y(`b`,null,u(e.name),1),y(`small`,dn,u(e.code),1)]),y(`td`,fn,u(e.min)+`~`+u(e.max)+` `+u(e.unit)+` · `+u(e.decimals)+` `+u(i.$t(`daq.k48oi091`)),1),y(`td`,pn,[y(`button`,{class:`mini-btn`,onClick:t=>Oa(e)},u(i.$t(`daq.k3y694050`)),9,mn)])]))),128))])])])])):g(``,!0),y(`section`,hn,[y(`button`,{class:`opt-head`,onClick:qi},[a[56]||=y(`span`,{class:`i-tabler-flask`},null,-1),y(`b`,null,u(i.$t(`daq.k1optt001`)),1),y(`span`,gn,u(l(E).optimizations.length),1),y(`span`,{class:c([`opt-chevron`,{open:A.value}])},null,2)]),y(`div`,{class:c([`opt-body`,{open:A.value}])},[Ui.value?(s(),h(d,{key:0},[y(`div`,_n,[b(y(`select`,{"onUpdate:modelValue":a[26]||=e=>j.value=e,class:`inp-sel`,onChange:Ji},[y(`option`,vn,u(i.$t(`daq.k1optf001`)),1),(s(!0),h(d,null,o(l(E).lines,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,yn))),128))],544),[[t,j.value]]),b(y(`select`,{"onUpdate:modelValue":a[27]||=e=>M.value=e,class:`inp-sel`,onChange:P},[y(`option`,bn,u(i.$t(`daq.k1optf004`)),1),(s(!0),h(d,null,o(Gi.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,xn))),128))],544),[[t,M.value]]),y(`button`,{class:`mini-act`,onClick:P},u(i.$t(`daq.k1optf002`)),1)]),l(E).optimizations.length===0?(s(),h(`p`,Sn,u(i.$t(`daq.k1opte001`)),1)):g(``,!0),y(`ul`,Cn,[(s(!0),h(d,null,o(l(E).optimizations.slice(0,30),e=>(s(),h(`li`,{key:e.id,class:c([`opt-row`,e.status])},[y(`div`,wn,[y(`span`,{class:c([`opt-status`,e.status])},u(i.$t(Ki(e.status))),3),y(`b`,Tn,u(e.nodeName),1),y(`span`,En,u(e.params[0]?.from??`?`)+` → `+u(e.params[0]?.to),1),y(`span`,Dn,u(e.setAt.slice(5,16).replace(`T`,` `)),1),N.value[e.id]?g(``,!0):(s(),h(`button`,{key:0,class:`mini-act`,disabled:Wi.value===e.id,onClick:t=>Yi(e.id)},u(i.$t(`daq.k1opta001`)),9,On)),e.status===`open`?(s(),h(`button`,{key:1,class:`mini-act danger`,onClick:t=>Zi(e.id)},u(i.$t(`daq.k1opta002`)),9,kn)):g(``,!0)]),y(`div`,An,[e.judge?(s(),h(`span`,{key:0,class:c([`opt-judge`,e.judge.verdict])},u(e.judge.verdict)+`(`+u(e.judge.by)+`): `+u(e.judge.reason.slice(0,70)),3)):e.status===`open`?(s(),h(`span`,jn,u(i.$t(`daq.k1opto001`)),1)):g(``,!0),e.aggPending?(s(),h(`span`,Mn,u(i.$t(`daq.k1optw001`)),1)):e.windowAgg&&e.windowAgg.channels.length?(s(),h(`span`,Nn,[(s(!0),h(d,null,o(e.windowAgg.channels,e=>(s(),h(d,{key:e.daqNodeId},[f(u(e.ch)+` `+u(Qi(e.min))+`~`+u(Qi(e.max))+`(`+u(i.$t(`daq.k1optw002`))+u(e.breaches<0?`-`:e.breaches)+`) `,1)],64))),128))])):g(``,!0)]),N.value[e.id]?(s(),h(`div`,Pn,[(s(!0),h(d,null,o(N.value[e.id].channels,e=>(s(),h(`div`,{key:e.nodeId,class:`opt-ch`},[(s(),h(`svg`,Fn,[y(`polyline`,{points:Xi(e.points)},null,8,In)])),y(`span`,Ln,u(e.ch)+` `+u(Qi(e.points.at(-1)?.value??e.points.at(-1)?.avg))+u(e.unit),1)]))),128)),N.value[e.id].channels.length===0?(s(),h(`p`,Rn,u(i.$t(`daq.k1opte002`)),1)):g(``,!0)])):g(``,!0)],2))),128))])],64)):g(``,!0)],2)]),S(m,{spinning:!l(T).loaded&&!l(T).error},{default:v(()=>[y(`section`,zn,[y(`div`,Bn,[y(`div`,Vn,[y(`label`,Hn,[y(`span`,null,u(i.$t(`daq.k3wj9n051`)),1),b(y(`select`,{"onUpdate:modelValue":a[28]||=e=>l(k).lineId=e,class:`inp-sel`},[y(`option`,Un,u(i.$t(`daq.k1bkl9uj052`)),1),(s(!0),h(d,null,o(l(E).lines,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,Wn))),128)),y(`option`,Gn,u(i.$t(`daq.k3ootr6053`)),1)],512),[[t,l(k).lineId]])]),y(`label`,Kn,[y(`span`,null,u(i.$t(`daq.k1i8rtqt054`)),1),b(y(`select`,{"onUpdate:modelValue":a[29]||=e=>l(k).deviceId=e,class:`inp-sel`},[y(`option`,qn,u(i.$t(`daq.k1bkw4m2055`)),1),(s(!0),h(d,null,o($i.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name)+`(`+u(e.count)+`) `,9,Jn))),128)),y(`option`,Yn,u(i.$t(`daq.k3own4q056`)),1)],512),[[t,l(k).deviceId]])]),y(`label`,{class:`flt`,title:i.$t(`daq.khb8mru009`)},[y(`span`,null,u(i.$t(`daq.k1b2tkyv057`)),1),b(y(`select`,{"onUpdate:modelValue":a[30]||=e=>l(k).lineRun=e,class:`inp-sel`},[y(`option`,Zn,u(i.$t(`daq.k3x4t1058`)),1),y(`option`,Qn,u(i.$t(`daq.k1nxm3p7059`)),1),y(`option`,$n,u(i.$t(`daq.k1ulx34e060`)),1)],512),[[t,l(k).lineRun]])],8,Xn),y(`label`,er,[y(`span`,null,u(i.$t(`daq.k1iwdfef061`)),1),b(y(`select`,{"onUpdate:modelValue":a[31]||=e=>l(k).state=e,class:`inp-sel`},[y(`option`,tr,u(i.$t(`daq.k3x4t1058`)),1),y(`option`,nr,u(i.$t(`daq.k41k5c062`)),1),y(`option`,rr,u(i.$t(`daq.k49z8v063`)),1),y(`option`,ir,u(i.$t(`daq.k3xmid064`)),1),y(`option`,ar,u(i.$t(`daq.k44c2n065`)),1)],512),[[t,l(k).state]])]),y(`label`,or,[y(`span`,null,u(i.$t(`daq.k1flttpl010`)),1),b(y(`select`,{"onUpdate:modelValue":a[32]||=e=>l(k).template=e,class:`inp-sel`},[y(`option`,sr,u(i.$t(`daq.k1flttpl011`)),1),(s(!0),h(d,null,o(Ri.value,e=>(s(),h(`option`,{key:e.ref,value:e.ref},u(e.label)+`(`+u(e.count)+`) `,9,cr))),128))],512),[[t,l(k).template]])]),y(`label`,lr,[y(`span`,null,u(i.$t(`daq.k1fltdrv012`)),1),b(y(`select`,{"onUpdate:modelValue":a[33]||=e=>l(k).driver=e,class:`inp-sel`},[y(`option`,ur,u(i.$t(`daq.k1fltdrv013`)),1),(s(!0),h(d,null,o(zi.value,e=>(s(),h(`option`,{key:e.kind,value:e.kind},u(e.label)+`(`+u(e.count)+`) `,9,dr))),128))],512),[[t,l(k).driver]])]),y(`label`,{class:`flt`,title:i.$t(`daq.k1flttim014`)},[y(`span`,null,u(i.$t(`daq.k1flttim015`)),1),b(y(`select`,{"onUpdate:modelValue":a[34]||=e=>l(k).time=e,class:`inp-sel`},[y(`option`,pr,u(i.$t(`daq.k1flttim016`)),1),y(`option`,mr,u(i.$t(`daq.k1timlv017`)),1),y(`option`,hr,u(i.$t(`daq.k1timhr018`)),1),y(`option`,gr,u(i.$t(`daq.k1timdy019`)),1),y(`option`,_r,u(i.$t(`daq.k1timld020`)),1),y(`option`,vr,u(i.$t(`daq.k1timnv021`)),1)],512),[[t,l(k).time]])],8,fr),y(`label`,yr,[y(`span`,null,u(i.$t(`daq.k1fltsrc022`)),1),b(y(`input`,{"onUpdate:modelValue":a[35]||=e=>l(k).search=e,class:`inp-sel flt-search`,type:`search`,placeholder:i.$t(`daq.k1fltsph023`)},null,8,br),[[n,l(k).search]])]),Ii.value?(s(),h(`button`,{key:0,class:`mini-btn clear-btn`,onClick:Li},u(i.$t(`daq.k1fygck2066`)),1)):g(``,!0)]),y(`span`,xr,u(R.value.length)+` / `+u(l(T).nodes.length)+` `+u(i.$t(`daq.k45uio067`)),1)]),y(`div`,Sr,[y(`div`,{class:c([`ops-panel alarm-panel`,{live:l(T).alarms.length>0}])},[y(`div`,Cr,[a[57]||=y(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),y(`b`,null,u(i.$t(`daq.k1alarm141`)),1),y(`span`,{class:c([`mono cnt`,{hot:l(T).alarms.length>0}])},u(l(T).alarms.length),3)]),y(`div`,wr,[l(T).alarms.length===0?(s(),h(`p`,Tr,u(i.$t(`daq.k1evt001`)),1)):(s(!0),h(d,{key:1},o(l(T).alarms,e=>(s(),h(`div`,{key:e.id,class:`alarm-row`},[a[58]||=y(`span`,{class:`i-tabler-alert-triangle tri`},null,-1),y(`b`,null,u(e.nodeName),1),y(`span`,Er,u(e.metric),1),y(`span`,Dr,u(e.value)+` `+u(e.rule===`lt-min`?`<`:`>`)+` `+u(e.threshold),1),e.escalation>0?(s(),h(`small`,Or,`+`+u(e.escalation),1)):g(``,!0),y(`button`,{class:`mini-btn ack`,onClick:t=>Pi(e.id)},u(i.$t(`daq.k1ack142`)),9,kr)]))),128))])],2),y(`div`,Ar,[y(`div`,jr,[a[60]||=y(`span`,{class:`i-tabler-activity`},null,-1),y(`b`,null,u(i.$t(`daq.k1evt002`)),1),S(p,{class:`panel-link`,to:`/logs`},{default:v(()=>[f(u(i.$t(`daq.k1evt003`)),1),a[59]||=y(`span`,{class:`i-tabler-arrow-right`},null,-1)]),_:1})]),y(`div`,Mr,[l(Ai).recent.length===0?(s(),h(`p`,Nr,u(i.$t(`daq.k1evt004`)),1)):(s(!0),h(d,{key:1},o(l(Ai).recent,(e,t)=>(s(),h(`div`,{key:`${e.at}:${e.actor}:${e.action}:${t}`,class:`evt-row`},[y(`span`,Pr,u(Mi(e.at)),1),y(`span`,{class:c([`src-badge`,e.actorKind])},u(e.actorKind===`agent`?`Agent`:e.actorKind===`user`?i.$t(`logs.src.user`):i.$t(`logs.src.system`)),3),y(`span`,{class:c([`kind-chip`,e.kind])},u(ji(e.kind)),3),y(`span`,{class:`txt`,title:e.summary},u(e.summary),9,Fr)]))),128))])])]),y(`table`,Ir,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,u(i.$t(`daq.k45uio067`)),1),y(`th`,null,u(i.$t(`daq.k42w8s068`)),1),y(`th`,null,u(i.$t(`daq.k3mv305069`)),1),y(`th`,null,u(i.$t(`daq.k1trnd001`)),1),y(`th`,null,u(i.$t(`daq.k1l6g2ga070`)),1),y(`th`,null,u(i.$t(`daq.k3zi0nf071`)),1),y(`th`,null,u(i.$t(`daq.k4a0la072`)),1),y(`th`,null,u(i.$t(`daq.k3wj9n051`)),1),y(`th`,{title:i.$t(`daq.k1runtipc131`)},u(i.$t(`daq.k1b2tkyv057`)),9,Lr),y(`th`,{title:i.$t(`daq.k1prdrtip132`)},u(i.$t(`daq.k1prodrc128`)),9,Rr),y(`th`,null,u(i.$t(`daq.k1i8rtqt054`)),1),y(`th`,zr,u(i.$t(`daq.k40aa6073`)),1)])]),y(`tbody`,null,[(s(!0),h(d,null,o(sa.value,({n:e,c:t})=>(s(),h(`tr`,{key:e.id,class:c({"row-recipe-alarm":t.alarm})},[y(`td`,null,[y(`span`,Br,u(e.id.slice(0,8)),1),y(`b`,null,u(e.name),1),y(`small`,Vr,u(t.tpl),1)]),y(`td`,null,[y(`span`,{class:c([`st-pill`,[t.pill.key]]),title:t.pill.tip},u(t.pill.label),11,Hr)]),y(`td`,{class:c([`mono val`,{stale:!t.live,"val-alarm":e.state===`alarm`||t.alarm}]),title:t.live?void 0:t.pill.tip},[f(u(e.value==null?`--`:e.value.toFixed(e.decimals))+` `,1),y(`small`,null,u(e.unit),1)],10,Ur),y(`td`,Wr,[(s(),h(`svg`,{class:`trend`,viewBox:`0 0 120 26`,preserveAspectRatio:`none`,title:i.$t(`daq.k1trnd002`)},[D(e.hist,O(e).min)==null?g(``,!0):(s(),h(`line`,{key:0,class:`lim`,x1:`0`,y1:D(e.hist,O(e).min),x2:`120`,y2:D(e.hist,O(e).min)},null,8,Kr)),D(e.hist,O(e).max)==null?g(``,!0):(s(),h(`line`,{key:1,class:`lim max`,x1:`0`,y1:D(e.hist,O(e).max),x2:`120`,y2:D(e.hist,O(e).max)},null,8,qr)),y(`polyline`,{class:c([`trace`,{alarm:e.state===`alarm`||t.alarm}]),points:Ni(e.hist)},null,10,Jr)],8,Gr))]),y(`td`,Yr,u(ua(e.intervalMs)),1),y(`td`,Xr,u(da(e.publishIntervalMs)),1),y(`td`,null,[y(`span`,{class:c([`drv-tag`,{planned:ja(e.driver)}]),title:ja(e.driver)?i.$t(`daq.k1plndrv138`):``},u(e.driver),11,Zr)]),y(`td`,null,[y(`select`,{class:`line-sel`,value:e.lineId,title:i.$t(`daq.k3q23v3010`),onChange:t=>Ti(e.id,t)},[y(`option`,$r,u(i.$t(`daq.k3ootr6053`)),1),(s(!0),h(d,null,o(l(E).lines,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,ei))),128))],40,Qr)]),y(`td`,null,[e.lineId?(s(),h(`span`,{key:0,class:c([`run-pill`,{on:l(E).lineStateOf(e.lineId).active}]),title:i.$t(`daq.k1runtipc131`)},[a[61]||=y(`span`,{class:`rp-dot`},null,-1),f(` `+u(l(E).lineStateOf(e.lineId).active?i.$t(`daq.k3vp67i096`):i.$t(`daq.k3ozyqz117`)),1)],10,ti)):(s(),h(`span`,ni,u(i.$t(`daq.k3ootr6053`)),1))]),y(`td`,ri,[e.lineId&&l(E).lineStateOf(e.lineId).active?(s(),h(d,{key:0},[y(`b`,{title:i.$t(`daq.k1prdrtip132`)},u(l(E).lineStateOf(e.lineId).productName||`--`),9,ii),y(`small`,{class:`mono`,title:i.$t(`daq.k1prdrtip132`)},u(l(E).lineStateOf(e.lineId).recipeName||`--`),9,ai)],64)):(s(),h(`span`,oi,`--`))]),y(`td`,null,[y(`select`,{class:`line-sel`,value:e.deviceBindingId??``,title:i.$t(`daq.k2bindtip137`),onChange:t=>Ei(e.id,t)},[y(`option`,ci,u(i.$t(`daq.k3own4q056`)),1),(s(!0),h(d,null,o(la.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(l(ca).get(e.id)??e.name),9,li))),128))],40,si)]),y(`td`,ui,[y(`button`,{class:c([`node-toggle`,{off:!e.enabled}]),title:e.enabled?i.$t(`daq.k1nodestop146`):i.$t(`daq.k1nodestart147`),onClick:t=>Di(e)},[y(`span`,{class:c(e.enabled?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),f(` `+u(e.enabled?i.$t(`daq.k1nodestop146`):i.$t(`daq.k1nodestart147`)),1)],10,di),S(p,{class:`console-link`,to:`/daq/${e.id}`},{default:v(()=>[a[62]||=y(`span`,{class:`i-tabler-dashboard`},null,-1),f(` `+u(i.$t(`daq.k3o3jg2074`)),1)]),_:1},8,[`to`])])],2))),128)),l(T).loaded&&l(T).nodes.length===0?(s(),h(`tr`,fi,[y(`td`,pi,[y(`div`,mi,[y(`p`,hi,u(i.$t(`daq.kvhjyc3075`)),1)])])])):l(T).loaded&&R.value.length===0?(s(),h(`tr`,gi,[y(`td`,_i,[y(`div`,vi,[y(`p`,yi,u(i.$t(`daq.k1w20qew076`)),1)])])])):g(``,!0)])])])]),_:1},8,[`spinning`]),l(T).error?(s(),h(`p`,bi,[f(u(l(T).error)+`(`,1),S(p,{to:`/workshop`},{default:v(()=>[f(u(i.$t(`daq.k1bhhheq077`)),1)]),_:1}),a[63]||=f(`) `,-1)])):g(``,!0)])}}}),[[`__scopeId`,`data-v-6b2d097f`]]);export{T as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ft as e}from"./BSCpFtzG.js";import{t}from"./G0qIw7Gq2.js";import{t as n}from"./36oeS8_R2.js";var r=class extends Error{code;status;constructor(e,t,n){super(n),this.name=`ApiError`,this.code=e,this.status=t}};function i(e=!0){let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={};return t&&(n.authorization=`Bearer ${decodeURIComponent(t)}`),e&&(n[`content-type`]=`application/json`),n}var a=e=>new Promise(t=>setTimeout(t,e));function o(e){let t=(e?.method??`GET`).toUpperCase();return t===`GET`||t===`HEAD`}async function s(e,t,n){let a;try{a=await fetch(e+t,{...n,headers:{...i(!!n?.body),...n?.headers},signal:n?.signal??AbortSignal.timeout(n?.method&&n.method.toUpperCase()!==`GET`?3e4:15e3)})}catch(e){throw e instanceof Error&&(e.name===`TimeoutError`||e.name===`AbortError`)?new r(`TIMEOUT`,0,`请求超时,请检查网络或服务状态`):new r(`NETWORK`,0,`无法连接服务器,请检查网络或服务状态`)}let o=null;try{o=await a.json()}catch{}if(!a.ok)throw new r(o?.code??`HTTP_${a.status}`,a.status,o?.message||`请求失败(HTTP ${a.status})`);if(o?.code!==0)throw new r(o?.code??`REQUEST_ERROR`,a.status,o?.message||`请求失败`);return o.data}async function c(e){let{base:n,path:i=``,init:c,retries:l=0}=e,u=o(c),d=u?l+1:1,f;for(let e=0;e<d;e++)try{return await s(n,i,c)}catch(n){let i=n instanceof r?n:new r(`INTERNAL_ERROR`,0,t(n)),o=u&&(i.code===`NETWORK`||i.status>=500);if(f=i,!o||e===d-1)throw i;await a(400*(e+1))}throw f??new r(`INTERNAL_ERROR`,0,`请求失败`)}var l=[{key:`temp-sp`,name:`温度设定器`,code:`TEMP · SP`,ch:`烘箱温度设定`,unit:`℃`,min:150,max:200,decimals:1,icon:`thermo`,semantics:`烘箱/熔体温度设定:升高使热塑温度上升(成膜更均匀但能耗高、过热降解风险),降低则偏冷易厚度不均。调整后需等待热惯性(数十秒级)再评估效果。`},{key:`speed-sp`,name:`速度设定器`,code:`LINE · SP`,ch:`产线速度设定`,unit:`m/min`,min:280,max:360,decimals:0,icon:`encoder`,semantics:`产线速度设定:升速提高产能但缩短物料受热时间(温度补偿需联动),降速利于精细工艺。速度变化会同步影响张力与厚度分布。`},{key:`tension-sp`,name:`张力设定器`,code:`TENSION · SP`,ch:`膜张力设定`,unit:`kN`,min:18,max:26,decimals:1,icon:`tension`,semantics:`膜张力设定:张力过大易断膜/拉伸变形,过小则跑偏起皱。调整需平缓,并与速度联动观察。`},{key:`pressure-sp`,name:`压力设定器`,code:`PRESSURE · SP`,ch:`熔体压力设定`,unit:`MPa`,min:.6,max:1.2,decimals:2,icon:`pressure`,semantics:`熔体压力设定:反映挤出/泵送负荷,压力偏高提示阻力大或温度偏低,偏低可能是料位不足。调整需小幅步进。`}],u=[{kind:`mock`,label:`Mock 模拟 PLC`,status:`builtin`,configFields:[]},{kind:`modbus-tcp`,label:`Modbus TCP(PLC/网关 写保持寄存器)`,status:`real`,configFields:[{key:`host`,label:`设备地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.10`,hint:`PLC 或 Modbus 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`Modbus TCP 标准端口 502`},{key:`unitId`,label:`单元号(unitId)`,type:`number`,default:1,hint:`从站地址,常见 1`},{key:`register`,label:`写寄存器地址`,type:`number`,required:!0,placeholder:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`,hint:`如 int16 用 0~2000 表示 0.1 分辨率`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`opcua`,label:`OPC UA(PLC/MES 写节点值)`,status:`real`,configFields:[{key:`endpoint`,label:`端点(endpoint)`,type:`string`,required:!0,placeholder:`opc.tcp://192.168.1.10:4840`,hint:`OPC UA 服务器地址`},{key:`nodeId`,label:`节点 ID(NodeId)`,type:`string`,required:!0,placeholder:`ns=2;s=Channel1.Device1.SetTemp`,hint:`要写入的变量节点`},{key:`securityMode`,label:`安全策略`,type:`select`,default:`None`,options:[{value:`None`,label:`None(无加密,内网常用)`},{value:`Sign`,label:`Sign(签名)`},{value:`SignAndEncrypt`,label:`SignAndEncrypt(签名+加密)`}]},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`modbus-rtu`,label:`Modbus RTU over TCP(串口网关 写保持寄存器)`,status:`real`,configFields:[{key:`host`,label:`网关地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.50`,hint:`串口服务器/RTU 转 TCP 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`网关透传端口(常见 502 / 8899 / 26)`},{key:`unitId`,label:`从站地址(unitId)`,type:`number`,default:1,hint:`RS-485 总线上的从站地址`},{key:`register`,label:`写寄存器地址`,type:`number`,required:!0,placeholder:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`mqtt`,label:`MQTT(发布设定值到 Broker)`,status:`real`,configFields:[{key:`host`,label:`Broker 地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.20`,hint:`MQTT Broker 地址(与边缘网关约定同一 Broker)`},{key:`port`,label:`端口`,type:`number`,default:1883,hint:`MQTT TCP 端口 1883`},{key:`topic`,label:`下发主题(topic)`,type:`string`,required:!0,placeholder:`factory/line1/setpoint`,hint:`网关订阅的控制主题(勿与采集主题相同)`},{key:`jsonKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = 纯数字报文;填写 = {"键":值} JSON 报文`},{key:`qos`,label:`QoS`,type:`number`,default:1,hint:`0=至多一次 1=至少一次(推荐)`},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`http`,label:`HTTP/REST(POST 设定值)`,status:`real`,configFields:[{key:`url`,label:`写接口地址(URL)`,type:`string`,required:!0,placeholder:`http://192.168.1.30/api/setpoint`,hint:`接收设定值的 HTTP 接口(POST JSON)`},{key:`bodyKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = {"value": 设定值};填写 = {"键": 设定值}`},{key:`headersJSON`,label:`请求头(可选)`,type:`string`,placeholder:`{"Authorization":"Bearer xxx"}`,hint:`JSON 对象形式的 HTTP 头`}]}],d=[`#3aa0ff`,`#f4c542`,`#35e0a0`,`#41c8f4`,`#b58cff`,`#ff8a5c`],f=(e,t)=>c({base:`/api/workshop/dcw`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0});function p(){let r=e([]),i=e({running:!0,nodesTotal:0,nodesOnline:0,writesTotal:0,writesFailed:0}),a=e(l.map(e=>({...e}))),o=e([]),s=e([]),c=e([]),u=e([]),d=e([]),p=e({}),m=e([]);function h(e){let t=r.findIndex(t=>t.id===e.id);t>=0?r[t]=Object.assign(r[t],e):r.push(e)}function g(e){if(e.node){if(e.op===`removed`){let t=r.findIndex(t=>t.id===e.node.id);t>=0&&r.splice(t,1);return}h(e.node)}}let _=0,v=null;function y(){_++,_===1&&(v=n().subscribe(b));let e=!1;return()=>{e||(e=!0,--_===0&&(v?.(),v=null))}}function b(e){if(e.type===`dcw.written`){let t=e.payload,n=r.find(e=>e.id===t.nodeId);n&&(n.value=t.value,n.state=t.ok?`ok`:`error`,n.lastWriteAt=t.at,t.ok&&(n.lastAckAt=t.at)),c.unshift({id:`${t.nodeId}-${t.at}`,nodeId:t.nodeId,nodeName:n?.name??t.nodeId,param:``,eng:t.value,raw:t.raw,ok:t.ok,message:t.message,recipeRunId:t.recipeRunId,at:t.at}),c.length>60&&c.splice(60)}else if(e.type===`dcw.read`){let t=e.payload,n=r.find(e=>e.id===t.nodeId);n&&(t.ok&&(n.readValue=t.value),n.lastReadAt=t.at,n.lastReadError=t.ok?null:t.message)}else if(e.type===`dcw.node.changed`)g(e.payload);else if(e.type===`dcw.controller`)Object.assign(i,e.payload);else if(e.type===`dcw.optimization.changed`){let t=e.payload.record,n=m.findIndex(e=>e.id===t.id);n>=0?m[n]=t:m.unshift(t),m.length>200&&(m.length=200)}}async function x(){try{let e=await f(``);r.splice(0,r.length,...e.nodes),Object.assign(i,e.controller),e.templates?.length&&a.splice(0,a.length,...e.templates.map(e=>({...e}))),o.splice(0,o.length,...e.recipes??[]),s.splice(0,s.length,...e.runs??[]),c.splice(0,c.length,...e.history??[]),u.splice(0,u.length,...e.products??[]),d.splice(0,d.length,...e.lines??[]);for(let e of Object.keys(p))Reflect.deleteProperty(p,e);for(let t of e.lineStates??[])p[t.lineId]=t;S.loaded=!0,S.error=``}catch(e){S.error=t(e)}}let S=e({nodes:r,controller:i,templates:a,recipes:o,runs:s,history:c,products:u,lines:d,lineStates:p,optimizations:m,loaded:!1,error:``,ensureWsFeed:y,load:x,loadOptimizations:async e=>{let t=new URLSearchParams;e?.lineId&&t.set(`lineId`,e.lineId),e?.recipeId&&t.set(`recipeId`,e.recipeId),e?.nodeId&&t.set(`nodeId`,e.nodeId),e?.status&&t.set(`status`,e.status),t.set(`limit`,String(e?.limit??100));let n=await f(`/optimizations?${t.toString()}`);m.splice(0,m.length,...n.records)},fetchLedger:async e=>(await f(`/${e}/param-ledger`)).ledger,optimizationSeries:async(e,t)=>f(`/optimizations/${e}/series${t?`?windowMs=${t}`:``}`),judgeOptimization:async(e,t,n)=>{await f(`/optimizations/${e}/judge`,{method:`POST`,body:JSON.stringify({verdict:t,reason:n})})},rollbackOptimization:async e=>{await f(`/optimizations/${e}/rollback`,{method:`POST`,body:JSON.stringify({})})},rollbackNode:async(e,t)=>{await f(`/journal/node/${e}/rollback`,{method:`POST`,body:JSON.stringify({to:t})})},markGood:async(e,t)=>{await f(`/recipes/${e}/mark-good`,{method:`POST`,body:JSON.stringify({runId:t})})},rollbackRecipeGood:async e=>{await f(`/recipes/${e}/rollback-good`,{method:`POST`,body:JSON.stringify({})})},createFromTemplate:async(e,t)=>{let n=await f(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return h(n.node),n.node},patchNode:async(e,t)=>{await f(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})},removeNode:async e=>{await f(`/${e}`,{method:`DELETE`});let t=r.findIndex(t=>t.id===e);t>=0&&r.splice(t,1)},bindNode:async(e,t)=>{h((await f(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)},write:async(e,t)=>f(`/${e}/write`,{method:`POST`,body:JSON.stringify({value:t})}).then(e=>e.outcome),readNode:async e=>f(`/${e}/read`,{method:`POST`,body:JSON.stringify({})}).then(e=>e.read),testDriver:async(e,t)=>f(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})}).then(e=>e.test),testNode:async e=>f(`/${e}/test`,{method:`POST`}).then(e=>e.test),startStop:async e=>{let t=await f(`/controller`,{method:`POST`,body:JSON.stringify({action:e})});Object.assign(i,t.controller)},createTemplate:async e=>{let t=await f(`/templates`,{method:`POST`,body:JSON.stringify(e)});return a.push(t.template),t.template},createRecipe:async e=>{let t=await f(`/recipes`,{method:`POST`,body:JSON.stringify(e)});return o.push(t.recipe),t.recipe},updateRecipe:async(e,t)=>{let n=await f(`/recipes/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=o.findIndex(t=>t.id===e);return r>=0&&(o[r]=n.recipe),n.recipe},removeRecipe:async e=>{await f(`/recipes/${e}`,{method:`DELETE`});let t=o.findIndex(t=>t.id===e);t>=0&&o.splice(t,1)},applyRecipe:async e=>{let t=await f(`/recipes/${e}/apply`,{method:`POST`});return s.push(t.run),t.run},closeRun:async e=>{let t=await f(`/runs/${e}/close`,{method:`POST`}),n=s.findIndex(t=>t.id===e);return n>=0&&(s[n]=t.run),t.run},runData:e=>f(`/runs/${e}/data`),nodeById:e=>r.find(t=>t.id===e),createProduct:async e=>{let t=await f(`/products`,{method:`POST`,body:JSON.stringify(e)});return u.push(t.product),t.product},updateProduct:async(e,t)=>f(`/products/${e}`,{method:`PATCH`,body:JSON.stringify(t)}).then(e=>(C(),e.product)),removeProduct:async e=>{await f(`/products/${e}`,{method:`DELETE`});let t=u.findIndex(t=>t.id===e);t>=0&&u.splice(t,1)},createLine:async e=>{let t=await f(`/lines`,{method:`POST`,body:JSON.stringify(e)});return d.push(t.line),t.line},updateLine:async(e,t)=>{let n=await f(`/lines/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=d.findIndex(t=>t.id===e);r>=0&&(d[r]=n.line)},removeLine:async(e,t=!1)=>{await f(`/lines/${e}${t?`?purge=1`:``}`,{method:`DELETE`});let n=d.findIndex(t=>t.id===e);n>=0&&d.splice(n,1),Reflect.deleteProperty(p,e),await x()},startLine:async(e,t)=>{let n=await f(`/lines/${e}/start`,{method:`POST`,body:JSON.stringify({recipeId:t})});p[e]=n.line},stopLine:async e=>{let t=await f(`/lines/${e}/stop`,{method:`POST`});p[e]=t.line},lineStateOf:e=>p[e]??{lineId:e,active:!1,runId:null,recipeId:null,recipeName:null,productId:null,productName:null,startedAt:null,taggedSamples:0},queryLine:e=>{let t=new URLSearchParams;return e.lineId&&t.set(`lineId`,e.lineId),e.productId&&t.set(`productId`,e.productId),e.recipeId&&t.set(`recipeId`,e.recipeId),e.paramKey&&t.set(`paramKey`,e.paramKey),e.nodeId&&t.set(`nodeId`,e.nodeId),e.fromMs!=null&&t.set(`from`,String(e.fromMs)),e.toMs!=null&&t.set(`to`,String(e.toMs)),e.bucketMs!=null&&t.set(`bucketMs`,String(e.bucketMs)),e.limit!=null&&t.set(`limit`,String(e.limit)),f(`/line/query?${t.toString()}`)}});async function C(){try{let e=await f(``);u.splice(0,u.length,...e.products??[]),o.splice(0,o.length,...e.recipes??[])}catch{}}return S}var m=`__dcwStream`;function h(){let e=globalThis;return e[m]||(e[m]=p()),e[m]}export{c as i,u as n,d as r,h as t};
|
|
1
|
+
import{ft as e}from"./BSCpFtzG.js";import{t}from"./G0qIw7Gq2.js";import{t as n}from"./36oeS8_R2.js";var r=class extends Error{code;status;constructor(e,t,n){super(n),this.name=`ApiError`,this.code=e,this.status=t}};function i(e=!0){let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={};return t&&(n.authorization=`Bearer ${decodeURIComponent(t)}`),e&&(n[`content-type`]=`application/json`),n}var a=e=>new Promise(t=>setTimeout(t,e));function o(e){let t=(e?.method??`GET`).toUpperCase();return t===`GET`||t===`HEAD`}async function s(e,t,n){let a;try{a=await fetch(e+t,{...n,headers:{...i(!!n?.body),...n?.headers},signal:n?.signal??AbortSignal.timeout(n?.method&&n.method.toUpperCase()!==`GET`?3e4:15e3)})}catch(e){throw e instanceof Error&&(e.name===`TimeoutError`||e.name===`AbortError`)?new r(`TIMEOUT`,0,`请求超时,请检查网络或服务状态`):new r(`NETWORK`,0,`无法连接服务器,请检查网络或服务状态`)}let o=null;try{o=await a.json()}catch{}if(!a.ok)throw new r(o?.code??`HTTP_${a.status}`,a.status,o?.message||`请求失败(HTTP ${a.status})`);if(o?.code!==0)throw new r(o?.code??`REQUEST_ERROR`,a.status,o?.message||`请求失败`);return o.data}async function c(e){let{base:n,path:i=``,init:c,retries:l=0}=e,u=o(c),d=u?l+1:1,f;for(let e=0;e<d;e++)try{return await s(n,i,c)}catch(n){let i=n instanceof r?n:new r(`INTERNAL_ERROR`,0,t(n)),o=u&&(i.code===`NETWORK`||i.status>=500);if(f=i,!o||e===d-1)throw i;await a(400*(e+1))}throw f??new r(`INTERNAL_ERROR`,0,`请求失败`)}var l=[{key:`temp-sp`,name:`温度设定器`,code:`TEMP · SP`,ch:`烘箱温度设定`,unit:`℃`,min:150,max:200,decimals:1,icon:`thermo`,semantics:`烘箱/熔体温度设定:升高使热塑温度上升(成膜更均匀但能耗高、过热降解风险),降低则偏冷易厚度不均。调整后需等待热惯性(数十秒级)再评估效果。`},{key:`speed-sp`,name:`速度设定器`,code:`LINE · SP`,ch:`产线速度设定`,unit:`m/min`,min:280,max:360,decimals:0,icon:`encoder`,semantics:`产线速度设定:升速提高产能但缩短物料受热时间(温度补偿需联动),降速利于精细工艺。速度变化会同步影响张力与厚度分布。`},{key:`tension-sp`,name:`张力设定器`,code:`TENSION · SP`,ch:`膜张力设定`,unit:`kN`,min:18,max:26,decimals:1,icon:`tension`,semantics:`膜张力设定:张力过大易断膜/拉伸变形,过小则跑偏起皱。调整需平缓,并与速度联动观察。`},{key:`pressure-sp`,name:`压力设定器`,code:`PRESSURE · SP`,ch:`熔体压力设定`,unit:`MPa`,min:.6,max:1.2,decimals:2,icon:`pressure`,semantics:`熔体压力设定:反映挤出/泵送负荷,压力偏高提示阻力大或温度偏低,偏低可能是料位不足。调整需小幅步进。`}],u=[{kind:`mock`,label:`Mock 模拟 PLC`,status:`builtin`,configFields:[]},{kind:`modbus-tcp`,label:`Modbus TCP(PLC/网关 写保持寄存器)`,status:`real`,configFields:[{key:`host`,label:`设备地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.10`,hint:`PLC 或 Modbus 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`Modbus TCP 标准端口 502`},{key:`unitId`,label:`单元号(unitId)`,type:`number`,default:1,hint:`从站地址,常见 1`},{key:`register`,label:`写寄存器地址`,type:`number`,required:!0,placeholder:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`,hint:`如 int16 用 0~2000 表示 0.1 分辨率`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`opcua`,label:`OPC UA(PLC/MES 写节点值)`,status:`real`,configFields:[{key:`endpoint`,label:`端点(endpoint)`,type:`string`,required:!0,placeholder:`opc.tcp://192.168.1.10:4840`,hint:`OPC UA 服务器地址`},{key:`nodeId`,label:`节点 ID(NodeId)`,type:`string`,required:!0,placeholder:`ns=2;s=Channel1.Device1.SetTemp`,hint:`要写入的变量节点`},{key:`securityMode`,label:`安全策略`,type:`select`,default:`None`,options:[{value:`None`,label:`None(无加密,内网常用)`},{value:`Sign`,label:`Sign(签名)`},{value:`SignAndEncrypt`,label:`SignAndEncrypt(签名+加密)`}]},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`modbus-rtu`,label:`Modbus RTU over TCP(串口网关 写保持寄存器)`,status:`real`,configFields:[{key:`host`,label:`网关地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.50`,hint:`串口服务器/RTU 转 TCP 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`网关透传端口(常见 502 / 8899 / 26)`},{key:`unitId`,label:`从站地址(unitId)`,type:`number`,default:1,hint:`RS-485 总线上的从站地址`},{key:`register`,label:`写寄存器地址`,type:`number`,required:!0,placeholder:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`mqtt`,label:`MQTT(发布设定值到 Broker)`,status:`real`,configFields:[{key:`host`,label:`Broker 地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.20`,hint:`MQTT Broker 地址(与边缘网关约定同一 Broker)`},{key:`port`,label:`端口`,type:`number`,default:1883,hint:`MQTT TCP 端口 1883`},{key:`topic`,label:`下发主题(topic)`,type:`string`,required:!0,placeholder:`factory/line1/setpoint`,hint:`网关订阅的控制主题(勿与采集主题相同)`},{key:`jsonKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = 纯数字报文;填写 = {"键":值} JSON 报文`},{key:`qos`,label:`QoS`,type:`number`,default:1,hint:`0=至多一次 1=至少一次(推荐)`},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`http`,label:`HTTP/REST(POST 设定值)`,status:`real`,configFields:[{key:`url`,label:`写接口地址(URL)`,type:`string`,required:!0,placeholder:`http://192.168.1.30/api/setpoint`,hint:`接收设定值的 HTTP 接口(POST JSON)`},{key:`bodyKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = {"value": 设定值};填写 = {"键": 设定值}`},{key:`headersJSON`,label:`请求头(可选)`,type:`string`,placeholder:`{"Authorization":"Bearer xxx"}`,hint:`JSON 对象形式的 HTTP 头`}]}],d=[`#3aa0ff`,`#f4c542`,`#35e0a0`,`#41c8f4`,`#b58cff`,`#ff8a5c`],f=(e,t)=>c({base:`/api/workshop/dcw`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0});function p(){let r=e([]),i=e({running:!0,nodesTotal:0,nodesOnline:0,writesTotal:0,writesFailed:0}),a=e(l.map(e=>({...e}))),o=e([]),s=e([]),c=e([]),u=e([]),d=e([]),p=e({}),m=e([]);function h(e){let t=r.findIndex(t=>t.id===e.id);t>=0?r[t]=Object.assign(r[t],e):r.push(e)}function g(e){if(e.node){if(e.op===`removed`){let t=r.findIndex(t=>t.id===e.node.id);t>=0&&r.splice(t,1);return}h(e.node)}}let _=0,v=null;function y(){_++,_===1&&(v=n().subscribe(b));let e=!1;return()=>{e||(e=!0,--_===0&&(v?.(),v=null))}}function b(e){if(e.type===`dcw.written`){let t=e.payload,n=r.find(e=>e.id===t.nodeId);n&&(n.value=t.value,n.state=t.ok?`ok`:`error`,n.lastWriteAt=t.at,t.ok&&(n.lastAckAt=t.at)),c.unshift({id:`${t.nodeId}-${t.at}`,nodeId:t.nodeId,nodeName:n?.name??t.nodeId,param:``,eng:t.value,raw:t.raw,ok:t.ok,message:t.message,recipeRunId:t.recipeRunId,at:t.at}),c.length>60&&c.splice(60)}else if(e.type===`dcw.read`){let t=e.payload,n=r.find(e=>e.id===t.nodeId);n&&(t.ok&&(n.readValue=t.value),n.lastReadAt=t.at,n.lastReadError=t.ok?null:t.message)}else if(e.type===`dcw.node.changed`)g(e.payload);else if(e.type===`dcw.controller`)Object.assign(i,e.payload);else if(e.type===`dcw.optimization.changed`){let t=e.payload.record,n=m.findIndex(e=>e.id===t.id);n>=0?m[n]=t:m.unshift(t),m.length>200&&(m.length=200)}}async function x(){try{let e=await f(``);r.splice(0,r.length,...e.nodes),Object.assign(i,e.controller),e.templates?.length&&a.splice(0,a.length,...e.templates.map(e=>({...e}))),o.splice(0,o.length,...e.recipes??[]),s.splice(0,s.length,...e.runs??[]),c.splice(0,c.length,...e.history??[]),u.splice(0,u.length,...e.products??[]),d.splice(0,d.length,...e.lines??[]);for(let e of Object.keys(p))Reflect.deleteProperty(p,e);for(let t of e.lineStates??[])p[t.lineId]=t;S.loaded=!0,S.error=``}catch(e){S.error=t(e)}}let S=e({nodes:r,controller:i,templates:a,recipes:o,runs:s,history:c,products:u,lines:d,lineStates:p,optimizations:m,loaded:!1,error:``,ensureWsFeed:y,load:x,loadOptimizations:async e=>{let t=new URLSearchParams;e?.lineId&&t.set(`lineId`,e.lineId),e?.recipeId&&t.set(`recipeId`,e.recipeId),e?.nodeId&&t.set(`nodeId`,e.nodeId),e?.status&&t.set(`status`,e.status),t.set(`limit`,String(e?.limit??100));let n=await f(`/optimizations?${t.toString()}`);m.splice(0,m.length,...n.records)},fetchLedger:async e=>(await f(`/${e}/param-ledger`)).ledger,optimizationSeries:async(e,t)=>f(`/optimizations/${e}/series${t?`?windowMs=${t}`:``}`),judgeOptimization:async(e,t,n)=>{await f(`/optimizations/${e}/judge`,{method:`POST`,body:JSON.stringify({verdict:t,reason:n})})},rollbackOptimization:async e=>{await f(`/optimizations/${e}/rollback`,{method:`POST`,body:JSON.stringify({})})},rollbackNode:async(e,t)=>{await f(`/journal/node/${e}/rollback`,{method:`POST`,body:JSON.stringify({to:t})})},markGood:async(e,t)=>{await f(`/recipes/${e}/mark-good`,{method:`POST`,body:JSON.stringify({runId:t})})},rollbackRecipeGood:async e=>{await f(`/recipes/${e}/rollback-good`,{method:`POST`,body:JSON.stringify({})})},createFromTemplate:async(e,t)=>{let n=await f(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return h(n.node),n.node},patchNode:async(e,t)=>{await f(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})},removeNode:async e=>{await f(`/${e}`,{method:`DELETE`});let t=r.findIndex(t=>t.id===e);t>=0&&r.splice(t,1)},bindNode:async(e,t)=>{h((await f(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)},write:async(e,t)=>f(`/${e}/write`,{method:`POST`,body:JSON.stringify({value:t})}).then(e=>e.outcome),readNode:async e=>f(`/${e}/read`,{method:`POST`,body:JSON.stringify({})}).then(e=>e.read),testDriver:async(e,t)=>f(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})}).then(e=>e.test),testNode:async e=>f(`/${e}/test`,{method:`POST`}).then(e=>e.test),startStop:async e=>{let t=await f(`/controller`,{method:`POST`,body:JSON.stringify({action:e})});Object.assign(i,t.controller)},createTemplate:async e=>{let t=await f(`/templates`,{method:`POST`,body:JSON.stringify(e)});return a.push(t.template),t.template},createRecipe:async e=>{let t=await f(`/recipes`,{method:`POST`,body:JSON.stringify(e)});return o.push(t.recipe),t.recipe},updateRecipe:async(e,t)=>{let n=await f(`/recipes/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=o.findIndex(t=>t.id===e);return r>=0&&(o[r]=n.recipe),n.recipe},removeRecipe:async e=>{await f(`/recipes/${e}`,{method:`DELETE`});let t=o.findIndex(t=>t.id===e);t>=0&&o.splice(t,1)},applyRecipe:async e=>{let t=await f(`/recipes/${e}/apply`,{method:`POST`});return s.push(t.run),t.run},recipeVersions:async e=>(await f(`/recipes/${e}/versions`)).versions??[],revertRecipe:async(e,t)=>{let n=await f(`/recipes/${e}/revert`,{method:`POST`,body:JSON.stringify(t)}),r=o.findIndex(t=>t.id===e);return r>=0&&(o[r]=n.recipe),n.recipe},closeRun:async e=>{let t=await f(`/runs/${e}/close`,{method:`POST`}),n=s.findIndex(t=>t.id===e);return n>=0&&(s[n]=t.run),t.run},runData:e=>f(`/runs/${e}/data`),nodeById:e=>r.find(t=>t.id===e),createProduct:async e=>{let t=await f(`/products`,{method:`POST`,body:JSON.stringify(e)});return u.push(t.product),t.product},updateProduct:async(e,t)=>f(`/products/${e}`,{method:`PATCH`,body:JSON.stringify(t)}).then(e=>(C(),e.product)),removeProduct:async e=>{await f(`/products/${e}`,{method:`DELETE`});let t=u.findIndex(t=>t.id===e);t>=0&&u.splice(t,1)},createLine:async e=>{let t=await f(`/lines`,{method:`POST`,body:JSON.stringify(e)});return d.push(t.line),t.line},updateLine:async(e,t)=>{let n=await f(`/lines/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=d.findIndex(t=>t.id===e);r>=0&&(d[r]=n.line)},removeLine:async(e,t=!1)=>{await f(`/lines/${e}${t?`?purge=1`:``}`,{method:`DELETE`});let n=d.findIndex(t=>t.id===e);n>=0&&d.splice(n,1),Reflect.deleteProperty(p,e),await x()},startLine:async(e,t)=>{let n=await f(`/lines/${e}/start`,{method:`POST`,body:JSON.stringify({recipeId:t})});p[e]=n.line},stopLine:async e=>{let t=await f(`/lines/${e}/stop`,{method:`POST`});p[e]=t.line},lineStateOf:e=>p[e]??{lineId:e,active:!1,runId:null,recipeId:null,recipeName:null,productId:null,productName:null,startedAt:null,taggedSamples:0},queryLine:e=>{let t=new URLSearchParams;return e.lineId&&t.set(`lineId`,e.lineId),e.productId&&t.set(`productId`,e.productId),e.recipeId&&t.set(`recipeId`,e.recipeId),e.paramKey&&t.set(`paramKey`,e.paramKey),e.nodeId&&t.set(`nodeId`,e.nodeId),e.fromMs!=null&&t.set(`from`,String(e.fromMs)),e.toMs!=null&&t.set(`to`,String(e.toMs)),e.bucketMs!=null&&t.set(`bucketMs`,String(e.bucketMs)),e.limit!=null&&t.set(`limit`,String(e.limit)),f(`/line/query?${t.toString()}`)}});async function C(){try{let e=await f(``);u.splice(0,u.length,...e.products??[]),o.splice(0,o.length,...e.recipes??[])}catch{}}return S}var m=`__dcwStream`;function h(){let e=globalThis;return e[m]||(e[m]=p()),e[m]}export{c as i,u as n,d as r,h as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ft as e}from"./BSCpFtzG.js";import{t}from"./G0qIw7Gq2.js";import{t as n}from"./36oeS8_R2.js";import{i as r}from"./C6m-kenn.js";var i=[`thermo`,`pressure`,`tension`,`encoder`,`camera`,`gateway`],a=[{key:`temp-tc`,name:`温度传感器`,code:`TEMP · TC`,ch:`熔体/箱体温度`,unit:`℃`,base:168,amp:3.2,min:150,max:185,decimals:1,icon:`thermo`,telemetryKey:`temperature`,semantics:`熔体/箱体温度:热工艺核心被控量,热惯性大(变化平缓)。判读:与设定值偏差 ±2℃ 内为稳态;持续单边漂移 = 加热/散热失衡;骤升骤降多为扰动或传感器异常。`},{key:`pressure-tx`,name:`压力变送器`,code:`PRESSURE · TX`,ch:`熔体压力`,unit:`MPa`,base:.82,amp:.05,min:.6,max:1.2,decimals:2,icon:`pressure`,telemetryKey:`pressure`,semantics:`熔体压力:挤出负荷的「血压计」。判读:与温度负相关(温度升→熔体黏度降→压力降);压力突升常见于滤网堵塞或出料受阻。`},{key:`tension-cell`,name:`张力传感器`,code:`TENSION · CELL`,ch:`膜张力`,unit:`kN`,base:21.4,amp:.9,min:18,max:26,decimals:1,icon:`tension`,semantics:`膜张力:成膜质量直接指标。判读:张力波动与速度/温度设定强耦合,评估张力前先确认速度稳定。`},{key:`line-encoder`,name:`速度编码器`,code:`LINE · ENCODER`,ch:`产线速度`,unit:`m/min`,base:318,amp:7,min:280,max:360,decimals:0,icon:`encoder`,semantics:`产线速度:产能直接观测量。判读:实际速度对设定值的跟随滞后反映传动惯量;速度波动会传导至张力与厚度。`},{key:`vision-cam`,name:`视觉检测相机`,code:`VISION · CAM`,ch:`表面缺陷率`,unit:`‰`,base:.42,amp:.09,min:.1,max:.9,decimals:2,icon:`camera`},{key:`power-meter`,name:`电参采集器`,code:`POWER · METER`,ch:`运行功率`,unit:`kW`,base:45.2,amp:2.6,min:38,max:55,decimals:1,icon:`gateway`},{key:`thickness-scan`,name:`测厚扫描仪`,code:`THK · SCAN`,ch:`厚度轮廓`,unit:`mm`,base:.52,amp:.018,min:.4,max:.65,decimals:3,icon:`tension`,signalKind:`vector`,vector:{points:64,min:.4,max:.65},sink:{processors:[{name:`resample`,args:{n:64}},{name:`derive-metric`,args:{name:`avg`,op:`avg`}},{name:`derive-metric`,args:{name:`max`,op:`max`}}]},metrics:[{key:`max`,label:`最大厚度`,unit:`mm`,alarmHigh:.62},{key:`avg`,label:`平均厚度`,unit:`mm`,warnLow:.47,warnHigh:.57}],semantics:`测厚仪横向扫描轮廓:多点厚度分布。判读:平均值漂移=工艺整体偏移;单点尖峰=局部缺陷(夹杂/气泡);max 越硬限=超差,须联动分切剔除。`},{key:`ccd-image`,name:`CCD 视觉相机`,code:`CCD · IMG`,ch:`表面图像`,unit:`灰度`,base:128,amp:0,min:0,max:255,decimals:0,icon:`camera`,signalKind:`image`,sink:{processors:[{name:`thumbnail`,args:{width:256}},{name:`quality-gate`}]},metrics:[{key:`brightness`,label:`平均亮度`,unit:`gray`,alarmLow:30,alarmHigh:230}],semantics:`CCD 图像帧:像素数据入对象存储,Timescale 仅存元数据与派生指标。判读:brightness 过低=曝光不足/镜头遮挡,过高=过曝;缺陷识别算法经插件处理器扩展。`}],o=e=>e.startsWith(`daq-`)?e.slice(4):e,s=[{kind:`mock`,label:`Mock 模拟源`,status:`builtin`,configFields:[]},{kind:`modbus-tcp`,label:`Modbus TCP(PLC/网关)`,status:`real`,configFields:[{key:`host`,label:`设备地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.10`,hint:`PLC 或 Modbus 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`Modbus TCP 标准端口 502`},{key:`unitId`,label:`单元号(unitId)`,type:`number`,default:1,hint:`从站地址,常见 1`},{key:`register`,label:`寄存器地址`,type:`number`,required:!0,placeholder:`40001`,hint:`4xxxx=保持寄存器(地址-40001 为协议偏移);3xxxx=输入寄存器`},{key:`registerType`,label:`寄存器区`,type:`select`,default:`holding`,options:[{value:`holding`,label:`保持寄存器(4x)`},{value:`input`,label:`输入寄存器(3x)`}]},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`scale`,label:`缩放系数`,type:`number`,default:1,hint:`原始值 × scale = 工程量(如 0.1)`},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]}]},{kind:`opcua`,label:`OPC UA(PLC/MES)`,status:`real`,configFields:[{key:`endpoint`,label:`端点(endpoint)`,type:`string`,required:!0,placeholder:`opc.tcp://192.168.1.10:4840`,hint:`OPC UA 服务器地址`},{key:`nodeId`,label:`节点 ID(NodeId)`,type:`string`,required:!0,placeholder:`ns=2;s=Channel1.Device1.Tag1`,hint:`要采集的变量节点`},{key:`securityMode`,label:`安全策略`,type:`select`,default:`None`,options:[{value:`None`,label:`None(无加密,内网常用)`},{value:`Sign`,label:`Sign(签名)`},{value:`SignAndEncrypt`,label:`SignAndEncrypt(签名+加密)`}]},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`},{key:`certificateFile`,label:`客户端证书路径(可选)`,type:`string`,placeholder:`certs/client_cert.pem`,hint:`Sign/SignAndEncrypt 时的 PEM 证书;留空自动生成自签`},{key:`privateKeyFile`,label:`私钥路径(可选)`,type:`string`,placeholder:`certs/client_key.pem`,hint:`与证书配对的 PEM 私钥`}]},{kind:`modbus-rtu`,label:`Modbus RTU over TCP(串口网关)`,status:`real`,configFields:[{key:`host`,label:`网关地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.50`,hint:`串口服务器/RTU 转 TCP 网关 IP(设备本身走 RS-485)`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`网关透传端口(常见 502 / 8899 / 26)`},{key:`unitId`,label:`从站地址(unitId)`,type:`number`,default:1,hint:`RS-485 总线上的从站地址`},{key:`register`,label:`寄存器地址`,type:`number`,required:!0,placeholder:`40001`,hint:`4xxxx=保持寄存器(地址-40001 为协议偏移);3xxxx=输入寄存器`},{key:`registerType`,label:`寄存器区`,type:`select`,default:`holding`,options:[{value:`holding`,label:`保持寄存器(4x)`},{value:`input`,label:`输入寄存器(3x)`}]},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`scale`,label:`缩放系数`,type:`number`,default:1,hint:`原始值 × scale = 工程量(如 0.1)`},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]}]},{kind:`mqtt`,label:`MQTT(网关/边缘采集)`,status:`real`,configFields:[{key:`host`,label:`Broker 地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.20 或 mqtt.example.com`,hint:`MQTT Broker(EMQX/Mosquitto/Aliyun IoT)地址`},{key:`port`,label:`端口`,type:`number`,default:1883,hint:`MQTT TCP 标准端口 1883(TLS 8883)`},{key:`topic`,label:`主题(topic)`,type:`string`,required:!0,placeholder:`factory/line1/temp`,hint:`设备上报数值的主题;支持 +/# 通配`},{key:`jsonPath`,label:`取值路径(可选)`,type:`string`,placeholder:`data.temperature`,hint:`payload 为 JSON 时按路径取数值,如 data.temp;纯数字报文留空`},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`http`,label:`HTTP/REST(轮询)`,status:`real`,configFields:[{key:`url`,label:`接口地址(URL)`,type:`string`,required:!0,placeholder:`http://192.168.1.30/api/sensor`,hint:`返回数值或 JSON 的 HTTP 接口`},{key:`jsonPath`,label:`取值路径(可选)`,type:`string`,placeholder:`data.value`,hint:`响应为 JSON 时按路径取数值,如 data.value;纯文本留空`},{key:`headersJSON`,label:`请求头(可选)`,type:`string`,placeholder:`{"Authorization":"Bearer xxx"}`,hint:`JSON 对象形式的 HTTP 头`}]},{kind:`s7`,label:`S7(西门子 PLC)`,status:`planned`,configFields:[]}],c=60,l=30,u=(e,t)=>r({base:`/api/workshop/daq`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0}),d=()=>{let r=e([]),i=e([]),o=e({running:!0,defaultIntervalMs:1e3,defaultPublishIntervalMs:0,nodesTotal:0,nodesOnline:0}),s=e({tsdb:`…`,queue:`…`,drivers:[],driverAvailable:{},infra:void 0,produced:0,consumed:0,dropped:0,samplesStored:0}),d=e(a.map(e=>({...e}))),f=e({});function p(e){let t=r.findIndex(t=>t.id===e.id);t>=0?r[t]=Object.assign(r[t],e):r.push({...e,hist:[]})}let m=[],h=null;function g(){h=null;let e=m;if(m=[],!e.length)return;let t=new Map;for(let n of e){t.set(n.nodeId,n);let e=r.find(e=>e.id===n.nodeId);e&&(e.hist.push(n.value),e.hist.length>c&&e.hist.splice(0,e.hist.length-c))}for(let e of t.values()){let t=r.find(t=>t.id===e.nodeId);t&&(t.value=e.value,t.state=e.state,t.lastAt=e.at)}}function _(e){m.push(e),h||=setTimeout(g,500)}function v(e){if(e.node){if(e.op===`removed`){let t=r.findIndex(t=>t.id===e.node.id);t>=0&&r.splice(t,1);return}p(e.node)}}function y(e){d.splice(0,d.length,...e.map(e=>({...e})))}function b(e){if(!e.template)return;let t=d.findIndex(t=>t.key===e.template.key);if(e.op===`removed`){t>=0&&d.splice(t,1);return}t>=0?d[t]={...e.template}:d.push({...e.template})}function x(e){let t=Date.parse(e.at),n=f[e.nodeId]??(f[e.nodeId]=[]);n.some(e=>e.at===t)||(n.unshift({at:t,kind:e.kind,points:e.preview,metrics:e.metrics??{},thumbUrl:e.thumbUrl,contentUrl:e.thumbUrl?e.thumbUrl.replace(`thumb=1`,`thumb=0`):void 0}),n.length>l&&n.splice(l));let i=r.find(t=>t.id===e.nodeId);i&&(i.value=e.metrics?.avg??i.value,e.state&&(i.state=e.state),i.lastAt=e.at)}let S=0,C=null;function w(){S++,S===1&&(C=n().subscribe(T));let e=!1;return()=>{e||(e=!0,--S===0&&(C?.(),C=null))}}function T(e){if(e.type===`daq.reading`)_(e.payload);else if(e.type===`daq.frame`)x(e.payload);else if(e.type===`daq.node.changed`)v(e.payload);else if(e.type===`daq.controller`)Object.assign(o,e.payload);else if(e.type===`daq.template.changed`)b(e.payload);else if(e.type===`daq.alarm`){let t=e.payload;i.some(e=>e.id===t.id)||i.unshift(t)}else if(e.type===`daq.alarm.changed`){let t=e.payload;if(t.ackedAt){let e=i.findIndex(e=>e.id===t.id);e>=0&&i.splice(e,1)}}}async function E(){try{let e=await u(``),t=new Map(r.map(e=>[e.id,e])),n=[];for(let r of e.nodes){let e=t.get(r.id);e?(Object.assign(e,r),n.push(e),t.delete(r.id)):n.push({...r,hist:[]})}r.splice(0,r.length,...n),Object.assign(o,e.controller),Object.assign(s,e.meta??{}),s.driverAvailable=e.driverAvailable??{},s.infra=e.infra,e.templates?.length&&y(e.templates),U.loaded=!0,U.error=``}catch(e){U.error=t(e)}}async function D(e,t){let n=await u(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return p(n.node),n.node}async function O(e,t){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})}async function k(e,t,n){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify({posX:t,posZ:n})})}async function A(e){await u(`/${e}`,{method:`DELETE`});let t=r.findIndex(t=>t.id===e);t>=0&&r.splice(t,1)}async function j(e,t){p((await u(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)}async function M(e,t){return(await u(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})})).test}async function N(e){return(await u(`/${e}/test`,{method:`POST`})).test}async function P(){try{let e=await u(`/alarms?scope=open&limit=50`);i.splice(0,i.length,...e.alarms??[])}catch{}}async function F(e){await u(`/alarms/${e}/ack`,{method:`POST`}),await P()}async function I(){let e=await u(`/infra/reconnect`,{method:`POST`});return s.infra=e.infra,await E(),e.infra}async function L(e,t,n){let r=await u(`/controller`,{method:`POST`,body:JSON.stringify({action:e,defaultIntervalMs:t,defaultPublishIntervalMs:n})});Object.assign(o,r.controller)}async function R(e,t={}){let n=new URLSearchParams;return t.fromMs!=null&&n.set(`from`,String(t.fromMs)),t.toMs!=null&&n.set(`to`,String(t.toMs)),t.bucketMs!=null&&n.set(`bucketMs`,String(t.bucketMs)),t.limit!=null&&n.set(`limit`,String(t.limit)),(await u(`/${e}/samples?${n.toString()}`)).points??[]}async function z(e,t={}){let n=new URLSearchParams;t.fromMs!=null&&n.set(`from`,String(t.fromMs)),t.toMs!=null&&n.set(`to`,String(t.toMs)),t.kind&&n.set(`kind`,t.kind),t.limit!=null&&n.set(`limit`,String(t.limit));let r=await u(`/${e}/frames?${n.toString()}`);return f[e]=r.frames??[],f[e]}async function B(e){let t=await u(`/templates`,{method:`POST`,body:JSON.stringify(e)});return b({op:`added`,template:t.template}),t.template}async function V(e,t){let n=await u(`/templates/${e}`,{method:`PATCH`,body:JSON.stringify(t)});return b({op:`updated`,template:n.template}),n.template}async function H(e){await u(`/templates/${e}`,{method:`DELETE`}),b({op:`removed`,template:{key:e}})}let U=e({nodes:r,controller:o,meta:s,templates:d,loaded:!1,error:``,ensureWsFeed:w,load:E,createFromTemplate:D,createTemplate:B,updateTemplate:V,removeTemplate:H,testDriver:M,testNode:N,reconnectInfra:I,patchNode:O,saveTransform:k,removeNode:A,bindNode:j,controllerAction:L,alarms:i,fetchAlarms:P,ackAlarm:F,nodeById:e=>r.find(t=>t.id===e),samplesOf:R,fetchFrames:z,frames:f,framesOf:e=>f[e]??[],templateOf:e=>d.find(t=>t.key===e||`daq-${t.key}`===e),ofDevice:e=>e?r.filter(t=>t.deviceBindingId===e):[]});return U},f=`__daqStream`;function p(){let e=globalThis;return e[f]||(e[f]=d()),e[f]}export{o as a,i,s as n,a as r,p as t};
|
|
1
|
+
import{ft as e}from"./BSCpFtzG.js";import{t}from"./G0qIw7Gq2.js";import{t as n}from"./36oeS8_R2.js";import{i as r}from"./DAR70Lf5.js";var i=[`thermo`,`pressure`,`tension`,`encoder`,`camera`,`gateway`],a=[{key:`temp-tc`,name:`温度传感器`,code:`TEMP · TC`,ch:`熔体/箱体温度`,unit:`℃`,base:168,amp:3.2,min:150,max:185,decimals:1,icon:`thermo`,telemetryKey:`temperature`,semantics:`熔体/箱体温度:热工艺核心被控量,热惯性大(变化平缓)。判读:与设定值偏差 ±2℃ 内为稳态;持续单边漂移 = 加热/散热失衡;骤升骤降多为扰动或传感器异常。`},{key:`pressure-tx`,name:`压力变送器`,code:`PRESSURE · TX`,ch:`熔体压力`,unit:`MPa`,base:.82,amp:.05,min:.6,max:1.2,decimals:2,icon:`pressure`,telemetryKey:`pressure`,semantics:`熔体压力:挤出负荷的「血压计」。判读:与温度负相关(温度升→熔体黏度降→压力降);压力突升常见于滤网堵塞或出料受阻。`},{key:`tension-cell`,name:`张力传感器`,code:`TENSION · CELL`,ch:`膜张力`,unit:`kN`,base:21.4,amp:.9,min:18,max:26,decimals:1,icon:`tension`,semantics:`膜张力:成膜质量直接指标。判读:张力波动与速度/温度设定强耦合,评估张力前先确认速度稳定。`},{key:`line-encoder`,name:`速度编码器`,code:`LINE · ENCODER`,ch:`产线速度`,unit:`m/min`,base:318,amp:7,min:280,max:360,decimals:0,icon:`encoder`,semantics:`产线速度:产能直接观测量。判读:实际速度对设定值的跟随滞后反映传动惯量;速度波动会传导至张力与厚度。`},{key:`vision-cam`,name:`视觉检测相机`,code:`VISION · CAM`,ch:`表面缺陷率`,unit:`‰`,base:.42,amp:.09,min:.1,max:.9,decimals:2,icon:`camera`},{key:`power-meter`,name:`电参采集器`,code:`POWER · METER`,ch:`运行功率`,unit:`kW`,base:45.2,amp:2.6,min:38,max:55,decimals:1,icon:`gateway`},{key:`thickness-scan`,name:`测厚扫描仪`,code:`THK · SCAN`,ch:`厚度轮廓`,unit:`mm`,base:.52,amp:.018,min:.4,max:.65,decimals:3,icon:`tension`,signalKind:`vector`,vector:{points:64,min:.4,max:.65},sink:{processors:[{name:`resample`,args:{n:64}},{name:`derive-metric`,args:{name:`avg`,op:`avg`}},{name:`derive-metric`,args:{name:`max`,op:`max`}}]},metrics:[{key:`max`,label:`最大厚度`,unit:`mm`,alarmHigh:.62},{key:`avg`,label:`平均厚度`,unit:`mm`,warnLow:.47,warnHigh:.57}],semantics:`测厚仪横向扫描轮廓:多点厚度分布。判读:平均值漂移=工艺整体偏移;单点尖峰=局部缺陷(夹杂/气泡);max 越硬限=超差,须联动分切剔除。`},{key:`ccd-image`,name:`CCD 视觉相机`,code:`CCD · IMG`,ch:`表面图像`,unit:`灰度`,base:128,amp:0,min:0,max:255,decimals:0,icon:`camera`,signalKind:`image`,sink:{processors:[{name:`thumbnail`,args:{width:256}},{name:`quality-gate`}]},metrics:[{key:`brightness`,label:`平均亮度`,unit:`gray`,alarmLow:30,alarmHigh:230}],semantics:`CCD 图像帧:像素数据入对象存储,Timescale 仅存元数据与派生指标。判读:brightness 过低=曝光不足/镜头遮挡,过高=过曝;缺陷识别算法经插件处理器扩展。`}],o=e=>e.startsWith(`daq-`)?e.slice(4):e,s=[{kind:`mock`,label:`Mock 模拟源`,status:`builtin`,configFields:[]},{kind:`modbus-tcp`,label:`Modbus TCP(PLC/网关)`,status:`real`,configFields:[{key:`host`,label:`设备地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.10`,hint:`PLC 或 Modbus 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`Modbus TCP 标准端口 502`},{key:`unitId`,label:`单元号(unitId)`,type:`number`,default:1,hint:`从站地址,常见 1`},{key:`register`,label:`寄存器地址`,type:`number`,required:!0,placeholder:`40001`,hint:`4xxxx=保持寄存器(地址-40001 为协议偏移);3xxxx=输入寄存器`},{key:`registerType`,label:`寄存器区`,type:`select`,default:`holding`,options:[{value:`holding`,label:`保持寄存器(4x)`},{value:`input`,label:`输入寄存器(3x)`}]},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`scale`,label:`缩放系数`,type:`number`,default:1,hint:`原始值 × scale = 工程量(如 0.1)`},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]}]},{kind:`opcua`,label:`OPC UA(PLC/MES)`,status:`real`,configFields:[{key:`endpoint`,label:`端点(endpoint)`,type:`string`,required:!0,placeholder:`opc.tcp://192.168.1.10:4840`,hint:`OPC UA 服务器地址`},{key:`nodeId`,label:`节点 ID(NodeId)`,type:`string`,required:!0,placeholder:`ns=2;s=Channel1.Device1.Tag1`,hint:`要采集的变量节点`},{key:`securityMode`,label:`安全策略`,type:`select`,default:`None`,options:[{value:`None`,label:`None(无加密,内网常用)`},{value:`Sign`,label:`Sign(签名)`},{value:`SignAndEncrypt`,label:`SignAndEncrypt(签名+加密)`}]},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`},{key:`certificateFile`,label:`客户端证书路径(可选)`,type:`string`,placeholder:`certs/client_cert.pem`,hint:`Sign/SignAndEncrypt 时的 PEM 证书;留空自动生成自签`},{key:`privateKeyFile`,label:`私钥路径(可选)`,type:`string`,placeholder:`certs/client_key.pem`,hint:`与证书配对的 PEM 私钥`}]},{kind:`modbus-rtu`,label:`Modbus RTU over TCP(串口网关)`,status:`real`,configFields:[{key:`host`,label:`网关地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.50`,hint:`串口服务器/RTU 转 TCP 网关 IP(设备本身走 RS-485)`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`网关透传端口(常见 502 / 8899 / 26)`},{key:`unitId`,label:`从站地址(unitId)`,type:`number`,default:1,hint:`RS-485 总线上的从站地址`},{key:`register`,label:`寄存器地址`,type:`number`,required:!0,placeholder:`40001`,hint:`4xxxx=保持寄存器(地址-40001 为协议偏移);3xxxx=输入寄存器`},{key:`registerType`,label:`寄存器区`,type:`select`,default:`holding`,options:[{value:`holding`,label:`保持寄存器(4x)`},{value:`input`,label:`输入寄存器(3x)`}]},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`scale`,label:`缩放系数`,type:`number`,default:1,hint:`原始值 × scale = 工程量(如 0.1)`},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]}]},{kind:`mqtt`,label:`MQTT(网关/边缘采集)`,status:`real`,configFields:[{key:`host`,label:`Broker 地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.20 或 mqtt.example.com`,hint:`MQTT Broker(EMQX/Mosquitto/Aliyun IoT)地址`},{key:`port`,label:`端口`,type:`number`,default:1883,hint:`MQTT TCP 标准端口 1883(TLS 8883)`},{key:`topic`,label:`主题(topic)`,type:`string`,required:!0,placeholder:`factory/line1/temp`,hint:`设备上报数值的主题;支持 +/# 通配`},{key:`jsonPath`,label:`取值路径(可选)`,type:`string`,placeholder:`data.temperature`,hint:`payload 为 JSON 时按路径取数值,如 data.temp;纯数字报文留空`},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`http`,label:`HTTP/REST(轮询)`,status:`real`,configFields:[{key:`url`,label:`接口地址(URL)`,type:`string`,required:!0,placeholder:`http://192.168.1.30/api/sensor`,hint:`返回数值或 JSON 的 HTTP 接口`},{key:`jsonPath`,label:`取值路径(可选)`,type:`string`,placeholder:`data.value`,hint:`响应为 JSON 时按路径取数值,如 data.value;纯文本留空`},{key:`headersJSON`,label:`请求头(可选)`,type:`string`,placeholder:`{"Authorization":"Bearer xxx"}`,hint:`JSON 对象形式的 HTTP 头`}]},{kind:`s7`,label:`S7(西门子 PLC)`,status:`planned`,configFields:[]}],c=60,l=30,u=(e,t)=>r({base:`/api/workshop/daq`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0}),d=()=>{let r=e([]),i=e([]),o=e({running:!0,defaultIntervalMs:1e3,defaultPublishIntervalMs:0,nodesTotal:0,nodesOnline:0}),s=e({tsdb:`…`,queue:`…`,drivers:[],driverAvailable:{},infra:void 0,produced:0,consumed:0,dropped:0,samplesStored:0}),d=e(a.map(e=>({...e}))),f=e({});function p(e){let t=r.findIndex(t=>t.id===e.id);t>=0?r[t]=Object.assign(r[t],e):r.push({...e,hist:[]})}let m=[],h=null;function g(){h=null;let e=m;if(m=[],!e.length)return;let t=new Map;for(let n of e){t.set(n.nodeId,n);let e=r.find(e=>e.id===n.nodeId);e&&(e.hist.push(n.value),e.hist.length>c&&e.hist.splice(0,e.hist.length-c))}for(let e of t.values()){let t=r.find(t=>t.id===e.nodeId);t&&(t.value=e.value,t.state=e.state,t.lastAt=e.at)}}function _(e){m.push(e),h||=setTimeout(g,500)}function v(e){if(e.node){if(e.op===`removed`){let t=r.findIndex(t=>t.id===e.node.id);t>=0&&r.splice(t,1);return}p(e.node)}}function y(e){d.splice(0,d.length,...e.map(e=>({...e})))}function b(e){if(!e.template)return;let t=d.findIndex(t=>t.key===e.template.key);if(e.op===`removed`){t>=0&&d.splice(t,1);return}t>=0?d[t]={...e.template}:d.push({...e.template})}function x(e){let t=Date.parse(e.at),n=f[e.nodeId]??(f[e.nodeId]=[]);n.some(e=>e.at===t)||(n.unshift({at:t,kind:e.kind,points:e.preview,metrics:e.metrics??{},thumbUrl:e.thumbUrl,contentUrl:e.thumbUrl?e.thumbUrl.replace(`thumb=1`,`thumb=0`):void 0}),n.length>l&&n.splice(l));let i=r.find(t=>t.id===e.nodeId);i&&(i.value=e.metrics?.avg??i.value,e.state&&(i.state=e.state),i.lastAt=e.at)}let S=0,C=null;function w(){S++,S===1&&(C=n().subscribe(T));let e=!1;return()=>{e||(e=!0,--S===0&&(C?.(),C=null))}}function T(e){if(e.type===`daq.reading`)_(e.payload);else if(e.type===`daq.frame`)x(e.payload);else if(e.type===`daq.node.changed`)v(e.payload);else if(e.type===`daq.controller`)Object.assign(o,e.payload);else if(e.type===`daq.template.changed`)b(e.payload);else if(e.type===`daq.alarm`){let t=e.payload;i.some(e=>e.id===t.id)||i.unshift(t)}else if(e.type===`daq.alarm.changed`){let t=e.payload;if(t.ackedAt){let e=i.findIndex(e=>e.id===t.id);e>=0&&i.splice(e,1)}}}async function E(){try{let e=await u(``),t=new Map(r.map(e=>[e.id,e])),n=[];for(let r of e.nodes){let e=t.get(r.id);e?(Object.assign(e,r),n.push(e),t.delete(r.id)):n.push({...r,hist:[]})}r.splice(0,r.length,...n),Object.assign(o,e.controller),Object.assign(s,e.meta??{}),s.driverAvailable=e.driverAvailable??{},s.infra=e.infra,e.templates?.length&&y(e.templates),U.loaded=!0,U.error=``}catch(e){U.error=t(e)}}async function D(e,t){let n=await u(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return p(n.node),n.node}async function O(e,t){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})}async function k(e,t,n){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify({posX:t,posZ:n})})}async function A(e){await u(`/${e}`,{method:`DELETE`});let t=r.findIndex(t=>t.id===e);t>=0&&r.splice(t,1)}async function j(e,t){p((await u(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)}async function M(e,t){return(await u(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})})).test}async function N(e){return(await u(`/${e}/test`,{method:`POST`})).test}async function P(){try{let e=await u(`/alarms?scope=open&limit=50`);i.splice(0,i.length,...e.alarms??[])}catch{}}async function F(e){await u(`/alarms/${e}/ack`,{method:`POST`}),await P()}async function I(){let e=await u(`/infra/reconnect`,{method:`POST`});return s.infra=e.infra,await E(),e.infra}async function L(e,t,n){let r=await u(`/controller`,{method:`POST`,body:JSON.stringify({action:e,defaultIntervalMs:t,defaultPublishIntervalMs:n})});Object.assign(o,r.controller)}async function R(e,t={}){let n=new URLSearchParams;return t.fromMs!=null&&n.set(`from`,String(t.fromMs)),t.toMs!=null&&n.set(`to`,String(t.toMs)),t.bucketMs!=null&&n.set(`bucketMs`,String(t.bucketMs)),t.limit!=null&&n.set(`limit`,String(t.limit)),(await u(`/${e}/samples?${n.toString()}`)).points??[]}async function z(e,t={}){let n=new URLSearchParams;t.fromMs!=null&&n.set(`from`,String(t.fromMs)),t.toMs!=null&&n.set(`to`,String(t.toMs)),t.kind&&n.set(`kind`,t.kind),t.limit!=null&&n.set(`limit`,String(t.limit));let r=await u(`/${e}/frames?${n.toString()}`);return f[e]=r.frames??[],f[e]}async function B(e){let t=await u(`/templates`,{method:`POST`,body:JSON.stringify(e)});return b({op:`added`,template:t.template}),t.template}async function V(e,t){let n=await u(`/templates/${e}`,{method:`PATCH`,body:JSON.stringify(t)});return b({op:`updated`,template:n.template}),n.template}async function H(e){await u(`/templates/${e}`,{method:`DELETE`}),b({op:`removed`,template:{key:e}})}let U=e({nodes:r,controller:o,meta:s,templates:d,loaded:!1,error:``,ensureWsFeed:w,load:E,createFromTemplate:D,createTemplate:B,updateTemplate:V,removeTemplate:H,testDriver:M,testNode:N,reconnectInfra:I,patchNode:O,saveTransform:k,removeNode:A,bindNode:j,controllerAction:L,alarms:i,fetchAlarms:P,ackAlarm:F,nodeById:e=>r.find(t=>t.id===e),samplesOf:R,fetchFrames:z,frames:f,framesOf:e=>f[e]??[],templateOf:e=>d.find(t=>t.key===e||`daq-${t.key}`===e),ofDevice:e=>e?r.filter(t=>t.deviceBindingId===e):[]});return U},f=`__daqStream`;function p(){let e=globalThis;return e[f]||(e[f]=d()),e[f]}export{o as a,i,s as n,a as r,p as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,F as t,H as n,St as r,Wt as i,b as a,et as o,f as s,g as c,m as l,mt as u,p as d,t as f,z as p}from"./BSCpFtzG.js";import{d as m}from"./-6OnbLFb.js";import{t as h}from"./BcrN7QEl2.js";import{t as g}from"./C4OAdbVK2.js";import{n as _,t as v}from"./arUY5dyq2.js";import{t as y}from"./CNs_Ozdc.js";import{t as b}from"./
|
|
1
|
+
import{C as e,F as t,H as n,St as r,Wt as i,b as a,et as o,f as s,g as c,m as l,mt as u,p as d,t as f,z as p}from"./BSCpFtzG.js";import{d as m}from"./-6OnbLFb.js";import{t as h}from"./BcrN7QEl2.js";import{t as g}from"./C4OAdbVK2.js";import{n as _,t as v}from"./arUY5dyq2.js";import{t as y}from"./CNs_Ozdc.js";import{t as b}from"./Ba7YofCb.js";var x={class:`town-page`},S={key:0,"data-hud":`town-empty`,class:`pane-empty`},C={class:`pe-title`},w={class:`pe-sub`},T={key:2,"data-hud":`town-loading`,class:`pane-loading`},E=f(e({__name:`town`,setup(e){y({layout:`town`,title:`Digital Twin`});let f=h(),E=_(),D=g(),{subscribe:O,unsubscribe:k}=v(),A=u(!1);p(()=>{if(!f.isLoggedIn){m(`/workshop`);return}A.value=!0,D.load()});let j=s(()=>{let e=[];for(let t of D.workspaces)for(let n of t.channelIds??[])e.includes(n)||e.push(n);return e});o(()=>j.value.join(`,`),()=>{for(let e of j.value)O(e)},{immediate:!0}),t(()=>{for(let e of j.value)k(e)});let M=s(()=>{let e=j.value[0];if(e&&E.channels[e])return e;for(let e of D.workspaces)for(let t of e.channelIds??[])if(E.channels[t])return t;return j.value[0]??void 0}),N=s(()=>j.value.length>0);return(e,t)=>{let o=b;return n(),c(`div`,x,[r(A)&&!r(N)?(n(),c(`div`,S,[t[0]||=d(`span`,{class:`pe-icon i-tabler-map-2`},null,-1),d(`div`,C,i(e.$t(`town.k1wm8wtr001`)),1),d(`div`,w,[a(i(e.$t(`town.k47e4s002`))+` `,1),d(`b`,null,`Agent `+i(e.$t(`town.k3n4mae005`)),1),a(` `+i(e.$t(`town.k17rerba003`)),1)])])):r(M)?(n(),l(o,{key:1,"channel-id":r(M),"all-channels":!0},null,8,[`channel-id`])):(n(),c(`div`,T,i(e.$t(`town.k1uc5mup004`)),1))])}}}),[[`__scopeId`,`data-v-ded306d3`]]);export{E as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{H as e,U as t,W as n,q as r}from"./rqZ-1SoP.js";import{B as i,C as a,G as o,H as s,Ht as c,St as l,Ut as ee,Wt as u,a as d,b as f,f as p,ft as m,g as h,h as g,mt as _,nt as te,p as v,rt as y,t as b,x as ne}from"./BSCpFtzG.js";import{a as re}from"./vJ4FPb-_.js";import{t as ie}from"./D8CqF0yy.js";import{n as ae}from"./BeIfu4N3.js";import{t as oe}from"./C9f8QMp12.js";import{t as x}from"./G0qIw7Gq2.js";import{n as se,t as ce}from"./DAR70Lf5.js";import{t as le}from"./DBXhDLgl.js";import{t as ue}from"./BWC4HQHQ.js";var de={key:0,class:`page`},fe={class:`banner bad`},pe={key:1,class:`page`},me={class:`aw-page-head`},he={class:`aw-kicker`},ge={class:`sub`},_e={class:`badges mono`},ve={class:`badge`},ye={class:`badge`},be={class:`badge`},xe={class:`aw-tile ctrl-card`},Se={class:`ctrl-left`},Ce=[`title`],we={class:`ctrl-right`},Te={class:`ctrl-metrics mono`},Ee=[`title`],De=[`title`],Oe=[`title`],ke={key:1,class:`aw-tile adopt-card`},Ae={class:`adopt-title`},je={class:`adopt-list`},Me=[`onClick`],Ne=[`onClick`],Pe={class:`aw-tile line-card`},Fe={class:`line-status`},Ie={class:`line-info`},Le={key:0,class:`mono dim`},Re={key:1,class:`dim`},ze={class:`line-ctl`},Be={class:`ctl-sel`},Ve={value:``},He=[`value`],Ue={class:`ctl-sel`},We=[`disabled`],Ge={value:``},Ke=[`value`,`disabled`],qe=[`disabled`,`title`],Je=[`disabled`],Ye={key:0,class:`banner bad`,style:{"margin-top":`10px`}},Xe={key:1,class:`banner good`,style:{"margin-top":`10px`}},Ze={class:`modal`},Qe={class:`m-title`},$e={class:`dim mono`},et={class:`dim tpl-hint`},tt={class:`tpl-chips`},nt=[`title`],rt={class:`mono`},it={class:`sec-label`},at={class:`f-grid tpl-form`},ot={class:`f`},st=[`placeholder`],ct={class:`f`},lt=[`placeholder`],ut={class:`f`},dt={class:`f`},ft={class:`f`},pt=[`placeholder`],mt={class:`f`},ht=[`placeholder`],gt={class:`f`},_t={class:`f`},vt=[`value`],yt={class:`f`},bt=[`placeholder`],xt={key:0,class:`banner good`,style:{"margin-top":`10px`}},St={key:1,class:`m-err`},Ct={class:`m-actions`},wt=[`disabled`],Tt={class:`modal`},Et={class:`m-title`},Dt={class:`seg-row`},Ot={class:`f-grid`},kt={class:`f`},At=[`value`],jt={class:`f`},Mt=[`placeholder`],Nt={class:`f`},Pt=[`placeholder`],Ft={class:`f`},It=[`placeholder`],Lt={class:`f-grid cal-form`},Rt={class:`f`},zt={value:`none`},Bt={class:`f`},Vt={style:{display:`flex`,gap:`6px`}},Ht=[`disabled`],Ut=[`disabled`],Wt={class:`f-grid`},Gt={class:`f`},Kt=[`value`],qt={key:0,class:`f-grid driver-form`},Jt={key:0,style:{color:`var(--tone-danger-dot)`,"font-style":`normal`}},Yt=[`onUpdate:modelValue`],Xt=[`value`],Zt=[`onUpdate:modelValue`,`type`,`placeholder`],Qt={key:2,class:`hint`},$t={class:`test-row`},en=[`disabled`],tn={class:`f`},nn=[`placeholder`],rn={key:1,class:`m-err`},an={class:`m-actions`},on=[`disabled`],sn={class:`aw-tile table-card`},cn={class:`nodes-table`},ln={class:`right`},un={class:`mono dim`},dn={class:`mono ch`},fn=[`disabled`,`title`,`onClick`],pn={key:0,class:`st-pill paused`},mn={class:`mono val`},hn={key:0,class:`dim`},gn={class:`mono val`},_n=[`title`],vn={key:0,class:`dim`},yn=[`disabled`,`title`,`onClick`],bn={class:`write-row`},xn=[`onUpdate:modelValue`,`placeholder`,`min`,`max`,`step`,`disabled`,`title`],Sn=[`disabled`,`title`,`onClick`],Cn={class:`mono dim`},wn={class:`mono`},Tn=[`title`],En={class:`right`},Dn=[`onClick`],On={key:0},kn={colspan:`9`},An={class:`pane-empty`,style:{"min-height":`120px`}},jn={class:`pe-sub`},Mn={class:`aw-tile recipe-card`},Nn={class:`recipe-hd`},Pn={class:`panel-tag mono`},Fn={class:`recipe-sub`},In={key:0,class:`product-row`},Ln=[`title`,`onClick`],Rn=[`title`,`onClick`],zn={key:1,class:`dim`,style:{margin:`6px 0 12px`,"font-size":`12px`}},Bn={class:`recipe-grid`},Vn={class:`recipe-name`},Hn=[`title`],Un={class:`dim`},Wn={class:`mono dim`},Gn={key:0,class:`dim desc`},Kn={class:`recipe-params mono`},qn=[`title`],Jn={class:`recipe-actions`},Yn=[`onClick`],Xn=[`onClick`],Zn=[`onClick`],Qn={key:0,class:`mono`},$n=[`onClick`],er={key:0,class:`pane-empty`,style:{"grid-column":`1 / -1`}},tr={key:2,class:`banner good`},nr=[`disabled`],rr={key:3,class:`runs`},ir={class:`sec-label`},ar={class:`nodes-table`},or={class:`right`},sr={class:`mono`},cr={class:`mono dim`},lr={class:`right`},ur=[`disabled`,`onClick`],dr=[`onClick`],fr={class:`modal`},pr={class:`m-title`},mr={class:`sec-label`},hr={class:`nodes-table`},gr={class:`mono dim`},_r={class:`mono`},vr={class:`mono`},yr={class:`mono dim`},br={class:`mono dim`},xr={key:0},Sr={colspan:`6`,class:`dim`,style:{"text-align":`center`,padding:`12px`}},Cr={class:`sec-label`},wr={class:`nodes-table`},Tr={class:`mono`},Er={class:`mono dim`},Dr={class:`mono dim`},Or={key:0},kr={colspan:`6`,class:`dim`,style:{"text-align":`center`,padding:`12px`}},Ar={class:`m-actions`},jr={class:`modal`},Mr={class:`m-title`},Nr={class:`f-grid`},Pr={class:`f`},Fr=[`value`],Ir={class:`f`},Lr=[`placeholder`],Rr={class:`f`},zr=[`placeholder`],Br={class:`sec-label`},Vr={class:`f`},Hr=[`onUpdate:modelValue`],Ur=[`value`],Wr={class:`f`},Gr=[`onUpdate:modelValue`],Kr={class:`f`},qr=[`onUpdate:modelValue`,`placeholder`],Jr={class:`f`},Yr=[`onUpdate:modelValue`,`placeholder`],Xr=[`onClick`],Zr={class:`sec-label`},Qr={class:`f`},$r=[`onUpdate:modelValue`],ei=[`value`],ti={class:`f`},ni=[`onUpdate:modelValue`],ri={class:`f`},ii=[`onUpdate:modelValue`],ai=[`onClick`],oi=[`disabled`,`title`],si={key:0,class:`m-err`},ci={class:`m-actions`},li=[`disabled`],ui={class:`modal`,style:{"max-width":`760px`}},di={class:`modal-head`},fi={key:0,class:`dim`,style:{"margin-left":`8px`,"font-size":`12px`}},pi={key:0,class:`banner good`,style:{margin:`6px 0`}},mi={key:1,class:`dim`},hi={key:2,class:`pane-empty`},gi={class:`ver-head`},_i={class:`mono ver-v`},vi={class:`mono dim`},yi={class:`ver-actor`},bi=[`onClick`],xi={key:0,class:`ver-desc`},Si={class:`ver-diff mono`},Ci={class:`aw-tile query-card`},wi={class:`sec-label`},Ti={class:`q-grid`},Ei={class:`f`},Di={value:``},Oi=[`value`],ki={class:`f`},Ai=[`disabled`],ji={value:``},Mi=[`value`],Ni={class:`f`},Pi={value:``},Fi=[`value`],Ii={class:`f`},Li={value:``},Ri=[`value`],zi={class:`f`},Bi={class:`f`},Vi={class:`f q-actions`},Hi=[`disabled`],Ui={key:0,class:`banner bad`,style:{"margin-top":`8px`}},Wi={key:1,class:`q-result`},Gi={class:`nodes-table`},Ki={class:`mono dim`},qi={class:`mono`},Ji={class:`mono`},Yi={class:`mono`},Xi={class:`mono dim`},Zi={key:6,class:`aw-tile table-card`},Qi={class:`sec-label`},$i={class:`nodes-table`},ea={class:`mono dim`},ta={class:`mono`},na={class:`mono dim`},ra={class:`dim`},ia={class:`modal`},aa={class:`m-title`},oa={class:`f-grid`},sa={class:`f`},ca=[`placeholder`],la={class:`f`},ua=[`placeholder`],da={key:0,class:`m-err`},fa={class:`m-actions`},pa=[`disabled`],ma={key:8,class:`err`},ha={class:`aw-tile ledger-card`},ga={class:`ledger-head`},_a={value:``},va=[`value`],ya={class:`ledger-tri`},ba={class:`tri-cell`},xa={class:`mono`},Sa={class:`tri-cell`},Ca={class:`mono`},wa={class:`tri-cell`},Ta={class:`mono`},Ea={class:`ledger-cols`},Da={class:`ledger-col`},Oa={class:`sec-t`},ka={class:`ledger-list mono`},Aa={class:`ledger-col`},ja={class:`sec-t`},Ma={class:`ledger-list`},Na={class:`mono`},Pa=b(a({__name:`[id]`,setup(a){let{t:b}=ae(),Pa=re(),S=ce(),Fa=le(),Ia=ue();Fa.load();let C=p(()=>String(Pa.params.id??``)),La=p(()=>S.lines.find(e=>e.id===C.value)),w=p(()=>S.lineStateOf(C.value));S.load();let Ra=S.ensureWsFeed();i(()=>Ra());let za=e=>e?Ia.twins.find(t=>t.id===e)?.name??e:b(`dcwDetail.k3own4q121`),Ba={idle:b(`dcwDetail.k3zgkk122`),writing:b(`dcwDetail.k3l3h80123`),ok:`已 ACK`,error:b(`dcwDetail.k40reu124`),offline:b(`dcwDetail.k44c2n125`)};function Va(e){let t=e??``;return S.templates.find(e=>e.key===(t.startsWith(`dcw-`)?t.slice(4):t))?.ch??t}function Ha(e){return S.nodeById(e)?.min}function Ua(e){return S.nodeById(e)?.max}let T=p(()=>Fa.nodes.filter(e=>e.lineId===C.value)),E=_(``),D=_(null),Wa=_(!1);async function Ga(){if(E.value){Wa.value=!0;try{D.value=await S.fetchLedger(E.value)}finally{Wa.value=!1}}}async function Ka(){E.value&&(await S.rollbackNode(E.value),await Ga())}function qa(e){return Fa.nodeById(e)?.name??e}let O=p(()=>S.nodes.filter(e=>e.lineId===C.value)),k=p(()=>S.products.filter(e=>e.lineId===C.value)),Ja=p(()=>S.recipes.filter(e=>e.lineId===C.value)),Ya=p(()=>S.runs.filter(e=>e.lineId===C.value)),Xa=p(()=>{let e=new Set(O.value.map(e=>e.id));return S.history.filter(t=>e.has(t.nodeId))}),Za=p(()=>S.nodes.filter(e=>!e.lineId)),Qa=p(()=>S.products.filter(e=>!e.lineId));async function $a(e){await S.patchNode(e,{lineId:C.value});let t=S.nodeById(e);t&&(t.lineId=C.value)}async function eo(e){await S.updateProduct(e,{lineId:C.value}),await S.load()}let A=m({}),to=_(``),j=_(``),no=_(``);async function ro(e,t){to.value=e,j.value=``,no.value=``;try{let n=await S.write(e,t);n.ok?(no.value=b(`dcwDetail.k1alcbyu182`,{p0:S.nodeById(e)?.name??e,p1:n.message}),A[e]=``):j.value=b(`dcwDetail.kl1e9x9183`,{p0:S.nodeById(e)?.name??e,p1:n.message})}catch(e){j.value=x(e)}finally{to.value=``}}let io=_(``);async function ao(e){io.value=e,j.value=``;try{await S.readNode(e)}catch(e){j.value=x(e)}finally{io.value=``}}let oo=_(``);async function so(e,t){oo.value=e,j.value=``;try{await S.patchNode(e,{enabled:t});let n=S.nodeById(e);n&&(n.enabled=t,t?n.state===`offline`&&(n.state=`idle`):n.state=`offline`)}catch(e){j.value=x(e)}finally{oo.value=``}}let M=_(!1),N=_(`mock`),co=_(S.templates[0]?.key??``),P=_(`mock`),lo=_(``),uo=_(null),fo=_(null),F=_({}),I=m({kind:`none`,scale:1,offset:0}),po=_(``),mo=_(!1),L=_(null),ho=_(!1),go=_(``),_o=p(()=>se.find(e=>e.kind===P.value)),vo=p(()=>_o.value?.configFields??[]);function yo(){let e={};for(let t of vo.value)t.default!==void 0&&(e[t.key]=t.default);F.value=e,L.value=null}yo();async function bo(){mo.value=!0,L.value=null;try{L.value=await S.testDriver(P.value,F.value)}catch(e){L.value={ok:!1,message:x(e)}}finally{mo.value=!1}}async function xo(){ho.value=!0,go.value=``;try{for(let e of vo.value)if(e.required&&(F.value[e.key]===void 0||F.value[e.key]===``))throw Error(b(`dcwDetail.k8x1un1184`,{p0:e.label}));let e=I.kind===`linear`?{kind:`linear`,scale:Number(I.scale),offset:Number(I.offset)}:void 0;await S.createFromTemplate(`dcw-${co.value}`,{name:lo.value.trim()||void 0,driver:P.value,driverConfig:{...F.value},transform:e,holdIntervalMs:uo.value,readIntervalMs:fo.value,lineId:C.value,semantics:po.value.trim()||void 0}),M.value=!1,lo.value=``,po.value=``}catch(e){go.value=x(e)}finally{ho.value=!1}}let So=_(!1),Co=_(!1),wo=_(``),To=_(``);function Eo(){So.value=!0,wo.value=``,To.value=``}let R=m({name:``,ch:``,code:``,unit:``,min:``,max:``,decimals:1,icon:`gateway`,semantics:``}),Do=[{key:`thermo`,label:b(`dcwDetail.k422b8126`)},{key:`pressure`,label:b(`dcwDetail.k3x6ff127`)},{key:`tension`,label:b(`dcwDetail.k3z9xc128`)},{key:`encoder`,label:b(`dcwDetail.kjb3vhs129`)},{key:`camera`,label:b(`dcwDetail.k47atw130`)},{key:`gateway`,label:b(`dcwDetail.k48c07131`)}];async function Oo(){Co.value=!0,wo.value=``,To.value=``;try{if(!R.name.trim())throw Error(b(`dcwDetail.k6ugbw2132`));if(R.unit.trim()===``)throw Error(b(`dcwDetail.kx3pg59133`));if(R.min===``||R.max===``)throw Error(b(`dcwDetail.k13awowo134`));let e=await S.createTemplate({name:R.name.trim(),ch:R.ch.trim()||R.name.trim(),code:R.code.trim()||`CUSTOM`,unit:R.unit.trim(),min:Number(R.min),max:Number(R.max),decimals:Number(R.decimals)||0,icon:R.icon,semantics:R.semantics.trim()||void 0});co.value=e.key,To.value=b(`dcwDetail.ky4e1tr185`,{p0:e.name}),R.name=``,R.ch=``,R.code=``,R.unit=``,R.min=``,R.max=``,R.semantics=``}catch(e){wo.value=x(e)}finally{Co.value=!1}}let z=_(``),B=_(``),V=_(!1),H=_(``),U=_(``),ko=p(()=>Ja.value.filter(e=>e.productId===z.value));async function Ao(){V.value=!0,H.value=``,U.value=``;try{if(!B.value)throw Error(b(`dcwDetail.k1b6qe0r135`));await S.startLine(C.value,B.value),H.value=b(`dcwDetail.k17jteb9186`,{p0:w.value.productName,p1:w.value.recipeName,p2:w.value.runId})}catch(e){U.value=x(e)}finally{V.value=!1}}async function jo(){V.value=!0,H.value=``,U.value=``;try{let e=`${w.value.productName??``} · ${w.value.recipeName??``}`;await S.stopLine(C.value),H.value=b(`dcwDetail.kzl49pd187`,{p0:e})}catch(e){U.value=x(e)}finally{V.value=!1}}let Mo=_(!1),No=_(!1),Po=_(``),W=m({name:``,description:``}),G=_(``);async function Fo(){No.value=!0,Po.value=``;try{let e=await S.createProduct({name:W.name.trim(),description:W.description.trim(),lineId:C.value});z.value=e.id,G.value=e.id,Mo.value=!1,W.name=``,W.description=``}catch(e){Po.value=x(e)}finally{No.value=!1}}let Io=p(()=>G.value?Ja.value.filter(e=>e.productId===G.value):Ja.value),Lo=e=>S.products.find(t=>t.id===e)?.name??e,Ro=_(!1),K=_(null),zo=_([]),Bo=_(!1),q=_(``);async function Vo(e){K.value=S.recipes.find(t=>t.id===e)??null,Ro.value=!0,q.value=``,Bo.value=!0;try{zo.value=await S.recipeVersions(e)}catch(e){q.value=x(e)}finally{Bo.value=!1}}let Ho=e=>e===`agent`?`Agent`:b(e===`system`?`dcwDetail.srcSystem`:`dcwDetail.srcUser`);function Uo(e,t){if(t===0)return b(`dcwDetail.histInit`);let n=zo.value[t-1],r=e.params.map(e=>({p:e,old:n.params.find(t=>t.nodeId===e.nodeId)})).filter(({p:e,old:t})=>!t||t.value!==e.value).map(({p:e,old:t})=>`${S.nodes.find(t=>t.id===e.nodeId)?.name??e.nodeId}: ${t?.value??b(`dcwDetail.histAdded`)} → ${e.value}`);return r.length>0?r.join(`;`):b(`dcwDetail.histNoChange`)}async function Wo(e){if(K.value){q.value=``;try{let t=await S.revertRecipe(K.value.id,{version:e,reason:b(`dcwDetail.revertReasonUi`)});q.value=b(`dcwDetail.revertOk`,{p0:t.version??0}),zo.value=await S.recipeVersions(K.value.id)}catch(e){q.value=x(e)}}}let J=m({productId:``,recipeId:``,paramKey:``,nodeId:``,lastMin:30,bucketMs:15e3}),Go=_(null),Ko=_(!1),qo=_(``);async function Jo(){Ko.value=!0,qo.value=``,Go.value=null;try{Go.value=await S.queryLine({lineId:C.value,productId:J.productId||void 0,recipeId:J.recipeId||void 0,paramKey:J.paramKey||void 0,nodeId:J.nodeId||void 0,fromMs:Date.now()-J.lastMin*6e4,toMs:Date.now(),bucketMs:J.bucketMs>0?J.bucketMs:void 0,limit:2e3}),Go.value.channels.length===0&&(qo.value=b(`dcwDetail.kszv5sq136`))}catch(e){qo.value=x(e)}finally{Ko.value=!1}}let Yo=p(()=>S.templates.map(e=>e.key)),Y=_(!1),Xo=_(null),Zo=_(!1),X=_(``),Z=m({productId:``,name:``,description:``,params:[],daqWindows:[]}),Q=_(null),$=_(null),Qo=_(!1);function $o(){Xo.value=null,X.value=``,Z.productId=G.value||z.value||k.value[0]?.id||``,Z.name=``,Z.description=``,Z.params=[{nodeId:O.value[0]?.id??``,value:``,min:``,max:``}],Z.daqWindows=[],Y.value=!0}function es(e){let t=S.recipes.find(t=>t.id===e);t&&(Xo.value=e,X.value=``,Z.productId=t.productId,Z.name=t.name,Z.description=t.description,Z.params=t.params.map(e=>({nodeId:e.nodeId,value:e.value,min:e.min??``,max:e.max??``})),Z.daqWindows=(t.daqWindows??[]).map(e=>({nodeId:e.nodeId,min:e.min??``,max:e.max??``})),Y.value=!0)}async function ts(){Zo.value=!0,X.value=``;try{let e={productId:Z.productId,name:Z.name.trim(),description:Z.description.trim(),params:Z.params.filter(e=>e.nodeId&&e.value!==``&&Number.isFinite(Number(e.value))).map(e=>({nodeId:e.nodeId,value:Number(e.value),...e.min!==``&&Number.isFinite(Number(e.min))?{min:Number(e.min)}:{},...e.max!==``&&Number.isFinite(Number(e.max))?{max:Number(e.max)}:{}})),daqWindows:Z.daqWindows.filter(e=>e.nodeId&&(e.min!==``||e.max!==``)).map(e=>({nodeId:e.nodeId,...e.min!==``&&Number.isFinite(Number(e.min))?{min:Number(e.min)}:{},...e.max!==``&&Number.isFinite(Number(e.max))?{max:Number(e.max)}:{}}))};Xo.value?await S.updateRecipe(Xo.value,e):await S.createRecipe(e),Y.value=!1}catch(e){X.value=x(e)}finally{Zo.value=!1}}async function ns(e){Q.value=null,j.value=``;try{let t=await S.applyRecipe(e),n=t.results.filter(e=>e.ok).length;Q.value={runId:t.id,ok:n,total:t.results.length},n<t.results.length&&(j.value=b(`dcwDetail.ks7szkt188`,{p0:t.results.filter(e=>!e.ok).map(e=>e.message).join(`;`)}))}catch(e){j.value=x(e)}}async function rs(e){Qo.value=!0;try{let t=await S.runData(e);$.value={runId:e,data:t}}catch(e){j.value=x(e)}finally{Qo.value=!1}}function is(e){let t=e?.value??e?.avg;return t==null?`--`:String(Math.round(t*1e3)/1e3)}return(i,a)=>{let p=ie,m=oe;return l(S).loaded&&!La.value?(s(),h(`div`,de,[v(`p`,fe,u(i.$t(`dcwDetail.k19337yp018`)),1),ne(p,{class:`pill-btn`,to:`/dcw`},{default:te(()=>[f(u(i.$t(`dcwDetail.kllwu1c019`)),1)]),_:1})])):(s(),h(`div`,pe,[v(`div`,me,[v(`div`,null,[v(`p`,he,[v(`span`,{class:`line-chip`,style:ee({background:La.value?.color??`#3aa0ff`})},null,4),f(`AGENTWORKSHOP / LINE / `+u(La.value?.name??C.value),1)]),v(`h1`,null,u(La.value?.name??i.$t(`dcwDetail.k1b2snna151`))+` · `+u(i.$t(`dcwDetail.k1l0iow1137`)),1),v(`p`,ge,u(La.value?.description||i.$t(`dcwDetail.kzcbfki152`)),1)]),v(`div`,_e,[v(`span`,ve,u(i.$t(`dcwDetail.k45uio082`))+` `+u(O.value.length),1),v(`span`,ye,u(i.$t(`dcwDetail.k3waz1025`))+` `+u(k.value.length),1),v(`span`,be,u(i.$t(`dcwDetail.k48grv027`))+` `+u(Ja.value.length),1)])]),v(`section`,xe,[v(`div`,Se,[v(`button`,{class:c([`aw-pill`,{running:l(S).controller.running}]),title:i.$t(`dcwDetail.k1snap154`),onClick:a[0]||=e=>l(S).startStop(l(S).controller.running?`pause`:`resume`)},[v(`span`,{class:c(l(S).controller.running?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),f(` `+u(l(S).controller.running?i.$t(`dcwDetail.kplrsg153`):i.$t(`dcwDetail.knxgni9169`)),1)],10,Ce)]),v(`div`,we,[v(`span`,Te,[v(`span`,null,u(i.$t(`dcwDetail.k45uio082`))+` `+u(l(S).controller.nodesOnline)+`/`+u(l(S).controller.nodesTotal),1),a[55]||=v(`span`,{class:`sep`},`·`,-1),v(`span`,{title:i.$t(`dcwDetail.kd3ygmn001`)},u(i.$t(`dcwDetail.k3wtib138`))+` `+u(l(S).controller.writesTotal),9,Ee),a[56]||=v(`span`,{class:`sep`},`·`,-1),v(`span`,{class:c({warn:l(S).controller.writesFailed>0}),title:i.$t(`dcwDetail.kd3znl0002`)},u(i.$t(`dcwDetail.k3yit7139`))+` `+u(l(S).controller.writesFailed),11,De)]),v(`button`,{class:`aw-pill outline`,title:i.$t(`dcwDetail.kc4ixly003`),onClick:Eo},[a[57]||=v(`span`,{class:`i-tabler-template`},null,-1),f(` `+u(i.$t(`dcwDetail.k1972dx9020`)),1)],8,Oe),v(`button`,{class:`aw-pill add-btn`,onClick:a[1]||=e=>M.value=!0},[a[58]||=v(`span`,{class:`i-tabler-plus`},null,-1),f(` `+u(i.$t(`dcwDetail.k1976uns021`)),1)])])]),j.value||no.value?(s(),h(`p`,{key:0,class:c([`banner`,j.value?`bad`:`good`])},u(j.value||no.value),3)):g(``,!0),Za.value.length||Qa.value.length?(s(),h(`section`,ke,[v(`b`,Ae,u(i.$t(`dcwDetail.kaebkky022`)),1),v(`div`,je,[(s(!0),h(d,null,o(Za.value,e=>(s(),h(`span`,{key:e.id,class:`adopt-chip`},[f(u(e.name)+` `,1),v(`button`,{class:`mini-btn`,onClick:t=>$a(e.id)},u(i.$t(`dcwDetail.kyjp9fg023`)),9,Me)]))),128)),(s(!0),h(d,null,o(Qa.value,e=>(s(),h(`span`,{key:e.id,class:`adopt-chip`},[f(u(e.name)+`(`+u(i.$t(`dcwDetail.k3km252140`)),1),v(`button`,{class:`mini-btn`,onClick:t=>eo(e.id)},u(i.$t(`dcwDetail.kyjp9fg023`)),9,Ne)]))),128))])])):g(``,!0),v(`section`,Pe,[v(`div`,Fe,[v(`span`,{class:c([`line-dot`,{on:w.value.active}])},null,2),v(`div`,Ie,[v(`b`,null,u(w.value.active?i.$t(`dcwDetail.k1pxrhx0154`):i.$t(`dcwDetail.k1b2hxmx170`)),1),w.value.active?(s(),h(`small`,Le,u(w.value.productName)+` · `+u(w.value.recipeName)+` · `+u(i.$t(`dcwDetail.k400lb075`))+` `+u(w.value.runId)+` · `+u(i.$t(`dcwDetail.k3zkt2166`))+` `+u(w.value.startedAt?.slice(11,19))+` `+u(i.$t(`dcwDetail.k69vag8168`))+` `+u(w.value.taggedSamples)+` `+u(i.$t(`dcwDetail.k4118o085`)),1)):(s(),h(`small`,Re,u(i.$t(`dcwDetail.k19pof14024`)),1))])]),v(`div`,ze,[v(`label`,Be,[v(`span`,null,u(i.$t(`dcwDetail.k3waz1025`)),1),y(v(`select`,{"onUpdate:modelValue":a[2]||=e=>z.value=e,class:`inp`,onChange:a[3]||=e=>B.value=``},[v(`option`,Ve,u(i.$t(`dcwDetail.kuisodh026`)),1),(s(!0),h(d,null,o(k.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,He))),128))],544),[[t,z.value]])]),v(`label`,Ue,[v(`span`,null,u(i.$t(`dcwDetail.k48grv027`)),1),y(v(`select`,{"onUpdate:modelValue":a[4]||=e=>B.value=e,class:`inp`,disabled:!z.value},[v(`option`,Ge,u(i.$t(`dcwDetail.kutxzsz028`)),1),(s(!0),h(d,null,o(ko.value,e=>(s(),h(`option`,{key:e.id,value:e.id,disabled:e.params.length===0},u(e.name)+u(e.params.length===0?i.$t(`dcwDetail.k1hicmch155`):i.$t(`dcwDetail.k1lzfi4g180`,{p0:e.params.length})),9,Ke))),128))],8,We),[[t,B.value]])]),w.value.active?(s(),h(`button`,{key:1,class:`pill-btn stop`,disabled:V.value,onClick:jo},u(i.$t(`dcwDetail.k1xyhd2y030`)),9,Je)):(s(),h(`button`,{key:0,class:`pill-btn`,disabled:V.value||!B.value,title:B.value?`下发配方参数并开始打标数据采集`:`开跑前必须先设定配方`,onClick:Ao},u(i.$t(`dcwDetail.kfb8vml029`)),9,qe))]),U.value?(s(),h(`p`,Ye,u(U.value),1)):g(``,!0),H.value?(s(),h(`p`,Xe,u(H.value),1)):g(``,!0)]),So.value?(s(),h(`div`,{key:2,class:`modal-mask`,onClick:a[15]||=r(e=>So.value=!1,[`self`])},[v(`div`,Ze,[v(`h3`,Qe,[f(u(i.$t(`dcwDetail.k1x4vam0031`))+` `,1),v(`small`,$e,u(i.$t(`dcwDetail.k3x23c141`))+` `+u(l(S).templates.filter(e=>e.builtin).length)+` · `+u(i.$t(`dcwDetail.k3t616a142`))+` `+u(l(S).templates.filter(e=>!e.builtin).length),1)]),v(`p`,et,u(i.$t(`dcwDetail.ke1iyud032`)),1),v(`div`,tt,[(s(!0),h(d,null,o(l(S).templates,e=>(s(),h(`span`,{key:e.key,class:`tpl-chip`,title:`${e.code} · ${e.min}~${e.max} ${e.unit}${e.semantics?` · ${e.semantics}`:``}`},[f(u(e.name)+` `,1),v(`small`,rt,u(e.min)+`~`+u(e.max)+u(e.unit),1),v(`em`,{class:c([`tpl-tag`,{builtin:e.builtin}])},u(e.builtin?i.$t(`dcwDetail.k3x23c141`):i.$t(`dcwDetail.k3t616a142`)),3)],8,nt))),128))]),v(`p`,it,u(i.$t(`dcwDetail.k169eb4s033`)),1),v(`div`,at,[v(`label`,ot,[v(`span`,null,[f(u(i.$t(`dcwDetail.k1f55q76034`)),1),a[59]||=v(`em`,null,`*`,-1)]),y(v(`input`,{"onUpdate:modelValue":a[5]||=e=>R.name=e,class:`inp`,placeholder:i.$t(`dcwDetail.k1tooi3o004`)},null,8,st),[[n,R.name]])]),v(`label`,ct,[v(`span`,null,u(i.$t(`dcwDetail.k1bqk219035`)),1),y(v(`input`,{"onUpdate:modelValue":a[6]||=e=>R.ch=e,class:`inp`,placeholder:i.$t(`dcwDetail.k698qz0005`)},null,8,lt),[[n,R.ch]])]),v(`label`,ut,[v(`span`,null,u(i.$t(`dcwDetail.k1ayxrqb036`)),1),y(v(`input`,{"onUpdate:modelValue":a[7]||=e=>R.code=e,class:`inp`,placeholder:`如 MOTOR · I`},null,512),[[n,R.code]])]),v(`label`,dt,[v(`span`,null,[f(u(i.$t(`dcwDetail.k3x4ef037`)),1),a[60]||=v(`em`,null,`*`,-1)]),y(v(`input`,{"onUpdate:modelValue":a[8]||=e=>R.unit=e,class:`inp`,placeholder:`如 A`},null,512),[[n,R.unit]])]),v(`label`,ft,[v(`span`,null,[f(u(i.$t(`dcwDetail.k1l9jv5m038`)),1),a[61]||=v(`em`,null,`*`,-1)]),y(v(`input`,{"onUpdate:modelValue":a[9]||=e=>R.min=e,type:`number`,class:`inp`,placeholder:i.$t(`dcwDetail.kxz9174006`)},null,8,pt),[[n,R.min,void 0,{number:!0}]])]),v(`label`,mt,[v(`span`,null,[f(u(i.$t(`dcwDetail.k1l9jv4p039`)),1),a[62]||=v(`em`,null,`*`,-1)]),y(v(`input`,{"onUpdate:modelValue":a[10]||=e=>R.max=e,type:`number`,class:`inp`,placeholder:i.$t(`dcwDetail.kxz9167007`)},null,8,ht),[[n,R.max,void 0,{number:!0}]])]),v(`label`,gt,[v(`span`,null,u(i.$t(`dcwDetail.k3mxmcx040`)),1),y(v(`input`,{"onUpdate:modelValue":a[11]||=e=>R.decimals=e,type:`number`,min:`0`,max:`4`,class:`inp`},null,512),[[n,R.decimals,void 0,{number:!0}]])]),v(`label`,_t,[v(`span`,null,u(i.$t(`dcwDetail.k3xx56041`)),1),y(v(`select`,{"onUpdate:modelValue":a[12]||=e=>R.icon=e,class:`inp`},[(s(),h(d,null,o(Do,e=>v(`option`,{key:e.key,value:e.key},u(e.label),9,vt)),64))],512),[[t,R.icon]])])]),v(`label`,yt,[v(`span`,null,u(i.$t(`dcwDetail.knjmyfr042`)),1),y(v(`textarea`,{"onUpdate:modelValue":a[13]||=e=>R.semantics=e,class:`inp`,rows:`2`,placeholder:i.$t(`dcwDetail.k1qdnfzc008`)},null,8,bt),[[n,R.semantics]])]),To.value?(s(),h(`p`,xt,u(To.value),1)):g(``,!0),wo.value?(s(),h(`p`,St,u(wo.value),1)):g(``,!0),v(`div`,Ct,[v(`button`,{class:`aw-pill outline`,onClick:a[14]||=e=>So.value=!1},u(i.$t(`dcwDetail.k3x62t043`)),1),v(`button`,{class:`pill-btn`,disabled:Co.value||!R.name.trim()||R.unit.trim()===``||R.min===``||R.max===``,onClick:Oo},u(Co.value?i.$t(`dcwDetail.k1bg4759156`):i.$t(`dcwDetail.k1bg9nga171`)),9,wt)])])])):g(``,!0),M.value?(s(),h(`div`,{key:3,class:`modal-mask`,onClick:a[28]||=r(e=>M.value=!1,[`self`])},[v(`div`,Tt,[v(`h3`,Et,u(i.$t(`dcwDetail.k1976uns021`)),1),v(`div`,Dt,[v(`button`,{class:c([`seg`,{on:N.value===`mock`}]),onClick:a[16]||=e=>N.value=`mock`},` Mock 模拟 PLC `,2),v(`button`,{class:c([`seg`,{on:N.value===`real`}]),onClick:a[17]||=e=>N.value=`real`},u(i.$t(`dcwDetail.kyj8fen044`)),3)]),v(`div`,Ot,[v(`label`,kt,[v(`span`,null,u(i.$t(`dcwDetail.k1ejzwqp045`)),1),y(v(`select`,{"onUpdate:modelValue":a[18]||=e=>co.value=e,class:`inp`},[(s(!0),h(d,null,o(l(S).templates,e=>(s(),h(`option`,{key:e.key,value:e.key},u(e.name)+` · `+u(e.ch)+`(`+u(e.min)+`~`+u(e.max)+` `+u(e.unit)+`)`+u(e.builtin?``:i.$t(`dcwDetail.kr45rk9157`)),9,At))),128))],512),[[t,co.value]])]),v(`label`,jt,[v(`span`,null,u(i.$t(`dcwDetail.k1ce2k1y046`)),1),y(v(`input`,{"onUpdate:modelValue":a[19]||=e=>lo.value=e,class:`inp`,placeholder:i.$t(`dcwDetail.kgpxzy3009`)},null,8,Mt),[[n,lo.value]])]),v(`label`,Nt,[v(`span`,null,u(i.$t(`dcwDetail.k1vyb8im047`)),1),y(v(`input`,{"onUpdate:modelValue":a[20]||=e=>uo.value=e,type:`number`,min:`0`,max:`3600000`,step:`500`,class:`inp`,placeholder:i.$t(`dcwDetail.kb1srz0010`)},null,8,Pt),[[n,uo.value,void 0,{number:!0}]])]),v(`label`,Ft,[v(`span`,null,u(i.$t(`dcwDetail.k9r7d4e016`)),1),y(v(`input`,{"onUpdate:modelValue":a[21]||=e=>fo.value=e,type:`number`,min:`0`,max:`3600000`,step:`500`,class:`inp`,placeholder:i.$t(`dcwDetail.k9r7d4e017`)},null,8,It),[[n,fo.value,void 0,{number:!0}]])])]),v(`div`,Lt,[v(`label`,Rt,[v(`span`,null,u(i.$t(`dcwDetail.kiune1f048`)),1),y(v(`select`,{"onUpdate:modelValue":a[22]||=e=>I.kind=e,class:`inp`},[v(`option`,zt,u(i.$t(`dcwDetail.kkzy0k049`)),1),a[63]||=v(`option`,{value:`linear`},` 线性标定:PLC值 = (物理值 - offset) / scale `,-1)],512),[[t,I.kind]])]),v(`label`,Bt,[a[64]||=v(`span`,null,`scale / offset`,-1),v(`div`,Vt,[y(v(`input`,{"onUpdate:modelValue":a[23]||=e=>I.scale=e,type:`number`,step:`0.1`,class:`inp`,disabled:I.kind!==`linear`,title:`decoder 斜率(≠0):物理值 = scale × PLC值 + offset;下发时自动取逆`},null,8,Ht),[[n,I.scale,void 0,{number:!0}]]),y(v(`input`,{"onUpdate:modelValue":a[24]||=e=>I.offset=e,type:`number`,step:`0.1`,class:`inp`,disabled:I.kind!==`linear`,title:`decoder 截距`},null,8,Ut),[[n,I.offset,void 0,{number:!0}]])])])]),N.value===`real`?(s(),h(d,{key:0},[v(`div`,Wt,[v(`label`,Gt,[v(`span`,null,u(i.$t(`dcwDetail.k1kt87rx050`)),1),y(v(`select`,{"onUpdate:modelValue":a[25]||=e=>P.value=e,class:`inp`},[(s(!0),h(d,null,o(l(se).filter(e=>e.status!==`builtin`),e=>(s(),h(`option`,{key:e.kind,value:e.kind},u(e.label),9,Kt))),128))],512),[[t,P.value]])])]),vo.value.length?(s(),h(`div`,qt,[(s(!0),h(d,null,o(vo.value,n=>(s(),h(`label`,{key:n.key,class:`f`},[v(`span`,null,[f(u(n.label),1),n.required?(s(),h(`em`,Jt,`*`)):g(``,!0)]),n.type===`select`?y((s(),h(`select`,{key:0,"onUpdate:modelValue":e=>F.value[n.key]=e,class:`inp`},[(s(!0),h(d,null,o(n.options,e=>(s(),h(`option`,{key:e.value,value:e.value},u(e.label),9,Xt))),128))],8,Yt)),[[t,F.value[n.key]]]):y((s(),h(`input`,{key:1,"onUpdate:modelValue":e=>F.value[n.key]=e,type:n.type===`number`?`number`:`text`,placeholder:n.placeholder,class:`inp`},null,8,Zt)),[[e,F.value[n.key]]]),n.hint?(s(),h(`small`,Qt,u(n.hint),1)):g(``,!0)]))),128))])):g(``,!0),v(`div`,$t,[v(`button`,{class:`pill-btn outline`,disabled:mo.value,onClick:bo},u(mo.value?i.$t(`dcwDetail.k1fsh720158`):i.$t(`dcwDetail.k1fstglk172`)),9,en),L.value?(s(),h(`span`,{key:0,class:c([`test-result`,L.value.ok?`good`:`bad`])},u(L.value.ok?`✓`:`✗`)+` `+u(L.value.message),3)):g(``,!0)])],64)):g(``,!0),v(`label`,tn,[v(`span`,null,u(i.$t(`dcwDetail.k1hgizn7051`)),1),y(v(`textarea`,{"onUpdate:modelValue":a[26]||=e=>po.value=e,class:`inp`,rows:`2`,placeholder:i.$t(`dcwDetail.k12bnyt9011`)},null,8,nn),[[n,po.value]])]),go.value?(s(),h(`p`,rn,u(go.value),1)):g(``,!0),v(`div`,an,[v(`button`,{class:`aw-pill outline`,onClick:a[27]||=e=>M.value=!1},u(i.$t(`dcwDetail.k3xdnn052`)),1),v(`button`,{class:`aw-pill`,disabled:ho.value,onClick:xo},u(ho.value?i.$t(`dcwDetail.k1bg4759156`):i.$t(`dcwDetail.k1bge46t173`)),9,on)])])])):g(``,!0),ne(m,{spinning:!l(S).loaded&&!l(S).error},{default:te(()=>[v(`section`,sn,[v(`table`,cn,[v(`thead`,null,[v(`tr`,null,[v(`th`,null,u(i.$t(`dcwDetail.k1e2dtkt053`)),1),v(`th`,null,u(i.$t(`dcwDetail.k403cy054`)),1),v(`th`,null,u(i.$t(`dcwDetail.k42w8s055`)),1),v(`th`,null,u(i.$t(`dcwDetail.k1deqh0d056`)),1),v(`th`,null,u(i.$t(`dcwDetail.k9r7d4e018`)),1),v(`th`,null,u(i.$t(`dcwDetail.k1k79ec9057`)),1),v(`th`,null,u(i.$t(`dcwDetail.k1dexou6058`)),1),v(`th`,null,u(i.$t(`dcwDetail.k1b1nnaa059`)),1),v(`th`,null,u(i.$t(`dcwDetail.k1i8rtqt060`)),1),v(`th`,ln,u(i.$t(`dcwDetail.k40aa6061`)),1)])]),v(`tbody`,null,[(s(!0),h(d,null,o(O.value,e=>(s(),h(`tr`,{key:e.id,class:c({"node-paused":!e.enabled})},[v(`td`,null,[v(`span`,un,u(e.id.slice(0,8)),1),v(`b`,null,u(e.name),1),v(`small`,dn,u(Va(e.templateRef)),1)]),v(`td`,null,[v(`button`,{class:c([`ctrl-toggle`,{on:e.enabled}]),disabled:oo.value===e.id,title:e.enabled?`暂停该节点控制:下发将被拒绝`:`开启该节点控制:恢复可下发`,onClick:t=>so(e.id,!e.enabled)},[a[65]||=v(`span`,{class:`ct-dot`},null,-1),f(` `+u(e.enabled?i.$t(`dcwDetail.k3o3ib3159`):i.$t(`dcwDetail.k3n93ed062`)),1)],10,fn)]),v(`td`,null,[e.enabled?(s(),h(`span`,{key:1,class:c([`st-pill`,e.state])},u(Ba[e.state]??e.state),3)):(s(),h(`span`,pn,u(i.$t(`dcwDetail.k3n93ed062`)),1))]),v(`td`,mn,[f(u(e.value==null?`--`:e.value.toFixed(e.decimals))+` `,1),v(`small`,null,u(e.unit),1),e.lastAckAt?(s(),h(`small`,hn,` · `+u(e.lastAckAt.slice(11,19)),1)):g(``,!0)]),v(`td`,gn,[v(`span`,{title:e.lastReadError??i.$t(`dcwDetail.k9r7d4e019`),class:c({"read-stale":e.lastReadError})},u(e.readValue==null?`--`:e.readValue.toFixed(e.decimals)),11,_n),v(`small`,null,u(e.unit),1),e.lastReadAt?(s(),h(`small`,vn,` · `+u(e.lastReadAt.slice(11,19)),1)):g(``,!0),v(`button`,{class:`mini-btn read-btn`,disabled:io.value===e.id,title:i.$t(`dcwDetail.k9r7d4e020`),onClick:t=>ao(e.id)},u(io.value===e.id?`···`:i.$t(`dcwDetail.k9r7d4e021`)),9,yn)]),v(`td`,null,[v(`div`,bn,[y(v(`input`,{"onUpdate:modelValue":t=>A[e.id]=t,type:`number`,class:`inp write-inp mono`,placeholder:`${e.min}~${e.max}`,min:e.min,max:e.max,step:10**-e.decimals,disabled:!e.enabled,title:e.enabled?``:`当前节点暂停:开启控制后方可设定`},null,8,xn),[[n,A[e.id],void 0,{number:!0}]]),v(`button`,{class:`mini-btn write-btn`,disabled:!e.enabled||to.value===e.id||A[e.id]==null||A[e.id]===``,title:e.enabled?`下发设定值`:`当前节点暂停:开启控制后方可设定`,onClick:t=>ro(e.id,Number(A[e.id]))},u(to.value===e.id?i.$t(`dcwDetail.k3l3h80123`):i.$t(`dcwDetail.k3w6td174`)),9,Sn)])]),v(`td`,Cn,u(e.min)+` ~ `+u(e.max)+` `+u(e.unit),1),v(`td`,wn,[f(u(e.holdIntervalMs==null?i.$t(`dcwDetail.k3zul4160`):`${e.holdIntervalMs}ms`)+` `,1),v(`small`,{class:`dim`,title:i.$t(`dcwDetail.k9r7d4e016`)},`· `+u(e.readIntervalMs===0?i.$t(`dcwDetail.k9r7d4e022`):e.readIntervalMs==null?i.$t(`dcwDetail.k9r7d4e023`):`${e.readIntervalMs}ms`),9,Tn)]),v(`td`,null,u(za(e.deviceBindingId)),1),v(`td`,En,[v(`button`,{class:`mini-btn danger`,onClick:t=>l(S).removeNode(e.id)},u(i.$t(`dcwDetail.k3xakp063`)),9,Dn)])],2))),128)),l(S).loaded&&O.value.length===0?(s(),h(`tr`,On,[v(`td`,kn,[v(`div`,An,[v(`p`,jn,u(i.$t(`dcwDetail.k1wtecyw064`)),1)])])])):g(``,!0)])])])]),_:1},8,[`spinning`]),v(`section`,Mn,[v(`div`,Nn,[v(`h3`,null,u(i.$t(`dcwDetail.k1j8w3hd065`)),1),v(`span`,Pn,u(k.value.length)+` `+u(i.$t(`dcwDetail.k1av3wgs143`))+` `+u(Io.value.length)+` `+u(i.$t(`dcwDetail.k48grv027`)),1),v(`button`,{class:`pill-btn`,style:{"margin-left":`auto`},onClick:$o},u(i.$t(`dcwDetail.k1akm6dc066`)),1),v(`button`,{class:`mini-btn`,onClick:a[29]||=e=>Mo.value=!0},u(i.$t(`dcwDetail.k1aka0ki067`)),1)]),v(`p`,Fn,u(i.$t(`dcwDetail.k6bl2q8068`)),1),k.value.length?(s(),h(`div`,In,[v(`button`,{class:c([`prod-chip`,{on:G.value===``}]),onClick:a[30]||=e=>G.value=``},u(i.$t(`dcwDetail.k3x4t1069`)),3),(s(!0),h(d,null,o(k.value,e=>(s(),h(`button`,{key:e.id,class:c([`prod-chip`,{on:G.value===e.id}]),title:e.description,onClick:t=>G.value=e.id},[f(u(e.name)+` `,1),v(`span`,{class:`prod-del`,title:i.$t(`dcwDetail.k1bpfjgx012`),onClick:r(t=>l(S).removeProduct(e.id),[`stop`])},`×`,8,Rn)],10,Ln))),128))])):(s(),h(`p`,zn,u(i.$t(`dcwDetail.knov3zg070`)),1)),v(`div`,Bn,[(s(!0),h(d,null,o(Io.value,e=>(s(),h(`div`,{key:e.id,class:`recipe-item`},[v(`div`,Vn,[v(`b`,null,u(e.name),1),e.version?(s(),h(`span`,{key:0,class:`param-chip mono`,title:l(b)(`dcwDetail.histTitle`)},`v`+u(e.version),9,Hn)):g(``,!0),v(`small`,Un,u(Lo(e.productId)),1),v(`small`,Wn,u(e.id),1)]),e.description?(s(),h(`p`,Gn,u(e.description),1)):g(``,!0),v(`div`,Kn,[(s(!0),h(d,null,o(e.params,(e,t)=>(s(),h(`span`,{key:t,class:`param-chip`},u(l(S).templates.find(t=>t.key===(e.templateRef??``).replace(`dcw-`,``))?.ch??e.templateRef)+` = `+u(e.value),1))),128)),(s(!0),h(d,null,o(e.daqWindows,(e,t)=>(s(),h(`span`,{key:`w-${t}`,class:`param-chip daqwin`,title:i.$t(`dcwDetail.k1l11api013`)},` ◎ `+u(qa(e.nodeId))+` ∈ [`+u(e.min??`-∞`)+`, `+u(e.max??`+∞`)+`] `,9,qn))),128))]),v(`div`,Jn,[v(`button`,{class:`pill-btn`,onClick:t=>ns(e.id)},u(i.$t(`dcwDetail.k1497qvr071`)),9,Yn),v(`button`,{class:`mini-btn`,onClick:t=>es(e.id)},u(i.$t(`dcwDetail.k45eb0072`)),9,Xn),v(`button`,{class:`mini-btn`,onClick:t=>Vo(e.id)},[f(u(l(b)(`dcwDetail.histBtn`)),1),e.version?(s(),h(`span`,Qn,`·v`+u(e.version),1)):g(``,!0)],8,Zn),v(`button`,{class:`mini-btn danger`,onClick:t=>l(S).removeRecipe(e.id)},u(i.$t(`dcwDetail.k3xakp063`)),9,$n)])]))),128)),Io.value.length===0?(s(),h(`div`,er,u(i.$t(`dcwDetail.keko1xy073`)),1)):g(``,!0)]),Q.value?(s(),h(`div`,tr,[f(u(i.$t(`dcwDetail.k1l3hrvp144`))+` `+u(Q.value.runId)+` `+u(i.$t(`dcwDetail.k1g3lh2v167`))+u(Q.value.ok)+`/`+u(Q.value.total)+` `+u(i.$t(`dcwDetail.k1bqci06149`))+` `,1),v(`button`,{class:`mini-btn`,style:{"margin-left":`10px`},disabled:Qo.value,onClick:a[31]||=e=>rs(Q.value.runId)},u(Qo.value?i.$t(`dcwDetail.k1br0ij9161`):i.$t(`dcwDetail.kxwei5175`)),9,nr)])):g(``,!0),Ya.value.length?(s(),h(`div`,rr,[v(`p`,ir,u(i.$t(`dcwDetail.k1rjer8d074`)),1),v(`table`,ar,[v(`thead`,null,[v(`tr`,null,[v(`th`,null,u(i.$t(`dcwDetail.k400lb075`)),1),v(`th`,null,u(i.$t(`dcwDetail.k48grv027`)),1),v(`th`,null,u(i.$t(`dcwDetail.k4497j076`)),1),v(`th`,null,u(i.$t(`dcwDetail.k1bqhtmu077`)),1),v(`th`,or,u(i.$t(`dcwDetail.k40aa6061`)),1)])]),v(`tbody`,null,[(s(!0),h(d,null,o([...Ya.value].reverse().slice(0,8),e=>(s(),h(`tr`,{key:e.id},[v(`td`,sr,u(e.id),1),v(`td`,null,u(e.recipeName),1),v(`td`,cr,u(e.startedAt.slice(5,19))+` ~ `+u(e.endedAt?e.endedAt.slice(5,19):i.$t(`dcwDetail.k3vpfg9162`)),1),v(`td`,null,[v(`span`,{class:c([`st-pill`,e.results.every(e=>e.ok)?`ok`:`warn`])},u(e.results.filter(e=>e.ok).length)+`/`+u(e.results.length),3)]),v(`td`,lr,[v(`button`,{class:`mini-btn`,disabled:Qo.value,onClick:t=>rs(e.id)},u(i.$t(`dcwDetail.k1dzwrdp078`)),9,ur),e.endedAt?g(``,!0):(s(),h(`button`,{key:0,class:`mini-btn`,onClick:t=>l(S).closeRun(e.id)},u(i.$t(`dcwDetail.k1blr7y7079`)),9,dr))])]))),128))])])])):g(``,!0),$.value?(s(),h(`div`,{key:4,class:`modal-mask`,onClick:a[33]||=r(e=>$.value=null,[`self`])},[v(`div`,fr,[v(`h3`,pr,u(i.$t(`dcwDetail.k11lq94k145`))+` `+u($.value.data.run.recipeName)+`(`+u($.value.runId)+`) `,1),v(`p`,mr,u(i.$t(`dcwDetail.k1me41w8080`)),1),v(`table`,hr,[v(`thead`,null,[v(`tr`,null,[v(`th`,null,u(i.$t(`dcwDetail.k48hde081`)),1),v(`th`,null,u(i.$t(`dcwDetail.k45uio082`)),1),v(`th`,null,u(i.$t(`dcwDetail.k40t11083`)),1),v(`th`,null,u(i.$t(`dcwDetail.k3xuaw084`)),1),a[66]||=v(`th`,null,`min ~ max`,-1),v(`th`,null,u(i.$t(`dcwDetail.k4118o085`)),1)])]),v(`tbody`,null,[(s(!0),h(d,null,o($.value.data.daq,e=>(s(),h(`tr`,{key:e.nodeId},[v(`td`,null,[f(u(e.ch),1),v(`small`,gr,u(e.unit),1)]),v(`td`,null,u(e.nodeName),1),v(`td`,_r,u(e.latest),1),v(`td`,vr,u(e.avg),1),v(`td`,yr,u(e.min)+` ~ `+u(e.max),1),v(`td`,br,u(e.cnt),1)]))),128)),$.value.data.daq.length===0?(s(),h(`tr`,xr,[v(`td`,Sr,u(i.$t(`dcwDetail.kd457ry086`)),1)])):g(``,!0)])]),v(`p`,Cr,u(i.$t(`dcwDetail.k12b7cxs087`)),1),v(`table`,wr,[v(`thead`,null,[v(`tr`,null,[v(`th`,null,u(i.$t(`dcwDetail.k3xbjr088`)),1),v(`th`,null,u(i.$t(`dcwDetail.k45uio082`)),1),v(`th`,null,u(i.$t(`dcwDetail.k3ncbsh089`)),1),v(`th`,null,u(i.$t(`dcwDetail.k3lh3mz090`)),1),v(`th`,null,u(i.$t(`dcwDetail.k454pg091`)),1),v(`th`,null,u(i.$t(`dcwDetail.k40ieu092`)),1)])]),v(`tbody`,null,[(s(!0),h(d,null,o($.value.data.writes,(e,t)=>(s(),h(`tr`,{key:t},[v(`td`,null,u(e.param),1),v(`td`,null,u(e.nodeName),1),v(`td`,Tr,u(e.eng),1),v(`td`,Er,u(e.raw),1),v(`td`,null,[v(`span`,{class:c([`st-pill`,e.ok?`ok`:`alarm`])},u(e.ok?`ACK`:i.$t(`dcwDetail.k3yit7139`)),3)]),v(`td`,Dr,u(e.at.slice(5,19)),1)]))),128)),$.value.data.writes.length===0?(s(),h(`tr`,Or,[v(`td`,kr,u(i.$t(`dcwDetail.knzcp8i093`)),1)])):g(``,!0)])]),v(`div`,Ar,[v(`button`,{class:`aw-pill outline`,onClick:a[32]||=e=>$.value=null},u(i.$t(`dcwDetail.k3x62t043`)),1)])])])):g(``,!0)]),Y.value?(s(),h(`div`,{key:4,class:`modal-mask`,onClick:a[40]||=r(e=>Y.value=!1,[`self`])},[v(`div`,jr,[v(`h3`,Mr,u(Xo.value?i.$t(`dcwDetail.k1iiwk0i163`):i.$t(`dcwDetail.k1efq0r9176`)),1),v(`div`,Nr,[v(`label`,Pr,[v(`span`,null,[f(u(i.$t(`dcwDetail.k1dw4fzf094`)),1),a[67]||=v(`em`,null,`*`,-1)]),y(v(`select`,{"onUpdate:modelValue":a[34]||=e=>Z.productId=e,class:`inp`},[(s(!0),h(d,null,o(k.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,Fr))),128))],512),[[t,Z.productId]])]),v(`label`,Ir,[v(`span`,null,[f(u(i.$t(`dcwDetail.k1l3f8so095`)),1),a[68]||=v(`em`,null,`*`,-1)]),y(v(`input`,{"onUpdate:modelValue":a[35]||=e=>Z.name=e,class:`inp`,placeholder:i.$t(`dcwDetail.k12c11vm014`)},null,8,Lr),[[n,Z.name]])]),v(`label`,Rr,[v(`span`,null,u(i.$t(`dcwDetail.k40gkk096`)),1),y(v(`input`,{"onUpdate:modelValue":a[36]||=e=>Z.description=e,class:`inp`,placeholder:i.$t(`dcwDetail.k1hxx8hy015`)},null,8,zr),[[n,Z.description]])])]),v(`p`,Br,u(i.$t(`dcwDetail.ka1kfgh097`)),1),(s(!0),h(d,null,o(Z.params,(e,r)=>(s(),h(`div`,{key:r,class:`param-row`},[v(`label`,Vr,[v(`span`,null,u(i.$t(`dcwDetail.k1e2dtkt053`)),1),y(v(`select`,{"onUpdate:modelValue":t=>e.nodeId=t,class:`inp`},[(s(!0),h(d,null,o(O.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name)+`(`+u(Va(e.templateRef))+` · `+u(e.min)+`~`+u(e.max)+` `+u(e.unit)+`) `,9,Ur))),128))],8,Hr),[[t,e.nodeId]])]),v(`label`,Wr,[v(`span`,null,[f(u(i.$t(`dcwDetail.k3renp2098`)),1),a[69]||=v(`em`,null,`*`,-1)]),y(v(`input`,{"onUpdate:modelValue":t=>e.value=t,type:`number`,class:`inp`,step:.1},null,8,Gr),[[n,e.value,void 0,{number:!0}]])]),v(`label`,Kr,[v(`span`,null,u(i.$t(`dcwDetail.k134rw3b146`))+u(Ha(e.nodeId)??`-`)+`)`,1),y(v(`input`,{"onUpdate:modelValue":t=>e.min=t,type:`number`,class:`inp`,step:.1,placeholder:i.$t(`dcwDetail.k5vew9z016`)},null,8,qr),[[n,e.min,void 0,{number:!0}]])]),v(`label`,Jr,[v(`span`,null,u(i.$t(`dcwDetail.khrv911147`))+u(Ua(e.nodeId)??`-`)+`)`,1),y(v(`input`,{"onUpdate:modelValue":t=>e.max=t,type:`number`,class:`inp`,step:.1,placeholder:i.$t(`dcwDetail.kzoh5pr017`)},null,8,Yr),[[n,e.max,void 0,{number:!0}]])]),v(`button`,{class:`mini-btn danger param-del`,onClick:e=>Z.params.splice(r,1)},u(i.$t(`dcwDetail.k44idg099`)),9,Xr)]))),128)),v(`button`,{class:`mini-btn`,onClick:a[37]||=e=>Z.params.push({nodeId:O.value[0]?.id??``,value:``,min:``,max:``})},u(i.$t(`dcwDetail.k1broh7h100`)),1),v(`p`,Zr,u(i.$t(`dcwDetail.k1h5gues101`)),1),(s(!0),h(d,null,o(Z.daqWindows,(e,r)=>(s(),h(`div`,{key:`dw-${r}`,class:`param-row`},[v(`label`,Qr,[v(`span`,null,u(i.$t(`dcwDetail.k1empnnb102`)),1),y(v(`select`,{"onUpdate:modelValue":t=>e.nodeId=t,class:`inp`},[(s(!0),h(d,null,o(T.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name)+`(`+u(e.min)+`~`+u(e.max)+` `+u(e.unit)+`) `,9,ei))),128))],8,$r),[[t,e.nodeId]])]),v(`label`,ti,[v(`span`,null,u(i.$t(`dcwDetail.kqm08ap103`)),1),y(v(`input`,{"onUpdate:modelValue":t=>e.min=t,type:`number`,class:`inp`,step:.1},null,8,ni),[[n,e.min,void 0,{number:!0}]])]),v(`label`,ri,[v(`span`,null,u(i.$t(`dcwDetail.kpypf8g104`)),1),y(v(`input`,{"onUpdate:modelValue":t=>e.max=t,type:`number`,class:`inp`,step:.1},null,8,ii),[[n,e.max,void 0,{number:!0}]])]),v(`button`,{class:`mini-btn danger param-del`,onClick:e=>Z.daqWindows.splice(r,1)},u(i.$t(`dcwDetail.k44idg099`)),9,ai)]))),128)),v(`button`,{class:`mini-btn`,disabled:T.value.length===0,title:T.value.length===0?`本产线暂无数采节点`:``,onClick:a[38]||=e=>Z.daqWindows.push({nodeId:T.value[0]?.id??``,min:``,max:``})},u(i.$t(`dcwDetail.kv1de1p105`)),9,oi),X.value?(s(),h(`p`,si,u(X.value),1)):g(``,!0),v(`div`,ci,[v(`button`,{class:`aw-pill outline`,onClick:a[39]||=e=>Y.value=!1},u(i.$t(`dcwDetail.k3xdnn052`)),1),v(`button`,{class:`pill-btn`,disabled:Zo.value,onClick:ts},u(Zo.value?i.$t(`dcwDetail.k1b38d59164`):i.$t(`dcwDetail.k1b3kwg0177`)),9,li)])])])):g(``,!0),Ro.value?(s(),h(`div`,{key:5,class:`modal-mask`,onClick:a[42]||=r(e=>Ro.value=!1,[`self`])},[v(`div`,ui,[v(`div`,di,[v(`h3`,null,[f(u(l(b)(`dcwDetail.histTitle`)),1),K.value?(s(),h(`span`,fi,u(K.value.name)+` · v`+u(K.value.version),1)):g(``,!0)]),v(`button`,{class:`mini-btn`,onClick:a[41]||=e=>Ro.value=!1},` ✕ `)]),q.value?(s(),h(`p`,pi,u(q.value),1)):g(``,!0),Bo.value?(s(),h(`p`,mi,u(l(b)(`dcwDetail.histLoading`)),1)):zo.value.length===0?(s(),h(`div`,hi,u(l(b)(`dcwDetail.histEmpty`)),1)):(s(!0),h(d,{key:3},o(zo.value,(e,t)=>(s(),h(`div`,{key:e.version,class:c([`ver-row`,{cur:e.current}])},[v(`div`,gi,[v(`span`,_i,`v`+u(e.version),1),v(`span`,{class:c([`ver-src`,e.by??(e.current?`cur`:``)])},u(e.current?l(b)(`dcwDetail.histCurrent`):Ho(e.by)),3),v(`span`,vi,u(e.at.slice(0,19).replace(`T`,` `)),1),v(`span`,yi,u(e.actorName||`—`),1),e.current?g(``,!0):(s(),h(`button`,{key:0,class:`mini-btn`,onClick:t=>Wo(e.version)},u(l(b)(`dcwDetail.revertTo`)),9,bi))]),e.description?(s(),h(`p`,xi,u(e.description),1)):g(``,!0),v(`p`,Si,u(Uo(e,t)),1)],2))),128))])])):g(``,!0),v(`section`,Ci,[v(`p`,wi,u(i.$t(`dcwDetail.k1us3jse106`)),1),v(`div`,Ti,[v(`label`,Ei,[v(`span`,null,u(i.$t(`dcwDetail.k3waz1025`)),1),y(v(`select`,{"onUpdate:modelValue":a[43]||=e=>J.productId=e,class:`inp`,onChange:a[44]||=e=>J.recipeId=``},[v(`option`,Di,u(i.$t(`dcwDetail.k1bkl1jx107`)),1),(s(!0),h(d,null,o(k.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,Oi))),128))],544),[[t,J.productId]])]),v(`label`,ki,[v(`span`,null,u(i.$t(`dcwDetail.k48grv027`)),1),y(v(`select`,{"onUpdate:modelValue":a[45]||=e=>J.recipeId=e,class:`inp`,disabled:!J.productId},[v(`option`,ji,u(i.$t(`dcwDetail.k1bkx7cr108`)),1),(s(!0),h(d,null,o(Io.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,Mi))),128))],8,Ai),[[t,J.recipeId]])]),v(`label`,Ni,[v(`span`,null,u(i.$t(`dcwDetail.k1demcae109`)),1),y(v(`select`,{"onUpdate:modelValue":a[46]||=e=>J.paramKey=e,class:`inp`},[v(`option`,Pi,u(i.$t(`dcwDetail.k1bkx7ya110`)),1),(s(!0),h(d,null,o(Yo.value,e=>(s(),h(`option`,{key:e,value:e},u(e),9,Fi))),128))],512),[[t,J.paramKey]])]),v(`label`,Ii,[v(`span`,null,u(i.$t(`dcwDetail.k45uio082`)),1),y(v(`select`,{"onUpdate:modelValue":a[47]||=e=>J.nodeId=e,class:`inp`},[v(`option`,Li,u(i.$t(`dcwDetail.k1bkul3k111`)),1),(s(!0),h(d,null,o(T.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,Ri))),128))],512),[[t,J.nodeId]])]),v(`label`,zi,[v(`span`,null,u(i.$t(`dcwDetail.kx2ojn0112`)),1),y(v(`input`,{"onUpdate:modelValue":a[48]||=e=>J.lastMin=e,type:`number`,min:`1`,max:`10080`,class:`inp`},null,512),[[n,J.lastMin,void 0,{number:!0}]])]),v(`label`,Bi,[v(`span`,null,u(i.$t(`dcwDetail.kjvnvn4113`)),1),y(v(`input`,{"onUpdate:modelValue":a[49]||=e=>J.bucketMs=e,type:`number`,min:`1000`,step:`500`,class:`inp`},null,512),[[n,J.bucketMs,void 0,{number:!0}]])]),v(`div`,Vi,[v(`button`,{class:`pill-btn`,disabled:Ko.value,onClick:Jo},u(Ko.value?i.$t(`dcwDetail.k1eyx09r165`):i.$t(`dcwDetail.k416ek178`)),9,Hi)])]),qo.value?(s(),h(`p`,Ui,u(qo.value),1)):g(``,!0),Go.value?(s(),h(`div`,Wi,[v(`table`,Gi,[v(`thead`,null,[v(`tr`,null,[v(`th`,null,u(i.$t(`dcwDetail.k48hde081`)),1),v(`th`,null,u(i.$t(`dcwDetail.k45uio082`)),1),v(`th`,null,u(i.$t(`dcwDetail.k42kcu114`)),1),v(`th`,null,u(i.$t(`dcwDetail.k49ujb115`)),1),v(`th`,null,u(i.$t(`dcwDetail.k40pvw116`)),1),v(`th`,null,u(i.$t(`dcwDetail.k3xho3117`)),1)])]),v(`tbody`,null,[(s(!0),h(d,null,o(Go.value.channels,e=>(s(),h(`tr`,{key:e.nodeId},[v(`td`,null,[f(u(e.ch),1),v(`small`,Ki,u(e.unit),1)]),v(`td`,null,u(e.nodeName),1),v(`td`,qi,u(e.points.length),1),v(`td`,Ji,u(is(e.points[0])),1),v(`td`,Yi,u(is(e.points[e.points.length-1])),1),v(`td`,Xi,u(new Date(e.points[0]?.at??0).toLocaleTimeString())+` ~ `+u(new Date(e.points[e.points.length-1]?.at??0).toLocaleTimeString()),1)]))),128))])])])):g(``,!0)]),Xa.value.length?(s(),h(`section`,Zi,[v(`p`,Qi,u(i.$t(`dcwDetail.kw7ym9b148`))+` `+u(Xa.value.length)+` `+u(i.$t(`dcwDetail.k40bfz150`)),1),v(`table`,$i,[v(`tbody`,null,[(s(!0),h(d,null,o(Xa.value.slice(0,12),e=>(s(),h(`tr`,{key:e.id},[v(`td`,ea,u(e.at.slice(5,19)),1),v(`td`,null,u(e.param),1),v(`td`,null,u(e.nodeName),1),v(`td`,ta,u(e.eng),1),v(`td`,na,` raw `+u(e.raw??`-`),1),v(`td`,null,[v(`span`,{class:c([`st-pill`,e.ok?`ok`:`alarm`])},u(e.ok?`ACK`:i.$t(`dcwDetail.k3yit7139`)),3)]),v(`td`,ra,u(e.recipeRunId?i.$t(`dcwDetail.k6vgks7181`,{p0:e.recipeRunId}):`手动`),1)]))),128))])])])):g(``,!0),Mo.value?(s(),h(`div`,{key:7,class:`modal-mask`,onClick:a[53]||=r(e=>Mo.value=!1,[`self`])},[v(`div`,ia,[v(`h3`,aa,u(i.$t(`dcwDetail.k1efduyf118`)),1),v(`div`,oa,[v(`label`,sa,[v(`span`,null,[f(u(i.$t(`dcwDetail.k1avjrl6119`)),1),a[70]||=v(`em`,null,`*`,-1)]),y(v(`input`,{"onUpdate:modelValue":a[50]||=e=>W.name=e,class:`inp`,placeholder:i.$t(`dcwDetail.k12c11vm014`)},null,8,ca),[[n,W.name]])]),v(`label`,la,[v(`span`,null,u(i.$t(`dcwDetail.k40gkk096`)),1),y(v(`input`,{"onUpdate:modelValue":a[51]||=e=>W.description=e,class:`inp`,placeholder:i.$t(`dcwDetail.k1hxx8hy015`)},null,8,ua),[[n,W.description]])])]),Po.value?(s(),h(`p`,da,u(Po.value),1)):g(``,!0),v(`div`,fa,[v(`button`,{class:`aw-pill outline`,onClick:a[52]||=e=>Mo.value=!1},u(i.$t(`dcwDetail.k3xdnn052`)),1),v(`button`,{class:`pill-btn`,disabled:No.value,onClick:Fo},u(No.value?i.$t(`dcwDetail.k1bg4759156`):i.$t(`dcwDetail.k1bg4kn6179`)),9,pa)])])])):g(``,!0),l(S).error?(s(),h(`p`,ma,[f(u(l(S).error)+`(`,1),ne(p,{to:`/workshop`},{default:te(()=>[f(u(i.$t(`dcwDetail.k1bhhheq120`)),1)]),_:1}),a[71]||=f(`) `,-1)])):g(``,!0),v(`section`,ha,[v(`div`,ga,[v(`b`,null,u(i.$t(`dcwDetail.k1ledgt001`)),1),y(v(`select`,{"onUpdate:modelValue":a[54]||=e=>E.value=e,class:`inp`,onChange:Ga},[v(`option`,_a,u(i.$t(`dcwDetail.k1ledgs001`)),1),(s(!0),h(d,null,o(O.value,e=>(s(),h(`option`,{key:e.id,value:e.id},u(e.name),9,va))),128))],544),[[t,E.value]])]),D.value?(s(),h(d,{key:0},[v(`div`,ya,[v(`div`,ba,[v(`small`,null,u(i.$t(`dcwDetail.k1ledgv001`)),1),v(`b`,xa,u(D.value.current??`--`),1)]),v(`div`,Sa,[v(`small`,null,u(i.$t(`dcwDetail.k1ledgv002`)),1),v(`b`,Ca,u(D.value.recipeTarget??`--`),1)]),v(`div`,wa,[v(`small`,null,u(i.$t(`dcwDetail.k1ledgv003`)),1),v(`b`,Ta,u(D.value.lastGood??`--`),1)]),v(`button`,{class:`mini-btn`,onClick:Ga},u(i.$t(`dcwDetail.k1ledga001`)),1),v(`button`,{class:`mini-btn danger`,onClick:Ka},u(i.$t(`dcwDetail.k1ledga002`)),1)]),v(`div`,Ea,[v(`div`,Da,[v(`small`,Oa,u(i.$t(`dcwDetail.k1ledgh001`)),1),v(`ul`,ka,[(s(!0),h(d,null,o(D.value.journal,e=>(s(),h(`li`,{key:e.id},u(e.at.slice(5,16).replace(`T`,` `))+` [`+u(e.source)+`] `+u(e.prevValue??`?`)+` → `+u(e.newValue),1))),128))])]),v(`div`,Aa,[v(`small`,ja,u(i.$t(`dcwDetail.k1ledgr001`)),1),v(`ul`,Ma,[(s(!0),h(d,null,o(D.value.records,e=>(s(),h(`li`,{key:e.id,class:`ledger-rec`},[v(`span`,{class:c([`rec-st`,e.status])},u(e.status),3),v(`span`,Na,u(e.params[0]?.from??`?`)+` → `+u(e.params[0]?.to),1),v(`small`,null,u(e.judge?`${e.judge.verdict}(${e.judge.by})`:e.status===`open`?`open`:e.closedBy??``),1)]))),128))])])])],64)):g(``,!0)])]))}}}),[[`__scopeId`,`data-v-51b1ce74`]]);export{Pa as default};
|