agentworkshop 0.7.39 → 0.7.41
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 +55 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +55 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/88GOowgO2.js +1 -0
- package/.output/public/_nuxt/{BNT8gYU92.js → BC9wjTJK2.js} +2 -2
- package/.output/public/_nuxt/{CY9LbPCI.js → BN16aRdQ.js} +1 -1
- package/.output/public/_nuxt/BWVhZntO.js +1 -0
- package/.output/public/_nuxt/{HBLJ-wei.js → BXxH0UQE.js} +1 -1
- package/.output/public/_nuxt/{zIGh7R49.js → BneN7fbu.js} +1 -1
- package/.output/public/_nuxt/BsROmY89.js +1 -0
- package/.output/public/_nuxt/{DUrecWPx.js → C0ZrS1KL.js} +2 -2
- package/.output/public/_nuxt/{C_OLzD09.js → C4oW1HsE.js} +1 -1
- package/.output/public/_nuxt/{CUDwzgLV.js → C4s_niy-.js} +9 -9
- package/.output/public/_nuxt/CFxtLwjp.js +1 -0
- package/.output/public/_nuxt/{Cec0Ua3F.js → CS50LB_l.js} +1 -1
- package/.output/public/_nuxt/CssgYAAL2.js +1 -0
- package/.output/public/_nuxt/D6mbFA-a.js +1 -0
- package/.output/public/_nuxt/D98NH8kG.js +1 -0
- package/.output/public/_nuxt/DGIuvyRN2.js +1 -0
- package/.output/public/_nuxt/DGbd-UiG.js +1 -0
- package/.output/public/_nuxt/{CojCTLKD.js → DGj-WEBg.js} +1 -1
- package/.output/public/_nuxt/{DDShH71m.js → DS8qj8EL.js} +1 -1
- package/.output/public/_nuxt/DTFCy6h-.js +1 -0
- package/.output/public/_nuxt/{DrYV5i68.js → DUjW5Yq5.js} +1 -1
- package/.output/public/_nuxt/{45zuyAso.js → D_OTvQza.js} +1 -1
- package/.output/public/_nuxt/Dap5PmTL.js +2 -0
- package/.output/public/_nuxt/Dqw1lpr-.js +1 -0
- package/.output/public/_nuxt/DvLxILQP.js +1 -0
- package/.output/public/_nuxt/IREZ1eC2.js +1 -0
- package/.output/public/_nuxt/TownView.f-YOdXRs.css +1 -0
- package/.output/public/_nuxt/_id_.D9ymtHB5.css +1 -0
- package/.output/public/_nuxt/_id_.jf-_8E_c.css +1 -0
- package/.output/public/_nuxt/_wsId_.B4WiqkIS.css +1 -0
- package/.output/public/_nuxt/agents.ZD0rVdHE.css +1 -0
- package/.output/public/_nuxt/aml.BN8ZEW4h.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/78a295bb-2072-48a4-8b46-6d545fdae743.json +1 -0
- package/.output/public/_nuxt/ca4TJ3Op.js +1 -0
- package/.output/public/_nuxt/channel-templates.BOtahzPi.css +1 -0
- package/.output/public/_nuxt/daq.DjSgY94l.css +1 -0
- package/.output/public/_nuxt/dcw.8Y7FqCVN.css +1 -0
- package/.output/public/_nuxt/default.J32SgqFY.css +1 -0
- package/.output/public/_nuxt/entry.bdm0tv6M.css +1 -0
- package/.output/public/_nuxt/eqq3wWQF.js +18 -0
- package/.output/public/_nuxt/logs.BpKzmKsh.css +1 -0
- package/.output/public/_nuxt/monitor.D9pe7qN6.css +1 -0
- package/.output/public/_nuxt/pages.D7aSDlUI.css +1 -0
- package/.output/public/_nuxt/permissions.DwTVlFe6.css +1 -0
- package/.output/public/_nuxt/plugins.sb4nDGqr.css +1 -0
- package/.output/public/_nuxt/{Cbq-mryP.js → qr6R6Ha1.js} +1 -1
- package/.output/public/_nuxt/settings.BTgR-NiE.css +1 -0
- package/.output/public/_nuxt/teams.CxnxKVVs.css +1 -0
- package/.output/public/_nuxt/tokens.BFY7qv4f.css +1 -0
- package/.output/public/_nuxt/{town.DKIAhKnx.css → town.BBXZmeoP.css} +1 -1
- package/.output/public/_nuxt/users.DLgZ1D0h.css +1 -0
- package/.output/public/_nuxt/workshop.CR_QzeAN.css +1 -0
- package/.output/public/_nuxt/{BzHEilTt.js → xh3_vYcu.js} +1 -1
- package/.output/public/_nuxt/yF0aYMF1.js +4 -0
- package/.output/server/chunks/_/entity.mjs.map +1 -1
- package/.output/server/chunks/_/nitro.mjs +2355 -1362
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/build/{TownView-jVazYOjN.mjs → TownView--otsnr_7.mjs} +290 -208
- package/.output/server/chunks/build/TownView--otsnr_7.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CfVosNg3.mjs → _id_-Brv-JSvr.mjs} +142 -141
- package/.output/server/chunks/build/_id_-Brv-JSvr.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-Hwr4rZpr.mjs → _id_-D9pl1OZy.mjs} +38 -36
- package/.output/server/chunks/build/_id_-D9pl1OZy.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs → _wsId_-BASfDf0s.mjs} +295 -261
- package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs.map → _wsId_-BASfDf0s.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents-Bvin73QY.mjs → agents-CLQqJF2y.mjs} +21 -27
- package/.output/server/chunks/build/agents-CLQqJF2y.mjs.map +1 -0
- package/.output/server/chunks/build/{aml-BCSJCdX7.mjs → aml-_7FdFL2p.mjs} +109 -109
- package/.output/server/chunks/build/{aml-BCSJCdX7.mjs.map → aml-_7FdFL2p.mjs.map} +1 -1
- package/.output/server/chunks/build/api-error-dul30BYQ.mjs.map +1 -1
- package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs → channel-templates-p6SZNjlM.mjs} +19 -19
- package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs.map → channel-templates-p6SZNjlM.mjs.map} +1 -1
- package/.output/server/chunks/build/{daq-C03Uu5UE.mjs → daq-DkMvD8sg.mjs} +193 -126
- package/.output/server/chunks/build/daq-DkMvD8sg.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-6vEYVeje.mjs → dcw-C1jgVJkO.mjs} +46 -46
- package/.output/server/chunks/build/{dcw-6vEYVeje.mjs.map → dcw-C1jgVJkO.mjs.map} +1 -1
- package/.output/server/chunks/build/{default-CZmZFpqH.mjs → default-BE4r0FZN.mjs} +152 -58
- package/.output/server/chunks/build/{default-CZmZFpqH.mjs.map → default-BE4r0FZN.mjs.map} +1 -1
- package/.output/server/chunks/build/{logs-B-xhuqln.mjs → logs--dByNyhw.mjs} +35 -35
- package/.output/server/chunks/build/{logs-B-xhuqln.mjs.map → logs--dByNyhw.mjs.map} +1 -1
- package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs → monitor-C0okQaXz.mjs} +33 -33
- package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs.map → monitor-C0okQaXz.mjs.map} +1 -1
- package/.output/server/chunks/build/{pages-BO7yZsXA.mjs → pages-B0bUWnC6.mjs} +35 -19
- package/.output/server/chunks/build/pages-B0bUWnC6.mjs.map +1 -0
- package/.output/server/chunks/build/{permissions-B52oOmaO.mjs → permissions-68SsNjex.mjs} +12 -12
- package/.output/server/chunks/build/{permissions-B52oOmaO.mjs.map → permissions-68SsNjex.mjs.map} +1 -1
- package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs → plugins-lGlUr1lj.mjs} +17 -17
- package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs.map → plugins-lGlUr1lj.mjs.map} +1 -1
- package/.output/server/chunks/build/{settings-DoQ2Oq3P.mjs → settings-Ddd1qx2Z.mjs} +50 -47
- package/.output/server/chunks/build/settings-Ddd1qx2Z.mjs.map +1 -0
- package/.output/server/chunks/build/{teams-2kz3CusY.mjs → teams-MEDLZdMn.mjs} +38 -34
- package/.output/server/chunks/build/teams-MEDLZdMn.mjs.map +1 -0
- package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs → tokens-C7fTM5C2.mjs} +14 -14
- package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs.map → tokens-C7fTM5C2.mjs.map} +1 -1
- package/.output/server/chunks/build/{town-BOl6hs9B.mjs → town-CoQdblbZ.mjs} +38 -12
- package/.output/server/chunks/build/town-CoQdblbZ.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqStream-CIBaiGAl.mjs → useDaqStream-DfCFpb3p.mjs} +9 -3
- package/.output/server/chunks/build/useDaqStream-DfCFpb3p.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwStream-CBbiYnWe.mjs → useDcwStream-UPiX-3iO.mjs} +11 -2
- package/.output/server/chunks/build/useDcwStream-UPiX-3iO.mjs.map +1 -0
- package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs +49 -0
- package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -0
- package/.output/server/chunks/build/{users-fohSmF-J.mjs → users-Cfd5-l2-.mjs} +6 -6
- package/.output/server/chunks/build/{users-fohSmF-J.mjs.map → users-Cfd5-l2-.mjs.map} +1 -1
- package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs → workshop-BL5bhfs0.mjs} +15 -15
- package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs.map → workshop-BL5bhfs0.mjs.map} +1 -1
- package/.output/server/chunks/build/{workspaces-BuydxM-3.mjs → workspaces-Bgz5Ekwp.mjs} +18 -3
- package/.output/server/chunks/build/workspaces-Bgz5Ekwp.mjs.map +1 -0
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +6 -2
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +3 -3
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +8 -6
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +5 -5
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +14 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +4 -3
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +31 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +28 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +32 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +34 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +33 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +34 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +3 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +5 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +3 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +3 -3
- package/.output/server/chunks/virtual/entry.mjs +51 -25
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +203 -39
- package/README.md +739 -591
- package/app/app.vue +9 -3
- package/app/assets/css/main.css +517 -7
- package/app/components/AppHeader.vue +98 -7
- package/app/components/AppSidebar.vue +117 -11
- package/app/components/AwChart.vue +2 -1
- package/app/components/workshop/AgentInspectorDrawer.vue +6 -6
- package/app/components/workshop/AgentLanesView.vue +52 -1
- package/app/components/workshop/AssetLibrary.vue +4 -2
- package/app/components/workshop/ChannelSessionList.vue +4 -2
- package/app/components/workshop/Composer.vue +96 -0
- package/app/components/workshop/DaqNodeRow.vue +19 -0
- package/app/components/workshop/DaqTemplateIcon.vue +33 -0
- package/app/components/workshop/DeviceTwinPanel.vue +37 -35
- package/app/components/workshop/EventBlock.vue +3 -3
- package/app/components/workshop/InspectorPanel.vue +47 -11
- package/app/components/workshop/LiveAgentBar.vue +34 -0
- package/app/components/workshop/TaskBoardView.vue +83 -33
- package/app/components/workshop/TranscriptTimeline.vue +56 -0
- package/app/components/workshop/blocks/ClusterError.vue +1 -1
- package/app/components/workshop/blocks/ClusterRoute.vue +3 -1
- package/app/components/workshop/blocks/ClusterStatus.vue +2 -2
- package/app/components/workshop/blocks/ClusterStream.vue +8 -2
- package/app/components/workshop/town/ModelPreview3D.vue +1 -1
- package/app/components/workshop/town/TownView.vue +507 -82
- package/app/composables/useResponsive.ts +88 -0
- package/app/composables/useRouteMeta.ts +3 -0
- package/app/composables/workshop/useDaqStream.ts +7 -4
- package/app/composables/workshop/useDcwStream.ts +8 -2
- package/app/composables/workshop/useVisibleInterval.ts +2 -2
- package/app/composables/workshop/useWorkshopApi.ts +1 -1
- package/app/layouts/default.vue +46 -2
- package/app/pages/aml/index.vue +712 -616
- package/app/pages/daq/[id].vue +12 -7
- package/app/pages/daq/index.vue +216 -13
- package/app/pages/dcw/[id].vue +117 -32
- package/app/pages/dcw/index.vue +83 -23
- package/app/pages/index.vue +35 -1
- package/app/pages/logs/index.vue +147 -13
- package/app/pages/monitor.vue +56 -12
- package/app/pages/permissions/index.vue +34 -0
- package/app/pages/plugins/index.vue +35 -4
- package/app/pages/settings.vue +90 -21
- package/app/pages/tokens.vue +23 -0
- package/app/pages/town.vue +50 -5
- package/app/pages/users.vue +23 -0
- package/app/pages/workshop/agents.vue +92 -2
- package/app/pages/workshop/channel-templates.vue +53 -0
- package/app/pages/workshop/index.vue +14 -0
- package/app/pages/workshop/teams.vue +66 -6
- package/app/pages/workshop/w/[wsId].vue +202 -14
- package/app/plugins/aw-plugins.client.ts +13 -8
- package/app/stores/app.ts +33 -1
- package/app/stores/workshop/user.ts +1 -1
- package/app/stores/workshop/workspaces.ts +18 -2
- package/app/utils/api-error.ts +1 -1
- package/cli/commands/build.mjs +8 -1
- package/docker-compose.yml +6 -0
- package/docs/cli.en.md +2 -2
- package/docs/cli.md +2 -2
- package/docs/plugins.en.md +33 -1
- package/docs/plugins.md +29 -1
- package/docs/sdk.en.md +1 -1
- package/docs/sdk.md +1 -1
- package/i18n/locales/en.ts +2 -0
- package/i18n/locales/zh-CN.ts +2 -0
- package/nuxt.config.ts +31 -0
- package/package.json +11 -2
- package/scripts/_dbg-param-map-e2e.ts +242 -0
- package/scripts/_dbg-param-map-rest-smoke.mjs +73 -0
- package/scripts/_dbg-param-real-scenario.mjs +153 -0
- package/scripts/_loop-biax-campaign.mjs +124 -0
- package/scripts/api-live-e2e.mjs +40 -8
- package/scripts/capture-walkthrough.mjs +232 -0
- package/scripts/render-walkthrough-figure.mjs +46 -0
- package/scripts/seed-walkthrough-fixture.mjs +143 -0
- package/scripts/test-plugin-hardening.mjs +8 -0
- package/scripts/test-serial-bridge.mjs +418 -0
- package/scripts/ui/admin-shots.mjs +46 -0
- package/scripts/ui/audit-layout.mjs +301 -0
- package/scripts/ui/bump-microfont.mjs +39 -0
- package/scripts/ui/e2e-interactive.mjs +328 -0
- package/scripts/ui/lib.mjs +198 -0
- package/scripts/ui/linkcheck2.mjs +37 -0
- package/scripts/ui/live-render-check.mjs +72 -0
- package/scripts/ui/md-lint.mjs +80 -0
- package/scripts/ui/perf-audit.mjs +132 -0
- package/scripts/ui/readme-assets.mjs +30 -0
- package/scripts/ui/readme-shots.mjs +42 -0
- package/scripts/ui/record.mjs +225 -0
- package/scripts/ui/seed-admin.mjs +68 -0
- package/scripts/ui/seed-demo.mjs +83 -0
- package/scripts/ui/seed-industrial-demo.mjs +171 -0
- package/scripts/ui/shot-hero.mjs +25 -0
- package/scripts/ui/shots.mjs +75 -0
- package/scripts/ui/sim-ui-shot.mjs +16 -0
- package/scripts/ui/verify-nav.mjs +51 -0
- package/scripts/ui/verify-responsive.mjs +285 -0
- package/server/api/system/config-groups/[id].patch.ts +1 -1
- package/server/api/system/config-groups/index.post.ts +1 -1
- package/server/api/system/settings/events.get.ts +1 -1
- package/server/api/system/settings/index.patch.ts +1 -1
- package/server/api/workshop/agent-tools/invoke.post.ts +16 -2
- package/server/api/workshop/aml/datasets/[id].get.ts +8 -1
- package/server/api/workshop/daq/index.get.ts +3 -1
- package/server/api/workshop/daq/infra/reconnect.post.ts +1 -1
- package/server/api/workshop/daq/templates/[key].delete.ts +1 -0
- package/server/api/workshop/daq/templates/[key].patch.ts +1 -0
- package/server/api/workshop/daq/templates/index.post.ts +1 -0
- package/server/api/workshop/dcw/[id]/write.post.ts +10 -2
- package/server/api/workshop/dcw/[id].delete.ts +5 -2
- package/server/api/workshop/dcw/index.get.ts +5 -0
- package/server/api/workshop/dcw/lines/[id].patch.ts +1 -1
- package/server/api/workshop/dcw/params/[id]/read.post.ts +17 -0
- package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -0
- package/server/api/workshop/dcw/params/[id].delete.ts +19 -0
- package/server/api/workshop/dcw/params/[id].patch.ts +23 -0
- package/server/api/workshop/dcw/params/index.get.ts +27 -0
- package/server/api/workshop/dcw/params/index.post.ts +25 -0
- package/server/api/workshop/permissions/index.get.ts +3 -1
- package/server/plugins/aw-plugins.ts +23 -10
- package/server/plugins/dev-stability-guard.ts +3 -1
- package/server/plugins/system-config.ts +6 -1
- package/server/plugins-builtin/serial-bridge/client.mjs +210 -0
- package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -0
- package/server/plugins-builtin/serial-bridge/i18n.json +62 -0
- package/server/plugins-builtin/serial-bridge/index.mjs +247 -0
- package/server/plugins-builtin/serial-bridge/lib.mjs +208 -0
- package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -0
- package/server/services/system-config.ts +28 -9
- package/server/services/workshop/agents/adapters/one-shot-cli-agent.ts +2 -1
- package/server/services/workshop/agents/agent-interface.ts +8 -6
- package/server/services/workshop/agents/base-agent.ts +18 -4
- package/server/services/workshop/agents/claude-agent.ts +7 -3
- package/server/services/workshop/agents/codex-agent.ts +3 -3
- package/server/services/workshop/agents/dsh-agent.ts +3 -3
- package/server/services/workshop/agents/goose-agent.ts +0 -1
- package/server/services/workshop/agents/harness-terminal.ts +14 -1
- package/server/services/workshop/agents/hermes-agent.ts +4 -2
- package/server/services/workshop/agents/host-tool-bridge.ts +5 -1
- package/server/services/workshop/agents/industrial-context.ts +4 -1
- package/server/services/workshop/agents/industrial-tools.ts +164 -6
- package/server/services/workshop/agents/omp-agent.ts +15 -9
- package/server/services/workshop/agents/opencode-agent.ts +47 -21
- package/server/services/workshop/agents/qwen-agent.ts +10 -5
- package/server/services/workshop/aml/entity.ts +3 -1
- package/server/services/workshop/aml/python-runtime.ts +3 -2
- package/server/services/workshop/daq/bus/mqtt.adapter.ts +8 -4
- package/server/services/workshop/daq/daq-controller.ts +25 -5
- package/server/services/workshop/daq/daq-runtime.ts +5 -3
- package/server/services/workshop/daq/drivers.ts +141 -11
- package/server/services/workshop/daq/host-ports.ts +3 -2
- package/server/services/workshop/daq/storage/timescale.adapter.ts +3 -1
- package/server/services/workshop/db/channel.repo.ts +4 -0
- package/server/services/workshop/db/ops.repo.ts +5 -2
- package/server/services/workshop/db/retention.ts +8 -3
- package/server/services/workshop/dcw/dcw-controller.ts +147 -16
- package/server/services/workshop/dcw/dcw-product.repo.ts +38 -1
- package/server/services/workshop/dcw/dcw-runtime.ts +3 -2
- package/server/services/workshop/dcw/drivers.ts +90 -4
- package/server/services/workshop/dcw/param-conversion.ts +78 -0
- package/server/services/workshop/dcw/param-limits.ts +142 -0
- package/server/services/workshop/dcw/param-map.repo.ts +305 -0
- package/server/services/workshop/dcw/plugin-bridge.ts +45 -0
- package/server/services/workshop/dcw/recipe-rollback-manager.ts +13 -7
- package/server/services/workshop/plugins/host.mjs +30 -0
- package/server/services/workshop/runtime/agent-runtime.ts +4 -0
- package/server/services/workshop/runtime/manager.ts +9 -2
- package/server/services/workshop/settings.ts +4 -2
- package/server/types/pg.d.ts +49 -0
- package/server/utils/stability-severity.ts +13 -2
- package/shared/config/groups.mjs +22 -1
- package/shared/config/home.d.mts +28 -0
- package/shared/daq-protocol.ts +15 -0
- package/shared/dcw-protocol.ts +136 -0
- package/uno.config.ts +12 -1
- package/.output/public/_nuxt/8NMOXZOV.js +0 -1
- package/.output/public/_nuxt/BFkgkW8u.js +0 -4
- package/.output/public/_nuxt/C5gUkRwn.js +0 -1
- package/.output/public/_nuxt/CM12FuB42.js +0 -1
- package/.output/public/_nuxt/CZiw7sEV.js +0 -1
- package/.output/public/_nuxt/Cc_9VzD42.js +0 -1
- package/.output/public/_nuxt/CdPzkOMV.js +0 -1
- package/.output/public/_nuxt/CmsOtOAA2.js +0 -1
- package/.output/public/_nuxt/D1YDxZpZ.js +0 -1
- package/.output/public/_nuxt/D20Yamr4.js +0 -1
- package/.output/public/_nuxt/DAe0h2MB.js +0 -1
- package/.output/public/_nuxt/DmqknNvV.js +0 -18
- package/.output/public/_nuxt/DnUuIR83.js +0 -1
- package/.output/public/_nuxt/S_fVQwJK.js +0 -1
- package/.output/public/_nuxt/TownView.0oLiQgTC.css +0 -1
- package/.output/public/_nuxt/_id_.D-SYuyZb.css +0 -1
- package/.output/public/_nuxt/_id_.hma_BU6T.css +0 -1
- package/.output/public/_nuxt/_wsId_.B12v3PhY.css +0 -1
- package/.output/public/_nuxt/agents.BV70ioCv.css +0 -1
- package/.output/public/_nuxt/ahgEJu2R.js +0 -1
- package/.output/public/_nuxt/aml.COEKNNqK.css +0 -1
- package/.output/public/_nuxt/builds/meta/4457d63f-0866-4cea-b320-04a321f24795.json +0 -1
- package/.output/public/_nuxt/channel-templates.C-M5nKcC.css +0 -1
- package/.output/public/_nuxt/daq.B3265ZDn.css +0 -1
- package/.output/public/_nuxt/dcw.DLYZqEhT.css +0 -1
- package/.output/public/_nuxt/default.BXI_fZUi.css +0 -1
- package/.output/public/_nuxt/entry.BB-Eeh-J.css +0 -1
- package/.output/public/_nuxt/logs.CqFyMrJw.css +0 -1
- package/.output/public/_nuxt/monitor.B--1dPzs.css +0 -1
- package/.output/public/_nuxt/pages.ooEzrMm9.css +0 -1
- package/.output/public/_nuxt/permissions.B1pjGChZ.css +0 -1
- package/.output/public/_nuxt/plugins.5e5chZ67.css +0 -1
- package/.output/public/_nuxt/pz2JDAM7.js +0 -2
- package/.output/public/_nuxt/settings.Dm3M0RLy.css +0 -1
- package/.output/public/_nuxt/teams.BC75EGnR.css +0 -1
- package/.output/public/_nuxt/tokens.xRb1fSPU.css +0 -1
- package/.output/public/_nuxt/users.CXnP2E08.css +0 -1
- package/.output/public/_nuxt/workshop.Jk5HxWPE.css +0 -1
- package/.output/server/chunks/build/TownView-jVazYOjN.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-CfVosNg3.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-Hwr4rZpr.mjs.map +0 -1
- package/.output/server/chunks/build/agents-Bvin73QY.mjs.map +0 -1
- package/.output/server/chunks/build/daq-C03Uu5UE.mjs.map +0 -1
- package/.output/server/chunks/build/pages-BO7yZsXA.mjs.map +0 -1
- package/.output/server/chunks/build/settings-DoQ2Oq3P.mjs.map +0 -1
- package/.output/server/chunks/build/teams-2kz3CusY.mjs.map +0 -1
- package/.output/server/chunks/build/town-BOl6hs9B.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqStream-CIBaiGAl.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwStream-CBbiYnWe.mjs.map +0 -1
- package/.output/server/chunks/build/workspaces-BuydxM-3.mjs.map +0 -1
- /package/.output/public/_nuxt/{36oeS8_R2.js → 36oeS8_R.js} +0 -0
- /package/.output/public/_nuxt/{CYWVXZTS.js → CYWVXZTS2.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t,n}from"./BU83-NnX.js";import{S as r,Ut as i,V as a,Vt as ee,W as o,b as s,ct as c,d as l,dt as te,f as u,h as d,i as f,m as p,p as m,pt as h,tt as g,xt as _,y as v}from"./CSkxz2NX.js";import{d as ne}from"./BJHKLJJU.js";import{n as y}from"./DtYHUi5Z.js";import{n as b}from"./KZQX7xoM.js";import{n as re,r as ie,t as ae}from"./DDgJcSET.js";import{t as oe}from"./aWWIh8YL.js";import{t as se}from"./DBHNsT1Y.js";import{i as ce,n as le,t as ue}from"./BCGafdXT.js";import{r as de,t as fe}from"./CzlMDL5H.js";import{t as pe}from"./jZsY8yYz.js";import{n as me,t as he}from"./CYWVXZTS.js";import{t as ge}from"./C4DWUZ6d2.js";import{t as _e}from"./DZtm4l-P2.js";import{t as ve}from"./CClOy-Hz2.js";import{t as x}from"./DIaZ2PTo2.js";import{t as S}from"./BDNMzG2s2.js";import{t as C}from"./D0ZBQrN_2.js";import{t as ye}from"./BN6iuJEg2.js";import{t as be}from"./CNs_Ozdc2.js";var xe={class:`page`},Se={class:`head`},Ce={class:`sub`},we={class:`toolbar`},Te={key:0,class:`admin-note`},Ee={class:`grid`},De={class:`card-head`},Oe={class:`name`},ke={class:`owner`},Ae={class:`members`},je={class:`member-name`},Me={class:`member-harness`},Ne=[`onClick`],Pe={class:`aw-mono`},Fe={key:0,class:`plug-builtin-tag`},Ie={class:`plug-hint`},Le={class:`plug-source`},Re={class:`plug-text`},ze={class:`plug-name`},Be={class:`aw-mono`},Ve={key:0,class:`plug-builtin-tag`},He={class:`plug-desc`},Ue={key:0,class:`plug-hint`},w=S(r({__name:`teams`,setup(r){let{t:S}=b();be({layout:`default`});let w=ye(),T=x(),E=h([]),D=h([]),We=h([]),O=h(!1),k=async()=>{O.value=!0;try{let[e,t,n]=await Promise.all([w.listTeams(),w.listTemplates(),w.listChannels()]);E.value=e?.data??[],D.value=t?.data??[],We.value=n?.data??[]}finally{O.value=!1}};k();let A=h({});(async()=>{try{let e=(await w.listHarnesses())?.data?.harnesses;if(Array.isArray(e)){let t={};for(let n of e)t[n.id]=n.available!==!1;A.value=t}}catch{}})();let Ge=e=>A.value[e.harness]===!1,Ke=l(()=>D.value.map(e=>{let t=Ge(e);return{value:e.id,label:t?`${e.name}(${e.harness} · ${e(`agents.notInstalled`)})`:`${e.name}(${e.harness})`,disabled:t}})),j=h(`all`),qe=l(()=>{let e=T.user?.id;switch(j.value){case`mine`:return E.value.filter(t=>t.ownerUserId===e);case`public`:return E.value.filter(e=>e.visibility===`public`);case`builtin`:return E.value.filter(e=>e.isBuiltin);default:return E.value}}),M=e=>!e.isBuiltin&&(e.ownerUserId===T.user?.id||T.isAdmin),N=e=>e.isBuiltin?{text:S(`teams.k3x23c018`),color:`default`,icon:`i-tabler-lock`}:e.visibility===`public`?{text:S(`teams.k3wv1t019`),color:`green`}:{text:S(`teams.k447jj020`),color:`default`},P=h(!1),F=te({name:``,description:``,visibility:`private`}),I=h([]),L=h({});(async()=>{try{let e=await w.listPlugins(),t=e?.plugins??e?.data?.plugins??[],n=(Array.isArray(t)?t:[]).filter(e=>e.enabled!==!1);I.value=n;let r={};for(let e of n)r[e.name]=!0;L.value=r}catch{}})();let R=l({get:()=>Object.entries(L.value).filter(([,e])=>e).map(([e])=>e),set:e=>{let t={};for(let n of I.value)t[n.name]=e.includes(n.name);L.value=t}}),Je=async()=>{if(!F.name.trim()){e.warning(S(`teams.k1bvcdo2021`));return}let t=Object.entries(L.value).map(([e,t])=>({name:e,enabled:t}));await w.createTeam({name:F.name.trim(),description:F.description||void 0,visibility:F.visibility,plugins:t}),e.success(S(`teams.k3n5hak022`)),P.value=!1,F.name=``,F.description=``,F.visibility=`private`,L.value=Object.fromEntries(Object.entries(L.value).map(([e])=>[e,!0])),k()},Ye=async(t,n)=>{try{await w.updateTeam(t.id,{visibility:n?`public`:`private`}),e.success(S(n?`teams.k1globhp023`:`teams.k1xxabaf024`)),k()}catch(t){e.error(C(t))}},z=h(!1),B=h(null),V=h(``),H=h(`worker`),Xe=e=>{B.value=e,V.value=``,H.value=`worker`,z.value=!0},Ze=async()=>{if(!B.value||!V.value){e.warning(S(`teams.k1kw4rtj025`));return}try{await w.addTeamMember(B.value.id,{agentId:V.value,role:H.value}),e.success(S(`teams.k3n5hzw026`)),z.value=!1,k()}catch(t){e.error(C(t))}},Qe=async(e,t)=>{await w.removeTeamMember(e.id,t),k()},U=h(!1),W=h(null),G=h(``),K=h(!1),$e=e=>{W.value=e,G.value=``,U.value=!0},et=async()=>{if(!W.value||!G.value){e.warning(`选择目标 Channel`);return}K.value=!0;try{let t=(await w.deployTeam(W.value.id,G.value))?.data?.agents?.length??0;e.success(S(`teams.kh90glh031`,{p0:t})),U.value=!1}catch(t){e.error(C(t))}finally{K.value=!1}},tt=async t=>{await w.deleteTeam(t.id),e.success(S(`teams.k1oxjrxx027`)),k()},q=h(!1),J=h(null),Y=h([]),X=h(`default`),Z=h(!1),Q=h(null),nt=e=>{J.value=e,Y.value=[],X.value=`default`,q.value=!0,$(e)},$=async t=>{Z.value=!0;try{let e=(await w.listTeamPlugins(t.id))?.data??{};Y.value=e.plugins??[],X.value=e.source===`explicit`?`explicit`:`default`}catch(t){e.error(C(t))}finally{Z.value=!1}},rt=async(t,n)=>{if(!J.value||Q.value)return;let r=J.value.id;Q.value=t.name;try{let i=Y.value.map(e=>({name:e.name,enabled:e.name===t.name?n:e.enabled})),a=(await w.putTeamPlugins(r,{plugins:i}))?.data??{};Y.value=a.plugins??i.map(e=>({...e})),X.value=a.source===`explicit`?`explicit`:`default`,e.success(S(`teams.k1plugon043`))}catch(t){e.error(C(t))}finally{Q.value=null}};return y({title:()=>S(`titles.teams`)}),(e,r)=>{let l=t,te=pe,h=ae,y=ue,b=ve,x=de,S=fe,C=ge,ye=_e,be=se,w=ie,D=le,k=ce,A=he,Ge=me,L=re,$=n,it=oe;return a(),d(`div`,xe,[u(`div`,Se,[u(`div`,null,[u(`h2`,null,`AgentTeam `+i(e.$t(`teams.k3svl8y028`)),1),u(`p`,Ce,i(e.$t(`teams.k12gl4wn008`)),1)]),s(te,null,{default:g(()=>[s(l,{onClick:r[0]||=t=>(`navigateTo`in e?e.navigateTo:_(ne))(`/workshop`)},{default:g(()=>[v(i(e.$t(`teams.krpx6qa009`)),1)]),_:1}),s(l,{type:`primary`,onClick:r[1]||=e=>P.value=!0},{default:g(()=>[v(i(e.$t(`teams.k1efmuyx002`)),1)]),_:1})]),_:1})]),u(`div`,we,[s(h,{value:_(j),"onUpdate:value":r[2]||=e=>c(j)?j.value=e:null,size:`small`,options:[{value:`all`,label:e.$t(`chips.chipAll`,{n:_(E).length})},{value:`mine`,label:e.$t(`chips.mine`)},{value:`public`,label:e.$t(`chips.public`)},{value:`builtin`,label:e.$t(`chips.builtin`)}]},null,8,[`value`,`options`]),_(T).isAdmin?(a(),d(`span`,Te,[r[15]||=u(`span`,{class:`i-tabler-shield-check`},null,-1),v(` `+i(e.$t(`teams.k1bpgi8h010`)),1)])):p(``,!0)]),s(ye,{spinning:_(O)},{default:g(()=>[u(`div`,Ee,[(a(!0),d(f,null,o(_(qe),t=>(a(),d(`div`,{key:t.id,class:`card`},[u(`div`,De,[u(`span`,Oe,i(t.name),1),s(y,{color:N(t).color,class:`vis-tag`},{default:g(()=>[N(t).icon?(a(),d(`span`,{key:0,class:ee(N(t).icon)},null,2)):p(``,!0),v(i(N(t).text),1)]),_:2},1032,[`color`]),!t.isBuiltin&&M(t)?(a(),m(b,{key:0,checked:t.visibility===`public`,size:`small`,"checked-children":`公开`,"un-checked-children":`私有`,onChange:e=>Ye(t,e===!0)},null,8,[`checked`,`onChange`])):p(``,!0),u(`span`,ke,i(t.ownerName??`-`),1),M(t)?(a(),m(C,{key:1},{overlay:g(()=>[s(S,null,{default:g(()=>[s(x,{onClick:e=>$e(t)},{default:g(()=>[...r[16]||=[v(` 部署到 Channel… `,-1)]]),_:1},8,[`onClick`]),s(x,{onClick:e=>nt(t)},{default:g(()=>[v(i(e.$t(`teams.k1plugon047`)),1)]),_:1},8,[`onClick`]),s(x,{danger:``,onClick:e=>tt(t)},{default:g(()=>[v(i(e.$t(`teams.k1bpojhf011`)),1)]),_:1},8,[`onClick`])]),_:2},1024)]),default:g(()=>[r[17]||=u(`span`,{class:`i-tabler-dots op`},null,-1)]),_:2},1024)):(a(),m(l,{key:2,size:`small`,type:`text`,title:e.$t(`teams.kxheuf1001`),onClick:e=>$e(t)},{default:g(()=>[v(i(e.$t(`teams.k48ja7012`)),1)]),_:1},8,[`title`,`onClick`]))]),u(`div`,Ae,[(a(!0),d(f,null,o(t.members,e=>(a(),d(`div`,{key:e.templateId,class:`member`},[s(y,{color:e.role===`lead`?`gold`:`blue`,class:`role`},{default:g(()=>[v(i(e.role),1)]),_:2},1032,[`color`]),u(`span`,je,i(e.name),1),u(`span`,Me,i(e.harness),1),M(t)?(a(),d(`span`,{key:0,class:`i-tabler-x rm`,onClick:n=>Qe(t,e.templateId)},null,8,Ne)):p(``,!0)]))),128)),M(t)?(a(),m(l,{key:0,size:`small`,type:`dashed`,block:``,onClick:e=>Xe(t)},{default:g(()=>[v(i(e.$t(`teams.krt2oib013`)),1)]),_:1},8,[`onClick`])):p(``,!0)])]))),128)),_(qe).length===0?(a(),d(`div`,{key:0,class:`card placeholder`,onClick:r[3]||=e=>P.value=!0},[r[18]||=u(`span`,{class:`i-tabler-plus big`},null,-1),u(`span`,null,i(e.$t(`teams.k6cbbgf014`)),1)])):p(``,!0)])]),_:1},8,[`spinning`]),s($,{open:_(P),"onUpdate:open":r[8]||=e=>c(P)?P.value=e:null,title:e.$t(`teams.k1efmuyx002`),"ok-text":`创建`,"cancel-text":`取消`,onOk:Je},{default:g(()=>[s(L,{layout:`vertical`},{default:g(()=>[s(w,{label:e.$t(`teams.k3xhia003`)},{default:g(()=>[s(be,{value:_(F).name,"onUpdate:value":r[4]||=e=>_(F).name=e},null,8,[`value`])]),_:1},8,[`label`]),s(w,{label:e.$t(`teams.k40gkk004`)},{default:g(()=>[s(be,{value:_(F).description,"onUpdate:value":r[5]||=e=>_(F).description=e},null,8,[`value`])]),_:1},8,[`label`]),s(w,{label:e.$t(`teams.k3lrqn0005`)},{default:g(()=>[s(k,{value:_(F).visibility,"onUpdate:value":r[6]||=e=>_(F).visibility=e},{default:g(()=>[s(D,{value:`private`},{default:g(()=>[v(i(e.$t(`teams.k17jfge3015`)),1)]),_:1}),s(D,{value:`public`},{default:g(()=>[v(i(e.$t(`teams.k1h2lq0o016`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`]),_(I).length?(a(),m(w,{key:0,label:e.$t(`teams.k1plugon041`)},{default:g(()=>[s(Ge,{value:_(R),"onUpdate:value":r[7]||=e=>c(R)?R.value=e:null,class:`plug-create-group`},{default:g(()=>[(a(!0),d(f,null,o(_(I),t=>(a(),m(A,{key:t.name,value:t.name},{default:g(()=>[u(`span`,Pe,i(t.name),1),t.builtin?(a(),d(`span`,Fe,i(e.$t(`teams.k3x23c018`)),1)):p(``,!0)]),_:2},1032,[`value`]))),128))]),_:1},8,[`value`]),u(`div`,Ie,i(e.$t(`teams.k1plugon042`)),1)]),_:1},8,[`label`])):p(``,!0)]),_:1})]),_:1},8,[`open`,`title`]),s($,{open:_(z),"onUpdate:open":r[11]||=e=>c(z)?z.value=e:null,title:e.$t(`teams.k6ljhyv029`,{p0:_(B)?.name??``}),"ok-text":`加入`,"cancel-text":`取消`,onOk:Ze},{default:g(()=>[s(L,{layout:`vertical`},{default:g(()=>[s(w,{label:e.$t(`teams.k41ds5006`)},{default:g(()=>[s(it,{value:_(V),"onUpdate:value":r[9]||=e=>c(V)?V.value=e:null,options:_(Ke)},null,8,[`value`,`options`])]),_:1},8,[`label`]),s(w,{label:e.$t(`teams.k479op007`)},{default:g(()=>[s(k,{value:_(H),"onUpdate:value":r[10]||=e=>c(H)?H.value=e:null},{default:g(()=>[s(D,{value:`worker`},{default:g(()=>[...r[19]||=[v(` worker `,-1)]]),_:1}),s(D,{value:`lead`},{default:g(()=>[v(i(e.$t(`teams.keowzlv017`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`open`,`title`]),s($,{open:_(U),"onUpdate:open":r[13]||=e=>c(U)?U.value=e:null,title:e.$t(`teams.k1c0o6oe030`,{p0:_(W)?.name??``}),"confirm-loading":_(K),"ok-text":`部署`,"cancel-text":`取消`,onOk:et},{default:g(()=>[s(L,{layout:`vertical`},{default:g(()=>[s(w,{label:`目标 Channel(须无 lead 冲突)`},{default:g(()=>[s(it,{value:_(G),"onUpdate:value":r[12]||=e=>c(G)?G.value=e:null,options:_(We).map(e=>({value:e.id,label:e.name}))},null,8,[`value`,`options`])]),_:1})]),_:1})]),_:1},8,[`open`,`title`,`confirm-loading`]),s($,{open:_(q),"onUpdate:open":r[14]||=e=>c(q)?q.value=e:null,title:e.$t(`teams.k1plugon040`,{p0:_(J)?.name??``}),footer:null},{default:g(()=>[s(ye,{spinning:_(Z)},{default:g(()=>[u(`p`,Le,[_(X)===`explicit`?(a(),d(f,{key:0},[v(i(e.$t(`teams.k1plugon045`)),1)],64)):(a(),d(f,{key:1},[v(i(e.$t(`teams.k1plugon044`)),1)],64))]),(a(!0),d(f,null,o(_(Y),t=>(a(),d(`div`,{key:t.name,class:`plug-row`},[u(`div`,Re,[u(`div`,ze,[u(`span`,Be,i(t.name),1),t.builtin?(a(),d(`span`,Ve,i(e.$t(`teams.k3x23c018`)),1)):p(``,!0)]),u(`div`,He,i(t.description||`—`),1)]),s(b,{checked:t.enabled,size:`small`,loading:_(Q)===t.name,onChange:e=>rt(t,e===!0)},null,8,[`checked`,`loading`,`onChange`])]))),128)),_(Y).length===0&&!_(Z)?(a(),d(`div`,Ue,i(e.$t(`teams.k1plugon046`)),1)):p(``,!0)]),_:1},8,[`spinning`])]),_:1},8,[`open`,`title`])])}}}),[[`__scopeId`,`data-v-7f680c60`]]);export{w as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,s as t}from"./YnQxK3eG.js";import{t as n}from"./DIaZ2PTo2.js";async function r(e,r={}){let i=n().token;return await t(e,{...r,headers:{authorization:`Bearer ${i}`,...r.headers}})}var i=`workshop.activeChannel`;function a(){try{return JSON.parse(localStorage.getItem(i)??`{}`)}catch{return{}}}function o(e){localStorage.setItem(i,JSON.stringify(e))}var s=e(`workshop.workspaces`,{state:()=>({workspaces:[],loaded:!1}),getters:{activeWorkspaceId(e){return localStorage.getItem(`workshop.activeWorkspace`)??e.workspaces[0]?.id??null}},actions:{setActiveWorkspaceId(e){localStorage.setItem(`workshop.activeWorkspace`,e??``)},async load(){let e=await r(`/api/workshop/workspaces`);if(e.code!==0)throw Error(e.message??`加载失败`);let t=a();this.workspaces=(e.data??[]).map(e=>{let n=e.channelIds??[],r=t[e.id],i=r&&n.includes(r)?r:void 0;return r!==i&&(i?t[e.id]=i:Reflect.deleteProperty(t,e.id)),{id:e.id,name:e.name,channelIds:n,activeChannelId:i}}),o(t),this.loaded=!0},async create(e){let t=await r(`/api/workshop/workspaces`,{method:`POST`,body:{name:e}});if(t.code!==0||!t.data)throw Error(t.message??`创建失败`);let n={id:t.data.id,name:t.data.name,channelIds:[]};return this.workspaces.push(n),n},async remove(e){await r(`/api/workshop/workspaces/${e}`,{method:`DELETE`}),this.workspaces=this.workspaces.filter(t=>t.id!==e)},async rename(e,t){let n=this.workspaces.find(t=>t.id===e);n&&(n.name=t)},async mountChannel(e,t){let n=this.workspaces.find(t=>t.id===e);!n||n.channelIds.includes(t)||(await r(`/api/workshop/workspaces/${e}/channels/${t}`,{method:`POST`}),n.channelIds.push(t),n.activeChannelId||(n.activeChannelId=t,this.persistActive(n)))},async unmountChannel(e,t){let n=this.workspaces.find(t=>t.id===e);n&&(await r(`/api/workshop/workspaces/${e}/channels/${t}`,{method:`DELETE`}),n.channelIds=n.channelIds.filter(e=>e!==t),n.activeChannelId===t&&(n.activeChannelId=n.channelIds[0]),this.persistActive(n))},setActiveChannel(e,t){let n=this.workspaces.find(t=>t.id===e);n&&n.channelIds.includes(t)&&(n.activeChannelId=t,this.persistActive(n))},persistActive(e){let t=a();e.activeChannelId?t[e.id]=e.activeChannelId:Reflect.deleteProperty(t,e.id),o(t)}}});export{s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{dt as e}from"./CSkxz2NX.js";import{t}from"./D0ZBQrN_2.js";import{t as n}from"./36oeS8_R2.js";import{t as r}from"./BDmh31hl.js";var i=40,a=(e,t)=>r({base:`/api/workshop/ops-logs`,path:e,init:t});function o(e){return{id:0,actor:e.actor,actorName:e.actorName||e.actor,actorKind:e.actorKind,action:e.action,targetKind:e.targetKind,targetId:e.targetId,detailJson:``,at:e.at,lineId:e.lineId,productId:e.productId,recipeId:e.recipeId,kind:e.kind,summary:e.summary}}var s=()=>{let r=e([]),s=e([]),c=e({list:!1,posting:!1}),l=e({list:``,post:``}),u=0,d=null;function f(){u++,u===1&&(m(),d=n().subscribe(p));let e=!1;return()=>{e||(e=!0,--u===0&&(d?.(),d=null))}}function p(e){if(e.type===`ops.log`){let t=o(e.payload);r.some(e=>e.at===t.at&&e.actor===t.actor&&e.action===t.action)||(r.unshift(t),r.length>i&&r.splice(i))}}async function m(){try{let e=await a(`?limit=15`);for(let t of(e.logs??[]).reverse())r.some(e=>e.at===t.at&&e.actor===t.actor&&e.action===t.action)||r.unshift(t)}catch{}}async function h(e={}){c.list=!0,l.list=``;try{let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!=null&&r!==``&&t.set(n,String(r));let n=await a(`?${t.toString()}`);s.splice(0,s.length,...n.logs??[])}catch(e){l.list=t(e)}finally{c.list=!1}}async function g(e){c.posting=!0,l.post=``;try{await a(``,{method:`POST`,body:JSON.stringify(e)})}catch(e){throw l.post=t(e),e}finally{c.posting=!1}}return e({recent:r,results:s,loading:c,error:l,ensureLive:f,fetchLogs:h,postManual:g})},c=`__opsLogStream`;function l(){let e=globalThis;return e[c]||(e[c]=s()),e[c]}export{l as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t,j as n}from"./BU83-NnX.js";import{$ as r,D as i,G as a,H as o,Ht as s,P as c,R as l,S as u,Ut as d,V as f,Vt as p,W as m,b as h,d as g,f as _,h as v,ht as y,i as b,m as x,nt as S,p as C,pt as w,tt as T,v as E,xt as D,y as O}from"./CSkxz2NX.js";import{d as ee,f as te,n as ne,t as k,u as A}from"./D6uzXueg.js";import{d as j,p as re}from"./BJHKLJJU.js";import{i as ie}from"./YnQxK3eG.js";import{n as ae,r as oe,t as M}from"./BzHEilTt.js";import{n as N}from"./KZQX7xoM.js";import{t as se}from"./D9Oidm5I.js";import{At as P,St as ce,d as le,jt as F,n as I,nt as L,t as R,u as z,wt as B}from"./4sIEbgcl.js";import{i as ue}from"./DYr1VMiQ.js";import{t as de}from"./aWWIh8YL.js";import{a as V,i as H,n as fe,r as pe,t as me}from"./CzlMDL5H.js";import{t as he}from"./lO5tpDZ5.js";import{n as U}from"./JCoYF4IJ.js";import{t as W}from"./Crod5z2f.js";import{t as ge}from"./C4DWUZ6d2.js";import{t as _e}from"./JTLM-kqr2.js";import{t as ve}from"./DIaZ2PTo2.js";import{t as G}from"./BDNMzG2s2.js";import{t as ye}from"./Cc_9VzD42.js";import{t as be}from"./D0ZBQrN_2.js";import{m as xe,p as Se,t as Ce}from"./BNT8gYU92.js";import{t as we}from"./BN6iuJEg2.js";var K=e=>{let{componentCls:t,colorBgContainer:n,colorBgBody:r,colorText:i}=e;return{[`${t}-sider-light`]:{background:n,[`${t}-sider-trigger`]:{color:i,background:n},[`${t}-sider-zero-width-trigger`]:{color:i,background:n,border:`1px solid ${r}`,borderInlineStart:0}}}},Te=e=>{let{antCls:t,componentCls:n,colorText:r,colorTextLightSolid:i,colorBgHeader:a,colorBgBody:o,colorBgTrigger:s,layoutHeaderHeight:c,layoutHeaderPaddingInline:l,layoutHeaderColor:u,layoutFooterPadding:d,layoutTriggerHeight:f,layoutZeroTriggerSize:p,motionDurationMid:m,motionDurationSlow:h,fontSize:g,borderRadius:_}=e;return{[n]:P(P({display:`flex`,flex:`auto`,flexDirection:`column`,color:r,minHeight:0,background:o,"&, *":{boxSizing:`border-box`},[`&${n}-has-sider`]:{flexDirection:`row`,[`> ${n}, > ${n}-content`]:{width:0}},[`${n}-header, &${n}-footer`]:{flex:`0 0 auto`},[`${n}-header`]:{height:c,paddingInline:l,color:u,lineHeight:`${c}px`,background:a,[`${t}-menu`]:{lineHeight:`inherit`}},[`${n}-footer`]:{padding:d,color:r,fontSize:g,background:o},[`${n}-content`]:{flex:`auto`,minHeight:0},[`${n}-sider`]:{position:`relative`,minWidth:0,background:a,transition:`all ${m}, background 0s`,"&-children":{height:`100%`,marginTop:-.1,paddingTop:.1,[`${t}-menu${t}-menu-inline-collapsed`]:{width:`auto`}},"&-has-trigger":{paddingBottom:f},"&-right":{order:1},"&-trigger":{position:`fixed`,bottom:0,zIndex:1,height:f,color:i,lineHeight:`${f}px`,textAlign:`center`,background:s,cursor:`pointer`,transition:`all ${m}`},"&-zero-width":{"> *":{overflow:`hidden`},"&-trigger":{position:`absolute`,top:c,insetInlineEnd:-p,zIndex:1,width:p,height:p,color:i,fontSize:e.fontSizeXL,display:`flex`,alignItems:`center`,justifyContent:`center`,background:a,borderStartStartRadius:0,borderStartEndRadius:_,borderEndEndRadius:_,borderEndStartRadius:0,cursor:`pointer`,transition:`background ${h} ease`,"&::after":{position:`absolute`,inset:0,background:`transparent`,transition:`all ${h}`,content:`""`},"&:hover::after":{background:`rgba(255, 255, 255, 0.2)`},"&-right":{insetInlineStart:-p,borderStartStartRadius:_,borderStartEndRadius:0,borderEndEndRadius:0,borderEndStartRadius:_}}}}},K(e)),{"&-rtl":{direction:`rtl`}})}},Ee=le(`Layout`,e=>{let{colorText:t,controlHeightSM:n,controlHeight:r,controlHeightLG:i,marginXXS:a}=e,o=i*1.25;return[Te(z(e,{layoutHeaderHeight:r*2,layoutHeaderPaddingInline:o,layoutHeaderColor:t,layoutFooterPadding:`${n}px ${o}px`,layoutTriggerHeight:i+a*2,layoutZeroTriggerSize:i}))]},e=>{let{colorBgLayout:t}=e;return{colorBgHeader:`#001529`,colorBgBody:t,colorBgTrigger:`#002140`}}),q=()=>({prefixCls:String,hasSider:{type:Boolean,default:void 0},tagName:String});function J(e){let{suffixCls:t,tagName:n,name:r}=e;return e=>u({compatConfig:{MODE:3},name:r,props:q(),setup(r,i){let{slots:a}=i,{prefixCls:o}=I(t,r);return()=>{let t=P(P({},r),{prefixCls:o.value,tagName:n});return h(e,t,a)}}})}var Y=u({compatConfig:{MODE:3},props:q(),setup(e,t){let{slots:n}=t;return()=>h(e.tagName,{class:e.prefixCls},n)}}),De=u({compatConfig:{MODE:3},inheritAttrs:!1,props:q(),setup(e,t){let{slots:n,attrs:r}=t,{prefixCls:i,direction:a}=I(``,e),[s,c]=Ee(i),l=w([]);o(V,{addSider:e=>{l.value=[...l.value,e]},removeSider:e=>{l.value=l.value.filter(t=>t!==e)}});let u=g(()=>{let{prefixCls:t,hasSider:n}=e;return{[c.value]:!0,[`${t}`]:!0,[`${t}-has-sider`]:typeof n==`boolean`?n:l.value.length>0,[`${t}-rtl`]:a.value===`rtl`}});return()=>{let{tagName:t}=e;return s(h(t,P(P({},r),{class:[u.value,r.class]}),n))}}}),Oe=J({suffixCls:`layout`,tagName:`section`,name:`ALayout`})(De),X=J({suffixCls:`layout-header`,tagName:`header`,name:`ALayoutHeader`})(Y),Z=J({suffixCls:`layout-footer`,tagName:`footer`,name:`ALayoutFooter`})(Y),Q=J({suffixCls:`layout-content`,tagName:`main`,name:`ALayoutContent`})(Y),ke={icon:{tag:`svg`,attrs:{viewBox:`0 0 1024 1024`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M912 192H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM104 228a56 56 0 10112 0 56 56 0 10-112 0zm0 284a56 56 0 10112 0 56 56 0 10-112 0zm0 284a56 56 0 10112 0 56 56 0 10-112 0z`}}]},name:`bars`,theme:`outlined`};function Ae(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){je(e,t,n[t])})}return e}function je(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Me=function(e,t){var r=Ae({},e,t.attrs);return h(n,Ae({},r,{icon:ke}),null)};Me.displayName=`BarsOutlined`,Me.inheritAttrs=!1;var Ne={xs:`479.98px`,sm:`575.98px`,md:`767.98px`,lg:`991.98px`,xl:`1199.98px`,xxl:`1599.98px`,xxxl:`1999.98px`},Pe=()=>({prefixCls:String,collapsible:{type:Boolean,default:void 0},collapsed:{type:Boolean,default:void 0},defaultCollapsed:{type:Boolean,default:void 0},reverseArrow:{type:Boolean,default:void 0},zeroWidthTriggerStyle:{type:Object,default:void 0},trigger:R.any,width:R.oneOfType([R.number,R.string]),collapsedWidth:R.oneOfType([R.number,R.string]),breakpoint:R.oneOf(L(`xs`,`sm`,`md`,`lg`,`xl`,`xxl`,`xxxl`)),theme:R.oneOf(L(`light`,`dark`)).def(`dark`),onBreakpoint:Function,onCollapse:Function}),Fe=(()=>{let e=0;return function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:``;return e+=1,`${t}${e}`}})(),$=u({compatConfig:{MODE:3},name:`ALayoutSider`,inheritAttrs:!1,props:ce(Pe(),{collapsible:!1,defaultCollapsed:!1,reverseArrow:!1,width:200,collapsedWidth:80}),emits:[`breakpoint`,`update:collapsed`,`collapse`],setup(e,t){let{emit:n,attrs:a,slots:s}=t,{prefixCls:u}=I(`layout-sider`,e),d=i(V,void 0),f=y(!!(e.collapsed===void 0?e.defaultCollapsed:e.collapsed)),p=y(!1);r(()=>e.collapsed,()=>{f.value=!!e.collapsed}),o(H,f);let m=(t,r)=>{e.collapsed===void 0&&(f.value=t),n(`update:collapsed`,t),n(`collapse`,t,r)},g=y(e=>{p.value=e.matches,n(`breakpoint`,e.matches),f.value!==e.matches&&m(e.matches,`responsive`)}),_;function v(e){return g.value(e)}let b=Fe(`ant-sider-`);d&&d.addSider(b),l(()=>{r(()=>e.breakpoint,()=>{try{_?.removeEventListener(`change`,v)}catch{_?.removeListener(v)}if(typeof window<`u`){let{matchMedia:t}=window;if(t&&e.breakpoint&&e.breakpoint in Ne){_=t(`(max-width: ${Ne[e.breakpoint]})`);try{_.addEventListener(`change`,v)}catch{_.addListener(v)}v(_)}}},{immediate:!0})}),c(()=>{try{_?.removeEventListener(`change`,v)}catch{_?.removeListener(v)}d&&d.removeSider(b)});let x=()=>{m(!f.value,`clickTrigger`)};return()=>{let t=u.value,{collapsedWidth:n,width:r,reverseArrow:i,zeroWidthTriggerStyle:o,trigger:c=s.trigger?.call(s),collapsible:l,theme:d}=e,m=f.value?n:r,g=he(m)?`${m}px`:String(m),_=parseFloat(String(n||0))===0?h(`span`,{onClick:x,class:B(`${t}-zero-width-trigger`,`${t}-zero-width-trigger-${i?`right`:`left`}`),style:o},[c||h(Me,null,null)]):null,v={expanded:h(i?U:W,null,null),collapsed:h(i?W:U,null,null)}[f.value?`collapsed`:`expanded`],y=c===null?null:_||h(`div`,{class:`${t}-trigger`,onClick:x,style:{width:g}},[c||v]),b=[a.style,{flex:`0 0 ${g}`,maxWidth:g,minWidth:g,width:g}],S=B(t,`${t}-${d}`,{[`${t}-collapsed`]:!!f.value,[`${t}-has-trigger`]:l&&c!==null&&!_,[`${t}-below`]:!!p.value,[`${t}-zero-width`]:parseFloat(g)===0},a.class);return h(`aside`,F(F({},a),{},{class:S,style:b}),[h(`div`,{class:`${t}-children`},[s.default?.call(s)]),l||p.value&&_?y:null])}}}),Ie=X,Le=Z,Re=$,ze=Q,Be=P(Oe,{Header:X,Footer:Z,Content:Q,Sider:$,install:e=>(e.component(Oe.name,Oe),e.component(X.name,X),e.component(Z.name,Z),e.component($.name,$),e.component(Q.name,Q),e)}),Ve=[`width`,`height`],He=Object.assign(u({__name:`AwLogo`,props:{size:{default:32}},setup(e){return(t,n)=>(f(),v(`svg`,{width:e.size,height:e.size,viewBox:`0 0 64 64`,fill:`none`,"aria-hidden":`true`},[...n[0]||=[E(`<defs><linearGradient id="aw-logo-gradient" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#35e0a0"></stop><stop offset="1" stop-color="#41c8f4"></stop></linearGradient></defs><path d="M32 4 L56 18 V46 L32 60 L8 46 V18 Z" stroke="url(#aw-logo-gradient)" stroke-width="4" stroke-linejoin="round"></path><path d="M32 15 L46.7 23.5 V40.5 L32 49 L17.3 40.5 V23.5 Z" stroke="#41c8f4" stroke-opacity="0.45" stroke-width="1.8" stroke-dasharray="4 3"></path><path d="M32 23 L25 38 M32 23 L39 38 M25 38 L39 38" stroke="#35e0a0" stroke-width="1.8" stroke-opacity="0.75"></path><circle cx="32" cy="23" r="3.4" fill="#35e0a0"></circle><circle cx="25" cy="38" r="3.4" fill="#41c8f4"></circle><circle cx="39" cy="38" r="3.4" fill="#41c8f4"></circle>`,7)]],8,Ve))}}),{__name:`AwLogo`}),Ue={class:`logo`},We={class:`logo-mark`,"aria-hidden":`true`},Ge={class:`logo-text`},Ke={class:`logo-title`},qe={class:`app-menu`},Je={class:`menu-group-label`},Ye={class:`menu-group-text`},Xe={class:`menu-group-sep`,"aria-hidden":`true`},Ze=[`title`,`onClick`],Qe={class:`sider-footer`},$e={class:`footer-line`},et=Object.assign(G(u({__name:`AppSidebar`,setup(e){let t=ve(),{t:n}=N(),r=re(),i=M(),a=ae(),o=g(()=>[{id:`console`,label:n(`menu.groups.console`),items:[{key:`/`,icon:`i-tabler-layout-dashboard`,label:n(`menu.dashboard`),motion:`im-pop`},{key:`/workshop`,icon:`i-tabler-box`,label:n(`menu.workshop`),motion:`im-pop`},{key:`/town`,icon:`i-tabler-map-2`,label:n(`menu.town`),motion:`im-pop`},{key:`/daq`,icon:`i-tabler-activity`,label:n(`menu.daq`),motion:`im-pop`},{key:`/dcw`,icon:`i-tabler-settings-automation`,label:n(`menu.dcw`),motion:`im-pop`},{key:`/aml`,icon:`i-tabler-flask`,label:n(`menu.aml`),motion:`im-pop`}]},{id:`ops`,label:n(`menu.groups.ops`),items:[{key:`/monitor`,icon:`i-tabler-cpu`,label:n(`menu.monitor`),motion:`im-pulse`},{key:`/logs`,icon:`i-tabler-list-details`,label:n(`menu.logs`),motion:`im-pop`}]},{id:`system`,label:n(`menu.groups.system`),items:[{key:`/tokens`,icon:`i-tabler-key`,label:n(`menu.tokens`),motion:`im-nudge-up`},{key:`/users`,icon:`i-tabler-users-group`,label:n(`menu.users`),motion:`im-pop`},{key:`/permissions`,icon:`i-tabler-shield-lock`,label:n(`menu.permissions`),motion:`im-pop`,adminOnly:!0},{key:`/plugins`,icon:`i-tabler-puzzle`,label:n(`menu.plugins`),motion:`im-pop`},{key:`/settings`,icon:`i-tabler-settings`,label:n(`menu.settings`),motion:`im-rotate`}]}].map(e=>({...e,items:e.items.filter(e=>!e.adminOnly||t.isAdmin)})).filter(e=>e.items.length>0)),s=e=>e===`/`?r.path===`/`:r.path.startsWith(e),c=e=>{s(e)||j(e)};return(e,t)=>{let n=He,r=Re;return f(),C(r,{collapsed:D(a).sidebarCollapsed,"onUpdate:collapsed":t[0]||=e=>D(a).sidebarCollapsed=e,trigger:null,collapsible:``,breakpoint:`lg`,width:228,"collapsed-width":64,class:`app-sider`},{default:T(()=>[_(`div`,Ue,[_(`div`,We,[h(n,{size:30})]),h(k,{name:`slide-fade`},{default:T(()=>[S(_(`div`,Ge,[_(`span`,Ke,d(D(i).name),1),t[1]||=_(`span`,{class:`logo-sub`},`digital twin`,-1)],512),[[A,!D(a).sidebarCollapsed]])]),_:1})]),_(`nav`,qe,[(f(!0),v(b,null,m(D(o),e=>(f(),v(`div`,{key:e.id,class:`menu-group`},[S(_(`div`,Je,[_(`span`,Ye,d(e.label),1),t[2]||=_(`span`,{class:`menu-group-rule`,"aria-hidden":`true`},null,-1)],512),[[A,!D(a).sidebarCollapsed]]),S(_(`div`,Xe,null,512),[[A,D(a).sidebarCollapsed]]),(f(!0),v(b,null,m(e.items,e=>(f(),v(`button`,{key:e.key,type:`button`,class:p([`menu-item im`,{active:s(e.key)}]),title:D(a).sidebarCollapsed?e.label:void 0,onClick:t=>c(e.key)},[_(`span`,{class:p([`menu-icon`,[e.icon,e.motion]])},null,2),S(_(`span`,{class:`menu-label`},d(e.label),513),[[A,!D(a).sidebarCollapsed]])],10,Ze))),128))]))),128))]),S(_(`div`,Qe,[t[4]||=_(`div`,{class:`footer-rule`},null,-1),_(`div`,$e,[_(`span`,null,`v`+d(D(i).version),1),t[3]||=_(`span`,{class:`sep`},`/`,-1),_(`span`,null,d(D(i).mode),1)])],512),[[A,!D(a).sidebarCollapsed]])]),_:1},8,[`collapsed`])}}}),[[`__scopeId`,`data-v-462694cc`]]),{__name:`AppSidebar`}),tt=ie(`app.routeTrail`,()=>{let e=w([]);function t(t){if(!t||t.startsWith(`/api`))return;let n=e.value.filter(e=>e.path!==t);e.value=[...n,{path:t,at:Date.now()}].slice(-8)}function n(t){let n=e.value.findIndex(e=>e.path===t);return n>=0&&(e.value=e.value.filter(e=>e.path!==t)),n}function r(){e.value=[]}return{waypoints:e,visit:t,remove:n,clear:r}},{persist:{pick:[`waypoints`],storage:oe.localStorage()}});function nt(){let{t:e}=N(),t=ye(),n={"/":{key:`menu.dashboard`,icon:`i-tabler-layout-dashboard`},"/workshop":{key:`menu.workshop`,icon:`i-tabler-box`},"/workshop/agents":{key:`meta.agents`,icon:`i-tabler-users`},"/workshop/teams":{key:`meta.teams`,icon:`i-tabler-users-group`},"/workshop/channel-templates":{key:`meta.ctpl`,icon:`i-tabler-layout-grid-add`},"/town":{key:`menu.town`,icon:`i-tabler-map-2`},"/tokens":{key:`menu.tokens`,icon:`i-tabler-key`},"/daq":{key:`menu.daq`,icon:`i-tabler-activity`},"/dcw":{key:`menu.dcw`,icon:`i-tabler-settings-automation`},"/logs":{key:`menu.logs`,icon:`i-tabler-list-details`},"/permissions":{key:`menu.permissions`,icon:`i-tabler-shield-lock`},"/plugins":{key:`menu.plugins`,icon:`i-tabler-puzzle`},"/users":{key:`menu.users`,icon:`i-tabler-users-group`},"/monitor":{key:`menu.monitor`,icon:`i-tabler-cpu`},"/settings":{key:`menu.settings`,icon:`i-tabler-settings`}};return{metaFor:r=>{let i=n[r];if(i)return{title:e(i.key),icon:i.icon};let a=r.match(/^\/workshop\/w\/([^/]+)$/);if(a){let n=a[1];return{title:t.workspaces.find(e=>e.id===n)?.name??`${e(`header.workspace`)} ${n.slice(0,6)}`,icon:`i-tabler-console`}}let o=r.split(`/`).filter(Boolean).pop()??`·`;return{title:o.charAt(0).toUpperCase()+o.slice(1),icon:`i-tabler-point`}}}}var rt={class:`header-left`},it=[`aria-label`],at=[`aria-label`],ot=[`title`,`onClick`,`onKeydown`],st={class:`node-title`},ct=[`aria-label`,`title`,`onClick`],lt={class:`header-right`},ut=[`title`],dt={class:`hitl-count`},ft={class:`hitl-menu`},pt={class:`hitl-menu-title`},mt=[`onClick`],ht={class:`hitl-item-top`},gt={class:`hitl-item-agent`},_t={class:`hitl-item-kind`},vt={class:`hitl-item-title`},yt=[`title`],bt={class:`user-chip`},xt={class:`user-initial aw-avatar`},St={class:`user-meta`},Ct={class:`user-name`},wt={class:`user-role`},Tt=Object.assign(G(u({__name:`AppHeader`,setup(n){let{t:i,locale:a,locales:o,setLocale:s}=N(),u=ae(),y=re(),S=tt(),E=ve(),{metaFor:k}=nt(),A=Se(),ie=Ce(),oe=()=>{E.isLoggedIn&&ie.ensureConnected()};r(()=>E.token,e=>{e?(oe(),A.loadSnapshot()):A.clear()},{immediate:!0});let M=new Set([`codex-approval`,`opencode-permission`,`dsh-permission`]),P=e=>{switch(e){case`omp-dialog`:return i(`appHeader.hitlKindOmp`);case`dcw-approval`:return i(`appHeader.hitlKindDcw`);case`codex-approval`:return i(`appHeader.hitlKindCodex`);case`opencode-permission`:return i(`appHeader.hitlKindOpencode`);case`dsh-permission`:return i(`appHeader.hitlKindDsh`);default:return e}},ce=e=>{j({path:`/monitor`,query:{agentId:e.agentId,channelId:e.channelId}})},le=we(),F=w(null),I=async(t,n)=>{F.value=`${t.kind}:${t.id}`;try{await le.respondHitl({kind:t.kind,id:t.id,confirmed:n,cancelled:!n}),await A.loadSnapshot()}catch(t){e.error(be(t))}finally{F.value=null}},L=g(()=>o.value.map(e=>({label:e.name,value:e.code}))),R=e=>{e!=null&&(localStorage.setItem(`aw.locale`,String(e)),s(String(e)),window.location.reload())},z=w(!1),B=w(!1),V=null;r(()=>y.path,()=>{S.visit(y.path),B.value=!1,requestAnimationFrame(()=>{B.value=!0,V&&clearTimeout(V),V=setTimeout(()=>{B.value=!1},620)})},{immediate:!1}),l(()=>{z.value=!0,S.visit(y.path)}),c(()=>{V&&clearTimeout(V)});let H=e=>{e!==y.path&&j(e)},he=e=>{let t=S.remove(e);if(e!==y.path)return;let n=S.waypoints,r=n[Math.min(Math.max(t-1,0),Math.max(n.length-1,0))]?.path??`/`;j(r)},U=w(!1);function W(){document.fullscreenElement?(document.exitFullscreen(),U.value=!1):(document.documentElement.requestFullscreen(),U.value=!0)}let _e=g(()=>(E.user?.name??`?`).trim().charAt(0).toUpperCase()),G=g(()=>E.user?.name??i(`header.guest`)),ye=g(()=>E.isLoggedIn?E.user?.role??`user`:`anonymous`),K=xe(),Te=g(()=>K.state!==`closed`||K.lastDataAt>0),Ee=g(()=>K.state===`open`?K.pendingReplay?`syncing`:`live`:K.state===`connecting`?`syncing`:`down`),q=g(()=>K.state===`open`?K.pendingReplay?i(`appHeader.kwsdot0002`):i(`appHeader.kwsdot0001`):K.state===`connecting`?i(`appHeader.kwsdot0003`):i(`appHeader.kwsdot0004`)),J=g(()=>{let e=[{key:`tokens`,icon:`i-tabler-key`,label:i(`menu.tokens`)},{key:`settings`,icon:`i-tabler-adjustments`,label:i(`menu.settings`)}];return E.isLoggedIn&&(e.push({key:`d-logout`,label:``,divider:!0}),e.push({key:`logout`,icon:`i-tabler-logout`,label:i(`header.logout`),danger:!0})),e}),Y=async({key:e})=>{e===`settings`?j(`/settings`):e===`tokens`?j(`/tokens`):e===`logout`&&(await E.logout(),j(`/workshop`))};return(e,n)=>{let r=t,o=ge,s=se,c=ue,l=de,g=fe,w=pe,E=me,j=Ie;return f(),C(j,{class:`app-header app-header-glass`},{default:T(()=>[_(`div`,rt,[_(`button`,{class:`collapse-btn`,"aria-label":D(u).sidebarCollapsed?D(i)(`header.expand`):D(i)(`header.collapse`),onClick:n[0]||=e=>D(u).toggleSidebar()},[...n[3]||=[_(`span`,{class:`i-tabler-menu-2`},null,-1)]],8,it),n[5]||=_(`span`,{class:`rail-mark i-tabler-route`},null,-1),_(`nav`,{class:`trail`,"aria-label":D(i)(`header.trail`)},[h(ne,{name:`stamp`,tag:`div`,class:`trail-row`},{default:T(()=>[D(z)?(f(!0),v(b,{key:0},m(D(S).waypoints,(t,r)=>(f(),v(b,{key:t.path},[r>0?(f(),v(`span`,{key:`link-${t.path}`,class:`trail-link`,"aria-hidden":`true`})):x(``,!0),_(`div`,{class:p([`trail-node`,{active:t.path===D(y).path}]),role:`button`,tabindex:`0`,title:D(k)(t.path).title,onClick:e=>H(t.path),onKeydown:ee(te(e=>H(t.path),[`prevent`]),[`enter`])},[_(`span`,{class:p([`node-icon`,D(k)(t.path).icon])},null,2),_(`span`,st,d(D(k)(t.path).title),1),_(`button`,{class:`node-close`,"aria-label":e.$t(`appHeader.kzwjv99001`,{p0:D(k)(t.path).title}),title:e.$t(`appHeader.kzwjv99001`,{p0:D(k)(t.path).title}),onClick:te(e=>he(t.path),[`stop`])},[...n[4]||=[_(`span`,{class:`i-tabler-x`},null,-1)]],8,ct)],42,ot)],64))),128)):x(``,!0)]),_:1})],8,at)]),_(`div`,lt,[h(s,null,{default:T(()=>[D(A).count>0?(f(),C(o,{key:0,placement:`bottomRight`},{overlay:T(()=>[_(`div`,ft,[_(`div`,pt,d(D(i)(`appHeader.hitlBadge`))+` · `+d(D(A).count),1),(f(!0),v(b,null,m(D(A).items,e=>(f(),v(`button`,{key:`${e.kind}:${e.id}`,class:`hitl-item`,onClick:t=>ce(e)},[_(`span`,ht,[_(`span`,gt,d(e.agentName),1),_(`span`,_t,d(P(e.kind)),1)]),_(`span`,vt,d(e.title),1),D(M).has(e.kind)?(f(),v(`span`,{key:0,class:`hitl-item-actions`,onClick:n[1]||=te(()=>{},[`stop`])},[h(r,{size:`small`,type:`primary`,loading:D(F)===`${e.kind}:${e.id}`,onClick:t=>I(e,!0)},{default:T(()=>[O(d(D(i)(`appHeader.hitlApprove`)),1)]),_:1},8,[`loading`,`onClick`]),h(r,{size:`small`,danger:``,disabled:D(F)===`${e.kind}:${e.id}`,onClick:t=>I(e,!1)},{default:T(()=>[O(d(D(i)(`appHeader.hitlReject`)),1)]),_:1},8,[`disabled`,`onClick`])])):x(``,!0)],8,mt))),128))])]),default:T(()=>[_(`button`,{class:`icon-btn hitl-bell`,title:D(i)(`appHeader.hitlBadge`)},[n[6]||=_(`span`,{class:`i-tabler-bell-ringing`},null,-1),_(`span`,dt,d(D(A).count),1)],8,ut)]),_:1})):x(``,!0)]),_:1}),D(Te)?(f(),v(`span`,{key:0,class:p([`ws-dot`,D(Ee)]),title:D(q)},null,10,yt)):x(``,!0),h(c,{title:D(i)(`header.fullscreen`)},{default:T(()=>[_(`button`,{class:`icon-btn`,onClick:W},[_(`span`,{class:p([`i-tabler-arrows-maximize`,{hidden:D(U)}])},null,2),_(`span`,{class:p([`i-tabler-arrows-minimize`,{hidden:!D(U)}])},null,2)])]),_:1},8,[`title`]),h(l,{id:`hdr-locale`,value:D(a),size:`middle`,options:D(L),class:`lang-select`,onChange:R},null,8,[`value`,`options`]),h(c,{title:D(u).isDark?D(i)(`common.light`):D(i)(`common.dark`)},{default:T(()=>[_(`button`,{class:`icon-btn`,onClick:n[2]||=e=>D(u).toggleDark()},[_(`span`,{class:p([`i-tabler-sun-high`,{hidden:D(u).isDark}])},null,2),_(`span`,{class:p([`i-tabler-moon-stars`,{hidden:!D(u).isDark}])},null,2)])]),_:1},8,[`title`]),h(o,null,{overlay:T(()=>[h(E,{onClick:Y},{default:T(()=>[(f(!0),v(b,null,m(D(J),e=>(f(),v(b,{key:e.key},[e.divider?(f(),C(g,{key:0})):(f(),C(w,{key:e.key,danger:e.danger},{default:T(()=>[_(`span`,{class:p([e.icon,`mr-2`])},null,2),O(` `+d(e.label),1)]),_:2},1032,[`danger`]))],64))),128))]),_:1})]),default:T(()=>[_(`div`,bt,[h(s,null,{fallback:T(()=>[...n[7]||=[_(`span`,{class:`user-initial aw-avatar`},`·`,-1),_(`span`,{class:`user-meta`},[_(`span`,{class:`user-name`},`·`),_(`span`,{class:`user-role`},`·`)],-1)]]),default:T(()=>[_(`span`,xt,d(D(_e)),1),_(`span`,St,[_(`span`,Ct,d(D(G)),1),_(`span`,wt,d(D(ye)),1)])]),_:1})])]),_:1})]),_(`span`,{class:p([`plotter-line`,{run:D(B)}]),"aria-hidden":`true`},null,2)]),_:1})}}}),[[`__scopeId`,`data-v-e7a03727`]]),{__name:`AppHeader`}),Et={class:`footer-title aw-serif-accent`},Dt=G(u({__name:`default`,setup(e){let{token:t}=_e.useToken(),n=M();return(e,r)=>{let i=et,o=Tt,c=ze,l=Le,u=Be;return f(),C(u,{class:`app-layout`,"has-sider":``},{default:T(()=>[h(i),h(u,{class:`app-main`,style:s({background:`transparent`,"--app-bg-container":D(t)?.colorBgContainer,"--app-bg-layout":D(t)?.colorBgLayout,"--app-text":D(t)?.colorText,"--app-text-secondary":D(t)?.colorTextSecondary,"--app-border":D(t)?.colorBorderSecondary,"--app-fill":D(t)?.colorFillQuaternary,"--app-header-h":`56px`,"--app-footer-h":`46px`})},{default:T(()=>[h(o),h(c,{class:`app-content`},{default:T(()=>[a(e.$slots,`default`,{},void 0,!0)]),_:3}),h(l,{class:`app-footer`,style:s({color:D(t)?.colorTextSecondary})},{default:T(()=>[_(`span`,Et,d(D(n).title),1),r[0]||=_(`span`,{class:`sep`},`/`,-1),_(`span`,null,`v`+d(D(n).version),1),r[1]||=_(`span`,{class:`sep`},`/`,-1),_(`span`,null,`mode=`+d(D(n).mode),1)]),_:1},8,[`style`])]),_:3},8,[`style`]),r[2]||=_(`span`,{class:`aw-noise`,"aria-hidden":`true`},null,-1)]),_:3})}}}),[[`__scopeId`,`data-v-b48dd792`]]);export{Dt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{dt as e}from"./CSkxz2NX.js";import{t}from"./D0ZBQrN_2.js";import{t as n}from"./36oeS8_R2.js";import{t as r}from"./BDmh31hl.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=new Map,o=e([]),s=e({running:!0,defaultIntervalMs:1e3,defaultPublishIntervalMs:0,queryDisplayIntervalMs:5e3,nodesTotal:0,nodesOnline:0}),d=e({tsdb:`…`,queue:`…`,drivers:[],driverAvailable:{},infra:void 0,produced:0,consumed:0,dropped:0,samplesStored:0}),f=e(a.map(e=>({...e}))),p=e({});function m(){i.clear();for(let e of r)i.set(e.id,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,hist:[]}),i.set(e.id,r[r.length-1]))}let g=[],_=null;function v(){_=null;let e=g;if(g=[],!e.length)return;let t=new Map;for(let n of e){t.set(n.nodeId,n);let e=i.get(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=i.get(e.nodeId);t&&(t.value=e.value,t.state=e.state,t.lastAt=e.at)}}function y(e){g.push(e),_||=setTimeout(v,500)}function b(e){if(e.node){if(e.op===`removed`){let t=r.findIndex(t=>t.id===e.node.id);t>=0&&r.splice(t,1),i.delete(e.node.id),Reflect.deleteProperty(p,e.node.id);return}h(e.node)}}function x(e){f.splice(0,f.length,...e.map(e=>({...e})))}function S(e){if(!e.template)return;let t=f.findIndex(t=>t.key===e.template.key);if(e.op===`removed`){t>=0&&f.splice(t,1);return}t>=0?f[t]={...e.template}:f.push({...e.template})}function C(e){let t=Date.parse(e.at),n=p[e.nodeId]??(p[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 r=i.get(e.nodeId);r&&(r.value=e.metrics?.avg??r.value,e.state&&(r.state=e.state),r.lastAt=e.at)}let w=0,T=null;function E(){w++,w===1&&(T=n().subscribe(D));let e=!1;return()=>{e||(e=!0,--w===0&&(T?.(),T=null))}}function D(e){if(e.type===`daq.reading`)y(e.payload);else if(e.type===`daq.frame`)C(e.payload);else if(e.type===`daq.node.changed`)b(e.payload);else if(e.type===`daq.controller`)Object.assign(s,e.payload);else if(e.type===`daq.template.changed`)S(e.payload);else if(e.type===`daq.alarm`){let t=e.payload;o.some(e=>e.id===t.id)||o.unshift(t)}else if(e.type===`daq.alarm.changed`){let t=e.payload;if(t.ackedAt){let e=o.findIndex(e=>e.id===t.id);e>=0&&o.splice(e,1)}}}async function O(){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),m();for(let e of Object.keys(p))i.has(e)||Reflect.deleteProperty(p,e);Object.assign(s,e.controller),Object.assign(d,e.meta??{}),d.driverAvailable=e.driverAvailable??{},d.infra=e.infra,e.templates?.length&&x(e.templates),K.loaded=!0,K.error=``}catch(e){K.error=t(e)}}async function k(e,t){let n=await u(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return h(n.node),n.node}async function A(e,t){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})}async function j(e,t,n){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify({posX:t,posZ:n})})}async function M(e){await u(`/${e}`,{method:`DELETE`});let t=r.findIndex(t=>t.id===e);t>=0&&r.splice(t,1),i.delete(e),Reflect.deleteProperty(p,e)}async function N(e,t){h((await u(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)}async function P(e,t){h((await u(`/${e}/bindings`,{method:`PUT`,body:JSON.stringify({deviceIds:t})})).node)}async function F(e,t){return(await u(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})})).test}async function I(e){return(await u(`/${e}/test`,{method:`POST`})).test}async function L(){try{let e=await u(`/alarms?scope=open&limit=50`);o.splice(0,o.length,...e.alarms??[])}catch{}}async function R(e){await u(`/alarms/${e}/ack`,{method:`POST`}),await L()}async function z(){let e=await u(`/infra/reconnect`,{method:`POST`});return d.infra=e.infra,await O(),e.infra}async function B(e,t,n){let r=await u(`/controller`,{method:`POST`,body:JSON.stringify({action:e,defaultIntervalMs:t,defaultPublishIntervalMs:n})});Object.assign(s,r.controller)}async function V(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 H(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 p[e]=r.frames??[],p[e]}async function U(e){let t=await u(`/templates`,{method:`POST`,body:JSON.stringify(e)});return S({op:`added`,template:t.template}),t.template}async function W(e,t){let n=await u(`/templates/${e}`,{method:`PATCH`,body:JSON.stringify(t)});return S({op:`updated`,template:n.template}),n.template}async function G(e){await u(`/templates/${e}`,{method:`DELETE`}),S({op:`removed`,template:{key:e}})}let K=e({nodes:r,controller:s,meta:d,templates:f,loaded:!1,error:``,ensureWsFeed:E,load:O,createFromTemplate:k,createTemplate:U,updateTemplate:W,removeTemplate:G,testDriver:F,testNode:I,reconnectInfra:z,patchNode:A,saveTransform:j,removeNode:M,bindNode:N,setNodeBindings:P,controllerAction:B,alarms:o,fetchAlarms:L,ackAlarm:R,nodeById:e=>i.get(e)??r.find(t=>t.id===e),samplesOf:V,fetchFrames:H,frames:p,framesOf:e=>p[e]??[],templateOf:e=>f.find(t=>t.key===e||`daq-${t.key}`===e),ofDevice:e=>e?r.filter(t=>t.deviceBindingId===e):[]});return K},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 +0,0 @@
|
|
|
1
|
-
import{dt as e}from"./CSkxz2NX.js";import{t}from"./D0ZBQrN_2.js";import{t as n}from"./36oeS8_R2.js";import{t as r}from"./BDmh31hl.js";var i=[{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:`熔体压力设定:反映挤出/泵送负荷,压力偏高提示阻力大或温度偏低,偏低可能是料位不足。调整需小幅步进。`}],a=[{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 头`}]}],o=[`#3aa0ff`,`#f4c542`,`#35e0a0`,`#41c8f4`,`#b58cff`,`#ff8a5c`],s=(e,t)=>r({base:`/api/workshop/dcw`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0});function c(){let r=e([]),a=new Map,o=e({running:!0,nodesTotal:0,nodesOnline:0,writesTotal:0,writesFailed:0}),c=e(i.map(e=>({...e}))),l=e([]),u=e([]),d=e([]),f=e([]),p=e([]),m=e({}),h=e([]);function g(e){let t=r.findIndex(t=>t.id===e.id);t>=0?r[t]=Object.assign(r[t],e):(r.push(e),a.set(e.id,r[r.length-1]))}function _(e){if(e.node){if(e.op===`removed`){let t=r.findIndex(t=>t.id===e.node.id);t>=0&&r.splice(t,1),a.delete(e.node.id);return}g(e.node)}}let v=0,y=null;function b(){v++,v===1&&(y=n().subscribe(x));let e=!1;return()=>{e||(e=!0,--v===0&&(y?.(),y=null))}}function x(e){if(e.type===`dcw.written`){let t=e.payload,n=a.get(t.nodeId);n&&(n.value=t.value,n.state=t.ok?`ok`:`error`,n.lastWriteAt=t.at,t.ok&&(n.lastAckAt=t.at)),d.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}),d.length>60&&d.splice(60)}else if(e.type===`dcw.read`){let t=e.payload,n=a.get(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`)_(e.payload);else if(e.type===`dcw.controller`)Object.assign(o,e.payload);else if(e.type===`dcw.optimization.changed`){let t=e.payload.record,n=h.findIndex(e=>e.id===t.id);n>=0?h[n]=t:h.unshift(t),h.length>200&&(h.length=200)}}async function S(){try{let e=await s(``);r.splice(0,r.length,...e.nodes),a.clear();for(let e of r)a.set(e.id,e);Object.assign(o,e.controller),e.templates?.length&&c.splice(0,c.length,...e.templates.map(e=>({...e}))),l.splice(0,l.length,...e.recipes??[]),u.splice(0,u.length,...e.runs??[]),d.splice(0,d.length,...e.history??[]),f.splice(0,f.length,...e.products??[]),p.splice(0,p.length,...e.lines??[]);for(let e of Object.keys(m))Reflect.deleteProperty(m,e);for(let t of e.lineStates??[])m[t.lineId]=t;C.loaded=!0,C.error=``}catch(e){C.error=t(e)}}let C=e({nodes:r,controller:o,templates:c,recipes:l,runs:u,history:d,products:f,lines:p,lineStates:m,optimizations:h,loaded:!1,error:``,ensureWsFeed:b,load:S,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 s(`/optimizations?${t.toString()}`);h.splice(0,h.length,...n.records)},fetchLedger:async e=>(await s(`/${e}/param-ledger`)).ledger,optimizationSeries:async(e,t)=>s(`/optimizations/${e}/series${t?`?windowMs=${t}`:``}`),judgeOptimization:async(e,t,n)=>{await s(`/optimizations/${e}/judge`,{method:`POST`,body:JSON.stringify({verdict:t,reason:n})})},rollbackOptimization:async e=>{await s(`/optimizations/${e}/rollback`,{method:`POST`,body:JSON.stringify({})})},rollbackNode:async(e,t)=>{await s(`/journal/node/${e}/rollback`,{method:`POST`,body:JSON.stringify({to:t})})},markGood:async(e,t)=>{await s(`/recipes/${e}/mark-good`,{method:`POST`,body:JSON.stringify({runId:t})})},rollbackRecipeGood:async e=>{await s(`/recipes/${e}/rollback-good`,{method:`POST`,body:JSON.stringify({})})},createFromTemplate:async(e,t)=>{let n=await s(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return g(n.node),n.node},patchNode:async(e,t)=>{await s(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})},removeNode:async e=>{await s(`/${e}`,{method:`DELETE`});let t=r.findIndex(t=>t.id===e);t>=0&&r.splice(t,1),a.delete(e)},bindNode:async(e,t)=>{g((await s(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)},write:async(e,t)=>s(`/${e}/write`,{method:`POST`,body:JSON.stringify({value:t})}).then(e=>e.outcome),readNode:async e=>s(`/${e}/read`,{method:`POST`,body:JSON.stringify({})}).then(e=>e.read),testDriver:async(e,t)=>s(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})}).then(e=>e.test),testNode:async e=>s(`/${e}/test`,{method:`POST`}).then(e=>e.test),startStop:async e=>{let t=await s(`/controller`,{method:`POST`,body:JSON.stringify({action:e})});Object.assign(o,t.controller)},createTemplate:async e=>{let t=await s(`/templates`,{method:`POST`,body:JSON.stringify(e)});return c.push(t.template),t.template},createRecipe:async e=>{let t=await s(`/recipes`,{method:`POST`,body:JSON.stringify(e)});return l.push(t.recipe),t.recipe},updateRecipe:async(e,t)=>{let n=await s(`/recipes/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=l.findIndex(t=>t.id===e);return r>=0&&(l[r]=n.recipe),n.recipe},removeRecipe:async e=>{await s(`/recipes/${e}`,{method:`DELETE`});let t=l.findIndex(t=>t.id===e);t>=0&&l.splice(t,1)},applyRecipe:async e=>{let t=await s(`/recipes/${e}/apply`,{method:`POST`});return u.push(t.run),t.run},recipeVersions:async e=>(await s(`/recipes/${e}/versions`)).versions??[],revertRecipe:async(e,t)=>{let n=await s(`/recipes/${e}/revert`,{method:`POST`,body:JSON.stringify(t)}),r=l.findIndex(t=>t.id===e);return r>=0&&(l[r]=n.recipe),n.recipe},closeRun:async e=>{let t=await s(`/runs/${e}/close`,{method:`POST`}),n=u.findIndex(t=>t.id===e);return n>=0&&(u[n]=t.run),t.run},runData:e=>s(`/runs/${e}/data`),nodeById:e=>a.get(e)??r.find(t=>t.id===e),createProduct:async e=>{let t=await s(`/products`,{method:`POST`,body:JSON.stringify(e)});return f.push(t.product),t.product},updateProduct:async(e,t)=>s(`/products/${e}`,{method:`PATCH`,body:JSON.stringify(t)}).then(e=>(w(),e.product)),removeProduct:async e=>{await s(`/products/${e}`,{method:`DELETE`});let t=f.findIndex(t=>t.id===e);t>=0&&f.splice(t,1)},createLine:async e=>{let t=await s(`/lines`,{method:`POST`,body:JSON.stringify(e)});return p.push(t.line),t.line},updateLine:async(e,t)=>{let n=await s(`/lines/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=p.findIndex(t=>t.id===e);r>=0&&(p[r]=n.line)},removeLine:async(e,t=!1)=>{await s(`/lines/${e}${t?`?purge=1`:``}`,{method:`DELETE`});let n=p.findIndex(t=>t.id===e);n>=0&&p.splice(n,1),Reflect.deleteProperty(m,e),await S()},startLine:async(e,t)=>{let n=await s(`/lines/${e}/start`,{method:`POST`,body:JSON.stringify({recipeId:t})});m[e]=n.line},stopLine:async e=>{let t=await s(`/lines/${e}/stop`,{method:`POST`});m[e]=t.line},lineStateOf:e=>m[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)),s(`/line/query?${t.toString()}`)}});async function w(){try{let e=await s(``);f.splice(0,f.length,...e.products??[]),l.splice(0,l.length,...e.recipes??[])}catch{}}return C}var l=`__dcwStream`;function u(){let e=globalThis;return e[l]||(e[l]=c()),e[l]}export{a as n,o as r,u as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,P as t,R as n,S as r,Ut as i,V as a,Vt as o,W as s,b as c,d as l,dt as ee,f as u,h as d,i as f,m as p,nt as m,pt as h,tt as te,xt as g,y as _}from"./CSkxz2NX.js";import{c as v,f as ne,l as y,s as re}from"./D6uzXueg.js";import{a as ie}from"./C__m4EhR.js";import{t as ae}from"./BHA40aHa.js";import{n as oe}from"./KZQX7xoM.js";import{t as se}from"./CWoJjWmZ.js";import{t as b}from"./BDNMzG2s2.js";import{t as ce}from"./D0ZBQrN_2.js";import{t as le}from"./CNs_Ozdc2.js";import{a as ue,n as x,t as de}from"./D1YDxZpZ.js";import{t as fe}from"./D20Yamr4.js";import{t as pe}from"./C3J6FYKa.js";var me={class:`page`},he={class:`aw-kicker`},ge={class:`aw-page-head`},_e={key:0,class:`err`},ve={key:1,class:`grid`},ye={class:`col-live`},be={class:`aw-tile value-card`},xe={class:`aw-kicker`},Se={class:`big-val mono`},Ce={class:`facts mono`},we={class:`col-form aw-tile pad`},Te={class:`sec`},Ee={class:`field`},De={class:`field`},Oe={value:``},ke=[`value`],Ae={class:`field`},je=[`value`,`disabled`],Me={class:`field row`},Ne=[`disabled`],Pe={class:`field row`},Fe=[`disabled`],Ie=[`disabled`],Le={class:`field row`},Re=[`disabled`],ze={class:`field`},Be={class:`field`},Ve={class:`field-row`},He={class:`field`},Ue={class:`field`},We={class:`field`},Ge={class:`field`},Ke=[`disabled`],qe={class:`sec mt`},Je={class:`driver-grid`},Ye={key:0},Xe=[`onUpdate:modelValue`],Ze=[`value`],Qe=[`onUpdate:modelValue`,`type`,`placeholder`],$e={class:`test-row`},et=[`disabled`],tt={class:`sec mt`},nt={class:`bind-row`},rt={value:``},it=[`value`],at={class:`col-hist aw-tile pad`},ot={class:`hist-hd`},st={class:`sec`},ct={class:`hist-ctl mono`},lt=[`value`],ut=[`title`],dt=[`placeholder`],ft={class:`raw-table mono`},pt={key:2,class:`aw-tile pad frames-tile`},mt={class:`hist-hd`},ht={class:`sec`},gt={class:`mono frames-n`},_t=[`viewBox`],vt=[`points`],yt={class:`raw-table mono`},bt={key:0,class:`gal`},xt=[`title`,`onClick`],St=[`src`],Ct={class:`mono`},wt={key:1,class:`frames-empty`},Tt=[`src`],S=320,Et=84,Dt=`#35e0a0`,Ot=`rgba(120,135,160,0.18)`,kt=`rgba(140,155,175,0.8)`,At=b(r({__name:`[id]`,setup(r){let{t:b}=oe();le({layout:`default`});let At=ie(),C=l(()=>String(At.params.id??``)),w=de(),jt=fe();jt.load();let T=pe(),E=l(()=>w.nodeById(C.value)??null),D=l(()=>{let e=E.value?ue(E.value.templateRef):``;return w.templates.find(t=>t.key===e)??null}),Mt={ok:b(`daqDetail.k41k5c026`),warn:b(`daqDetail.k49z8v027`),alarm:b(`daqDetail.k3xmid028`),offline:b(`daqDetail.k44c2n029`)},O=()=>{let e=E.value;return!e||!w.controller.running||!e.enabled?`offline`:e.state},Nt=null;n(()=>{Nt=w.ensureWsFeed(),w.load(),T.load(),A.value&&M()}),t(()=>Nt?.());let k=l(()=>D.value?.signalKind??`scalar`),A=l(()=>k.value!==`scalar`),j=l(()=>w.framesOf(C.value));async function M(){C.value&&await w.fetchFrames(C.value,{limit:24}).catch(()=>{})}e(C,()=>{A.value&&M()});let Pt=e=>new Date(e).toLocaleTimeString(`zh-CN`,{hour12:!1}),Ft=e=>Object.entries(e.metrics??{}).slice(0,3).map(([e,t])=>`${e}=${t}`).join(` `),It=l(()=>j.value.find(e=>e.kind===`vector`&&e.points?.length)),Lt=l(()=>{let e=It.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)*S).toFixed(1)},${(78-(r-t)/n*72).toFixed(1)}`).join(` `)}),N=h(null);function Rt(e){return e==null?b(`daqDetail.k9vnp9h053`,{p0:w.controller.defaultPublishIntervalMs}):e===0?b(`daqDetail.k1m1zwux030`):`${e}ms`}let P=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});e(E,e=>{e&&(P.enabled=e.enabled,P.lineId=e.lineId??``,P.driver=e.driver,P.followGlobal=e.intervalMs==null,P.intervalMs=e.intervalMs??w.controller.defaultIntervalMs,P.publishFollow=e.publishIntervalMs==null,P.publishEveryFrame=e.publishIntervalMs===0,P.publishMs=e.publishIntervalMs==null?w.controller.defaultPublishIntervalMs:e.publishIntervalMs,P.unit=e.unit,P.decimals=e.decimals,P.min=e.min,P.max=e.max,P.warnLow=e.warnLow,P.warnHigh=e.warnHigh)},{immediate:!0});let F=h({}),I=l(()=>x.find(e=>e.kind===P.driver)?.configFields??[]);e(E,e=>{e&&(F.value={...e.driverConfig})},{immediate:!0}),e(()=>P.driver,()=>{if(I.value.length&&Object.keys(F.value).length===0){let e={};for(let t of I.value)t.default!==void 0&&(e[t.key]=t.default);F.value=e}},{immediate:!0});let L=h(!1),R=h(null);async function zt(){L.value=!0,R.value=null;try{await w.patchNode(C.value,{driver:P.driver,driverConfig:{...F.value}}),R.value=await w.testNode(C.value)}catch(e){R.value={ok:!1,message:ce(e)}}finally{L.value=!1}}let z=h(!1);async function Bt(){let e=E.value;if(!(!e||z.value)){z.value=!0;try{await w.patchNode(e.id,{enabled:P.enabled,driver:P.driver,lineId:P.lineId,driverConfig:{...F.value},intervalMs:P.followGlobal?null:Math.max(1e3,Math.min(6e4,Math.round(P.intervalMs))),publishIntervalMs:P.publishFollow?null:P.publishEveryFrame?0:Math.max(0,Math.min(6e4,Math.round(P.publishMs))),unit:P.unit,decimals:Math.max(0,Math.min(6,Math.round(P.decimals))),min:P.min,max:P.max,warnLow:P.warnLow,warnHigh:P.warnHigh})}finally{z.value=!1}}}function Vt(e){return w.meta.drivers.find(t=>t.kind===e)?.status===`planned`}let B=h(``),Ht=l(()=>(E.value?.deviceIds??(E.value?.deviceBindingId?[E.value.deviceBindingId]:[])).map(e=>T.twins.find(t=>t.id===e)?.name??`${e.slice(0,8)}…`).join(` / `));function Ut(){w.bindNode(C.value,E.value?.deviceBindingId?null:B.value||null)}let Wt=l(()=>T.twins.filter(e=>e.kind!==`daq`&&e.id!==E.value?.id)),V=h([]),H=h(15e3),U=h(!1),Gt=[{label:`1s 桶`,ms:1e3},{label:`5s 桶`,ms:5e3},{label:`15s 桶(默认)`,ms:15e3},{label:`30s 桶`,ms:3e4},{label:`1min 桶`,ms:6e4}];async function W(){if(C.value){U.value=!0;try{let e=await w.samplesOf(C.value,{toMs:Date.now(),bucketMs:H.value||void 0,limit:400});V.value=[...e].reverse()}finally{U.value=!1,qt()}}}let Kt=h(null);function qt(){let e=Kt.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=Ot,i.beginPath(),i.moveTo(0,r/4*e),i.lineTo(n,r/4*e),i.stroke();let a=V.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=kt,i.font=`10px monospace`,i.fillStyle=kt,i.fillText(s.toFixed(2),4,11),i.fillText(o.toFixed(2),4,r-4),i.strokeStyle=Dt,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 G=h(null),K=null,q=``;function J(){let e=G.value,t=E.value;if(!e||!t||t.hist.length<2)return;let n=`${t.hist.length}:${t.hist[t.hist.length-1]}:${t.hist[0]}`;if(n===q)return;q=n;let r=Math.min(window.devicePixelRatio||1,2),i=e.clientWidth,a=e.clientHeight;(e.width!==i*r||e.height!==a*r)&&(e.width=i*r,e.height=a*r);let o=e.getContext(`2d`);if(!o)return;o.setTransform(r,0,0,r,0,0),o.clearRect(0,0,i,a);let s=Math.max(...t.hist),c=Math.min(...t.hist),l=Math.max(s-c,1e-9);o.strokeStyle=`rgba(65,200,244,0.9)`,o.lineWidth=1.5,o.beginPath(),t.hist.forEach((e,n)=>{let r=n/(t.hist.length-1)*i,s=a-(e-c)/l*(a-6)-3;n===0?o.moveTo(r,s):o.lineTo(r,s)}),o.stroke()}let Y=null,X=!1;function Jt(){X=document.hidden,X||(J(),Q.value&&W())}let Z=h(0),Q=l(()=>{let e=w.controller.minQueryDisplayIntervalMs??500,t=Z.value>0?Z.value:w.controller.queryDisplayIntervalMs??0;return t>0?Math.max(e,t):0}),$=null;function Yt(){$&&=(clearInterval($),null);let e=Q.value;e&&($=se(()=>{document.hidden||U.value||W()},e))}return n(()=>{W(),K=se(()=>{X||J()},800),document.addEventListener(`visibilitychange`,Jt),typeof ResizeObserver<`u`&&(Y=new ResizeObserver(()=>{q=``,J(),qt()}),G.value&&Y.observe(G.value)),Yt()}),t(()=>{K&&clearInterval(K),$&&clearInterval($),document.removeEventListener(`visibilitychange`,Jt),Y?.disconnect(),Y=null}),e(H,()=>void W()),e(Q,()=>Yt()),(e,t)=>{let n=ae;return a(),d(`div`,me,[u(`p`,he,[c(n,{to:`/daq`,class:`back`},{default:te(()=>[_(i(e.$t(`daqDetail.k1emg364001`)),1)]),_:1}),_(` / NODE `+i(C.value.slice(0,8).toUpperCase()),1)]),u(`div`,ge,[u(`h1`,null,i(E.value?.name??C.value),1),u(`span`,{class:o([`st-pill`,[O()]])},i(Mt[O()]),3)]),!E.value&&g(w).error?(a(),d(`p`,_e,[_(i(g(w).error)+`(`,1),c(n,{to:`/workshop`},{default:te(()=>[_(i(e.$t(`daqDetail.k1bhhheq002`)),1)]),_:1}),t[21]||=_(`) `,-1)])):p(``,!0),E.value?(a(),d(`div`,ve,[u(`section`,ye,[u(`div`,be,[u(`p`,xe,i(e.$t(`daqDetail.k1fx2vik032`))+` `+i(D.value?.ch??`-`),1),u(`div`,Se,[_(i(E.value.value==null?`--`:E.value.value.toFixed(E.value.decimals)),1),u(`small`,null,i(E.value.unit),1)]),u(`canvas`,{ref_key:`liveCanvas`,ref:G,class:`live-canvas`},null,512),u(`dl`,Ce,[u(`div`,null,[u(`dt`,null,i(e.$t(`daqDetail.k4a0la003`)),1),u(`dd`,null,i(E.value.driver)+i(Vt(E.value.driver)?e.$t(`daqDetail.kz8zr9v035`):``),1)]),u(`div`,null,[u(`dt`,null,i(e.$t(`daqDetail.k3xg3w004`)),1),u(`dd`,null,i(E.value.intervalMs??e.$t(`daqDetail.k9vnp9h053`,{p0:g(w).controller.defaultIntervalMs})),1)]),u(`div`,null,[u(`dt`,null,i(e.$t(`daqDetail.k3w6td005`)),1),u(`dd`,null,i(Rt(E.value.publishIntervalMs)),1)]),u(`div`,null,[u(`dt`,null,i(e.$t(`daqDetail.k3x5tpx006`)),1),u(`dd`,null,i(E.value.warnLow??`-∞`)+` ~ `+i(E.value.warnHigh??`+∞`),1)]),u(`div`,null,[u(`dt`,null,i(e.$t(`daqDetail.k1hjj0jf007`)),1),u(`dd`,null,i(E.value.min)+` ~ `+i(E.value.max),1)]),u(`div`,null,[u(`dt`,null,i(e.$t(`daqDetail.k1i8rtqt008`)),1),u(`dd`,null,i(Ht.value||e.$t(`daqDetail.k3own4q036`)),1)])])])]),u(`section`,we,[u(`h3`,Te,i(e.$t(`daqDetail.kd9d69j009`)),1),u(`form`,{class:`form-grid`,onSubmit:ne(Bt,[`prevent`])},[u(`label`,Ee,[u(`span`,null,i(e.$t(`daqDetail.k1iw7tbf010`)),1),u(`button`,{type:`button`,class:o([`toggle`,{on:P.enabled}]),onClick:t[0]||=e=>P.enabled=!P.enabled},i(P.enabled?e.$t(`daqDetail.k3w3j8f037`):e.$t(`daqDetail.k3n5aaj045`)),3)]),u(`label`,De,[u(`span`,null,i(e.$t(`daqDetail.k12k23od011`)),1),m(u(`select`,{"onUpdate:modelValue":t[1]||=e=>P.lineId=e,class:`input`},[u(`option`,Oe,i(e.$t(`daqDetail.k3ootr6012`)),1),(a(!0),d(f,null,s(g(jt).lines,e=>(a(),d(`option`,{key:e.id,value:e.id},i(e.name),9,ke))),128))],512),[[v,P.lineId]])]),u(`label`,Ae,[u(`span`,null,i(e.$t(`daqDetail.k1l6smxo013`)),1),m(u(`select`,{"onUpdate:modelValue":t[2]||=e=>P.driver=e,class:`input`},[(a(!0),d(f,null,s(g(x),t=>(a(),d(`option`,{key:t.kind,value:t.kind,disabled:t.status===`planned`},i(t.label)+i(t.status===`planned`?e.$t(`daqDetail.kz8zr9v035`):``),9,je))),128))],512),[[v,P.driver]])]),u(`label`,Me,[u(`button`,{type:`button`,class:o([`toggle slim`,{on:P.followGlobal}]),onClick:t[3]||=e=>P.followGlobal=!P.followGlobal},i(P.followGlobal?e.$t(`daqDetail.k1k2ueyq038`):e.$t(`daqDetail.k1cgi8fy046`)),3),m(u(`input`,{"onUpdate:modelValue":t[4]||=e=>P.intervalMs=e,type:`number`,min:`1000`,max:`60000`,step:`500`,class:`input`,disabled:P.followGlobal},null,8,Ne),[[y,P.intervalMs,void 0,{number:!0}]]),t[22]||=u(`small`,null,`ms`,-1)]),u(`label`,Pe,[u(`button`,{type:`button`,class:o([`toggle slim`,{on:P.calKind===`linear`}]),title:`采集标定 decoder:物理值 = scale × PLC采集值 + offset`,onClick:t[5]||=e=>P.calKind=P.calKind===`linear`?`none`:`linear`},i(P.calKind===`linear`?e.$t(`daqDetail.k1eru4r1039`):e.$t(`daqDetail.k3oktae047`)),3),m(u(`input`,{"onUpdate:modelValue":t[6]||=e=>P.calScale=e,type:`number`,step:`0.1`,class:`input`,disabled:P.calKind!==`linear`,title:`decode 斜率(≠0)`},null,8,Fe),[[y,P.calScale,void 0,{number:!0}]]),m(u(`input`,{"onUpdate:modelValue":t[7]||=e=>P.calOffset=e,type:`number`,step:`0.1`,class:`input`,disabled:P.calKind!==`linear`,title:`decode 截距`},null,8,Ie),[[y,P.calOffset,void 0,{number:!0}]]),t[23]||=u(`small`,null,`decoder`,-1)]),u(`label`,Le,[u(`button`,{type:`button`,class:o([`toggle slim`,{on:P.publishFollow}]),onClick:t[8]||=e=>P.publishFollow=!P.publishFollow},i(P.publishFollow?e.$t(`daqDetail.k1k2t5o7040`):e.$t(`daqDetail.k1cggz5f048`)),3),u(`span`,{class:o([`toggle slim`,{on:P.publishEveryFrame}]),style:{cursor:`pointer`},onClick:t[9]||=e=>P.publishEveryFrame=!P.publishEveryFrame},i(P.publishEveryFrame?e.$t(`daqDetail.k41mvv041`):e.$t(`daqDetail.k3n42dj049`)),3),m(u(`input`,{"onUpdate:modelValue":t[10]||=e=>P.publishMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,class:`input`,disabled:P.publishFollow||P.publishEveryFrame},null,8,Re),[[y,P.publishMs,void 0,{number:!0}]]),t[24]||=u(`small`,null,`ms`,-1)]),u(`label`,ze,[u(`span`,null,i(e.$t(`daqDetail.k3x4ef014`)),1),m(u(`input`,{"onUpdate:modelValue":t[11]||=e=>P.unit=e,class:`input`},null,512),[[y,P.unit]])]),u(`label`,Be,[u(`span`,null,i(e.$t(`daqDetail.k3mxmcx015`)),1),m(u(`input`,{"onUpdate:modelValue":t[12]||=e=>P.decimals=e,type:`number`,min:`0`,max:`6`,class:`input`},null,512),[[y,P.decimals,void 0,{number:!0}]])]),u(`div`,Ve,[u(`label`,He,[u(`span`,null,i(e.$t(`daqDetail.k1l9jv5m016`)),1),m(u(`input`,{"onUpdate:modelValue":t[13]||=e=>P.min=e,type:`number`,step:`any`,class:`input`},null,512),[[y,P.min,void 0,{number:!0}]])]),u(`label`,Ue,[u(`span`,null,i(e.$t(`daqDetail.k1md63hm017`)),1),m(u(`input`,{"onUpdate:modelValue":t[14]||=e=>P.warnLow=e,type:`number`,step:`any`,class:`input`},null,512),[[y,P.warnLow,void 0,{number:!0}]])]),u(`label`,We,[u(`span`,null,i(e.$t(`daqDetail.k1md63gp018`)),1),m(u(`input`,{"onUpdate:modelValue":t[15]||=e=>P.warnHigh=e,type:`number`,step:`any`,class:`input`},null,512),[[y,P.warnHigh,void 0,{number:!0}]])]),u(`label`,Ge,[u(`span`,null,i(e.$t(`daqDetail.k1l9jv4p019`)),1),m(u(`input`,{"onUpdate:modelValue":t[16]||=e=>P.max=e,type:`number`,step:`any`,class:`input`},null,512),[[y,P.max,void 0,{number:!0}]])])]),u(`button`,{class:`aw-pill`,type:`submit`,disabled:z.value},i(z.value?e.$t(`daqDetail.k1as0g50042`):e.$t(`daqDetail.ksn9cgo050`)),9,Ke)],32),I.value.length?(a(),d(f,{key:0},[u(`h3`,qe,i(e.$t(`daqDetail.k1p9gioa033`))+` `+i(g(x).find(e=>e.kind===P.driver)?.label),1),u(`div`,Je,[(a(!0),d(f,null,s(I.value,e=>(a(),d(`label`,{key:e.key,class:`field`},[u(`span`,null,[_(i(e.label),1),e.required?(a(),d(`em`,Ye,`*`)):p(``,!0)]),e.type===`select`?m((a(),d(`select`,{key:0,"onUpdate:modelValue":t=>F.value[e.key]=t,class:`input`},[(a(!0),d(f,null,s(e.options,e=>(a(),d(`option`,{key:e.value,value:e.value},i(e.label),9,Ze))),128))],8,Xe)),[[v,F.value[e.key]]]):m((a(),d(`input`,{key:1,"onUpdate:modelValue":t=>F.value[e.key]=t,type:e.type===`number`?`number`:`text`,placeholder:e.placeholder,class:`input`},null,8,Qe)),[[re,F.value[e.key]]])]))),128))]),u(`div`,$e,[u(`button`,{class:`pill-btn`,disabled:L.value,onClick:zt},i(L.value?e.$t(`daqDetail.k1fsh720043`):e.$t(`daqDetail.k1fstglk051`)),9,et),R.value?(a(),d(`span`,{key:0,class:o([`test-out mono`,R.value.ok?`ok`:`bad`])},i(R.value.ok?`✓`:`✗`)+` `+i(R.value.message),3)):p(``,!0)])],64)):p(``,!0),u(`h3`,tt,i(e.$t(`daqDetail.k1ie6qju020`)),1),u(`div`,nt,[m(u(`select`,{"onUpdate:modelValue":t[17]||=e=>B.value=e,class:`input grow`},[u(`option`,rt,i(e.$t(`daqDetail.kjobzu3021`)),1),(a(!0),d(f,null,s(Wt.value,e=>(a(),d(`option`,{key:e.id,value:e.id},i(e.name),9,it))),128))],512),[[v,B.value]]),u(`button`,{class:`pill-btn`,onClick:Ut},i(Ht.value?e.$t(`daqDetail.k479eh044`):e.$t(`daqDetail.k452a8052`)),1)])]),u(`section`,at,[u(`div`,ot,[u(`h3`,st,i(e.$t(`daqDetail.k1i535i5034`))+i(g(w).meta.tsdb)+`) `,1),u(`div`,ct,[m(u(`select`,{"onUpdate:modelValue":t[18]||=e=>H.value=e,class:`input`},[(a(),d(f,null,s(Gt,e=>u(`option`,{key:e.ms,value:e.ms},i(e.label),9,lt)),64))],512),[[v,H.value,void 0,{number:!0}]]),u(`label`,{class:`refresh-ctl`,title:e.$t(`daqDetail.k1rfrshint001`,{p0:g(w).controller.minQueryDisplayIntervalMs??500})},[t[25]||=u(`span`,{class:`i-tabler-refresh`},null,-1),m(u(`input`,{"onUpdate:modelValue":t[19]||=e=>Z.value=e,type:`number`,min:0,max:`600000`,step:`500`,placeholder:String(g(w).controller.queryDisplayIntervalMs??5e3)},null,8,dt),[[y,Z.value,void 0,{number:!0}]]),t[26]||=_(`ms `,-1)],8,ut),u(`button`,{class:`pill-btn`,onClick:W},i(e.$t(`daqDetail.k3x1jg022`)),1)])]),u(`canvas`,{ref_key:`chartCanvas`,ref:Kt,class:`hist-canvas`},null,512),u(`table`,ft,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,i(e.$t(`daqDetail.k40vsf023`)),1),u(`th`,null,i(e.$t(`daqDetail.k48v5024`)),1),u(`th`,null,i(e.$t(`daqDetail.k4bza025`)),1)])]),u(`tbody`,null,[(a(!0),d(f,null,s(V.value.filter(e=>e.value!=null).slice(-12).reverse(),(e,t)=>(a(),d(`tr`,{key:t},[u(`td`,null,i(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour12:!1})),1),u(`td`,null,i(e.value.toFixed(E.value?.decimals??2)),1),u(`td`,null,i(e.state),1)]))),128))])])])])):p(``,!0),A.value?(a(),d(`section`,pt,[u(`div`,mt,[u(`h3`,ht,[_(i(k.value===`image`?e.$t(`daqDetail.kfrm0001`):e.$t(`daqDetail.kfrm0002`))+` `,1),u(`span`,gt,i(j.value.length),1)]),u(`button`,{class:`pill-btn`,onClick:M},i(e.$t(`daqDetail.k3x1jg022`)),1)]),k.value===`vector`?(a(),d(f,{key:0},[(a(),d(`svg`,{class:`vec-svg`,viewBox:`0 0 ${S} ${Et}`,preserveAspectRatio:`none`},[u(`polyline`,{points:Lt.value,fill:`none`,stroke:`var(--accent)`,"stroke-width":`1.5`},null,8,vt)],8,_t)),u(`table`,yt,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,i(e.$t(`daqDetail.k40vsf023`)),1),u(`th`,null,i(e.$t(`daqDetail.kfrm0004`)),1),u(`th`,null,i(e.$t(`daqDetail.kfrm0005`)),1)])]),u(`tbody`,null,[(a(!0),d(f,null,s(j.value.filter(e=>e.kind===`vector`).slice(0,12),e=>(a(),d(`tr`,{key:e.at},[u(`td`,null,i(Pt(e.at)),1),u(`td`,null,i(e.points?.length??0),1),u(`td`,null,i(Ft(e)),1)]))),128))])])],64)):(a(),d(f,{key:1},[j.value.length?(a(),d(`div`,bt,[(a(!0),d(f,null,s(j.value,t=>(a(),d(`figure`,{key:t.at,class:`gal-item`,title:e.$t(`daqDetail.kfrm0006`),onClick:e=>N.value=t},[u(`img`,{src:t.thumbUrl,loading:`lazy`,alt:`daq frame`},null,8,St),u(`figcaption`,Ct,i(Pt(t.at))+` · `+i(Ft(t)),1)],8,xt))),128))])):(a(),d(`p`,wt,i(e.$t(`daqDetail.kfrm0003`)),1)),N.value?(a(),d(`div`,{key:2,class:`gal-full`,onClick:t[20]||=e=>N.value=null},[u(`img`,{src:N.value.contentUrl??N.value.thumbUrl,alt:`daq frame full`},null,8,Tt)])):p(``,!0)],64))])):p(``,!0)])}}}),[[`__scopeId`,`data-v-1365f679`]]);export{At as default};
|