From f50704c476c63885108630261e1f2377cf6fddb2 Mon Sep 17 00:00:00 2001 From: joylink_zhaoerwei Date: Mon, 18 Nov 2024 17:10:59 +0800 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit a4e63a4ab6976f8e7decf6630aec7a934a27c916 Author: joylink_zhaoerwei Date: Mon Nov 18 17:07:07 2024 +0800 电子地图管理 commit 2544f5e131d79a99b83e366de142646477c6c67a Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Nov 14 14:23:30 2024 +0800 代码调整 commit 5400acf7e3f249d8d39644701dc7d872de488cde Author: joylink_zhaoerwei Date: Wed Nov 13 17:59:00 2024 +0800 电子地图绘制备用 commit c06acfd0b8b283d25d6f9fd4a9a5836a020d1381 Merge: 3c41293 fdca6c4 Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Nov 12 13:41:21 2024 +0800 Merge branch 'develop' of https://gitea.joylink.club/joylink/rtsa-client into develop commit 3c41293f0b91fc4e62cdbb11b1e9a227b2d3b772 Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Nov 12 13:41:17 2024 +0800 获取用户id调整 commit fdca6c490ba0ba178e5b24a7a1c479e115067b4c Author: joylink_zhaoerwei Date: Tue Nov 12 13:18:57 2024 +0800 密码去掉加盐 commit b429bf5ce34fd7e1966a54e18b6a79e9c29bbd68 Author: joylink_zhaoerwei Date: Tue Nov 12 10:51:32 2024 +0800 登录注册备用 commit 1d2c1c337ef3f3fc2b6db8e4c9e625074fe0ec57 Author: joylink_fanyuhong <18706759286@163.com> Date: Mon Nov 11 17:56:21 2024 +0800 代码调整 commit dee2b5ca7f2072a2a12790fb7b8c13e14dee3b88 Author: joylink_fanyuhong <18706759286@163.com> Date: Mon Nov 11 17:30:55 2024 +0800 烟感设备调整 commit f4812c7187e8dc68d38f5c116e9eebb7cb854ba7 Author: joylink_fanyuhong <18706759286@163.com> Date: Fri Nov 8 09:52:43 2024 +0800 代码提交 commit 23ed471da1b75b847cf93e3b3295d6d70f3ce84d Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Nov 7 17:30:32 2024 +0800 代码暂提 commit 429d6679f42cfd4c77fa4de15cf25baa8d0c744a Author: joylink_fanyuhong <18706759286@163.com> Date: Wed Nov 6 21:12:19 2024 +0800 问题调整 commit 28859d0fc1f0637139a9066dd1c8e6bfa5c9fe96 Merge: cffefa0 f76ec13 Author: joylink_fanyuhong <18706759286@163.com> Date: Wed Nov 6 20:59:49 2024 +0800 Merge branch 'develop' of https://gitea.joylink.club/joylink/rtsa-client into develop commit cffefa06c639b467dd08259bf8fbb0512df79268 Author: joylink_fanyuhong <18706759286@163.com> Date: Wed Nov 6 20:59:43 2024 +0800 代码暂提 commit f76ec139406c738efb0f9d005fe2146d9761037c Author: joylink_zhaoerwei Date: Wed Nov 6 16:54:44 2024 +0800 模式控制暂提 commit d353afa5dd253173cd3506c257eb099a34bde4fd Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Nov 5 18:05:09 2024 +0800 代码暂提 commit 9e5905cb55543b58b12feb06afe62950c5a87a88 Author: joylink_zhaoerwei Date: Thu Oct 31 16:58:01 2024 +0800 更新子模块 commit cac4f38d64c4d92c144f89109f6959822cbd2fdc Author: joylink_zhaoerwei Date: Thu Oct 31 16:53:45 2024 +0800 删除旧的子模块 commit a36b425b120b84b90ee459061e25a0310f771b4b Author: joylink_zhaoerwei Date: Wed Oct 30 10:15:47 2024 +0800 调整 commit 8260753cf7bb13cefe7db9e51d8f2d94be9d6c93 Merge: 3f240a7 9e0bc3e Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Oct 29 13:29:38 2024 +0800 Merge branch 'develop' of https://gitea.joylink.club/joylink/rtss-simulation-app-client into develop commit 3f240a7b573fda5ec3fbb0a87394adefa1bfbf41 Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Oct 29 13:29:36 2024 +0800 代码提交 commit 9e0bc3ea0bb15380a57d2a71600a62544fc0c461 Author: joylink_zhaoerwei Date: Mon Oct 28 16:53:12 2024 +0800 屏蔽门系统图 commit 3c67d4b5b73371f901989c71b4435cabfd403f16 Merge: f5d87ac eb9d073 Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 24 09:30:11 2024 +0800 Merge branch 'develop' of https://gitea.joylink.club/joylink/rtss-simulation-app-client into develop commit f5d87acd4cecf378d160bac3581f3be7907f7d1e Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 24 09:29:44 2024 +0800 fas设备添加 commit eb9d0734ae3f1caedab9dca58c6a45d7365ff232 Author: joylink_zhaoerwei Date: Wed Oct 23 15:51:18 2024 +0800 垂直电梯备用 commit afd27d4b3ebcc3943c0a53f073a062e2ac80ab05 Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Oct 22 17:52:37 2024 +0800 消防泵代码提交 commit 61911d9ee5931308e44b40ab582dbc58d397dee0 Merge: 98b1db6 a7968d1 Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Oct 22 17:20:47 2024 +0800 Merge branch 'develop' of https://gitea.joylink.club/joylink/rtss-simulation-app-client into develop commit 98b1db62901cc0914467b4cfd936d8b984f0b02c Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Oct 22 17:16:24 2024 +0800 设备添加 commit a7968d11da28f3dc5406d6efc5bc8f488f7eed28 Author: joylink_zhaoerwei Date: Mon Oct 21 18:03:30 2024 +0800 bas自动扶梯备用 commit d16bedfbf47cfeffdafddb0dcf3b4205a0120044 Author: joylink_zhaoerwei Date: Fri Oct 18 16:21:27 2024 +0800 绘制组件调整 commit 124c9a27842919ddaf1cebb4472fc3f7671b82c7 Merge: b451f4f 07b35b5 Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 17 17:52:03 2024 +0800 Merge branch 'develop' of https://gitea.joylink.club/joylink/rtss-simulation-app-client into develop commit b451f4fa3e9b0f8cf8fe59771587dc2b4cf0578e Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 17 17:52:02 2024 +0800 FAS新增设备 commit 07b35b5360c41b2abebdf3423e48d13074694683 Author: joylink_zhaoerwei Date: Thu Oct 17 14:50:52 2024 +0800 cctv加分层 commit d03f30d4cca892dd8a337205a99a243e713c0070 Author: joylink_zhaoerwei Date: Thu Oct 17 13:50:52 2024 +0800 CCTV设备布局图 commit 31d09306b4fc7c064e4cb72076da04a77c64bfb6 Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 17 11:45:40 2024 +0800 调整icon commit cfc5adb9531d2d4c5f9ec7b65299b6d1a503b898 Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 17 11:45:18 2024 +0800 调整警铃icon commit 083c17edd1be8cd34dd251f270ea62d83dc245e2 Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 17 11:31:38 2024 +0800 添加火灾警铃设备 commit dbed83df26413f90cc803bdcfdc4e499da50018f Merge: 5bddef1 259d351 Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 17 09:34:31 2024 +0800 Merge branch 'develop' of https://gitea.joylink.club/joylink/rtss-simulation-app-client into develop commit 5bddef10cd980427841c05fac7ac539790b3d21f Author: joylink_fanyuhong <18706759286@163.com> Date: Thu Oct 17 09:32:55 2024 +0800 添加火灾报警主机 commit 259d3518bb59a667292b2c6bd14560f6ce883ec0 Author: joylink_zhaoerwei Date: Wed Oct 16 17:25:10 2024 +0800 增加button label颜色 commit 3c91608189184de8dd0774290b763d52bfc73e57 Author: joylink_zhaoerwei Date: Wed Oct 16 17:09:36 2024 +0800 通用的button-类似组件button commit f5bc7c9aa9776d06e92e1974bb61ec2c07aca5e4 Author: fan Date: Wed Oct 16 16:55:57 2024 +0800 protoc commit 7ab75c722e3a49a608599b5705fd78f0be05c54d Author: fan Date: Wed Oct 16 16:54:53 2024 +0800 fas数据调整 commit d8c55a011b097fedcc83b009cdb095a17788cd78 Author: joylink_fanyuhong <18706759286@163.com> Date: Wed Oct 16 14:01:58 2024 +0800 添加FAS平面图分区 commit 9948e87fa078a3a430430c2f24f219bb80caaabc Author: fan Date: Wed Oct 16 09:39:34 2024 +0800 protoc commit 702cc229a3aa7c7a73bc8d6178ce34b18b033466 Author: joylink_zhaoerwei Date: Tue Oct 15 18:16:18 2024 +0800 加滚动条 commit ed3392d3781d5a8926a3c01ca7c37b1ad24b3928 Author: joylink_zhaoerwei Date: Tue Oct 15 17:37:56 2024 +0800 绘制加组件显示 commit 1891981a23ffe5eb169578608d36eaefd54bfddd Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Oct 15 16:50:36 2024 +0800 抽屉调整 --- .gitmodules | 6 +- package-lock.json | 16 +- package.json | 3 +- public/drawIcon.svg | 88 + rtsa-proto-msg | 1 + rtss-proto-msg | 1 - scripts/proto.cjs | 2 +- src/App.vue | 22 +- src/api/ElectronicMapDraftApi.ts | 138 + src/api/ElectronicMapPublishApi.ts | 63 + src/api/UserApi.ts | 261 +- src/assets/ISCS/PSD/duanmenAlarm.png | Bin 0 -> 2733 bytes src/assets/ISCS/PSD/duanmenClose.png | Bin 0 -> 2423 bytes src/assets/ISCS/PSD/duanmenConnectBreak.png | Bin 0 -> 2626 bytes src/assets/ISCS/PSD/train1.png | Bin 0 -> 9859 bytes src/assets/ISCS/PSD/train2.png | Bin 0 -> 10755 bytes src/components/Iscs/CCTVMonitoring.vue | 400 ++ src/components/Iscs/FASPlaneGraph.vue | 91 + src/components/Iscs/IscsBottomAlarm.vue | 6 +- src/components/Iscs/ModeControl.vue | 158 + .../Iscs/ModeControlOfBigSystem.vue | 319 ++ .../Iscs/ModeControlOfBigSystemTable.vue | 122 + src/components/Iscs/PSD.vue | 383 ++ .../draw-app/IscsDrawProperties.vue | 19 +- .../draw-app/electronicMapDrawProperties.vue | 49 + .../properties/BAS/EscalatorProperty.vue | 23 + .../BAS/VerticalElevatorProperty.vue | 23 + .../draw-app/properties/ButtonProperty.vue | 136 + .../properties/CCTV/CCTVButtonProperty.vue | 40 - .../CanvasElectronicMapProperty.vue | 80 + .../draw-app/properties/RectProperty.vue | 2 +- .../electronicMap/AxleCountingConfig.vue | 188 + .../electronicMap/PlatformProperty.vue | 108 + src/configs/cctvCamera.ts | 41 + src/configs/iscsStyleConfig.ts | 8 +- src/drawApp/commonApp.ts | 13 + src/drawApp/electronicMapApp.ts | 279 ++ .../graphics/BAS/EscalatorInteraction.ts | 41 + .../BAS/VerticalElevatorInteraction.ts | 41 + src/drawApp/graphics/ButtonInteraction.ts | 92 + .../graphics/CCTV/CCTVButtonInteraction.ts | 47 - src/drawApp/graphics/FAS/AcsInteraction.ts | 38 + src/drawApp/graphics/FAS/AfcInteraction.ts | 38 + .../FAS/ElectricButterflyValveInteraction.ts | 44 + ...ectricFireExtinguishingValveInteraction.ts | 47 + .../FAS/ElevatorLiftToTopInteraction.ts | 44 + .../FAS/EmergencyLightingInteraction.ts | 44 + .../graphics/FAS/FasAlarmInteraction.ts | 38 + .../FAS/FasFailureControlHostInteraction.ts | 44 + .../graphics/FAS/FaultValveInteraction.ts | 41 + ...FireIntercommunicationSignalInteraction.ts | 47 + .../graphics/FAS/FirePumpInteraction.ts | 38 + .../graphics/FAS/FireShutterInteraction.ts | 44 + .../graphics/FAS/FireValveInteraction.ts | 41 + .../FAS/ManualAlarmButtonInteraction.ts | 44 + .../FAS/NonFirePowerSupplyInteraction.ts | 44 + .../graphics/FAS/PressureSwitchInteraction.ts | 44 + .../FAS/SignalButterflyValveInteraction.ts | 44 + .../graphics/FAS/SmokeDetectorInteraction.ts | 44 + .../graphics/FAS/SprayPumpInteraction.ts | 41 + .../FAS/StabilizedPressurePumpInteraction.ts | 44 + .../FAS/StartPumpButtonInteraction.ts | 44 + .../FAS/TemperatureCableInteraction.ts | 44 + .../FAS/TemperatureDetectorInteraction.ts | 44 + .../FAS/WaterFlowIndicatorInteraction.ts | 44 + .../electronicMap/AxleCountingInteraction.ts | 71 + .../electronicMap/PlatformInteraction.ts | 148 + .../electronicMap/ScreenDoorInteraction.ts | 192 + .../electronicMap/SectionInteraction.ts | 317 ++ .../electronicMap/SignalInteraction.ts | 253 ++ .../electronicMap/StationInteraction.ts | 168 + .../electronicMap/TurnoutInteraction.ts | 378 ++ src/drawApp/iscsApp.ts | 590 ++- src/graphics/BAS/escalator/Escalator.ts | 74 + .../BAS/escalator/EscalatorDrawAssistant.ts | 117 + .../BAS/escalator/escalator-data.json | 29 + .../BAS/escalator/escalator-spritesheet.png | Bin 0 -> 14013 bytes .../BAS/verticalElevator/VerticalElevator.ts | 75 + .../VerticalElevatorDrawAssistant.ts | 124 + .../verticalElevator-data.json | 29 + .../verticalElevator-spritesheet.png | Bin 0 -> 8024 bytes src/graphics/CCTV/cctvButton/CCTVButton.ts | 81 - .../cctvButton/CCTVButtonDrawAssistant.ts | 122 - .../cctvButton/cctv-button-spritesheet.png | Bin 4453 -> 0 bytes src/graphics/FAS/acs/Acs.ts | 68 + src/graphics/FAS/acs/AcsAssistant.ts | 111 + src/graphics/FAS/afc/Afc.ts | 68 + src/graphics/FAS/afc/AfcAssistant.ts | 111 + .../ElectricButterflyValve.ts | 70 + .../ElectricButterflyValveAssistant.ts | 132 + .../ElectricFireExtinguishingValve.ts | 78 + ...ElectricFireExtinguishingValveAssistant.ts | 136 + .../elevatorLiftToTop/ElevatorLiftToTop.ts | 68 + .../ElevatorLiftToTopAssistant.ts | 131 + .../emergencyLighting/EmergencyLighting.ts | 68 + .../EmergencyLightingAssistant.ts | 131 + src/graphics/FAS/fasAlarm/FasAlarm.ts | 71 + .../FAS/fasAlarm/FasAlarmAssistant.ts | 115 + src/graphics/FAS/faultValve/FaultValve.ts | 74 + .../FAS/faultValve/FaultValveAssistant.ts | 124 + .../FasFailureContorlHostAssistant.ts | 131 + .../FasFailureControlHost.json | 21 + .../FasFailureControlHost.png | Bin 0 -> 2271 bytes .../FasFailureControlHost.ts | 70 + .../FireIntercommunicationSignal.ts | 75 + .../FireIntercommunicationSignalAssistant.ts | 135 + src/graphics/FAS/firePump/FirePump.ts | 69 + .../FAS/firePump/FirePumpAssistant.ts | 115 + src/graphics/FAS/fireShutter/FireShutter.ts | 71 + .../FAS/fireShutter/FireShutterAssistant.ts | 128 + src/graphics/FAS/fireValve/FireValve.ts | 70 + .../FAS/fireValve/FireValveAssistant.ts | 117 + .../manualAlarmButton/ManualAlarmButton.json | 21 + .../manualAlarmButton/ManualAlarmButton.png | Bin 0 -> 4061 bytes .../manualAlarmButton/ManualAlarmButton.ts | 66 + .../ManualAlarmButtonAssistant.ts | 131 + .../nonFirePowerSupply/NonFirePowerSupply.ts | 68 + .../NonFirePowerSupplyAssistant.ts | 131 + src/graphics/FAS/pndDevice/FasDevice.png | Bin 0 -> 121245 bytes src/graphics/FAS/pndDevice/PngDevice.json | 725 ++++ .../FAS/pressureSwitch/PressureSwitch.ts | 68 + .../pressureSwitch/PressureSwitchAssistant.ts | 123 + .../SignalButterflyValve.ts | 69 + .../SignalButterflyValveAssistant.ts | 131 + .../FAS/smokeDetector/SmokeDetector.ts | 73 + .../smokeDetector/SmokeDetectorAssistant.ts | 123 + src/graphics/FAS/sprayPump/SprayPump.ts | 69 + .../FAS/sprayPump/SprayPumpAssistant.ts | 117 + .../StabilizedPressurePump.json | 21 + .../StabilizedPressurePump.png | Bin 0 -> 1748 bytes .../StabilizedPressurePump.ts | 68 + .../StabilizedPressurePumpAssistant.ts | 132 + .../FAS/startPumpButton/StartPumpButton.ts | 65 + .../StartPumpButtonAssistant.ts | 130 + .../FAS/temperatureCable/TemperatureCable.ts | 73 + .../TemperatureCableAssistant.ts | 130 + .../TemperatureDetector.json | 21 + .../TemperatureDetector.png | Bin 0 -> 644 bytes .../TemperatureDetector.ts | 66 + .../TemperatureDetectorAssistant.ts | 131 + .../waterFlowIndicator/WaterFlowIndicator.ts | 69 + .../WaterFlowIndicatorAssistant.ts | 131 + src/graphics/button/Button.ts | 203 + src/graphics/button/ButtonDrawAssistant.ts | 129 + .../cctv-button-data.json | 12 +- .../button/cctv-button-spritesheet.png | Bin 0 -> 14650 bytes src/graphics/electronicMap/CommonGraphics.ts | 128 + .../axleCounting/AxleCounting.ts | 135 + .../axleCounting/AxleCountingDrawAssistant.ts | 425 +++ .../electronicMap/platform/Platform.ts | 164 + .../platform/PlatformDrawAssistant.ts | 103 + .../electronicMap/screenDoor/ScreenDoor.ts | 219 ++ .../screenDoor/ScreenDoorDrawAssistant.ts | 97 + src/graphics/electronicMap/section/Section.ts | 407 ++ .../section/SectionDrawAssistant.ts | 671 ++++ .../sectionGraphic/SectionGraphic.ts | 51 + .../electronicMap/signal/LampMainBody.ts | 141 + src/graphics/electronicMap/signal/Signal.ts | 311 ++ .../electronicMap/signal/SignalCode.ts | 44 + .../signal/SignalDrawAssistant.ts | 181 + src/graphics/electronicMap/station/Station.ts | 111 + .../station/StationDrawAssistant.ts | 102 + .../trainWindow/oneClickDrawAssistant.ts | 74 + src/graphics/electronicMap/turnout/Turnout.ts | 463 +++ .../turnout/TurnoutDrawAssistant.ts | 567 +++ src/layouts/IscsDrawLayout.vue | 249 +- src/layouts/MainLayout.vue | 87 +- src/layouts/electronicMapDrawLayout.vue | 328 ++ src/pages/ElectronicMapDraftManage.vue | 838 +++++ src/pages/ElectronicMapPublishManage.vue | 544 +++ src/pages/IscsDraftManage.vue | 14 +- src/pages/IscsPublishManage.vue | 2 +- src/pages/UserLogin.vue | 126 + src/pages/UserManage.vue | 126 +- src/pages/UserRegister.vue | 195 + src/protos/common.ts | 12 +- src/protos/electronicMap_graphic_data.ts | 2459 ++++++++++++ src/protos/em_data.ts | 426 --- src/protos/iscs_graphic_data.ts | 3316 ++++++++++++++++- src/protos/picture.ts | 18 - src/protos/simulation.ts | 187 + src/router/routes.ts | 68 +- src/stores/draw-store.ts | 4 +- src/stores/electronicMap-draw-store.ts | 107 + yarn.lock | 1727 ++++----- 185 files changed, 26222 insertions(+), 1966 deletions(-) create mode 160000 rtsa-proto-msg delete mode 160000 rtss-proto-msg create mode 100644 src/api/ElectronicMapDraftApi.ts create mode 100644 src/api/ElectronicMapPublishApi.ts create mode 100644 src/assets/ISCS/PSD/duanmenAlarm.png create mode 100644 src/assets/ISCS/PSD/duanmenClose.png create mode 100644 src/assets/ISCS/PSD/duanmenConnectBreak.png create mode 100644 src/assets/ISCS/PSD/train1.png create mode 100644 src/assets/ISCS/PSD/train2.png create mode 100644 src/components/Iscs/CCTVMonitoring.vue create mode 100644 src/components/Iscs/FASPlaneGraph.vue create mode 100644 src/components/Iscs/ModeControl.vue create mode 100644 src/components/Iscs/ModeControlOfBigSystem.vue create mode 100644 src/components/Iscs/ModeControlOfBigSystemTable.vue create mode 100644 src/components/Iscs/PSD.vue create mode 100644 src/components/draw-app/electronicMapDrawProperties.vue create mode 100644 src/components/draw-app/properties/BAS/EscalatorProperty.vue create mode 100644 src/components/draw-app/properties/BAS/VerticalElevatorProperty.vue create mode 100644 src/components/draw-app/properties/ButtonProperty.vue delete mode 100644 src/components/draw-app/properties/CCTV/CCTVButtonProperty.vue create mode 100644 src/components/draw-app/properties/CanvasElectronicMapProperty.vue create mode 100644 src/components/draw-app/properties/electronicMap/AxleCountingConfig.vue create mode 100644 src/components/draw-app/properties/electronicMap/PlatformProperty.vue create mode 100644 src/configs/cctvCamera.ts create mode 100644 src/drawApp/electronicMapApp.ts create mode 100644 src/drawApp/graphics/BAS/EscalatorInteraction.ts create mode 100644 src/drawApp/graphics/BAS/VerticalElevatorInteraction.ts create mode 100644 src/drawApp/graphics/ButtonInteraction.ts delete mode 100644 src/drawApp/graphics/CCTV/CCTVButtonInteraction.ts create mode 100644 src/drawApp/graphics/FAS/AcsInteraction.ts create mode 100644 src/drawApp/graphics/FAS/AfcInteraction.ts create mode 100644 src/drawApp/graphics/FAS/ElectricButterflyValveInteraction.ts create mode 100644 src/drawApp/graphics/FAS/ElectricFireExtinguishingValveInteraction.ts create mode 100644 src/drawApp/graphics/FAS/ElevatorLiftToTopInteraction.ts create mode 100644 src/drawApp/graphics/FAS/EmergencyLightingInteraction.ts create mode 100644 src/drawApp/graphics/FAS/FasAlarmInteraction.ts create mode 100644 src/drawApp/graphics/FAS/FasFailureControlHostInteraction.ts create mode 100644 src/drawApp/graphics/FAS/FaultValveInteraction.ts create mode 100644 src/drawApp/graphics/FAS/FireIntercommunicationSignalInteraction.ts create mode 100644 src/drawApp/graphics/FAS/FirePumpInteraction.ts create mode 100644 src/drawApp/graphics/FAS/FireShutterInteraction.ts create mode 100644 src/drawApp/graphics/FAS/FireValveInteraction.ts create mode 100644 src/drawApp/graphics/FAS/ManualAlarmButtonInteraction.ts create mode 100644 src/drawApp/graphics/FAS/NonFirePowerSupplyInteraction.ts create mode 100644 src/drawApp/graphics/FAS/PressureSwitchInteraction.ts create mode 100644 src/drawApp/graphics/FAS/SignalButterflyValveInteraction.ts create mode 100644 src/drawApp/graphics/FAS/SmokeDetectorInteraction.ts create mode 100644 src/drawApp/graphics/FAS/SprayPumpInteraction.ts create mode 100644 src/drawApp/graphics/FAS/StabilizedPressurePumpInteraction.ts create mode 100644 src/drawApp/graphics/FAS/StartPumpButtonInteraction.ts create mode 100644 src/drawApp/graphics/FAS/TemperatureCableInteraction.ts create mode 100644 src/drawApp/graphics/FAS/TemperatureDetectorInteraction.ts create mode 100644 src/drawApp/graphics/FAS/WaterFlowIndicatorInteraction.ts create mode 100644 src/drawApp/graphics/electronicMap/AxleCountingInteraction.ts create mode 100644 src/drawApp/graphics/electronicMap/PlatformInteraction.ts create mode 100644 src/drawApp/graphics/electronicMap/ScreenDoorInteraction.ts create mode 100644 src/drawApp/graphics/electronicMap/SectionInteraction.ts create mode 100644 src/drawApp/graphics/electronicMap/SignalInteraction.ts create mode 100644 src/drawApp/graphics/electronicMap/StationInteraction.ts create mode 100644 src/drawApp/graphics/electronicMap/TurnoutInteraction.ts create mode 100644 src/graphics/BAS/escalator/Escalator.ts create mode 100644 src/graphics/BAS/escalator/EscalatorDrawAssistant.ts create mode 100644 src/graphics/BAS/escalator/escalator-data.json create mode 100644 src/graphics/BAS/escalator/escalator-spritesheet.png create mode 100644 src/graphics/BAS/verticalElevator/VerticalElevator.ts create mode 100644 src/graphics/BAS/verticalElevator/VerticalElevatorDrawAssistant.ts create mode 100644 src/graphics/BAS/verticalElevator/verticalElevator-data.json create mode 100644 src/graphics/BAS/verticalElevator/verticalElevator-spritesheet.png delete mode 100644 src/graphics/CCTV/cctvButton/CCTVButton.ts delete mode 100644 src/graphics/CCTV/cctvButton/CCTVButtonDrawAssistant.ts delete mode 100644 src/graphics/CCTV/cctvButton/cctv-button-spritesheet.png create mode 100644 src/graphics/FAS/acs/Acs.ts create mode 100644 src/graphics/FAS/acs/AcsAssistant.ts create mode 100644 src/graphics/FAS/afc/Afc.ts create mode 100644 src/graphics/FAS/afc/AfcAssistant.ts create mode 100644 src/graphics/FAS/electricButterflyValve/ElectricButterflyValve.ts create mode 100644 src/graphics/FAS/electricButterflyValve/ElectricButterflyValveAssistant.ts create mode 100644 src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValve.ts create mode 100644 src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValveAssistant.ts create mode 100644 src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTop.ts create mode 100644 src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTopAssistant.ts create mode 100644 src/graphics/FAS/emergencyLighting/EmergencyLighting.ts create mode 100644 src/graphics/FAS/emergencyLighting/EmergencyLightingAssistant.ts create mode 100644 src/graphics/FAS/fasAlarm/FasAlarm.ts create mode 100644 src/graphics/FAS/fasAlarm/FasAlarmAssistant.ts create mode 100644 src/graphics/FAS/faultValve/FaultValve.ts create mode 100644 src/graphics/FAS/faultValve/FaultValveAssistant.ts create mode 100644 src/graphics/FAS/fireFailureControlHost/FasFailureContorlHostAssistant.ts create mode 100644 src/graphics/FAS/fireFailureControlHost/FasFailureControlHost.json create mode 100644 src/graphics/FAS/fireFailureControlHost/FasFailureControlHost.png create mode 100644 src/graphics/FAS/fireFailureControlHost/FasFailureControlHost.ts create mode 100644 src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignal.ts create mode 100644 src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignalAssistant.ts create mode 100644 src/graphics/FAS/firePump/FirePump.ts create mode 100644 src/graphics/FAS/firePump/FirePumpAssistant.ts create mode 100644 src/graphics/FAS/fireShutter/FireShutter.ts create mode 100644 src/graphics/FAS/fireShutter/FireShutterAssistant.ts create mode 100644 src/graphics/FAS/fireValve/FireValve.ts create mode 100644 src/graphics/FAS/fireValve/FireValveAssistant.ts create mode 100644 src/graphics/FAS/manualAlarmButton/ManualAlarmButton.json create mode 100644 src/graphics/FAS/manualAlarmButton/ManualAlarmButton.png create mode 100644 src/graphics/FAS/manualAlarmButton/ManualAlarmButton.ts create mode 100644 src/graphics/FAS/manualAlarmButton/ManualAlarmButtonAssistant.ts create mode 100644 src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupply.ts create mode 100644 src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupplyAssistant.ts create mode 100644 src/graphics/FAS/pndDevice/FasDevice.png create mode 100644 src/graphics/FAS/pndDevice/PngDevice.json create mode 100644 src/graphics/FAS/pressureSwitch/PressureSwitch.ts create mode 100644 src/graphics/FAS/pressureSwitch/PressureSwitchAssistant.ts create mode 100644 src/graphics/FAS/signalButterflyValve/SignalButterflyValve.ts create mode 100644 src/graphics/FAS/signalButterflyValve/SignalButterflyValveAssistant.ts create mode 100644 src/graphics/FAS/smokeDetector/SmokeDetector.ts create mode 100644 src/graphics/FAS/smokeDetector/SmokeDetectorAssistant.ts create mode 100644 src/graphics/FAS/sprayPump/SprayPump.ts create mode 100644 src/graphics/FAS/sprayPump/SprayPumpAssistant.ts create mode 100644 src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump.json create mode 100644 src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump.png create mode 100644 src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump.ts create mode 100644 src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePumpAssistant.ts create mode 100644 src/graphics/FAS/startPumpButton/StartPumpButton.ts create mode 100644 src/graphics/FAS/startPumpButton/StartPumpButtonAssistant.ts create mode 100644 src/graphics/FAS/temperatureCable/TemperatureCable.ts create mode 100644 src/graphics/FAS/temperatureCable/TemperatureCableAssistant.ts create mode 100644 src/graphics/FAS/temperatureDetector/TemperatureDetector.json create mode 100644 src/graphics/FAS/temperatureDetector/TemperatureDetector.png create mode 100644 src/graphics/FAS/temperatureDetector/TemperatureDetector.ts create mode 100644 src/graphics/FAS/temperatureDetector/TemperatureDetectorAssistant.ts create mode 100644 src/graphics/FAS/waterFlowIndicator/WaterFlowIndicator.ts create mode 100644 src/graphics/FAS/waterFlowIndicator/WaterFlowIndicatorAssistant.ts create mode 100644 src/graphics/button/Button.ts create mode 100644 src/graphics/button/ButtonDrawAssistant.ts rename src/graphics/{CCTV/cctvButton => button}/cctv-button-data.json (78%) create mode 100644 src/graphics/button/cctv-button-spritesheet.png create mode 100644 src/graphics/electronicMap/CommonGraphics.ts create mode 100644 src/graphics/electronicMap/axleCounting/AxleCounting.ts create mode 100644 src/graphics/electronicMap/axleCounting/AxleCountingDrawAssistant.ts create mode 100644 src/graphics/electronicMap/platform/Platform.ts create mode 100644 src/graphics/electronicMap/platform/PlatformDrawAssistant.ts create mode 100644 src/graphics/electronicMap/screenDoor/ScreenDoor.ts create mode 100644 src/graphics/electronicMap/screenDoor/ScreenDoorDrawAssistant.ts create mode 100644 src/graphics/electronicMap/section/Section.ts create mode 100644 src/graphics/electronicMap/section/SectionDrawAssistant.ts create mode 100644 src/graphics/electronicMap/sectionGraphic/SectionGraphic.ts create mode 100644 src/graphics/electronicMap/signal/LampMainBody.ts create mode 100644 src/graphics/electronicMap/signal/Signal.ts create mode 100644 src/graphics/electronicMap/signal/SignalCode.ts create mode 100644 src/graphics/electronicMap/signal/SignalDrawAssistant.ts create mode 100644 src/graphics/electronicMap/station/Station.ts create mode 100644 src/graphics/electronicMap/station/StationDrawAssistant.ts create mode 100644 src/graphics/electronicMap/trainWindow/oneClickDrawAssistant.ts create mode 100644 src/graphics/electronicMap/turnout/Turnout.ts create mode 100644 src/graphics/electronicMap/turnout/TurnoutDrawAssistant.ts create mode 100644 src/layouts/electronicMapDrawLayout.vue create mode 100644 src/pages/ElectronicMapDraftManage.vue create mode 100644 src/pages/ElectronicMapPublishManage.vue create mode 100644 src/pages/UserLogin.vue create mode 100644 src/pages/UserRegister.vue create mode 100644 src/protos/electronicMap_graphic_data.ts delete mode 100644 src/protos/em_data.ts delete mode 100644 src/protos/picture.ts create mode 100644 src/protos/simulation.ts create mode 100644 src/stores/electronicMap-draw-store.ts diff --git a/.gitmodules b/.gitmodules index b70e77c..32a1a1d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "rtss-proto-msg"] - path = rtss-proto-msg - url = https://gitea.joylink.club/joylink/rtss-proto-msg.git +[submodule "rtsa-proto-msg"] + path = rtsa-proto-msg + url = https://gitea.joylink.club/joylink/rtsa-proto-msg.git diff --git a/package-lock.json b/package-lock.json index 3043e29..3a3ecda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@quasar/extras": "^1.16.4", "axios": "^1.2.1", "google-protobuf": "^3.21.4", - "jl-graphic": "git+http://120.46.212.6:3000/joylink/graphic-pixi.git#v0.1.18", + "jl-graphic": "git+https://gitea.joylink.club/joylink/graphic-pixi.git#v0.1.19", "js-base64": "^3.7.5", "pinia": "^2.0.11", "quasar": "^2.16.0", @@ -30,6 +30,7 @@ "eslint-config-prettier": "^8.1.0", "eslint-plugin-vue": "^9.0.0", "prettier": "^2.5.1", + "ts-md5": "^1.3.1", "typescript": "~5.5.4", "vite-plugin-checker": "^0.7.2", "vue-tsc": "2.0.29" @@ -4436,8 +4437,8 @@ }, "node_modules/jl-graphic": { "name": "graphic-pixi", - "version": "0.1.14", - "resolved": "git+http://120.46.212.6:3000/joylink/graphic-pixi.git#8b0ad14f7324a5eaba58239645a1fa0452e87ab4", + "version": "0.1.18", + "resolved": "git+https://gitea.joylink.club/joylink/graphic-pixi.git#1c803d096585e258be3f60d3d95d1bd0c318d316", "dependencies": { "@pixi/graphics-extras": "^7.3.2", "@pixi/utils": "^7.3.2", @@ -6398,6 +6399,15 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-md5": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/ts-md5/-/ts-md5-1.3.1.tgz", + "integrity": "sha512-DiwiXfwvcTeZ5wCE0z+2A9EseZsztaiZtGrtSaY5JOD7ekPnR/GoIVD5gXZAlK9Na9Kvpo9Waz5rW64WKAWApg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.7.0.tgz", diff --git a/package.json b/package.json index d5711f4..ffc176f 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,8 @@ "prettier": "^2.5.1", "typescript": "~5.5.4", "vite-plugin-checker": "^0.7.2", - "vue-tsc": "2.0.29" + "vue-tsc": "2.0.29", + "ts-md5": "^1.3.1" }, "engines": { "node": "^20 || ^18 || ^16", diff --git a/public/drawIcon.svg b/public/drawIcon.svg index 0639126..d5b6d50 100644 --- a/public/drawIcon.svg +++ b/public/drawIcon.svg @@ -96,4 +96,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtsa-proto-msg b/rtsa-proto-msg new file mode 160000 index 0000000..64e48a0 --- /dev/null +++ b/rtsa-proto-msg @@ -0,0 +1 @@ +Subproject commit 64e48a0441eedd0b7bc926ca922b2fb58075467b diff --git a/rtss-proto-msg b/rtss-proto-msg deleted file mode 160000 index 87726ae..0000000 --- a/rtss-proto-msg +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 87726ae0917aedf814210d9725ee354aa15bb1f9 diff --git a/scripts/proto.cjs b/scripts/proto.cjs index 46b6799..7f5db70 100644 --- a/scripts/proto.cjs +++ b/scripts/proto.cjs @@ -7,7 +7,7 @@ const os = require('os'); const { exec } = require('child_process'); -const messageDir = resolve(__dirname, '../rtss-proto-msg'); +const messageDir = resolve(__dirname, '../rtsa-proto-msg'); const protoDir = resolve(messageDir, 'src'); const destDir = resolve(__dirname, '../src/protos'); diff --git a/src/App.vue b/src/App.vue index b42526e..4f4e0d3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,30 +3,20 @@ diff --git a/src/api/ElectronicMapDraftApi.ts b/src/api/ElectronicMapDraftApi.ts new file mode 100644 index 0000000..9a5105e --- /dev/null +++ b/src/api/ElectronicMapDraftApi.ts @@ -0,0 +1,138 @@ +import { api } from 'src/boot/axios'; +import { PageDto } from './ApiCommon'; +import { DraftDataType } from './DraftApi'; + +export enum LineType { + UNKNOWN, + UR = 'UR', + IR = 'IR', + CR = 'CR', +} + +export const lineTypeOption = [ + { + label: '城市轨道交通', + value: LineType.UR, + }, + { + label: '城际轨道交通', + value: LineType.IR, + }, + { + label: '市域轨道交通', + value: LineType.CR, + }, +]; + +export const searchLineTypeOption = [ + { + label: '全部', + value: LineType.UNKNOWN, + }, + ...lineTypeOption, +]; + +export interface DraftItem { + id: number; + name: string; + dataType: DraftDataType; + options: string; + data: string; + userId: number; + defaultReleaseDataId: number; + isShared: boolean; + createdAt: string; + updatedAt: string; + defaultReleaseDataName: string; + userName: string; +} +export interface LineInfoOptionsInput { + lineType: LineType; + city?: string; + lineCode?: string; +} +export interface PagingQueryParams { + paging: { + page: number; + itemsPerPage: number; + }; + query: { + dataType: DraftDataType; + options?: LineInfoOptionsInput; + name?: string; + isShared?: boolean; + userId?: number; + }; +} +export interface DraftEmDataDto { + draftData: DraftItem; + options: LineInfoOptionsInput; +} + +export async function draftPageQuery( + params: PagingQueryParams +): Promise> { + const query = ` + query userDraftEmDataPaging($paging: PageQueryDto, $query: UserDraftEmDataFilterDto) { + userDraftEmDataPaging(paging: $paging, query: $query) { + total + items { + draftData {id name dataType userName defaultReleaseDataId createdAt updatedAt isShared defaultReleaseDataName} + options {lineType city lineCode} + } + } + } +`; + const response = await api.post('', { + query, + variables: params, + }); + return response.data.data.userDraftEmDataPaging; +} + +export async function sharedDraftPageQuery( + params: PagingQueryParams +): Promise> { + const query = ` + query sharedDraftEmDataPaging($paging: PageQueryDto, $query: SharedDraftEmDataFilterDto) { + sharedDraftEmDataPaging(paging: $paging, query: $query) { + total + items { + draftData {id name dataType userName userId defaultReleaseDataId createdAt updatedAt isShared defaultReleaseDataName} + options {lineType city lineCode} + } + } + } +`; + const response = await api.post('', { + query, + variables: params, + }); + return response.data.data.sharedDraftEmDataPaging; +} + + +/** + * 创建草稿 + * @param params + * @returns + */ +interface CreateDraftEmDto { + input: { + name: string; + options: LineInfoOptionsInput; + }; +} +export function createDraft(params: CreateDraftEmDto) { + const mutation = ` + mutation createDraftEmData($input: CreateDraftEmDto) { + createDraftEmData(input: $input) { + name + } + } +`; + return api.post('', { + query: mutation, + variables: params, + }); +} diff --git a/src/api/ElectronicMapPublishApi.ts b/src/api/ElectronicMapPublishApi.ts new file mode 100644 index 0000000..d27ce59 --- /dev/null +++ b/src/api/ElectronicMapPublishApi.ts @@ -0,0 +1,63 @@ +import { api } from 'src/boot/axios'; +import { PageDto } from './ApiCommon'; +import { DraftDataType } from './DraftApi'; +import { LineInfoOptionsInput } from './ElectronicMapDraftApi'; + +export interface PublishItem { + id: number; + name: string; + dataType: DraftDataType; + options: string; + data: string; + usedVersionId: number; + userId: number; + isPublished: boolean; + createdAt: string; + updatedAt: string; + description: string; + userName: string; +} + +interface PagingQueryParams { + page: { + page: number; + itemsPerPage: number; + }; + query: { + dataType: DraftDataType; + userId?: number; + name?: string; + isPublished?: boolean; + options?: LineInfoOptionsInput; + }; +} +export interface PublishEmDataDto { + releaseData: PublishItem; + options: LineInfoOptionsInput; +} + +/** + * 分页查询 + * @param params + * @returns + */ +export async function publishPageQuery( + params: PagingQueryParams +): Promise> { + const query = ` + query releaseEmDataPaging($page: PageQueryDto, $query: ReleaseEmDataFilterDto) { + releaseEmDataPaging(page: $page, query: $query) { + total + items { + releaseData {id name dataType usedVersionId userName isPublished createdAt updatedAt description } + options {lineType city lineCode} + } + } + } +`; + const response = await api.post('', { + query, + variables: params, + }); + return response.data.data.releaseEmDataPaging; +} diff --git a/src/api/UserApi.ts b/src/api/UserApi.ts index ef7225c..4a07b4d 100644 --- a/src/api/UserApi.ts +++ b/src/api/UserApi.ts @@ -1,9 +1,123 @@ import { api } from 'src/boot/axios'; import { PageDto } from './ApiCommon'; +import { Md5 } from 'ts-md5'; + +interface RegisterInfo { + username: string; + nickname: string; + password: string; + mobile?: string; + email?: string; +} + +//const PasswordSult = '4a6d74126bfd06d69406fcccb7e7d5d9'; // 密码加盐 +function encryptPassword(password: string): string { + const md5 = new Md5(); + return md5.appendStr(password).end() as string; +} + +/** + * 用户注册 + * @param info + * @returns + */ +export async function register(registerInfo: RegisterInfo) { + const register = { + ...registerInfo, + password: encryptPassword(registerInfo.password), + }; + const mutation = ` + mutation registerUser($register: RegisterUserDto) { + registerUser(register: $register){ + username + } + } +`; + return api.post('', { + query: mutation, + variables: { register }, + }); +} + +/** + * 检查用户名是否存在 + * @param username + */ +export function usernameExists(username: string) { + const query = ` + query usernameExists($username: String) { + usernameExists(username: $username,) + } +`; + return api.post('', { + query, + variables: { username }, + }); +} + +/** + * 检查邮箱是否存在 + * @param email + */ +export function emailExists(email: string) { + const query = ` + query emailExists($email: String) { + emailExists(email: $email,) + } +`; + return api.post('', { + query, + variables: { email }, + }); +} + +/** + * 检查手机号是否存在 + * @param mobile + */ +export function mobileExists(mobile: string) { + const query = ` + query mobileExists($mobile: String) { + mobileExists(mobile: $mobile,) + } +`; + return api.post('', { + query, + variables: { mobile }, + }); +} + +interface LoginInfo { + username: string; + password: string; + orgId?: number; +} + +/** + * 用户登录 + * @param loginInfo + * @returns + */ +export async function login(userLoginDto: LoginInfo) { + const info = { + ...userLoginDto, + password: encryptPassword(userLoginDto.password), + }; + const query = ` + query userLogin($info: UserLoginDto) { + userLogin(info: $info) + } +`; + return api.post('', { + query, + variables: { info }, + }); +} export interface User { - id: string; - name: string; + id: number; + username: string; + nickname: string; mobile: string; email: string; roles: []; @@ -18,7 +132,8 @@ export interface PagingQueryParams { }; query: { id?: string; - name?: string; + username?: string; + nickname?: string; mobile?: string; email?: string; roles?: []; @@ -38,7 +153,7 @@ export async function userPageQuery( userPaging(page: $page, query: $query) { total items { - id name mobile email roles createdAt updatedAt + id username nickname mobile email roles createdAt updatedAt } } } @@ -57,7 +172,7 @@ export async function getLoginUserInfo() { const query = ` query loginUserInfo { loginUserInfo{ - id + id username nickname mobile email roles createdAt updatedAt } } `; @@ -67,32 +182,148 @@ export async function getLoginUserInfo() { return response.data.data; } +export enum Role { + UNKNOWN, + ADMIN = 'ADMIN', + USER = 'USER', + ORG_MANAGER = 'ORG_MANAGER', //组织管理员 + ORG_TEACHER = 'ORG_TEACHER', //组织教师 + ORG_STUDENT = 'ORG_STUDENT', //组织学生 + ORG_GUEST = 'ORG_GUEST', //组织访客 +} + +export const rolesOptions = [ + { label: '系统管理员', value: Role.ADMIN }, + { label: '普通用户', value: Role.USER }, + { label: '组织管理员', value: Role.ORG_MANAGER }, + { label: '组织教师', value: Role.ORG_TEACHER }, + { label: '组织学生', value: Role.ORG_STUDENT }, + { label: '组织访客', value: Role.ORG_GUEST }, +]; + /** - * 同步用户 + * 更改用户角色 + * @param variables + * @returns */ -export async function syncUsersInfo() { +export async function updateUserRoles(variables: { + userId: number; + roles: Role[]; +}) { const mutation = ` - mutation syncUser { - syncUser + mutation updateUserRoles($userId: Int,$roles: [Role!]) { + updateUserRoles(userId: $userId,roles: $roles,){ + id + } } `; - const response = await api.post('', { + return api.post('', { query: mutation, + variables, }); - return response.data.data; } /** - * 获取jwt令牌(mqtt验证) + * 获取默认组织信息 */ -export async function getJwt() { +export async function getDefaultOrg() { const query = ` - query getJwt { - getJwt + query getDefaultOrg { + getDefaultOrg{ + id code name creatorId + } } `; const response = await api.post('', { query: query, }); + return response.data.data.getDefaultOrg; +} + +/** + * 获取组织信息 + * @param id + * @returns + */ +export async function getOrgById(id: number) { + const query = ` + query getOrg($id: Int) { + getOrg(id: $id){ + id code name creatorId + } + } +`; + const variables = { + id, + }; + const response = await api.post('', { + query, + variables, + }); + return response.data.data.getOrg; +} + +/** + * 获取组织信息 + * @param code + * @returns + */ +export async function getOrgByCode(code: string) { + const query = ` + query getOrgByCode($code: String) { + getOrgByCode(code: $code){ + id code name creatorId + } + } +`; + const variables = { + code, + }; + const response = await api.post('', { + query, + variables, + }); + return response.data.data.getOrg; +} + +/** + * 获取组织用户信息 + * @param orgId + * @param userId + * @returns + */ +export async function getOrgUserInfo(orgId: number, userId: number) { + const query = ` + query orgUserInfo($orgId: Int,$userId: Int) { + orgUserInfo(orgId: $orgId,userId: $userId){ + id orgId userId studentId roles + } + } +`; + const variables = { + orgId, + userId, + }; + const response = await api.post('', { + query, + variables, + }); return response.data.data; } + +/** + * 获取登录用户的组织用户信息 + */ +export async function loginOrgUserInfo() { + const query = ` + query loginOrgUserInfo { + loginOrgUserInfo{ + id orgId userId studentId roles + } + } +`; + const response = await api.post('', { + query: query, + }); + return response.data.data.getDefaultOrg; +} diff --git a/src/assets/ISCS/PSD/duanmenAlarm.png b/src/assets/ISCS/PSD/duanmenAlarm.png new file mode 100644 index 0000000000000000000000000000000000000000..f3427aaa43bb27c2f8f28c63ed8b4a2f8f922fb6 GIT binary patch literal 2733 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 literal 0 HcmV?d00001 diff --git a/src/assets/ISCS/PSD/duanmenClose.png b/src/assets/ISCS/PSD/duanmenClose.png new file mode 100644 index 0000000000000000000000000000000000000000..99b504ebb897c4c91b354423e34361a3f9eae97a GIT binary patch literal 2423 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 literal 0 HcmV?d00001 diff --git a/src/assets/ISCS/PSD/train1.png b/src/assets/ISCS/PSD/train1.png new file mode 100644 index 0000000000000000000000000000000000000000..81d70be573b6db93da97da09b5dd9717e75d1cf8 GIT binary patch literal 9859 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 N>1i8irD>cD`X6FBy5Rr- literal 0 HcmV?d00001 diff --git a/src/assets/ISCS/PSD/train2.png b/src/assets/ISCS/PSD/train2.png new file mode 100644 index 0000000000000000000000000000000000000000..ad1d7d8e12a866e29115e6750ac7a7c7f72a52ec GIT binary patch literal 10755 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 Xw@ZLDMWG}Y-bVvnBb_wuV<-O)KOM3^ literal 0 HcmV?d00001 diff --git a/src/components/Iscs/CCTVMonitoring.vue b/src/components/Iscs/CCTVMonitoring.vue new file mode 100644 index 0000000..47f7cd6 --- /dev/null +++ b/src/components/Iscs/CCTVMonitoring.vue @@ -0,0 +1,400 @@ + + + + + diff --git a/src/components/Iscs/FASPlaneGraph.vue b/src/components/Iscs/FASPlaneGraph.vue new file mode 100644 index 0000000..e25e6e7 --- /dev/null +++ b/src/components/Iscs/FASPlaneGraph.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/components/Iscs/IscsBottomAlarm.vue b/src/components/Iscs/IscsBottomAlarm.vue index 878be6a..4248ae5 100644 --- a/src/components/Iscs/IscsBottomAlarm.vue +++ b/src/components/Iscs/IscsBottomAlarm.vue @@ -46,10 +46,7 @@
- 玖链科技 + 玖链科技
@@ -71,6 +68,7 @@ import { reactive, onMounted } from 'vue'; import { useQuasar, type QTableColumn } from 'quasar'; import { PagingQueryParams, userPageQuery } from 'src/api/UserApi'; import { ApiError } from 'src/boot/axios'; +import icon from '/icons/favicon-96x96.png'; const $q = useQuasar(); diff --git a/src/components/Iscs/ModeControl.vue b/src/components/Iscs/ModeControl.vue new file mode 100644 index 0000000..097ea41 --- /dev/null +++ b/src/components/Iscs/ModeControl.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/components/Iscs/ModeControlOfBigSystem.vue b/src/components/Iscs/ModeControlOfBigSystem.vue new file mode 100644 index 0000000..8c98354 --- /dev/null +++ b/src/components/Iscs/ModeControlOfBigSystem.vue @@ -0,0 +1,319 @@ + + + + + diff --git a/src/components/Iscs/ModeControlOfBigSystemTable.vue b/src/components/Iscs/ModeControlOfBigSystemTable.vue new file mode 100644 index 0000000..b0be6de --- /dev/null +++ b/src/components/Iscs/ModeControlOfBigSystemTable.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/components/Iscs/PSD.vue b/src/components/Iscs/PSD.vue new file mode 100644 index 0000000..d22736c --- /dev/null +++ b/src/components/Iscs/PSD.vue @@ -0,0 +1,383 @@ + + + + + diff --git a/src/components/draw-app/IscsDrawProperties.vue b/src/components/draw-app/IscsDrawProperties.vue index fd95662..9d25b91 100644 --- a/src/components/draw-app/IscsDrawProperties.vue +++ b/src/components/draw-app/IscsDrawProperties.vue @@ -39,8 +39,14 @@ - + + @@ -56,8 +62,6 @@ import { useDrawStore } from 'src/stores/draw-store'; import CanvasProperty from './properties/CanvasIscsProperty.vue'; import IscsTextProperty from './properties/IscsTextProperty.vue'; import { TextContent } from 'src/graphics/textContent/TextContent'; -import cctvButtonProperty from './properties/CCTV/CCTVButtonProperty.vue'; -import { CCTVButton } from 'src/graphics/CCTV/cctvButton/CCTVButton'; import RectProperty from './properties/RectProperty.vue'; import { Rect } from 'src/graphics/rect/Rect'; import LineTemplate from './templates/LineTemplate.vue'; @@ -65,6 +69,13 @@ import LineProperty from './properties/LineProperty.vue'; import { Line } from 'src/graphics/line/Line'; import CircleProperty from './properties/CircleProperty.vue'; import { Circle } from 'src/graphics/circle/Circle'; +import ButtonProperty from './properties/ButtonProperty.vue'; +import { Button } from 'src/graphics/button/Button'; +import EscalatorProperty from './properties/BAS/EscalatorProperty.vue'; +import { Escalator } from 'src/graphics/BAS/escalator/Escalator'; +import VerticalElevatorProperty from './properties/BAS/VerticalElevatorProperty.vue'; +import { VerticalElevator } from 'src/graphics/BAS/verticalElevator/VerticalElevator'; + import { watch } from 'vue'; const drawStore = useDrawStore(); diff --git a/src/components/draw-app/electronicMapDrawProperties.vue b/src/components/draw-app/electronicMapDrawProperties.vue new file mode 100644 index 0000000..d9e07cb --- /dev/null +++ b/src/components/draw-app/electronicMapDrawProperties.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/components/draw-app/properties/BAS/EscalatorProperty.vue b/src/components/draw-app/properties/BAS/EscalatorProperty.vue new file mode 100644 index 0000000..f9dca89 --- /dev/null +++ b/src/components/draw-app/properties/BAS/EscalatorProperty.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/components/draw-app/properties/BAS/VerticalElevatorProperty.vue b/src/components/draw-app/properties/BAS/VerticalElevatorProperty.vue new file mode 100644 index 0000000..1eb171d --- /dev/null +++ b/src/components/draw-app/properties/BAS/VerticalElevatorProperty.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/components/draw-app/properties/ButtonProperty.vue b/src/components/draw-app/properties/ButtonProperty.vue new file mode 100644 index 0000000..6836a33 --- /dev/null +++ b/src/components/draw-app/properties/ButtonProperty.vue @@ -0,0 +1,136 @@ + + + diff --git a/src/components/draw-app/properties/CCTV/CCTVButtonProperty.vue b/src/components/draw-app/properties/CCTV/CCTVButtonProperty.vue deleted file mode 100644 index 482b71b..0000000 --- a/src/components/draw-app/properties/CCTV/CCTVButtonProperty.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/src/components/draw-app/properties/CanvasElectronicMapProperty.vue b/src/components/draw-app/properties/CanvasElectronicMapProperty.vue new file mode 100644 index 0000000..23483da --- /dev/null +++ b/src/components/draw-app/properties/CanvasElectronicMapProperty.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/components/draw-app/properties/RectProperty.vue b/src/components/draw-app/properties/RectProperty.vue index 7c0833c..9b8f2bd 100644 --- a/src/components/draw-app/properties/RectProperty.vue +++ b/src/components/draw-app/properties/RectProperty.vue @@ -85,7 +85,7 @@ @blur="onUpdate" label="高度" lazy-rules - :rules="[(val) => (val && val > 0) || '宽度必须大于0']" + :rules="[(val) => (val && val > 0) || '高度必须大于0']" /> + + +
一键生成计轴配置
+
+ + +
+ + + +
+
+ + + +
+
+
+ + + diff --git a/src/components/draw-app/properties/electronicMap/PlatformProperty.vue b/src/components/draw-app/properties/electronicMap/PlatformProperty.vue new file mode 100644 index 0000000..6cd12b4 --- /dev/null +++ b/src/components/draw-app/properties/electronicMap/PlatformProperty.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/configs/cctvCamera.ts b/src/configs/cctvCamera.ts new file mode 100644 index 0000000..a69616b --- /dev/null +++ b/src/configs/cctvCamera.ts @@ -0,0 +1,41 @@ +export enum CCTV_Camera_name{ + //VehicleControlRoom,//车控室 + SparePartsCabinet,//备品柜 + PartsArea,//备品区 + StationHall,//站厅 + UpPlatform,//上行站台 + DownPlatform,//下行站台 + //APassageway,//A出入口 + StationHallAExit,//站厅A出口 + AEntrance,//A入口 + APassage,//A口通道 + //BPassageway,//B出入口 + StationHallBExit,//站厅B出口 + BEntrance,//B入口 + BPassage,//B口通道 + //CPassageway,//C出入口 + StationHallCExit,//站厅C出口 + CEntrance,//C入口 + CPassage,//C口通道 + //DPassageway,//D出入口 + StationHallDExit,//站厅D出口 + DEntrance,//D入口 + DPassage,//D口通道 + //StaionHallA,//站厅A端 + ALowerStepSwitch,//A端扶梯下部开关 + ATVM,//A端TVM + AInboundGate,//A端进站闸机 + AExitGate,//A端出站闸机 + AUpperStep,//A端扶梯上部 + ALowerStep,//A端扶梯下部 + AGangway,//A端站厅步梯口 + //StationHallB,//站厅B端 + BLowerStepSwitch,//B端扶梯下部开关 + BTVM,//B端TVM + BInboundGate,//B端进站闸机 + BExitGate,//B端出站闸机 + BUpperStep,//B端扶梯上部 + BLowerStep,//B端扶梯下部 + BGangway,//B端站厅步梯口 + Shop,//商铺 +} diff --git a/src/configs/iscsStyleConfig.ts b/src/configs/iscsStyleConfig.ts index 34b1d67..ea876fe 100644 --- a/src/configs/iscsStyleConfig.ts +++ b/src/configs/iscsStyleConfig.ts @@ -60,7 +60,7 @@ const DA_SHI_ZHI_NENG: I_DA_SHI_ZHI_NENG[] = [ { sunMenuName: '导向标识/广告', displayForm: DisplayForm.draw }, { sunMenuName: '人防门', displayForm: DisplayForm.draw }, { sunMenuName: 'BAS系统', displayForm: DisplayForm.draw }, - { sunMenuName: '模式控制', displayForm: DisplayForm.draw }, + { sunMenuName: '模式控制', displayForm: DisplayForm.component }, { sunMenuName: '时间表', displayForm: DisplayForm.draw }, { sunMenuName: '操作场所切换', displayForm: DisplayForm.draw }, ], @@ -96,7 +96,7 @@ const DA_SHI_ZHI_NENG: I_DA_SHI_ZHI_NENG[] = [ icon: 'svguse:../iscsMenuIcon.svg#icon-CCTV', activeIcon: 'svguse:../iscsMenuIcon.svg#icon-CCTV-active', sunMenu: [ - { sunMenuName: '监控布局图', displayForm: DisplayForm.draw }, + { sunMenuName: '监控布局图', displayForm: DisplayForm.component }, { sunMenuName: 'CCTV设备布局图', displayForm: DisplayForm.draw }, ], }, @@ -132,7 +132,9 @@ const DA_SHI_ZHI_NENG: I_DA_SHI_ZHI_NENG[] = [ menuName: 'PSD', icon: 'svguse:../iscsMenuIcon.svg#icon-PSD', activeIcon: 'svguse:../iscsMenuIcon.svg#icon-PSD-active', - sunMenu: [{ sunMenuName: '屏蔽门系统图', displayForm: DisplayForm.draw }], + sunMenu: [ + { sunMenuName: '屏蔽门系统图', displayForm: DisplayForm.component }, + ], }, { menuName: 'FG', diff --git a/src/drawApp/commonApp.ts b/src/drawApp/commonApp.ts index b894a99..43d3f4c 100644 --- a/src/drawApp/commonApp.ts +++ b/src/drawApp/commonApp.ts @@ -29,6 +29,9 @@ import { LineData } from './graphics/LineInteraction'; import { CircleDraw } from 'src/graphics/circle/CircleDrawAssistant'; import { Circle, CircleTemplate } from 'src/graphics/circle/Circle'; import { CircleData } from './graphics/CircleInteraction'; +import { ButtonDraw } from 'src/graphics/button/ButtonDrawAssistant'; +import { Button, ButtonTemplate } from 'src/graphics/button/Button'; +import { ButtonData } from './graphics/ButtonInteraction'; const UndoOptions: MenuItemOptions = { name: '撤销', @@ -58,6 +61,7 @@ export function initCommonDrawApp(app: IDrawApp) { new RectDraw(app, new RectTemplate(new RectData())); new LineDraw(app, new LineTemplate(new LineData())); new CircleDraw(app, new CircleTemplate(new CircleData())); + new ButtonDraw(app, new ButtonTemplate(new ButtonData())); // 画布右键菜单 app.registerMenu(DefaultCanvasMenu); @@ -88,6 +92,7 @@ interface ICommonStorage { rects: iscsGraphicData.Rect[]; lines: iscsGraphicData.Line[]; circles: iscsGraphicData.Circle[]; + buttons: iscsGraphicData.Button[]; }; } export function loadCommonDrawDatas(storage: ICommonStorage): GraphicData[] { @@ -108,6 +113,9 @@ export function loadCommonDrawDatas(storage: ICommonStorage): GraphicData[] { storage.commonGraphicStorage.circles.forEach((circle) => { datas.push(new CircleData(circle)); }); + storage.commonGraphicStorage.buttons.forEach((button) => { + datas.push(new ButtonData(button)); + }); return datas; } @@ -140,6 +148,11 @@ export function saveCommonDrawDatas(app: IDrawApp, storage: ICommonStorage) { storage.commonGraphicStorage.circles.push( (circleData as CircleData).data ); + } else if (g instanceof Button) { + const buttonData = g.saveData(); + storage.commonGraphicStorage.buttons.push( + (buttonData as ButtonData).data + ); } }); diff --git a/src/drawApp/electronicMapApp.ts b/src/drawApp/electronicMapApp.ts new file mode 100644 index 0000000..6854e02 --- /dev/null +++ b/src/drawApp/electronicMapApp.ts @@ -0,0 +1,279 @@ +import { fromUint8Array, toUint8Array } from 'js-base64'; +import { + calculateDistanceFromPointToLine, + CombinationKey, + ContextMenu, + distance2, + getRectangleCenter, + GraphicData, + IDrawApp, + IGraphicStorage, + KeyListener, + MenuItemOptions, + newDrawApp, +} from 'jl-graphic'; +import { getDraft, saveDraft } from 'src/api/DraftApi'; +import { electronicMapGraphicData } from 'src/protos/electronicMap_graphic_data'; +import { useDrawStore } from 'src/stores/electronicMap-draw-store'; +import { PlatformDraw } from 'src/graphics/electronicMap/platform/PlatformDrawAssistant'; +import { + Platform, + PlatformTemplate, +} from 'src/graphics/electronicMap/platform/Platform'; +import { PlatformData } from './graphics/electronicMap/PlatformInteraction'; +import { errorNotify, successNotify } from 'src/utils/CommonNotify'; +import { common } from 'src/protos/common'; +import { toStorageTransform } from './graphics/GraphicDataBase'; +import { Section } from 'src/graphics/electronicMap/section/Section'; +import { OneClickGenerateDraw, OneClickGenerateTemplate } from 'src/graphics/electronicMap/trainWindow/oneClickDrawAssistant'; + +let electronicMapDrawApp: IDrawApp | null = null; + +export function getElectronicMapDrawApp(): IDrawApp | null { + return electronicMapDrawApp; +} + +export function destroyElectronicMapDrawApp(): void { + if (electronicMapDrawApp) { + electronicMapDrawApp.destroy(); + electronicMapDrawApp = null; + } +} + +const UndoOptions: MenuItemOptions = { + name: '撤销', +}; +const RedoOptions: MenuItemOptions = { + name: '重做', +}; +const SelectAllOptions: MenuItemOptions = { + name: '全选', +}; + +export const DefaultEmCanvasMenu = new ContextMenu({ + name: '绘制-画布菜单', + groups: [ + { + items: [UndoOptions, RedoOptions], + }, + { + items: [SelectAllOptions], + }, + ], +}); + +export function initElectronicMapDrawApp(): IDrawApp { + electronicMapDrawApp = newDrawApp({ + dataLoader: loadElectronicMapDrawDatas, + }); + const app = electronicMapDrawApp; + new OneClickGenerateDraw(app, new OneClickGenerateTemplate()), + new PlatformDraw(app, new PlatformTemplate(new PlatformData())); + + // 画布右键菜单 + app.registerMenu(DefaultEmCanvasMenu); + + app.canvas.on('_rightclick', (e) => { + if (app.drawing) return; + UndoOptions.disabled = !app.opRecord.hasUndo; + RedoOptions.disabled = !app.opRecord.hasRedo; + + UndoOptions.handler = () => { + app.opRecord.undo(); + }; + RedoOptions.handler = () => { + app.opRecord.redo(); + }; + SelectAllOptions.handler = () => { + app.selectAllGraphics(); + }; + DefaultEmCanvasMenu.open(e.global); + }); + app.on('destroy', () => { + generateAxleCountingConfig = + new electronicMapGraphicData.GenerateAxleCountingConfig(); + }); + app.addKeyboardListener( + new KeyListener({ + value: 'KeyS', + global: true, + combinations: [CombinationKey.Ctrl], + onPress: () => { + saveDrawToServer(saveDrawDatas(app)); + }, + }) + ); + // KeyA 用于区段复制--控制生成的区段位置 + const graphicCopyPlugin = app.app.graphicCopyPlugin; + const copySectionListener = new KeyListener({ + value: 'KeyA', + global: true, + onPress: () => { + graphicCopyPlugin.updateMoveLimit('sectionPointLimit'); + }, + }); + graphicCopyPlugin.addGraphicControlers([ + { + controlerList: [copySectionListener], + check: () => { + if ( + graphicCopyPlugin.copys.length == 1 && + graphicCopyPlugin.copys[0].type == Section.Type + ) + return true; + return false; + }, + moveLimitOption: { + moveLimitName: 'sectionPointLimit', + moveLimit: (e) => { + const mousePos = app.toCanvasCoordinates(e.global); + const selectSection = app.selectedGraphics[0] as Section; + let selectSectionLeft = selectSection.localToCanvasPoint( + selectSection.getStartPoint() + ); + let selectSectionRight = selectSection.localToCanvasPoint( + selectSection.getEndPoint() + ); + [selectSectionLeft, selectSectionRight] = + selectSectionLeft.x < selectSectionRight.x + ? [selectSectionLeft, selectSectionRight] + : [selectSectionRight, selectSectionLeft]; + //要移动到目标位的区段 + const sections = app.queryStore.queryByType
(Section.Type); + const minDistanceSection = sections.reduce((prev, cur) => { + const prevDistance = calculateDistanceFromPointToLine( + prev.localToCanvasPoint(prev.getStartPoint()), + prev.localToCanvasPoint(prev.getEndPoint()), + mousePos + ); + const curDistance = calculateDistanceFromPointToLine( + cur.localToCanvasPoint(cur.getStartPoint()), + cur.localToCanvasPoint(cur.getEndPoint()), + mousePos + ); + return prevDistance > curDistance || + (prevDistance == curDistance && + distance2( + prev.localToCanvasPoint(prev.getStartPoint()), + mousePos + ) > + distance2( + cur.localToCanvasPoint(cur.getStartPoint()), + mousePos + )) + ? cur + : prev; + }); + const minDistanceRefSectionsPos = + minDistanceSection.localToCanvasPoint( + getRectangleCenter( + minDistanceSection.lineGraphic.getLocalBounds() + ) + ); + let minDistanceSectionLeft = minDistanceSection.localToCanvasPoint( + minDistanceSection.getStartPoint() + ); + let minDistanceSectionRight = minDistanceSection.localToCanvasPoint( + minDistanceSection.getEndPoint() + ); + [minDistanceSectionLeft, minDistanceSectionRight] = + minDistanceSectionLeft.x < minDistanceSectionRight.x + ? [minDistanceSectionLeft, minDistanceSectionRight] + : [minDistanceSectionRight, minDistanceSectionLeft]; + + if (mousePos.x > minDistanceRefSectionsPos.x) { + graphicCopyPlugin.container.position.x = + minDistanceSectionRight.x - selectSectionLeft.x; + graphicCopyPlugin.container.position.y = + minDistanceSectionRight.y - selectSectionLeft.y; + } else { + graphicCopyPlugin.container.position.x = + minDistanceSectionLeft.x - selectSectionRight.x; + graphicCopyPlugin.container.position.y = + minDistanceSectionLeft.y - selectSectionRight.y; + } + }, + }, + }, + ]); + return electronicMapDrawApp; +} + +export async function loadElectronicMapDrawDatas(): Promise { + const drawStore = useDrawStore(); + const id = drawStore.draftId; + if (!id) { + throw new Error('获取数据异常:为获取到草稿地图ID'); + } + const base64 = (await getDraft(id)).data; + if (base64) { + const storage = + electronicMapGraphicData.ElectronicMapGraphicStorage.deserialize( + toUint8Array(base64) + ); + const datas: GraphicData[] = []; + generateAxleCountingConfig = storage.generateAxleCountingConfig; + storage.Platforms.forEach((platform) => { + datas.push(new PlatformData(platform)); + }); + console.log(storage, 'storage'); + return Promise.resolve({ + canvasProperty: storage.canvas, + datas: datas, + }); + } else { + return Promise.resolve({ + datas: [], + }); + } +} + +export function saveDrawDatas(app: IDrawApp) { + const storage = new electronicMapGraphicData.ElectronicMapGraphicStorage(); + const canvasData = app.canvas.saveData(); + storage.canvas = new common.Canvas({ + width: canvasData.width, + height: canvasData.height, + backgroundColor: canvasData.backgroundColor, + viewportTransform: toStorageTransform(canvasData.viewportTransform), + }); + const graphics = app.queryStore.getAllGraphics(); + graphics.forEach((g) => { + if (g instanceof Platform) { + const platformData = g.saveData(); + storage.Platforms.push((platformData as PlatformData).data); + } + }); + storage.generateAxleCountingConfig = generateAxleCountingConfig; + const base64 = fromUint8Array(storage.serialize()); + console.log('保存数据', storage); + return base64; +} + +export function saveDrawToServer(base64: string) { + const drawStore = useDrawStore(); + const id = drawStore.draftId; + if (!id) { + return; + } + saveDraft({ id, data: base64 }) + .then(() => { + successNotify('保存数据成功!'); + }) + .catch((err) => { + errorNotify(err.message, err); + }); +} + +//一键生成计轴配置 +let generateAxleCountingConfig = + new electronicMapGraphicData.GenerateAxleCountingConfig(); +export function loadGenerateAxleCountingConfig() { + return generateAxleCountingConfig; +} + +export function setGenerateAxleCountingConfig( + newScreenDoorConfig: electronicMapGraphicData.GenerateAxleCountingConfig +) { + generateAxleCountingConfig = newScreenDoorConfig; +} diff --git a/src/drawApp/graphics/BAS/EscalatorInteraction.ts b/src/drawApp/graphics/BAS/EscalatorInteraction.ts new file mode 100644 index 0000000..362b5ba --- /dev/null +++ b/src/drawApp/graphics/BAS/EscalatorInteraction.ts @@ -0,0 +1,41 @@ +import * as pb_1 from 'google-protobuf'; +import { + IescalatorData, + Escalator, +} from 'src/graphics/BAS/escalator/Escalator'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class EscalatorData extends GraphicDataBase implements IescalatorData { + constructor(data?: iscsGraphicData.Escalator) { + let escalator; + if (data) { + escalator = data; + } else { + escalator = new iscsGraphicData.Escalator({ + common: GraphicDataBase.defaultCommonInfo(Escalator.Type), + }); + } + super(escalator); + } + + public get data(): iscsGraphicData.Escalator { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): EscalatorData { + return new EscalatorData(this.data.cloneMessage()); + } + copyFrom(data: EscalatorData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: EscalatorData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/BAS/VerticalElevatorInteraction.ts b/src/drawApp/graphics/BAS/VerticalElevatorInteraction.ts new file mode 100644 index 0000000..2f63192 --- /dev/null +++ b/src/drawApp/graphics/BAS/VerticalElevatorInteraction.ts @@ -0,0 +1,41 @@ +import * as pb_1 from 'google-protobuf'; +import { + IverticalElevatorData, + VerticalElevator, +} from 'src/graphics/BAS/verticalElevator/VerticalElevator'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class VerticalElevatorData extends GraphicDataBase implements IverticalElevatorData { + constructor(data?: iscsGraphicData.VerticalElevator) { + let verticalElevator; + if (data) { + verticalElevator = data; + } else { + verticalElevator = new iscsGraphicData.VerticalElevator({ + common: GraphicDataBase.defaultCommonInfo(VerticalElevator.Type), + }); + } + super(verticalElevator); + } + + public get data(): iscsGraphicData.VerticalElevator { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): VerticalElevatorData { + return new VerticalElevatorData(this.data.cloneMessage()); + } + copyFrom(data: VerticalElevatorData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: VerticalElevatorData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/ButtonInteraction.ts b/src/drawApp/graphics/ButtonInteraction.ts new file mode 100644 index 0000000..f96fe8c --- /dev/null +++ b/src/drawApp/graphics/ButtonInteraction.ts @@ -0,0 +1,92 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from './GraphicDataBase'; +import { Button, IButtonData } from 'src/graphics/button/Button'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class ButtonData extends GraphicDataBase implements IButtonData { + constructor(data?: iscsGraphicData.Button) { + let button; + if (data) { + button = data; + } else { + button = new iscsGraphicData.Button({ + common: GraphicDataBase.defaultCommonInfo(Button.Type), + }); + } + super(button); + } + + public get data(): iscsGraphicData.Button { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get codeColor(): string { + return this.data.codeColor; + } + set codeColor(v: string) { + this.data.codeColor = v; + } + get codeFontSize(): number { + return this.data.codeFontSize; + } + set codeFontSize(v: number) { + this.data.codeFontSize = v; + } + get belongSubMenu(): string { + return this.data.codeColor; + } + set belongSubMenu(v: string) { + this.data.codeColor = v; + } + get buttonType(): iscsGraphicData.Button.ButtonType { + return this.data.buttonType; + } + set buttonType(v: iscsGraphicData.Button.ButtonType) { + this.data.buttonType = v; + } + get width(): number { + return this.data.width; + } + set width(v: number) { + this.data.width = v; + } + get height(): number { + return this.data.height; + } + set height(v: number) { + this.data.height = v; + } + get radius(): number { + return this.data.radius; + } + set radius(v: number) { + this.data.radius = v; + } + get fillColor(): string { + return this.data.fillColor; + } + set fillColor(v: string) { + this.data.fillColor = v; + } + get alpha(): number { + return this.data.alpha; + } + set alpha(v: number) { + this.data.alpha = v; + } + clone(): ButtonData { + return new ButtonData(this.data.cloneMessage()); + } + copyFrom(data: ButtonData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: ButtonData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/CCTV/CCTVButtonInteraction.ts b/src/drawApp/graphics/CCTV/CCTVButtonInteraction.ts deleted file mode 100644 index 0647fd8..0000000 --- a/src/drawApp/graphics/CCTV/CCTVButtonInteraction.ts +++ /dev/null @@ -1,47 +0,0 @@ -import * as pb_1 from 'google-protobuf'; -import { GraphicDataBase } from '../GraphicDataBase'; -import { - CCTVButton, - ICCTVButtonData, -} from 'src/graphics/CCTV/cctvButton/CCTVButton'; -import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; - -export class CCTVButtonData extends GraphicDataBase implements ICCTVButtonData { - constructor(data?: iscsGraphicData.CCTVButton) { - let cctvButton; - if (data) { - cctvButton = data; - } else { - cctvButton = new iscsGraphicData.CCTVButton({ - common: GraphicDataBase.defaultCommonInfo(CCTVButton.Type), - }); - } - super(cctvButton); - } - - public get data(): iscsGraphicData.CCTVButton { - return this.getData(); - } - - get code(): string { - return this.data.code; - } - set code(v: string) { - this.data.code = v; - } - get buttonType(): iscsGraphicData.CCTVButton.ButtonType { - return this.data.buttonType; - } - set buttonType(v: iscsGraphicData.CCTVButton.ButtonType) { - this.data.buttonType = v; - } - clone(): CCTVButtonData { - return new CCTVButtonData(this.data.cloneMessage()); - } - copyFrom(data: CCTVButtonData): void { - pb_1.Message.copyInto(data.data, this.data); - } - eq(other: CCTVButtonData): boolean { - return pb_1.Message.equals(this.data, other.data); - } -} diff --git a/src/drawApp/graphics/FAS/AcsInteraction.ts b/src/drawApp/graphics/FAS/AcsInteraction.ts new file mode 100644 index 0000000..2faeca8 --- /dev/null +++ b/src/drawApp/graphics/FAS/AcsInteraction.ts @@ -0,0 +1,38 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { Acs, IAcsData } from 'src/graphics/FAS/acs/Acs'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class AcsData extends GraphicDataBase implements IAcsData { + constructor(data?: iscsGraphicData.Acs) { + let acs; + if (data) { + acs = data; + } else { + acs = new iscsGraphicData.Acs({ + common: GraphicDataBase.defaultCommonInfo(Acs.Type), + }); + } + super(acs); + } + + public get data(): iscsGraphicData.Acs { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): AcsData { + return new AcsData(this.data.cloneMessage()); + } + copyFrom(data: AcsData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: AcsData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/AfcInteraction.ts b/src/drawApp/graphics/FAS/AfcInteraction.ts new file mode 100644 index 0000000..f2e350e --- /dev/null +++ b/src/drawApp/graphics/FAS/AfcInteraction.ts @@ -0,0 +1,38 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { Afc, IAfcData } from 'src/graphics/FAS/afc/Afc'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class AfcData extends GraphicDataBase implements IAfcData { + constructor(data?: iscsGraphicData.Afc) { + let afc; + if (data) { + afc = data; + } else { + afc = new iscsGraphicData.Afc({ + common: GraphicDataBase.defaultCommonInfo(Afc.Type), + }); + } + super(afc); + } + + public get data(): iscsGraphicData.Afc { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): AfcData { + return new AfcData(this.data.cloneMessage()); + } + copyFrom(data: AfcData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: AfcData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/ElectricButterflyValveInteraction.ts b/src/drawApp/graphics/FAS/ElectricButterflyValveInteraction.ts new file mode 100644 index 0000000..a205d86 --- /dev/null +++ b/src/drawApp/graphics/FAS/ElectricButterflyValveInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + ElectricButterflyValve, + IElectricButterflyValveData, +} from 'src/graphics/FAS/electricButterflyValve/ElectricButterflyValve'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class ElectricButterflyValveData + extends GraphicDataBase + implements IElectricButterflyValveData +{ + constructor(data?: iscsGraphicData.ElectricButterflyValve) { + let electricButterflyValve; + if (data) { + electricButterflyValve = data; + } else { + electricButterflyValve = new iscsGraphicData.ElectricButterflyValve({ + common: GraphicDataBase.defaultCommonInfo(ElectricButterflyValve.Type), + }); + } + super(electricButterflyValve); + } + + public get data(): iscsGraphicData.ElectricButterflyValve { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): ElectricButterflyValveData { + return new ElectricButterflyValveData(this.data.cloneMessage()); + } + copyFrom(data: ElectricButterflyValveData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: ElectricButterflyValveData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/ElectricFireExtinguishingValveInteraction.ts b/src/drawApp/graphics/FAS/ElectricFireExtinguishingValveInteraction.ts new file mode 100644 index 0000000..a3b275d --- /dev/null +++ b/src/drawApp/graphics/FAS/ElectricFireExtinguishingValveInteraction.ts @@ -0,0 +1,47 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + ElectricFireExtinguishingValve, + IElectricFireExtinguishingValveData, +} from 'src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValve'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class ElectricFireExtinguishingValveData + extends GraphicDataBase + implements IElectricFireExtinguishingValveData +{ + constructor(data?: iscsGraphicData.ElectricFireExtinguishingValve) { + let electricFireExtinguishingValve; + if (data) { + electricFireExtinguishingValve = data; + } else { + electricFireExtinguishingValve = + new iscsGraphicData.ElectricFireExtinguishingValve({ + common: GraphicDataBase.defaultCommonInfo( + ElectricFireExtinguishingValve.Type + ), + }); + } + super(electricFireExtinguishingValve); + } + + public get data(): iscsGraphicData.ElectricFireExtinguishingValve { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): ElectricFireExtinguishingValveData { + return new ElectricFireExtinguishingValveData(this.data.cloneMessage()); + } + copyFrom(data: ElectricFireExtinguishingValveData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: ElectricFireExtinguishingValveData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/ElevatorLiftToTopInteraction.ts b/src/drawApp/graphics/FAS/ElevatorLiftToTopInteraction.ts new file mode 100644 index 0000000..ef9eaf7 --- /dev/null +++ b/src/drawApp/graphics/FAS/ElevatorLiftToTopInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + ElevatorLiftToTop, + IElevatorLiftToTopData, +} from 'src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTop'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class ElevatorLiftToTopData + extends GraphicDataBase + implements IElevatorLiftToTopData +{ + constructor(data?: iscsGraphicData.ElevatorLiftToTop) { + let elevatorLiftToTop; + if (data) { + elevatorLiftToTop = data; + } else { + elevatorLiftToTop = new iscsGraphicData.ElevatorLiftToTop({ + common: GraphicDataBase.defaultCommonInfo(ElevatorLiftToTop.Type), + }); + } + super(elevatorLiftToTop); + } + + public get data(): iscsGraphicData.ElevatorLiftToTop { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): ElevatorLiftToTopData { + return new ElevatorLiftToTopData(this.data.cloneMessage()); + } + copyFrom(data: ElevatorLiftToTopData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: ElevatorLiftToTopData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/EmergencyLightingInteraction.ts b/src/drawApp/graphics/FAS/EmergencyLightingInteraction.ts new file mode 100644 index 0000000..1ff479b --- /dev/null +++ b/src/drawApp/graphics/FAS/EmergencyLightingInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + EmergencyLighting, + IEmergencyLightingData, +} from 'src/graphics/FAS/emergencyLighting/EmergencyLighting'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class EmergencyLightingData + extends GraphicDataBase + implements IEmergencyLightingData +{ + constructor(data?: iscsGraphicData.EmergencyLighting) { + let emergencyLighting; + if (data) { + emergencyLighting = data; + } else { + emergencyLighting = new iscsGraphicData.EmergencyLighting({ + common: GraphicDataBase.defaultCommonInfo(EmergencyLighting.Type), + }); + } + super(emergencyLighting); + } + + public get data(): iscsGraphicData.EmergencyLighting { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): EmergencyLightingData { + return new EmergencyLightingData(this.data.cloneMessage()); + } + copyFrom(data: EmergencyLightingData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: EmergencyLightingData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/FasAlarmInteraction.ts b/src/drawApp/graphics/FAS/FasAlarmInteraction.ts new file mode 100644 index 0000000..747214b --- /dev/null +++ b/src/drawApp/graphics/FAS/FasAlarmInteraction.ts @@ -0,0 +1,38 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { FasAlarm, IFasAlarmData } from 'src/graphics/FAS/fasAlarm/FasAlarm'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class FasAlarmData extends GraphicDataBase implements IFasAlarmData { + constructor(data?: iscsGraphicData.FasAlarm) { + let fasAlarm; + if (data) { + fasAlarm = data; + } else { + fasAlarm = new iscsGraphicData.FasAlarm({ + common: GraphicDataBase.defaultCommonInfo(FasAlarm.Type), + }); + } + super(fasAlarm); + } + + public get data(): iscsGraphicData.FasAlarm { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): FasAlarmData { + return new FasAlarmData(this.data.cloneMessage()); + } + copyFrom(data: FasAlarmData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: FasAlarmData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/FasFailureControlHostInteraction.ts b/src/drawApp/graphics/FAS/FasFailureControlHostInteraction.ts new file mode 100644 index 0000000..346a00d --- /dev/null +++ b/src/drawApp/graphics/FAS/FasFailureControlHostInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + FasFailureControlHost, + IFasFailureControlHostData, +} from 'src/graphics/FAS/fireFailureControlHost/FasFailureControlHost'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class FasFailureControlHostData + extends GraphicDataBase + implements IFasFailureControlHostData +{ + constructor(data?: iscsGraphicData.FasFailureControlHost) { + let fasFailureControlHost; + if (data) { + fasFailureControlHost = data; + } else { + fasFailureControlHost = new iscsGraphicData.FasFailureControlHost({ + common: GraphicDataBase.defaultCommonInfo(FasFailureControlHost.Type), + }); + } + super(fasFailureControlHost); + } + + public get data(): iscsGraphicData.FasFailureControlHost { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): FasFailureControlHostData { + return new FasFailureControlHostData(this.data.cloneMessage()); + } + copyFrom(data: FasFailureControlHostData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: FasFailureControlHostData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/FaultValveInteraction.ts b/src/drawApp/graphics/FAS/FaultValveInteraction.ts new file mode 100644 index 0000000..3bf8179 --- /dev/null +++ b/src/drawApp/graphics/FAS/FaultValveInteraction.ts @@ -0,0 +1,41 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + FaultValve, + IFaultValveData, +} from 'src/graphics/FAS/faultValve/FaultValve'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class FaultValveData extends GraphicDataBase implements IFaultValveData { + constructor(data?: iscsGraphicData.FaultValve) { + let faultValve; + if (data) { + faultValve = data; + } else { + faultValve = new iscsGraphicData.FaultValve({ + common: GraphicDataBase.defaultCommonInfo(FaultValve.Type), + }); + } + super(faultValve); + } + + public get data(): iscsGraphicData.FaultValve { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): FaultValveData { + return new FaultValveData(this.data.cloneMessage()); + } + copyFrom(data: FaultValveData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: FaultValveData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/FireIntercommunicationSignalInteraction.ts b/src/drawApp/graphics/FAS/FireIntercommunicationSignalInteraction.ts new file mode 100644 index 0000000..2b1f270 --- /dev/null +++ b/src/drawApp/graphics/FAS/FireIntercommunicationSignalInteraction.ts @@ -0,0 +1,47 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + FireIntercommunicationSignal, + IFireIntercommunicationSignalData, +} from 'src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignal'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class FireIntercommunicationSignalData + extends GraphicDataBase + implements IFireIntercommunicationSignalData +{ + constructor(data?: iscsGraphicData.FireIntercommunicationSignal) { + let fireIntercommunicationSignal; + if (data) { + fireIntercommunicationSignal = data; + } else { + fireIntercommunicationSignal = + new iscsGraphicData.FireIntercommunicationSignal({ + common: GraphicDataBase.defaultCommonInfo( + FireIntercommunicationSignal.Type + ), + }); + } + super(fireIntercommunicationSignal); + } + + public get data(): iscsGraphicData.FireIntercommunicationSignal { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): FireIntercommunicationSignalData { + return new FireIntercommunicationSignalData(this.data.cloneMessage()); + } + copyFrom(data: FireIntercommunicationSignalData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: FireIntercommunicationSignalData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/FirePumpInteraction.ts b/src/drawApp/graphics/FAS/FirePumpInteraction.ts new file mode 100644 index 0000000..ebee646 --- /dev/null +++ b/src/drawApp/graphics/FAS/FirePumpInteraction.ts @@ -0,0 +1,38 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { FirePump, IFirePumpData } from 'src/graphics/FAS/firePump/FirePump'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class FirePumpData extends GraphicDataBase implements IFirePumpData { + constructor(data?: iscsGraphicData.FirePump) { + let firePump; + if (data) { + firePump = data; + } else { + firePump = new iscsGraphicData.FirePump({ + common: GraphicDataBase.defaultCommonInfo(FirePump.Type), + }); + } + super(firePump); + } + + public get data(): iscsGraphicData.FirePump { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): FirePumpData { + return new FirePumpData(this.data.cloneMessage()); + } + copyFrom(data: FirePumpData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: FirePumpData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/FireShutterInteraction.ts b/src/drawApp/graphics/FAS/FireShutterInteraction.ts new file mode 100644 index 0000000..5f4d172 --- /dev/null +++ b/src/drawApp/graphics/FAS/FireShutterInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + FireShutter, + IFireShutterData, +} from 'src/graphics/FAS/fireShutter/FireShutter'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class FireShutterData + extends GraphicDataBase + implements IFireShutterData +{ + constructor(data?: iscsGraphicData.FireShutter) { + let fireShutter; + if (data) { + fireShutter = data; + } else { + fireShutter = new iscsGraphicData.FireShutter({ + common: GraphicDataBase.defaultCommonInfo(FireShutter.Type), + }); + } + super(fireShutter); + } + + public get data(): iscsGraphicData.FireShutter { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): FireShutterData { + return new FireShutterData(this.data.cloneMessage()); + } + copyFrom(data: FireShutterData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: FireShutterData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/FireValveInteraction.ts b/src/drawApp/graphics/FAS/FireValveInteraction.ts new file mode 100644 index 0000000..ece3c2f --- /dev/null +++ b/src/drawApp/graphics/FAS/FireValveInteraction.ts @@ -0,0 +1,41 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + FireValve, + IFireValveData, +} from 'src/graphics/FAS/fireValve/FireValve'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class FireValveData extends GraphicDataBase implements IFireValveData { + constructor(data?: iscsGraphicData.FireValve) { + let fireValve; + if (data) { + fireValve = data; + } else { + fireValve = new iscsGraphicData.FireValve({ + common: GraphicDataBase.defaultCommonInfo(FireValve.Type), + }); + } + super(fireValve); + } + + public get data(): iscsGraphicData.FireValve { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): FireValveData { + return new FireValveData(this.data.cloneMessage()); + } + copyFrom(data: FireValveData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: FireValveData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/ManualAlarmButtonInteraction.ts b/src/drawApp/graphics/FAS/ManualAlarmButtonInteraction.ts new file mode 100644 index 0000000..3aeed14 --- /dev/null +++ b/src/drawApp/graphics/FAS/ManualAlarmButtonInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + ManualAlarmButton, + IManualAlarmButtonData, +} from 'src/graphics/FAS/manualAlarmButton/ManualAlarmButton'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class ManualAlarmButtonData + extends GraphicDataBase + implements IManualAlarmButtonData +{ + constructor(data?: iscsGraphicData.ManualAlarmButton) { + let manualAlarmButton; + if (data) { + manualAlarmButton = data; + } else { + manualAlarmButton = new iscsGraphicData.ManualAlarmButton({ + common: GraphicDataBase.defaultCommonInfo(ManualAlarmButton.Type), + }); + } + super(manualAlarmButton); + } + + public get data(): iscsGraphicData.ManualAlarmButton { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): ManualAlarmButtonData { + return new ManualAlarmButtonData(this.data.cloneMessage()); + } + copyFrom(data: ManualAlarmButtonData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: ManualAlarmButtonData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/NonFirePowerSupplyInteraction.ts b/src/drawApp/graphics/FAS/NonFirePowerSupplyInteraction.ts new file mode 100644 index 0000000..873725e --- /dev/null +++ b/src/drawApp/graphics/FAS/NonFirePowerSupplyInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + NonFirePowerSupply, + INonFirePowerSupplyData, +} from 'src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupply'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class NonFirePowerSupplyData + extends GraphicDataBase + implements INonFirePowerSupplyData +{ + constructor(data?: iscsGraphicData.NonFirePowerSupply) { + let nonFirePowerSupply; + if (data) { + nonFirePowerSupply = data; + } else { + nonFirePowerSupply = new iscsGraphicData.NonFirePowerSupply({ + common: GraphicDataBase.defaultCommonInfo(NonFirePowerSupply.Type), + }); + } + super(nonFirePowerSupply); + } + + public get data(): iscsGraphicData.NonFirePowerSupply { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): NonFirePowerSupplyData { + return new NonFirePowerSupplyData(this.data.cloneMessage()); + } + copyFrom(data: NonFirePowerSupplyData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: NonFirePowerSupplyData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/PressureSwitchInteraction.ts b/src/drawApp/graphics/FAS/PressureSwitchInteraction.ts new file mode 100644 index 0000000..02b8f19 --- /dev/null +++ b/src/drawApp/graphics/FAS/PressureSwitchInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + PressureSwitch, + IPressureSwitchData, +} from 'src/graphics/FAS/pressureSwitch/PressureSwitch'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class PressureSwitchData + extends GraphicDataBase + implements IPressureSwitchData +{ + constructor(data?: iscsGraphicData.PressureSwitch) { + let pressureSwitch; + if (data) { + pressureSwitch = data; + } else { + pressureSwitch = new iscsGraphicData.PressureSwitch({ + common: GraphicDataBase.defaultCommonInfo(PressureSwitch.Type), + }); + } + super(pressureSwitch); + } + + public get data(): iscsGraphicData.PressureSwitch { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): PressureSwitchData { + return new PressureSwitchData(this.data.cloneMessage()); + } + copyFrom(data: PressureSwitchData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: PressureSwitchData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/SignalButterflyValveInteraction.ts b/src/drawApp/graphics/FAS/SignalButterflyValveInteraction.ts new file mode 100644 index 0000000..9e2122f --- /dev/null +++ b/src/drawApp/graphics/FAS/SignalButterflyValveInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + SignalButterflyValve, + ISignalButterflyValveData, +} from 'src/graphics/FAS/signalButterflyValve/SignalButterflyValve'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class SignalButterflyValveData + extends GraphicDataBase + implements ISignalButterflyValveData +{ + constructor(data?: iscsGraphicData.SignalButterflyValve) { + let signalButterflyValve; + if (data) { + signalButterflyValve = data; + } else { + signalButterflyValve = new iscsGraphicData.SignalButterflyValve({ + common: GraphicDataBase.defaultCommonInfo(SignalButterflyValve.Type), + }); + } + super(signalButterflyValve); + } + + public get data(): iscsGraphicData.SignalButterflyValve { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): SignalButterflyValveData { + return new SignalButterflyValveData(this.data.cloneMessage()); + } + copyFrom(data: SignalButterflyValveData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: SignalButterflyValveData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/SmokeDetectorInteraction.ts b/src/drawApp/graphics/FAS/SmokeDetectorInteraction.ts new file mode 100644 index 0000000..60021b1 --- /dev/null +++ b/src/drawApp/graphics/FAS/SmokeDetectorInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + SmokeDetector, + ISmokeDetectorData, +} from 'src/graphics/FAS/smokeDetector/SmokeDetector'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class SmokeDetectorData + extends GraphicDataBase + implements ISmokeDetectorData +{ + constructor(data?: iscsGraphicData.SmokeDetector) { + let smokeDetector; + if (data) { + smokeDetector = data; + } else { + smokeDetector = new iscsGraphicData.SmokeDetector({ + common: GraphicDataBase.defaultCommonInfo(SmokeDetector.Type), + }); + } + super(smokeDetector); + } + + public get data(): iscsGraphicData.SmokeDetector { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): SmokeDetectorData { + return new SmokeDetectorData(this.data.cloneMessage()); + } + copyFrom(data: SmokeDetectorData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: SmokeDetectorData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/SprayPumpInteraction.ts b/src/drawApp/graphics/FAS/SprayPumpInteraction.ts new file mode 100644 index 0000000..1790522 --- /dev/null +++ b/src/drawApp/graphics/FAS/SprayPumpInteraction.ts @@ -0,0 +1,41 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + SprayPump, + ISprayPumpData, +} from 'src/graphics/FAS/sprayPump/SprayPump'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class SprayPumpData extends GraphicDataBase implements ISprayPumpData { + constructor(data?: iscsGraphicData.SprayPump) { + let sprayPump; + if (data) { + sprayPump = data; + } else { + sprayPump = new iscsGraphicData.SprayPump({ + common: GraphicDataBase.defaultCommonInfo(SprayPump.Type), + }); + } + super(sprayPump); + } + + public get data(): iscsGraphicData.SprayPump { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): SprayPumpData { + return new SprayPumpData(this.data.cloneMessage()); + } + copyFrom(data: SprayPumpData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: SprayPumpData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/StabilizedPressurePumpInteraction.ts b/src/drawApp/graphics/FAS/StabilizedPressurePumpInteraction.ts new file mode 100644 index 0000000..1b3ee53 --- /dev/null +++ b/src/drawApp/graphics/FAS/StabilizedPressurePumpInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; +import { + StabilizedPressurePump, + IStabilizedPressurePumpData, +} from 'src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump'; + +export class StabilizedPressurePumpData + extends GraphicDataBase + implements IStabilizedPressurePumpData +{ + constructor(data?: iscsGraphicData.StabilizedPressurePump) { + let stabilizedPressurePump; + if (data) { + stabilizedPressurePump = data; + } else { + stabilizedPressurePump = new iscsGraphicData.StabilizedPressurePump({ + common: GraphicDataBase.defaultCommonInfo(StabilizedPressurePump.Type), + }); + } + super(stabilizedPressurePump); + } + + public get data(): iscsGraphicData.StabilizedPressurePump { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): StabilizedPressurePumpData { + return new StabilizedPressurePumpData(this.data.cloneMessage()); + } + copyFrom(data: StabilizedPressurePumpData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: StabilizedPressurePumpData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/StartPumpButtonInteraction.ts b/src/drawApp/graphics/FAS/StartPumpButtonInteraction.ts new file mode 100644 index 0000000..90220aa --- /dev/null +++ b/src/drawApp/graphics/FAS/StartPumpButtonInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + StartPumpButton, + IStartPumpButtonData, +} from 'src/graphics/FAS/startPumpButton/StartPumpButton'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class StartPumpButtonData + extends GraphicDataBase + implements IStartPumpButtonData +{ + constructor(data?: iscsGraphicData.StartPumpButton) { + let startPumpButton; + if (data) { + startPumpButton = data; + } else { + startPumpButton = new iscsGraphicData.StartPumpButton({ + common: GraphicDataBase.defaultCommonInfo(StartPumpButton.Type), + }); + } + super(startPumpButton); + } + + public get data(): iscsGraphicData.StartPumpButton { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): StartPumpButtonData { + return new StartPumpButtonData(this.data.cloneMessage()); + } + copyFrom(data: StartPumpButtonData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: StartPumpButtonData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/TemperatureCableInteraction.ts b/src/drawApp/graphics/FAS/TemperatureCableInteraction.ts new file mode 100644 index 0000000..14796d4 --- /dev/null +++ b/src/drawApp/graphics/FAS/TemperatureCableInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + TemperatureCable, + ITemperatureCableData, +} from 'src/graphics/FAS/temperatureCable/TemperatureCable'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class TemperatureCableData + extends GraphicDataBase + implements ITemperatureCableData +{ + constructor(data?: iscsGraphicData.TemperatureCable) { + let temperatureCable; + if (data) { + temperatureCable = data; + } else { + temperatureCable = new iscsGraphicData.TemperatureCable({ + common: GraphicDataBase.defaultCommonInfo(TemperatureCable.Type), + }); + } + super(temperatureCable); + } + + public get data(): iscsGraphicData.TemperatureCable { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): TemperatureCableData { + return new TemperatureCableData(this.data.cloneMessage()); + } + copyFrom(data: TemperatureCableData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: TemperatureCableData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/TemperatureDetectorInteraction.ts b/src/drawApp/graphics/FAS/TemperatureDetectorInteraction.ts new file mode 100644 index 0000000..a82a359 --- /dev/null +++ b/src/drawApp/graphics/FAS/TemperatureDetectorInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + TemperatureDetector, + ITemperatureDetectorData, +} from 'src/graphics/FAS/temperatureDetector/TemperatureDetector'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class TemperatureDetectorData + extends GraphicDataBase + implements ITemperatureDetectorData +{ + constructor(data?: iscsGraphicData.TemperatureDetector) { + let cctvButton; + if (data) { + cctvButton = data; + } else { + cctvButton = new iscsGraphicData.TemperatureDetector({ + common: GraphicDataBase.defaultCommonInfo(TemperatureDetector.Type), + }); + } + super(cctvButton); + } + + public get data(): iscsGraphicData.TemperatureDetector { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): TemperatureDetectorData { + return new TemperatureDetectorData(this.data.cloneMessage()); + } + copyFrom(data: TemperatureDetectorData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: TemperatureDetectorData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/FAS/WaterFlowIndicatorInteraction.ts b/src/drawApp/graphics/FAS/WaterFlowIndicatorInteraction.ts new file mode 100644 index 0000000..871a00e --- /dev/null +++ b/src/drawApp/graphics/FAS/WaterFlowIndicatorInteraction.ts @@ -0,0 +1,44 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase } from '../GraphicDataBase'; +import { + WaterFlowIndicator, + IWaterFlowIndicatorData, +} from 'src/graphics/FAS/waterFlowIndicator/WaterFlowIndicator'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +export class WaterFlowIndicatorData + extends GraphicDataBase + implements IWaterFlowIndicatorData +{ + constructor(data?: iscsGraphicData.WaterFlowIndicator) { + let waterFlowIndicator; + if (data) { + waterFlowIndicator = data; + } else { + waterFlowIndicator = new iscsGraphicData.WaterFlowIndicator({ + common: GraphicDataBase.defaultCommonInfo(WaterFlowIndicator.Type), + }); + } + super(waterFlowIndicator); + } + + public get data(): iscsGraphicData.WaterFlowIndicator { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + clone(): WaterFlowIndicatorData { + return new WaterFlowIndicatorData(this.data.cloneMessage()); + } + copyFrom(data: WaterFlowIndicatorData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: WaterFlowIndicatorData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/electronicMap/AxleCountingInteraction.ts b/src/drawApp/graphics/electronicMap/AxleCountingInteraction.ts new file mode 100644 index 0000000..e107452 --- /dev/null +++ b/src/drawApp/graphics/electronicMap/AxleCountingInteraction.ts @@ -0,0 +1,71 @@ +import * as pb_1 from 'google-protobuf'; +import { + AxleCounting, + IAxleCountingData, +} from 'src/graphics/axleCounting/AxleCounting'; +import { graphicData } from 'src/protos/stationLayoutGraphics'; +import { GraphicDataBase } from './GraphicDataBase'; +import { KilometerSystem } from 'src/graphics/signal/Signal'; + +export class AxleCountingData + extends GraphicDataBase + implements IAxleCountingData +{ + constructor(data?: graphicData.AxleCounting) { + let axleCounting; + if (!data) { + axleCounting = new graphicData.AxleCounting({ + common: GraphicDataBase.defaultCommonInfo(AxleCounting.Type), + }); + } else { + axleCounting = data; + } + super(axleCounting); + } + + public get data(): graphicData.AxleCounting { + return this.getData(); + } + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get kilometerSystem(): KilometerSystem { + if (!this.data.kilometerSystem) { + this.data.kilometerSystem = new graphicData.KilometerSystem(); + } + return this.data.kilometerSystem; + } + set kilometerSystem(v: KilometerSystem) { + this.data.kilometerSystem = new graphicData.KilometerSystem(v); + } + get axleCountingRef(): graphicData.RelatedRef[] { + return this.data.axleCountingRef; + } + set axleCountingRef(points: graphicData.RelatedRef[]) { + this.data.axleCountingRef = points; + } + get type(): graphicData.AxleCounting.TypeDetectionPoint { + return this.data.type; + } + set type(type: graphicData.AxleCounting.TypeDetectionPoint) { + this.data.type = type; + } + get centralizedStations(): number[] { + return this.data.centralizedStations; + } + set centralizedStations(v: number[]) { + this.data.centralizedStations = v; + } + clone(): AxleCountingData { + return new AxleCountingData(this.data.cloneMessage()); + } + copyFrom(data: AxleCountingData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: AxleCountingData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/graphics/electronicMap/PlatformInteraction.ts b/src/drawApp/graphics/electronicMap/PlatformInteraction.ts new file mode 100644 index 0000000..7cc2155 --- /dev/null +++ b/src/drawApp/graphics/electronicMap/PlatformInteraction.ts @@ -0,0 +1,148 @@ +import * as pb_1 from 'google-protobuf'; +import { + IPlatformData, + Platform, +} from 'src/graphics/electronicMap/platform/Platform'; +import { electronicMapGraphicData } from 'src/protos/electronicMap_graphic_data'; +import { GraphicDataBase } from '../GraphicDataBase'; + +import { IGraphicScene, GraphicInteractionPlugin, JlGraphic } from 'jl-graphic'; + +export class PlatformData extends GraphicDataBase implements IPlatformData { + constructor(data?: electronicMapGraphicData.Platform) { + let platform; + if (!data) { + platform = new electronicMapGraphicData.Platform({ + common: GraphicDataBase.defaultCommonInfo(Platform.Type), + }); + } else { + platform = data; + } + super(platform); + } + + public get data(): electronicMapGraphicData.Platform { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get refStation(): number { + return this.data.refStationId; + } + set refStation(v: number) { + this.data.refStationId = v; + } + get refSection(): number { + return this.data.refSectionId; + } + set refSection(v: number) { + this.data.refSectionId = v; + } + get refEsbRelayCode(): string { + return this.data.refEsbRelayCode; + } + set refEsbRelayCode(v: string) { + this.data.refEsbRelayCode = v; + } + get type(): electronicMapGraphicData.Platform.TypeOfPlatform { + return this.data.type; + } + set type(v: electronicMapGraphicData.Platform.TypeOfPlatform) { + this.data.type = v; + } + clone(): PlatformData { + return new PlatformData(this.data.cloneMessage()); + } + copyFrom(data: PlatformData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: PlatformData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} + +/* export class PlatformState extends GraphicStateBase implements IPlatformState { + constructor(proto?: state.PlatformState) { + let states; + if (proto) { + states = proto; + } else { + states = new state.PlatformState(); + } + super(states, Platform.Type); + } + get id(): number { + return this.states.id; + } + get code(): string { + return this.states.id + ''; + } + get states(): state.PlatformState { + return this.getState(); + } + get empj(): boolean { + return this.states.empj; + } + get spksState(): state.ReplyState[] { + if (!this.states.spksState) { + this.states.spksState = [new state.ReplyState()]; + } + return this.states.spksState; + } + set spksState(v: state.ReplyState[]) { + this.states.spksState = v; + } + get mkxJState(): state.MkxJState { + if (!this.states.mkxJState) { + this.states.mkxJState = new state.MkxJState(); + } + return this.states.mkxJState; + } + set mkxJState(v: state.MkxJState) { + this.states.mkxJState = v; + } + clone(): PlatformState { + return new PlatformState(this.states.cloneMessage()); + } + copyFrom(data: GraphicStateBase): void { + pb_1.Message.copyInto(data._state, this._state); + } + eq(data: GraphicStateBase): boolean { + return pb_1.Message.equals(this._state, data._state); + } +} */ + +export class PlatformOperateInteraction extends GraphicInteractionPlugin { + static Name = 'platform_operate_menu'; + constructor(app: IGraphicScene) { + super(PlatformOperateInteraction.Name, app); + } + static init(app: IGraphicScene) { + return new PlatformOperateInteraction(app); + } + filter(...grahpics: JlGraphic[]): Platform[] | undefined { + return grahpics + .filter((g) => g.type === Platform.Type) + .map((g) => g as Platform); + } + bind(g: Platform): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.selectable = true; + g.on('_leftclick', this.onLeftClick, this); + } + + unbind(g: Platform): void { + g.selectable = false; + g.eventMode = 'none'; + g.off('_leftclick', this.onLeftClick, this); + } + onLeftClick() { + //useLineStore().stateProCountIncrease(); + } +} diff --git a/src/drawApp/graphics/electronicMap/ScreenDoorInteraction.ts b/src/drawApp/graphics/electronicMap/ScreenDoorInteraction.ts new file mode 100644 index 0000000..bdd359c --- /dev/null +++ b/src/drawApp/graphics/electronicMap/ScreenDoorInteraction.ts @@ -0,0 +1,192 @@ +import * as pb_1 from 'google-protobuf'; +import { + IScreenDoorData, + IScreenDoorState, + ScreenDoor, +} from 'src/graphics/screenDoor/ScreenDoor'; +import { graphicData } from 'src/protos/stationLayoutGraphics'; +import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase'; +import { state } from 'src/protos/device_state'; +import { useLineStore } from 'src/stores/line-store'; +import { + ContextMenu, + GraphicInteractionPlugin, + IGraphicScene, + JlGraphic, + MenuItemOptions, +} from 'jl-graphic'; +import { loadScreenDoorConfig } from '../commonApp'; +import { Dialog } from 'quasar'; +import { DisplayObject, FederatedMouseEvent } from 'pixi.js'; +import ScreenDoorOperation from 'src/components/draw-app/dialogs/ScreenDoorOperation.vue'; +import { request } from 'src/protos/request'; + +export class ScreenDoorData extends GraphicDataBase implements IScreenDoorData { + constructor(data?: graphicData.ScreenDoor) { + let screenDoor; + if (!data) { + screenDoor = new graphicData.ScreenDoor({ + common: GraphicDataBase.defaultCommonInfo(ScreenDoor.Type), + }); + } else { + screenDoor = data; + } + super(screenDoor); + } + + public get data(): graphicData.ScreenDoor { + return this.getData(); + } + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get refPlatform(): number { + return this.data.refPlatformId; + } + set refPlatform(v: number) { + this.data.refPlatformId = v; + } + get sonDoorAmount(): number { + return loadScreenDoorConfig()?.sonDoorAmount || 30; + } + + clone(): ScreenDoorData { + return new ScreenDoorData(this.data.cloneMessage()); + } + copyFrom(data: ScreenDoorData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: ScreenDoorData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} + +export class ScreenDoorState + extends GraphicStateBase + implements IScreenDoorState +{ + constructor(proto?: state.PsdState) { + let states; + if (proto) { + states = proto; + } else { + states = new state.PsdState(); + } + super(states, ScreenDoor.Type); + } + get code(): string { + return this.states.id + ''; + } + get id(): number { + return this.states.id; + } + set id(id: number) { + this.states.id = id; + } + get asdStates(): state.AsdState[] { + return this.states.asdStates; + } + set asdStates(v: state.AsdState[]) { + this.states.asdStates = v; + } + get mgj() { + return this.states.mgj; + } + set mgj(v: boolean) { + this.states.mgj = v; + } + get zaw() { + return this.states.zaw; + } + set zaw(v: boolean) { + this.states.zaw = v; + } + get param(): request.PsdParam { + return this.states.param; + } + set param(param: request.PsdParam) { + this.states.param = param; + } + get states(): state.PsdState { + return this.getState(); + } + clone(): ScreenDoorState { + return new ScreenDoorState(this.states.cloneMessage()); + } + copyFrom(data: GraphicStateBase): void { + pb_1.Message.copyInto(data._state, this._state); + } + eq(data: GraphicStateBase): boolean { + return pb_1.Message.equals(this._state, data._state); + } +} + +const setSceenDoorParam: MenuItemOptions = { name: '设置参数' }; +const sceenDoorOperateMenu: ContextMenu = ContextMenu.init({ + name: '屏蔽门操作菜单', + groups: [ + { + items: [setSceenDoorParam], + }, + ], +}); + +export class ScreenDoorOperateInteraction extends GraphicInteractionPlugin { + static Name = 'screen_door_operate_menu'; + constructor(app: IGraphicScene) { + super(ScreenDoorOperateInteraction.Name, app); + app.registerMenu(sceenDoorOperateMenu); + } + static init(app: IGraphicScene) { + return new ScreenDoorOperateInteraction(app); + } + filter(...grahpics: JlGraphic[]): ScreenDoor[] | undefined { + return grahpics + .filter((g) => g.type === ScreenDoor.Type) + .map((g) => g as ScreenDoor); + } + bind(g: ScreenDoor): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.selectable = true; + g.on('_leftclick', this.onLeftClick, this); + g.on('rightclick', this.onContextMenu, this); + } + + unbind(g: ScreenDoor): void { + g.selectable = false; + g.eventMode = 'none'; + g.off('_leftclick', this.onLeftClick, this); + g.off('rightclick', this.onContextMenu, this); + } + onLeftClick() { + useLineStore().stateProCountIncrease(); + } + onContextMenu(e: FederatedMouseEvent) { + const target = e.target as DisplayObject; + const screenDoor = target.getGraphic(); + if (!screenDoor) return; + this.app.updateSelected(screenDoor); + const lineStore = useLineStore(); + setSceenDoorParam.handler = async () => { + if (lineStore.deviceOpreratDialogInstance) return; + lineStore.deviceOpreratDialogInstance = Dialog.create({ + component: ScreenDoorOperation, + componentProps: { + id: screenDoor.id, + code: screenDoor.datas.code, + sonDoorAmount: screenDoor.datas.sonDoorAmount, + asdCodesProp: screenDoor.states.param.asdCodes, + screenDoorForceProp: screenDoor.states.param.force, + screenDoorFaultProp: screenDoor.states.param.fault, + }, + cancel: true, + persistent: true, + }); + }; + sceenDoorOperateMenu.open(e.global); + } +} diff --git a/src/drawApp/graphics/electronicMap/SectionInteraction.ts b/src/drawApp/graphics/electronicMap/SectionInteraction.ts new file mode 100644 index 0000000..af06fac --- /dev/null +++ b/src/drawApp/graphics/electronicMap/SectionInteraction.ts @@ -0,0 +1,317 @@ +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase'; +import { + ISectionData, + ISectionState, + Section, + SectionType, +} from 'src/graphics/section/Section'; +import { graphicData } from 'src/protos/stationLayoutGraphics'; +import { DisplayObject, FederatedMouseEvent, IPointData } from 'pixi.js'; +import { + GraphicInteractionPlugin, + IGraphicScene, + JlGraphic, + MenuItemOptions, + ContextMenu, +} from 'jl-graphic'; +import { useLineStore } from 'src/stores/line-store'; +import { SectionGraphicHitArea } from 'src/graphics/section/SectionDrawAssistant'; +import { Dialog } from 'quasar'; +import AddTrainDialog from '../../components/draw-app/dialogs/AddTrainDialog.vue'; +import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting'; +import { state } from 'src/protos/device_state'; +import { getKmDistance } from '../lineScene'; +import SectionOperation from 'src/components/draw-app/dialogs/SectionOperation.vue'; +import { request } from 'src/protos/request'; +import { setAxleSectionState } from 'src/api/Simulation'; +import { errorNotify } from 'src/utils/CommonNotify'; + +export class SectionData extends GraphicDataBase implements ISectionData { + constructor(data?: graphicData.Section) { + let section; + if (!data) { + section = new graphicData.Section({ + common: GraphicDataBase.defaultCommonInfo(Section.Type), + }); + } else { + section = data; + } + super(section); + } + public get data(): graphicData.Section { + return this.getData(); + } + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get points(): IPointData[] { + return this.data.points; + } + set points(points: IPointData[]) { + this.data.points = points.map( + (p) => new graphicData.Point({ x: p.x, y: p.y }) + ); + } + get paRef(): graphicData.RelatedRef { + return this.data.paRef; + } + set paRef(ref: graphicData.RelatedRef) { + this.data.paRef = ref; + } + get pbRef(): graphicData.RelatedRef { + return this.data.pbRef; + } + set pbRef(ref: graphicData.RelatedRef) { + this.data.pbRef = ref; + } + get sectionType(): graphicData.Section.SectionType { + return this.data.sectionType; + } + set sectionType(type: graphicData.Section.SectionType) { + this.data.sectionType = type; + } + get axleCountings(): number[] { + return this.data.axleCountings; + } + set axleCountings(axleCountings: number[]) { + this.data.axleCountings = axleCountings; + } + get trackSectionId(): number { + return this.data.trackSectionId; + } + set trackSectionId(v: number) { + this.data.trackSectionId = v; + } + get isCurve(): boolean { + return this.data.isCurve; + } + set isCurve(v: boolean) { + this.data.isCurve = v; + } + get segmentsCount(): number { + return this.data.segmentsCount; + } + set segmentsCount(v: number) { + this.data.segmentsCount = v; + } + get centralizedStations(): number[] { + return this.data.centralizedStations; + } + set centralizedStations(v: number[]) { + this.data.centralizedStations = v; + } + get normalRunningDirection(): graphicData.Section.RunningDirection { + return this.data.normalRunningDirection; + } + set normalRunningDirection(v: graphicData.Section.RunningDirection) { + this.data.normalRunningDirection = v; + } + get isTurnBackZone(): boolean { + return this.data.isTurnBackZone; + } + set isTurnBackZone(v: boolean) { + this.data.isTurnBackZone = v; + } + get direction(): graphicData.Direction { + return this.data.direction; + } + set direction(v: graphicData.Direction) { + this.data.direction = v; + } + clone(): SectionData { + return new SectionData(this.data.cloneMessage()); + } + copyFrom(data: SectionData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: SectionData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} + +export class SectionStates extends GraphicStateBase implements ISectionState { + constructor(proto?: state.SectionState) { + let states; + if (proto) { + states = proto; + } else { + states = new state.SectionState(); + } + super(states, Section.Type); + } + get code(): string { + return this.states.id + ''; + } + get id(): number { + return this.states.id; + } + set id(id: number) { + this.states.id = id; + } + get occupied(): boolean { + return this.states.occupied; + } + set occupied(occupied: boolean) { + this.states.occupied = occupied; + } + get axleFault(): boolean { + return this.states.axleFault; + } + set axleFault(axleFault: boolean) { + this.states.axleFault = axleFault; + } + get axleDrst(): boolean { + return this.states.axleDrst; + } + set axleDrst(axleDrst: boolean) { + this.states.axleDrst = axleDrst; + } + get axlePdrst(): boolean { + return this.states.axlePdrst; + } + set axlePdrst(axlePdrst: boolean) { + this.states.axlePdrst = axlePdrst; + } + get states(): state.SectionState { + return this.getState(); + } + clone(): SectionStates { + return new SectionStates(this.states.cloneMessage()); + } + copyFrom(data: GraphicStateBase): void { + pb_1.Message.copyInto(data._state, this._state); + } + eq(data: GraphicStateBase): boolean { + return pb_1.Message.equals(this._state, data._state); + } +} + +const addTrainConfig: MenuItemOptions = { + name: '添加列车', +}; +const setSectionParam: MenuItemOptions = { name: '设置参数' }; +const setFaultOcc: MenuItemOptions = { name: '设置故障占用' }; +const SectionOperateMenu: ContextMenu = ContextMenu.init({ + name: '区段操作菜单', + groups: [ + { + items: [setSectionParam, setFaultOcc, addTrainConfig], + }, + ], +}); + +export class SectionOperateInteraction extends GraphicInteractionPlugin
{ + static Name = 'section_operate_menu'; + constructor(app: IGraphicScene) { + super(SectionOperateInteraction.Name, app); + app.registerMenu(SectionOperateMenu); + } + static init(app: IGraphicScene) { + return new SectionOperateInteraction(app); + } + filter(...grahpics: JlGraphic[]): Section[] | undefined { + return grahpics + .filter((g) => g.type === Section.Type) + .map((g) => g as Section); + } + bind(g: Section): void { + g.lineGraphic.eventMode = 'static'; + g.lineGraphic.cursor = 'pointer'; + g.lineGraphic.hitArea = new SectionGraphicHitArea(g); + g.lineGraphic.selectable = true; + g.selectable = true; + g.labelGraphic.eventMode = 'static'; + g.labelGraphic.cursor = 'pointer'; + g.labelGraphic.selectable = true; + g.on('_leftclick', this.onLeftClick, this); + g.on('rightclick', this.onContextMenu, this); + } + + unbind(g: Section): void { + g.lineGraphic.eventMode = 'none'; + g.lineGraphic.scalable = false; + g.lineGraphic.selectable = false; + g.selectable = false; + g.labelGraphic.eventMode = 'none'; + g.labelGraphic.selectable = false; + g.off('_leftclick', this.onLeftClick, this); + g.off('rightclick', this.onContextMenu, this); + } + onLeftClick() { + useLineStore().stateProCountIncrease(); + } + onContextMenu(e: FederatedMouseEvent) { + const target = e.target as DisplayObject; + const section = target.getGraphic
(); + if (!section || section.datas.sectionType != SectionType.Physical) return; + this.app.updateSelected(section); + const lineStore = useLineStore(); + setSectionParam.handler = async () => { + if (lineStore.deviceOpreratDialogInstance) return; + lineStore.deviceOpreratDialogInstance = Dialog.create({ + component: SectionOperation, + componentProps: { + id: section.id, + code: section.datas.code, + axleDrst: section.states.axleDrst, + axlePdrst: section.states.axlePdrst, + }, + cancel: true, + persistent: true, + }); + }; + setFaultOcc.handler = async () => { + const obj = { + simulationId: lineStore?.simulationId || '', + mapId: lineStore.mapId as number, + deviceId: section.id, + operation: request.Section.Operation.SetFaultOcc, + }; + setAxleSectionState(obj).catch((e) => + errorNotify('区段操作失败:' + e.title, e) + ); + }; + addTrainConfig.disabled = !lineStore.trainConfigList; + addTrainConfig.handler = () => { + const relations = + section.relationManage.getRelationsOfGraphicAndOtherType( + section, + AxleCounting.Type + ); + let AKm; + let BKm; + relations.forEach((item) => { + const rp = item.getRelationParam(section); + const other = item.getOtherGraphic(section) as AxleCounting; + if ( + (other.datas.axleCountingRef.length > 1 && + other.datas.type == + graphicData.AxleCounting.TypeDetectionPoint.AxleCounting) || + other.datas.axleCountingRef.length == 1 + ) { + if (rp.getParam() == 'A') { + AKm = other.datas.kilometerSystem; + } + if (rp.getParam() == 'B') { + BKm = other.datas.kilometerSystem; + } + } + }); + const d = getKmDistance(BKm, AKm); + if (lineStore.deviceOpreratDialogInstance) return; + lineStore.deviceOpreratDialogInstance = Dialog.create({ + title: '创建列车', + message: '', + component: AddTrainDialog, + componentProps: { dev: section, kmLength: d }, + cancel: true, + persistent: true, + }); + }; + SectionOperateMenu.open(e.global); + } +} diff --git a/src/drawApp/graphics/electronicMap/SignalInteraction.ts b/src/drawApp/graphics/electronicMap/SignalInteraction.ts new file mode 100644 index 0000000..b9ac41b --- /dev/null +++ b/src/drawApp/graphics/electronicMap/SignalInteraction.ts @@ -0,0 +1,253 @@ +import * as pb_1 from 'google-protobuf'; +import { + ISignalData, + Signal, + ISignalState, + KilometerSystem, +} from 'src/graphics/signal/Signal'; +import { graphicData } from 'src/protos/stationLayoutGraphics'; +import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase'; +import { + GraphicInteractionPlugin, + IGraphicScene, + JlGraphic, + MenuItemOptions, + ContextMenu, +} from 'jl-graphic'; +import { FederatedMouseEvent, DisplayObject } from 'pixi.js'; +import { state } from 'src/protos/device_state'; +import { useLineStore } from 'src/stores/line-store'; +import { SignalGraphicHitArea } from 'src/graphics/signal/SignalDrawAssistant'; +import { request } from 'src/protos/request'; +import { Dialog } from 'quasar'; +import SignalOperation from 'src/components/draw-app/dialogs/SignalOperation.vue' + +export class SignalData extends GraphicDataBase implements ISignalData { + constructor(data?: graphicData.Signal) { + let signal; + if (!data) { + signal = new graphicData.Signal({ + common: GraphicDataBase.defaultCommonInfo(Signal.Type), + }); + } else { + signal = data; + } + super(signal); + } + public get data(): graphicData.Signal { + return this.getData(); + } + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get mirror(): boolean { + return this.data.mirror; + } + set mirror(v: boolean) { + this.data.mirror = v; + } + get kilometerSystem(): KilometerSystem { + if (!this.data.kilometerSystem) { + this.data.kilometerSystem = new graphicData.KilometerSystem(); + } + return this.data.kilometerSystem; + } + set kilometerSystem(v: KilometerSystem) { + this.data.kilometerSystem = new graphicData.KilometerSystem(v); + } + get refDev(): graphicData.RelatedRef { + return this.data.refDev ?? new graphicData.RelatedRef(); + } + set refDev(v: graphicData.RelatedRef) { + this.data.refDev = v; + } + get centralizedStations(): number[] { + return this.data.centralizedStations; + } + set centralizedStations(v: number[]) { + this.data.centralizedStations = v; + } + get mt(): graphicData.Signal.Model { + return this.data.mt; + } + set mt(v: graphicData.Signal.Model) { + this.data.mt = v; + } + get direction(): graphicData.Direction { + return this.data.direction; + } + set direction(v: graphicData.Direction) { + this.data.direction = v; + } + clone(): SignalData { + return new SignalData(this.data.cloneMessage()); + } + copyFrom(data: SignalData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: SignalData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} + +export class SignalState extends GraphicStateBase implements ISignalState { + constructor(proto?: state.SignalState) { + let states; + if (proto) { + states = proto; + } else { + states = new state.SignalState(); + } + super(states, Signal.Type); + } + get code(): string { + return this.states.id + ''; + } + get aspect(): number { + return this.states.aspect; + } + set aspect(v: number) { + this.states.aspect = v; + } + get param(): request.SignalParam { + return this.states.param; + } + set param(v: request.SignalParam) { + this.states.param = v; + } + get states(): state.SignalState { + return this.getState(); + } + clone(): SignalState { + return new SignalState(this.states.cloneMessage()); + } + copyFrom(data: GraphicStateBase): void { + pb_1.Message.copyInto(data._state, this._state); + } + eq(data: GraphicStateBase): boolean { + return pb_1.Message.equals(this._state, data._state); + } +} + +const mirrorFlipConfig: MenuItemOptions = { + name: '镜像翻转', +}; +const setSignalParam: MenuItemOptions = { + name: '设置参数' +} +const SignalEditMenu: ContextMenu = ContextMenu.init({ + name: '信号机编辑菜单', + groups: [ + { + items: [mirrorFlipConfig], + }, + ], +}); +const SignalOperateMenu: ContextMenu = ContextMenu.init({ + name: '信号机操作菜单', + groups: [ + { + items: [ + setSignalParam + // signalRedConfig, + // signalGreenConfig, + // signalYellowConfig, + // signalGuideConfig, + // signalCloseConfig, + ], + }, + ], +}); +export class DrawSignalInteraction extends GraphicInteractionPlugin { + static Name = 'signal_draw_right_menu'; + constructor(app: IGraphicScene) { + super(DrawSignalInteraction.Name, app); + app.registerMenu(SignalEditMenu); + } + static init(app: IGraphicScene) { + return new DrawSignalInteraction(app); + } + filter(...grahpics: JlGraphic[]): Signal[] | undefined { + return grahpics + .filter((g) => g.type === Signal.Type) + .map((g) => g as Signal); + } + bind(g: Signal): void { + g.on('_rightclick', this.onContextMenu, this); + } + + unbind(g: Signal): void { + g.off('_rightclick', this.onContextMenu, this); + } + + onContextMenu(e: FederatedMouseEvent) { + const target = e.target as DisplayObject; + const signal = target.getGraphic() as Signal; + this.app.updateSelected(signal); + mirrorFlipConfig.handler = () => { + signal.mirror = !signal.mirror; + }; + SignalEditMenu.open(e.global); + } +} + +export class SignalOperateInteraction extends GraphicInteractionPlugin { + static Name = 'signal_operate_menu'; + constructor(app: IGraphicScene) { + super(SignalOperateInteraction.Name, app); + app.registerMenu(SignalOperateMenu); + } + static init(app: IGraphicScene) { + return new SignalOperateInteraction(app); + } + filter(...grahpics: JlGraphic[]): Signal[] | undefined { + return grahpics + .filter((g) => g.type === Signal.Type) + .map((g) => g as Signal); + } + bind(g: Signal): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.selectable = true; + g.lampMainBody.hitArea = new SignalGraphicHitArea(g); + g.on('_leftclick', this.onLeftClick, this); + g.on('rightclick', this.onContextMenu, this); + } + + unbind(g: Signal): void { + g.selectable = false; + g.eventMode = 'none'; + g.off('_leftclick', this.onLeftClick, this); + g.off('rightclick', this.onContextMenu); + } + onLeftClick() { + useLineStore().stateProCountIncrease(); + } + onContextMenu(e: FederatedMouseEvent) { + const target = e.target as DisplayObject; + const signal = target.getGraphic() as Signal; + this.app.updateSelected(signal); + const lineStore = useLineStore(); + + setSignalParam.handler = () => { + if (lineStore.deviceOpreratDialogInstance) return; + lineStore.deviceOpreratDialogInstance = Dialog.create({ + title: '信号机设置参数', + message: '', + component: SignalOperation, + componentProps: { + id: signal.datas.id, + code: signal.datas.code, + mt: signal.datas.mt, + param: signal.states.param, + }, + cancel: true, + persistent: true, + }); + } + SignalOperateMenu.open(e.global); + } +} diff --git a/src/drawApp/graphics/electronicMap/StationInteraction.ts b/src/drawApp/graphics/electronicMap/StationInteraction.ts new file mode 100644 index 0000000..eadca74 --- /dev/null +++ b/src/drawApp/graphics/electronicMap/StationInteraction.ts @@ -0,0 +1,168 @@ +import * as pb_1 from 'google-protobuf'; +import { + IStationData, + IStationState, + Station, +} from 'src/graphics/station/Station'; +import { graphicData } from 'src/protos/stationLayoutGraphics'; +import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase'; +import { state } from 'src/protos/device_state'; +import { IGraphicScene, GraphicInteractionPlugin, JlGraphic } from 'jl-graphic'; +import { KilometerSystem } from 'src/graphics/signal/Signal'; +import { useLineStore } from 'src/stores/line-store'; + +export class StationData extends GraphicDataBase implements IStationData { + constructor(data?: graphicData.Station) { + let station; + if (!data) { + station = new graphicData.Station({ + common: GraphicDataBase.defaultCommonInfo(Station.Type), + }); + } else { + station = data; + } + super(station); + } + + public get data(): graphicData.Station { + return this.getData(); + } + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get stationName(): string { + return this.data.stationName; + } + set stationName(v: string) { + this.data.stationName = v; + } + get stationNameAcronym(): string { + return this.data.stationNameAcronym; + } + set stationNameAcronym(v: string) { + this.data.stationNameAcronym = v; + } + get kilometerSystem(): KilometerSystem { + if (!this.data.kilometerSystem) { + this.data.kilometerSystem = new graphicData.KilometerSystem(); + } + return this.data.kilometerSystem; + } + set kilometerSystem(v: KilometerSystem) { + this.data.kilometerSystem = new graphicData.KilometerSystem(v); + } + get concentrationStations(): boolean { + return this.data.concentrationStations; + } + set concentrationStations(v: boolean) { + this.data.concentrationStations = v; + } + get depots(): boolean { + return this.data.depots; + } + set depots(v: boolean) { + this.data.depots = v; + } + get manageStations(): number[] { + return this.data.manageStations; + } + set manageStations(v: number[]) { + this.data.manageStations = v; + } + clone(): StationData { + return new StationData(this.data.cloneMessage()); + } + copyFrom(data: StationData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: StationData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} + +export class StationState extends GraphicStateBase implements IStationState { + constructor(proto?: state.StationState) { + let states; + if (proto) { + states = proto; + } else { + states = new state.StationState(); + } + super(states, Station.Type); + } + get id(): number { + return this.states.id; + } + get code(): string { + return this.states.id + ''; + } + // get ipRtuStusDown(): boolean { + // return this.states.ipRtuStusDown; + // } + // set ipRtuStusDown(v: boolean) { + // this.states.ipRtuStusDown = v; + // } + // get ipRtuStusInLocalCtrl(): boolean { + // return this.states.ipRtuStusInLocalCtrl; + // } + // set ipRtuStusInLocalCtrl(v: boolean) { + // this.states.ipRtuStusInLocalCtrl = v; + // } + // get ipRtuStusInCentralCtrl(): boolean { + // return this.states.ipRtuStusInCentralCtrl; + // } + // set ipRtuStusInCentralCtrl(v: boolean) { + // this.states.ipRtuStusInCentralCtrl = v; + // } + // get ipRtuStusInEmergencyCtrl(): boolean { + // return this.states.ipRtuStusInEmergencyCtrl; + // } + // set ipRtuStusInEmergencyCtrl(v: boolean) { + // this.states.ipRtuStusInEmergencyCtrl = v; + // } + get states(): state.StationState { + return this.getState(); + } + clone(): StationState { + return new StationState(this.states.cloneMessage()); + } + copyFrom(data: GraphicStateBase): void { + pb_1.Message.copyInto(data._state, this._state); + } + eq(data: GraphicStateBase): boolean { + return pb_1.Message.equals(this._state, data._state); + } +} + +export class StationOperateInteraction extends GraphicInteractionPlugin { + static Name = 'station_operate_menu'; + constructor(app: IGraphicScene) { + super(StationOperateInteraction.Name, app); + } + static init(app: IGraphicScene) { + return new StationOperateInteraction(app); + } + filter(...grahpics: JlGraphic[]): Station[] | undefined { + return grahpics + .filter((g) => g.type === Station.Type) + .map((g) => g as Station); + } + bind(g: Station): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.selectable = true; + g.on('_leftclick', this.onLeftClick, this); + } + + unbind(g: Station): void { + g.selectable = false; + g.eventMode = 'none'; + g.off('_leftclick', this.onLeftClick, this); + } + onLeftClick() { + useLineStore().stateProCountIncrease(); + } +} diff --git a/src/drawApp/graphics/electronicMap/TurnoutInteraction.ts b/src/drawApp/graphics/electronicMap/TurnoutInteraction.ts new file mode 100644 index 0000000..28881ca --- /dev/null +++ b/src/drawApp/graphics/electronicMap/TurnoutInteraction.ts @@ -0,0 +1,378 @@ +import { + ITurnoutData, + ITurnoutState, + Turnout, + TurnoutSection, +} from 'src/graphics/turnout/Turnout'; +import * as pb_1 from 'google-protobuf'; +import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase'; +import { graphicData } from 'src/protos/stationLayoutGraphics'; +import { DisplayObject, FederatedMouseEvent, IPointData } from 'pixi.js'; +import { KilometerSystem } from 'src/graphics/signal/Signal'; +import { state } from 'src/protos/device_state'; +import { + IGraphicScene, + GraphicInteractionPlugin, + JlGraphic, + MenuItemOptions, + ContextMenu, +} from 'jl-graphic'; +import { + ForkHitArea, + TurnoutSectionHitArea, +} from 'src/graphics/turnout/TurnoutDrawAssistant'; +import { useLineStore } from 'src/stores/line-store'; +import { Dialog } from 'quasar'; +// import AddTrainDialog from '../../components/draw-app/dialogs/AddTrainDialog.vue'; +// import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting'; +import TurnoutOperation from 'src/components/draw-app/dialogs/TurnoutOperation.vue'; +// import { getKmDistance } from '../lineScene'; +import { request } from 'src/protos/request'; + +function getDefaultEndPoint() { + return { + pointA: [new graphicData.Point([50, 0])], + pointB: [new graphicData.Point([-50, 0])], + pointC: [new graphicData.Point([-50, -50])], + }; +} + +const setTurnoutParam: MenuItemOptions = { name: '设置参数' }; + +// const addTrainConfig: MenuItemOptions = { +// name: '添加列车', +// }; + +const TurnoutOperationMenu: ContextMenu = ContextMenu.init({ + name: 'Turnout操作', + groups: [{ items: [setTurnoutParam] }], +}); + +export class TurnoutOperationPlugin extends GraphicInteractionPlugin { + static Name = 'turnout_operate_menu'; + constructor(app: IGraphicScene) { + super(TurnoutOperationPlugin.Name, app); + app.registerMenu(TurnoutOperationMenu); + } + static init(app: IGraphicScene) { + return new TurnoutOperationPlugin(app); + } + filter(...grahpics: JlGraphic[]): Turnout[] | undefined { + return grahpics.filter((g): g is Turnout => g instanceof Turnout); + } + bind(g: Turnout): void { + g.graphics.fork.eventMode = 'static'; + g.graphics.fork.cursor = 'pointer'; + g.selectable = true; + g.graphics.fork.hitArea = new ForkHitArea(g); + g.graphics.sections.forEach((sectionGraphic) => { + sectionGraphic.eventMode = 'static'; + sectionGraphic.cursor = 'pointer'; + sectionGraphic.hitArea = new TurnoutSectionHitArea(sectionGraphic); + }); + g.on('rightclick', this.onContextMenu, this); + g.on('_leftclick', this.onLeftClick, this); + } + unbind(g: Turnout): void { + g.graphics.fork.eventMode = 'none'; + g.selectable = false; + g.graphics.sections.forEach((sectionGraphic) => { + sectionGraphic.eventMode = 'none'; + }); + g.off('rightclick', this.onContextMenu); + g.off('_leftclick', this.onLeftClick, this); + } + onLeftClick() { + useLineStore().stateProCountIncrease(); + } + onContextMenu(e: FederatedMouseEvent) { + const target = e.target as DisplayObject; + const turnout = target.getGraphic(); + if (!turnout) return; + const lineStore = useLineStore(); + this.app.updateSelected(turnout); + setTurnoutParam.handler = async () => { + if (lineStore.deviceOpreratDialogInstance) return; + lineStore.deviceOpreratDialogInstance = Dialog.create({ + title: '道岔设置参数', + message: '', + component: TurnoutOperation, + componentProps: { + id: turnout.id, + code: turnout.datas.code, + force: turnout.states.param.forcePosition, + }, + cancel: true, + persistent: true, + }); + }; + + // const port = (target as TurnoutSection).port; + // addTrainConfig.disabled = !port || !lineStore.trainConfigList; + // addTrainConfig.handler = () => { + // const relations = + // turnout.relationManage.getRelationsOfGraphicAndOtherType( + // turnout, + // AxleCounting.Type + // ); + // const findAc = relations.find((item) => { + // const rp = item.getRelationParam(turnout); + // const orp = item.getOtherRelationParam(turnout as Turnout); + // const ac = orp.g as AxleCounting; + // return ( + // rp.getParam() == port && + // ((ac.datas.axleCountingRef.length > 1 && + // ac.datas.type == + // graphicData.AxleCounting.TypeDetectionPoint.AxleCounting) || + // ac.datas.axleCountingRef.length == 1) + // ); + // }); + // const oKm = turnout.datas.kilometerSystem; + // let pKm; + // if (findAc) { + // const other = findAc.getOtherGraphic(turnout) as AxleCounting; + // pKm = other.datas.kilometerSystem; + // } else { + // const relations = + // turnout.relationManage.getRelationsOfGraphicAndOtherType( + // turnout, + // Turnout.Type + // ); + // const findT = relations.find((item) => { + // const rp = item.getRelationParam(turnout); + // return rp.getParam() == port; + // }); + // if (findT) { + // const other = findT.getOtherGraphic(turnout) as Turnout; + // pKm = other.datas.kilometerSystem; + // } + // } + // const d = getKmDistance(pKm, oKm); + // if (lineStore.deviceOpreratDialogInstance) return; + // lineStore.deviceOpreratDialogInstance = Dialog.create({ + // title: '创建列车', + // message: '', + // component: AddTrainDialog, + // componentProps: { dev: turnout, kmLength: d }, + // cancel: true, + // persistent: true, + // }); + // }; + TurnoutOperationMenu.open(e.global); + } +} + +export class TurnoutData extends GraphicDataBase implements ITurnoutData { + constructor(data?: graphicData.Turnout) { + let turnout = new graphicData.Turnout(); + if (!data) { + turnout.common = GraphicDataBase.defaultCommonInfo(Turnout.Type); + const p = getDefaultEndPoint(); + turnout.pointA = p.pointA; + turnout.pointB = p.pointB; + turnout.pointC = p.pointC; + } else { + turnout = data; + } + super(turnout); + } + get data(): graphicData.Turnout { + return this.getData(); + } + + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get pointA(): IPointData[] { + return this.data.pointA; + } + set pointA(v: IPointData[]) { + this.data.pointA = v.map((p) => new graphicData.Point({ x: p.x, y: p.y })); + } + get pointB(): IPointData[] { + return this.data.pointB; + } + set pointB(v: IPointData[]) { + this.data.pointB = v.map((p) => new graphicData.Point({ x: p.x, y: p.y })); + } + get pointC(): IPointData[] { + return this.data.pointC; + } + set pointC(v: IPointData[]) { + this.data.pointC = v.map((p) => new graphicData.Point({ x: p.x, y: p.y })); + } + get paRef(): graphicData.RelatedRef { + return this.data.paRef; + } + set paRef(ref: graphicData.RelatedRef) { + this.data.paRef = ref; + } + get pbRef(): graphicData.RelatedRef { + return this.data.pbRef; + } + set pbRef(ref: graphicData.RelatedRef) { + this.data.pbRef = ref; + } + get pcRef(): graphicData.RelatedRef { + return this.data.pcRef; + } + set pcRef(ref: graphicData.RelatedRef) { + this.data.pcRef = ref; + } + get kilometerSystem(): KilometerSystem { + if (!this.data.kilometerSystem[0]) { + this.data.kilometerSystem = [new graphicData.KilometerSystem()]; + } + return this.data.kilometerSystem[0]; + } + set kilometerSystem(v: KilometerSystem) { + this.data.kilometerSystem = [new graphicData.KilometerSystem(v)]; + } + get paTrackSectionId(): number { + return this.data.paTrackSectionId; + } + set paTrackSectionId(v: number) { + this.data.paTrackSectionId = v; + } + get pbTrackSectionId(): number { + return this.data.pbTrackSectionId; + } + set pbTrackSectionId(v: number) { + this.data.pbTrackSectionId = v; + } + get pcTrackSectionId(): number { + return this.data.pcTrackSectionId; + } + set pcTrackSectionId(v: number) { + this.data.pcTrackSectionId = v; + } + get switchMachineType(): graphicData.Turnout.SwitchMachineType { + return this.data.switchMachineType; + } + set switchMachineType(v: graphicData.Turnout.SwitchMachineType) { + this.data.switchMachineType = v; + } + get centralizedStations(): number[] { + return this.data.centralizedStations; + } + set centralizedStations(v: number[]) { + this.data.centralizedStations = v; + } + clone(): TurnoutData { + return new TurnoutData(this.data.cloneMessage()); + } + copyFrom(data: TurnoutData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: TurnoutData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} + +export class TurnoutStates extends GraphicStateBase implements ITurnoutState { + constructor(proto?: state.SwitchState) { + let states; + if (proto) { + states = proto; + } else { + states = new state.SwitchState(); + } + super(states, Turnout.Type); + } + get code(): string { + return this.states.id + ''; + } + get id(): number { + return this.states.id; + } + set id(id: number) { + this.states.id = id; + } + get normal(): boolean { + return this.states.normal; + } + set normal(normal: boolean) { + this.states.normal = normal; + } + get reverse(): boolean { + return this.states.reverse; + } + set reverse(reverse: boolean) { + this.states.reverse = reverse; + } + get dw(): boolean { + return this.states.dw; + } + set dw(dw: boolean) { + this.states.dw = dw; + } + get fw(): boolean { + return this.states.fw; + } + set fw(v: boolean) { + this.states.fw = v; + } + get param(): request.PointsParam { + return this.states.param; + } + set param(param: request.PointsParam) { + this.states.param = param; + } + get qdc(): boolean { + return this.states.qdc; + } + set qdc(v: boolean) { + this.states.qdc = v; + } + get qfc(): boolean { + return this.states.qfc; + } + set qfc(v: boolean) { + this.states.qfc = v; + } + get qyc(): boolean { + return this.states.qyc; + } + set qyc(v: boolean) { + this.states.qyc = v; + } + get dc(): boolean { + return this.states.dc; + } + set dc(v: boolean) { + this.states.dc = v; + } + get fc(): boolean { + return this.states.fc; + } + set fc(v: boolean) { + this.states.fc = v; + } + get yc(): boolean { + return this.states.yc; + } + set yc(v: boolean) { + this.states.yc = v; + } + get occupied(): boolean { + return this.states.occupied; + } + set occupied(v: boolean) { + this.states.occupied = v; + } + get states(): state.SwitchState { + return this.getState(); + } + clone(): TurnoutStates { + return new TurnoutStates(this.states.cloneMessage()); + } + copyFrom(data: GraphicStateBase): void { + pb_1.Message.copyInto(data._state, this._state); + } + eq(data: GraphicStateBase): boolean { + return pb_1.Message.equals(this._state, data._state); + } +} diff --git a/src/drawApp/iscsApp.ts b/src/drawApp/iscsApp.ts index 11ff46e..2538171 100644 --- a/src/drawApp/iscsApp.ts +++ b/src/drawApp/iscsApp.ts @@ -17,22 +17,160 @@ import { saveDrawToServer, handlerNoEditCommonData, } from './commonApp'; -import { CCTVButtonData } from './graphics/CCTV/CCTVButtonInteraction'; -import { CCTVButtonDraw } from 'src/graphics/CCTV/cctvButton/CCTVButtonDrawAssistant'; -import { - CCTVButton, - CCTVButtonTemplate, -} from 'src/graphics/CCTV/cctvButton/CCTVButton'; import { useDrawStore } from 'src/stores/draw-store'; import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; import { getDraft } from 'src/api/DraftApi'; -import { getJwt } from 'src/api/UserApi'; import { fromUint8Array, toUint8Array } from 'js-base64'; import { getWebsocketUrl } from 'src/configs/UrlManage'; import { sync_data_message } from 'src/protos/sync_data_message'; import { useAuthStore } from 'src/stores/auth-store'; import { common } from 'src/protos/common'; +import { + FasFailureControlHost, + FasFailureControlHostTemplate, +} from 'src/graphics/FAS/fireFailureControlHost/FasFailureControlHost'; +import { FasFailureControlHostData } from './graphics/FAS/FasFailureControlHostInteraction'; +import { FasFailureControlHostDraw } from 'src/graphics/FAS/fireFailureControlHost/FasFailureContorlHostAssistant'; +import { FasAlarm, FasAlarmTemplate } from 'src/graphics/FAS/fasAlarm/FasAlarm'; +import { FasAlarmData } from './graphics/FAS/FasAlarmInteraction'; +import { FasAlarmDraw } from 'src/graphics/FAS/fasAlarm/FasAlarmAssistant'; +import { + ManualAlarmButton, + ManualAlarmButtonTemplate, +} from 'src/graphics/FAS/manualAlarmButton/ManualAlarmButton'; +import { ManualAlarmButtonData } from './graphics/FAS/ManualAlarmButtonInteraction'; +import { ManualAlarmButtonDraw } from 'src/graphics/FAS/manualAlarmButton/ManualAlarmButtonAssistant'; +import { + SmokeDetector, + SmokeDetectorTemplate, +} from 'src/graphics/FAS/smokeDetector/SmokeDetector'; +import { SmokeDetectorData } from './graphics/FAS/SmokeDetectorInteraction'; +import { SmokeDetectorDraw } from 'src/graphics/FAS/smokeDetector/SmokeDetectorAssistant'; +import { + TemperatureDetector, + TemperatureDetectorTemplate, +} from 'src/graphics/FAS/temperatureDetector/TemperatureDetector'; +import { TemperatureDetectorData } from './graphics/FAS/TemperatureDetectorInteraction'; +import { TemperatureDetectorDraw } from 'src/graphics/FAS/temperatureDetector/TemperatureDetectorAssistant'; +import { + FireShutter, + FireShutterTemplate, +} from 'src/graphics/FAS/fireShutter/FireShutter'; +import { FireShutterData } from './graphics/FAS/FireShutterInteraction'; +import { FireShutterDraw } from 'src/graphics/FAS/fireShutter/FireShutterAssistant'; +import { EscalatorDraw } from 'src/graphics/BAS/escalator/EscalatorDrawAssistant'; +import { + Escalator, + EscalatorTemplate, +} from 'src/graphics/BAS/escalator/Escalator'; +import { EscalatorData } from './graphics/BAS/EscalatorInteraction'; +import { + VerticalElevator, + VerticalElevatorTemplate, +} from 'src/graphics/BAS/verticalElevator/VerticalElevator'; +import { VerticalElevatorData } from './graphics/BAS/VerticalElevatorInteraction'; +import { VerticalElevatorDraw } from 'src/graphics/BAS/verticalElevator/VerticalElevatorDrawAssistant'; +import { FirePump, FirePumpTemplate } from 'src/graphics/FAS/firePump/FirePump'; +import { FirePumpDraw } from 'src/graphics/FAS/firePump/FirePumpAssistant'; +import { FirePumpData } from './graphics/FAS/FirePumpInteraction'; +import { SprayPumpDraw } from 'src/graphics/FAS/sprayPump/SprayPumpAssistant'; +import { + SprayPump, + SprayPumpTemplate, +} from 'src/graphics/FAS/sprayPump/SprayPump'; +import { SprayPumpData } from './graphics/FAS/SprayPumpInteraction'; +import { StabilizedPressurePumpData } from './graphics/FAS/StabilizedPressurePumpInteraction'; +import { StabilizedPressurePumpDraw } from 'src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePumpAssistant'; +import { + StabilizedPressurePump, + StabilizedPressurePumpTemplate, +} from 'src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump'; +import { AcsDraw } from 'src/graphics/FAS/acs/AcsAssistant'; +import { Acs, AcsTemplate } from 'src/graphics/FAS/acs/Acs'; +import { AcsData } from './graphics/FAS/AcsInteraction'; +import { AfcDraw } from 'src/graphics/FAS/afc/AfcAssistant'; +import { Afc, AfcTemplate } from 'src/graphics/FAS/afc/Afc'; +import { AfcData } from './graphics/FAS/AfcInteraction'; +import { NonFirePowerSupplyDraw } from 'src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupplyAssistant'; +import { + NonFirePowerSupply, + NonFirePowerSupplyTemplate, +} from 'src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupply'; +import { NonFirePowerSupplyData } from './graphics/FAS/NonFirePowerSupplyInteraction'; +import { WaterFlowIndicatorDraw } from 'src/graphics/FAS/waterFlowIndicator/WaterFlowIndicatorAssistant'; +import { + WaterFlowIndicator, + WaterFlowIndicatorTemplate, +} from 'src/graphics/FAS/waterFlowIndicator/WaterFlowIndicator'; +import { WaterFlowIndicatorData } from './graphics/FAS/WaterFlowIndicatorInteraction'; +import { SignalButterflyValveDraw } from 'src/graphics/FAS/signalButterflyValve/SignalButterflyValveAssistant'; +import { + SignalButterflyValve, + SignalButterflyValveTemplate, +} from 'src/graphics/FAS/signalButterflyValve/SignalButterflyValve'; +import { SignalButterflyValveData } from './graphics/FAS/SignalButterflyValveInteraction'; +import { PressureSwitchDraw } from 'src/graphics/FAS/pressureSwitch/PressureSwitchAssistant'; +import { + PressureSwitch, + PressureSwitchTemplate, +} from 'src/graphics/FAS/pressureSwitch/PressureSwitch'; +import { PressureSwitchData } from './graphics/FAS/PressureSwitchInteraction'; +import { FaultValveDraw } from 'src/graphics/FAS/faultValve/FaultValveAssistant'; +import { + FaultValve, + FaultValveTemplate, +} from 'src/graphics/FAS/faultValve/FaultValve'; +import { FaultValveData } from './graphics/FAS/FaultValveInteraction'; +import { StartPumpButtonDraw } from 'src/graphics/FAS/startPumpButton/StartPumpButtonAssistant'; +import { + StartPumpButton, + StartPumpButtonTemplate, +} from 'src/graphics/FAS/startPumpButton/StartPumpButton'; +import { StartPumpButtonData } from './graphics/FAS/StartPumpButtonInteraction'; +import { TemperatureCableDraw } from 'src/graphics/FAS/temperatureCable/TemperatureCableAssistant'; +import { + TemperatureCable, + TemperatureCableTemplate, +} from 'src/graphics/FAS/temperatureCable/TemperatureCable'; +import { TemperatureCableData } from './graphics/FAS/TemperatureCableInteraction'; +import { EmergencyLightingDraw } from 'src/graphics/FAS/emergencyLighting/EmergencyLightingAssistant'; +import { + EmergencyLighting, + EmergencyLightingTemplate, +} from 'src/graphics/FAS/emergencyLighting/EmergencyLighting'; +import { EmergencyLightingData } from './graphics/FAS/EmergencyLightingInteraction'; +import { ElevatorLiftToTopDraw } from 'src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTopAssistant'; +import { + ElevatorLiftToTop, + ElevatorLiftToTopTemplate, +} from 'src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTop'; +import { ElevatorLiftToTopData } from './graphics/FAS/ElevatorLiftToTopInteraction'; +import { ElectricButterflyValveDraw } from 'src/graphics/FAS/electricButterflyValve/ElectricButterflyValveAssistant'; +import { + ElectricButterflyValve, + ElectricButterflyValveTemplate, +} from 'src/graphics/FAS/electricButterflyValve/ElectricButterflyValve'; +import { ElectricButterflyValveData } from './graphics/FAS/ElectricButterflyValveInteraction'; +import { FireValveDraw } from 'src/graphics/FAS/fireValve/FireValveAssistant'; +import { + FireValve, + FireValveTemplate, +} from 'src/graphics/FAS/fireValve/FireValve'; +import { FireValveData } from './graphics/FAS/FireValveInteraction'; +import { ElectricFireExtinguishingValveData } from './graphics/FAS/ElectricFireExtinguishingValveInteraction'; +import { ElectricFireExtinguishingValveDraw } from 'src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValveAssistant'; +import { + ElectricFireExtinguishingValve, + ElectricFireExtinguishingValveTemplate, +} from 'src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValve'; +import { FireIntercommunicationSignalData } from './graphics/FAS/FireIntercommunicationSignalInteraction'; +import { FireIntercommunicationSignalDraw } from 'src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignalAssistant'; +import { + FireIntercommunicationSignal, + FireIntercommunicationSignalTemplate, +} from 'src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignal'; // import { getOnlyToken } from 'src/configs/TokenManage'; +import { getJwtToken } from 'src/configs/TokenManage'; let drawApp: IDrawApp | null = null; @@ -56,17 +194,95 @@ export function initIscsDrawApp(): IDrawApp { dataLoader: loadDrawDatas, isSupportDeletion: isSupportDeletion, }); - getJwt().then((res) => { - drawApp.enableWsMassaging({ - engine: ClientEngine.MQTT, - wsUrl: `${getWebsocketUrl()}`, - token: res.getJwt as string, - }); + drawApp.enableWsMassaging({ + engine: ClientEngine.MQTT, + wsUrl: `${getWebsocketUrl()}`, + token: getJwtToken() as string, }); const app = drawApp; initCommonDrawApp(app); - new CCTVButtonDraw(app, new CCTVButtonTemplate(new CCTVButtonData())); + new EscalatorDraw(app, new EscalatorTemplate(new EscalatorData())); + new VerticalElevatorDraw( + app, + new VerticalElevatorTemplate(new VerticalElevatorData()) + ); + new FasFailureControlHostDraw( + app, + new FasFailureControlHostTemplate(new FasFailureControlHostData()) + ); + new FasAlarmDraw(app, new FasAlarmTemplate(new FasAlarmData())); + new ManualAlarmButtonDraw( + app, + new ManualAlarmButtonTemplate(new ManualAlarmButtonData()) + ); + new SmokeDetectorDraw( + app, + new SmokeDetectorTemplate(new SmokeDetectorData()) + ); + new TemperatureDetectorDraw( + app, + new TemperatureDetectorTemplate(new TemperatureDetectorData()) + ); + new FireShutterDraw(app, new FireShutterTemplate(new FireShutterData())); + new FirePumpDraw(app, new FirePumpTemplate(new FirePumpData())); + new SprayPumpDraw(app, new SprayPumpTemplate(new SprayPumpData())); + new StabilizedPressurePumpDraw( + app, + new StabilizedPressurePumpTemplate(new StabilizedPressurePumpData()) + ); + new AcsDraw(app, new AcsTemplate(new AcsData())); + new AfcDraw(app, new AfcTemplate(new AfcData())); + new NonFirePowerSupplyDraw( + app, + new NonFirePowerSupplyTemplate(new NonFirePowerSupplyData()) + ); + new WaterFlowIndicatorDraw( + app, + new WaterFlowIndicatorTemplate(new WaterFlowIndicatorData()) + ); + new SignalButterflyValveDraw( + app, + new SignalButterflyValveTemplate(new SignalButterflyValveData()) + ); + new PressureSwitchDraw( + app, + new PressureSwitchTemplate(new PressureSwitchData()) + ); + new FaultValveDraw(app, new FaultValveTemplate(new FaultValveData())); + new StartPumpButtonDraw( + app, + new StartPumpButtonTemplate(new StartPumpButtonData()) + ); + new TemperatureCableDraw( + app, + new TemperatureCableTemplate(new TemperatureCableData()) + ); + new EmergencyLightingDraw( + app, + new EmergencyLightingTemplate(new EmergencyLightingData()) + ); + new ElevatorLiftToTopDraw( + app, + new ElevatorLiftToTopTemplate(new ElevatorLiftToTopData()) + ); + new ElectricButterflyValveDraw( + app, + new ElectricButterflyValveTemplate(new ElectricButterflyValveData()) + ); + new FireValveDraw(app, new FireValveTemplate(new FireValveData())); + new ElectricFireExtinguishingValveDraw( + app, + new ElectricFireExtinguishingValveTemplate( + new ElectricFireExtinguishingValveData() + ) + ); + new FireIntercommunicationSignalDraw( + app, + new FireIntercommunicationSignalTemplate( + new FireIntercommunicationSignalData() + ) + ); app.addKeyboardListener( new KeyListener({ @@ -150,18 +366,19 @@ function handleSubscribe(app: IDrawApp) { console.log(fasPlatformAlarm, 'fasPlatformAlarm'); } } - } else if (syncData.submenu === '监控布局图') { + } else if (syncData.submenu === 'CCTV设备布局图') { for ( let i = 0; - i < storage.cctvOfStationControlStorages.length; + i < storage.cctvOfEquipmentLayoutStorages.length; i++ ) { - const ctvOfStationControl = storage.cctvOfStationControlStorages[i]; - if (ctvOfStationControl.stationName == syncData.station) { + const cctvOfEquipmentLayout = + storage.cctvOfEquipmentLayoutStorages[i]; + if (cctvOfEquipmentLayout.stationName == syncData.station) { syncData.datas.forEach((data) => { handlerNoEditCommonData( data, - ctvOfStationControl, + cctvOfEquipmentLayout, syncData.operationType ); }); @@ -225,25 +442,156 @@ export async function loadDrawDatas(): Promise { ) { canvasProperty = fasOfPlatformAlarm.canvas; datas = loadCommonDrawDatas(fasOfPlatformAlarm); + fasOfPlatformAlarm.fasFailureControlHosts.forEach( + (fasFailureControlHost) => { + datas.push( + new FasFailureControlHostData(fasFailureControlHost) + ); + } + ); + fasOfPlatformAlarm.fasAlarms.forEach((fasAlarm) => { + datas.push(new FasAlarmData(fasAlarm)); + }); + fasOfPlatformAlarm.manualAlarmButtons.forEach( + (manualAlarmButton) => { + datas.push(new ManualAlarmButtonData(manualAlarmButton)); + } + ); + fasOfPlatformAlarm.smokeDetectors.forEach((smokeDetector) => { + datas.push(new SmokeDetectorData(smokeDetector)); + }); + fasOfPlatformAlarm.temperatureDetectors.forEach( + (temperatureDetector) => { + datas.push(new TemperatureDetectorData(temperatureDetector)); + } + ); + fasOfPlatformAlarm.fireShutters.forEach((fireShutter) => { + datas.push(new FireShutterData(fireShutter)); + }); + fasOfPlatformAlarm.firePumps.forEach((firePump) => { + datas.push(new FirePumpData(firePump)); + }); + fasOfPlatformAlarm.sprayPumps.forEach((sprayPump) => { + datas.push(new SprayPumpData(sprayPump)); + }); + fasOfPlatformAlarm.stabilizedPressurePumps.forEach( + (stabilizedPressurePump) => { + datas.push( + new StabilizedPressurePumpData(stabilizedPressurePump) + ); + } + ); + fasOfPlatformAlarm.acs.forEach((acs) => { + datas.push(new AcsData(acs)); + }); + fasOfPlatformAlarm.afc.forEach((afc) => { + datas.push(new AfcData(afc)); + }); + fasOfPlatformAlarm.nonFirePowerSupplies.forEach( + (nonFirePowerSupply) => { + datas.push(new NonFirePowerSupplyData(nonFirePowerSupply)); + } + ); + fasOfPlatformAlarm.waterFlowIndicators.forEach( + (waterFlowIndicator) => { + datas.push(new WaterFlowIndicatorData(waterFlowIndicator)); + } + ); + fasOfPlatformAlarm.signalButterflyValves.forEach( + (signalButterflyValve) => { + datas.push(new SignalButterflyValveData(signalButterflyValve)); + } + ); + fasOfPlatformAlarm.pressureSwitches.forEach((pressureSwitch) => { + datas.push(new PressureSwitchData(pressureSwitch)); + }); + fasOfPlatformAlarm.faultValves.forEach((faultValve) => { + datas.push(new FaultValveData(faultValve)); + }); + fasOfPlatformAlarm.startPumpButtons.forEach((startPumpButton) => { + datas.push(new StartPumpButtonData(startPumpButton)); + }); + fasOfPlatformAlarm.temperatureCables.forEach((temperatureCable) => { + datas.push(new TemperatureCableData(temperatureCable)); + }); + fasOfPlatformAlarm.emergencyLightings.forEach( + (emergencyLighting) => { + datas.push(new EmergencyLightingData(emergencyLighting)); + } + ); + fasOfPlatformAlarm.elevatorLiftToTops.forEach( + (elevatorLiftToTop) => { + datas.push(new ElevatorLiftToTopData(elevatorLiftToTop)); + } + ); + fasOfPlatformAlarm.electricButterflyValves.forEach( + (electricButterflyValve) => { + datas.push( + new ElectricButterflyValveData(electricButterflyValve) + ); + } + ); + fasOfPlatformAlarm.fireValves.forEach((fireValve) => { + datas.push(new FireValveData(fireValve)); + }); + fasOfPlatformAlarm.electricFireExtinguishingValves.forEach( + (electricFireExtinguishingValve) => { + datas.push( + new ElectricFireExtinguishingValveData( + electricFireExtinguishingValve + ) + ); + } + ); + fasOfPlatformAlarm.fireIntercommunicationSignals.forEach( + (fireIntercommunicationSignal) => { + datas.push( + new FireIntercommunicationSignalData( + fireIntercommunicationSignal + ) + ); + } + ); break; } } break; - case '监控布局图': - for (let i = 0; i < storage.cctvOfStationControlStorages.length; i++) { - const ctvOfStationControl = storage.cctvOfStationControlStorages[i]; + case 'CCTV设备布局图': + for (let i = 0; i < storage.cctvOfEquipmentLayoutStorages.length; i++) { + const cctvOfEquipmentLayout = + storage.cctvOfEquipmentLayoutStorages[i]; if ( - ctvOfStationControl.stationName == + cctvOfEquipmentLayout.stationName == drawStore.selectSubmenuAndStation.station ) { - canvasProperty = ctvOfStationControl.canvas; - datas = loadCommonDrawDatas(ctvOfStationControl); - ctvOfStationControl.cctvButtons.forEach((cctvButton) => { + canvasProperty = cctvOfEquipmentLayout.canvas; + datas = loadCommonDrawDatas(cctvOfEquipmentLayout); + /* ctvOfStationControl.cctvButtons.forEach((cctvButton) => { datas.push(new CCTVButtonData(cctvButton)); + }); */ + break; + } + } + break; + case '电扶梯': + for (let i = 0; i < storage.basOfEscalatorStorages.length; i++) { + const basOfEscalator = storage.basOfEscalatorStorages[i]; + if ( + basOfEscalator.stationName == + drawStore.selectSubmenuAndStation.station + ) { + canvasProperty = basOfEscalator.canvas; + datas = loadCommonDrawDatas(basOfEscalator); + basOfEscalator.escalators.forEach((escalator) => { + datas.push(new EscalatorData(escalator)); + }); + basOfEscalator.verticalElevators.forEach((verticalElevator) => { + datas.push(new VerticalElevatorData(verticalElevator)); }); break; } } + break; default: break; } @@ -273,14 +621,28 @@ export function saveDrawDatas(app: IDrawApp) { new iscsGraphicData.FASOfPlatformAlarmStorage({ stationName: station, commonGraphicStorage: new iscsGraphicData.CommonGraphicStorage(), + partition: '设备分区一', }) ) ); } - if (!storage?.cctvOfStationControlStorages.length) { + if (!storage?.cctvOfEquipmentLayoutStorages.length) { + stationOption.forEach((station) => { + for (let layer = 0; layer < 3; layer++) { + storage?.cctvOfEquipmentLayoutStorages.push( + new iscsGraphicData.CCTVOfEquipmentLayoutStorage({ + stationName: station, + commonGraphicStorage: new iscsGraphicData.CommonGraphicStorage(), + layer, + }) + ); + } + }); + } + if (!storage?.basOfEscalatorStorages.length) { stationOption.forEach((station) => - storage?.cctvOfStationControlStorages.push( - new iscsGraphicData.CCTVOfStationControlStorage({ + storage?.basOfEscalatorStorages.push( + new iscsGraphicData.BASOfEscalatorStorage({ stationName: station, commonGraphicStorage: new iscsGraphicData.CommonGraphicStorage(), }) @@ -299,42 +661,192 @@ export function saveDrawDatas(app: IDrawApp) { fasOfPlatformAlarm = new iscsGraphicData.FASOfPlatformAlarmStorage({ stationName: drawStore.selectSubmenuAndStation.station, commonGraphicStorage: new iscsGraphicData.CommonGraphicStorage(), + partition: drawStore.selectSubmenuAndStation.partition, }); const fasStorage = saveCommonDrawDatas( app, fasOfPlatformAlarm ) as iscsGraphicData.FASOfPlatformAlarmStorage; + graphics.forEach((g) => { + if (g instanceof FasFailureControlHost) { + const fasFailureControlHostData = g.saveData(); + fasStorage.fasFailureControlHosts.push( + (fasFailureControlHostData as FasFailureControlHostData).data + ); + } else if (g instanceof FasAlarm) { + const fasAlarmData = g.saveData(); + fasStorage.fasAlarms.push((fasAlarmData as FasAlarmData).data); + } else if (g instanceof ManualAlarmButton) { + const manualAlarmButtonData = g.saveData(); + fasStorage.manualAlarmButtons.push( + (manualAlarmButtonData as ManualAlarmButtonData).data + ); + } else if (g instanceof SmokeDetector) { + const smokeDetectorData = g.saveData(); + fasStorage.smokeDetectors.push( + (smokeDetectorData as SmokeDetectorData).data + ); + } else if (g instanceof TemperatureDetector) { + const temperatureDetectorData = g.saveData(); + fasStorage.temperatureDetectors.push( + (temperatureDetectorData as TemperatureDetectorData).data + ); + } else if (g instanceof FireShutter) { + const fireShutterData = g.saveData(); + fasStorage.fireShutters.push( + (fireShutterData as FireShutterData).data + ); + } else if (g instanceof FirePump) { + const firePumpData = g.saveData(); + fasStorage.firePumps.push((firePumpData as FirePumpData).data); + } else if (g instanceof SprayPump) { + const sprayPumpData = g.saveData(); + fasStorage.sprayPumps.push((sprayPumpData as SprayPumpData).data); + } else if (g instanceof StabilizedPressurePump) { + const stabilizedPressurePumpData = g.saveData(); + fasStorage.stabilizedPressurePumps.push( + (stabilizedPressurePumpData as StabilizedPressurePumpData).data + ); + } else if (g instanceof Acs) { + const acsData = g.saveData(); + fasStorage.acs.push((acsData as AcsData).data); + } else if (g instanceof Afc) { + const afcData = g.saveData(); + fasStorage.afc.push((afcData as AfcData).data); + } else if (g instanceof NonFirePowerSupply) { + const nonFirePowerSupplyData = g.saveData(); + fasStorage.nonFirePowerSupplies.push( + (nonFirePowerSupplyData as NonFirePowerSupplyData).data + ); + } else if (g instanceof WaterFlowIndicator) { + const waterFlowIndicatorData = g.saveData(); + fasStorage.waterFlowIndicators.push( + (waterFlowIndicatorData as WaterFlowIndicatorData).data + ); + } else if (g instanceof SignalButterflyValve) { + const signalButterflyValveData = g.saveData(); + fasStorage.signalButterflyValves.push( + (signalButterflyValveData as SignalButterflyValveData).data + ); + } else if (g instanceof PressureSwitch) { + const pressureSwitchData = g.saveData(); + fasStorage.pressureSwitches.push( + (pressureSwitchData as PressureSwitchData).data + ); + } else if (g instanceof FaultValve) { + const faultValveData = g.saveData(); + fasStorage.faultValves.push( + (faultValveData as FaultValveData).data + ); + } else if (g instanceof StartPumpButton) { + const startPumpButtonData = g.saveData(); + fasStorage.startPumpButtons.push( + (startPumpButtonData as StartPumpButtonData).data + ); + } else if (g instanceof TemperatureCable) { + const temperatureCableData = g.saveData(); + fasStorage.temperatureCables.push( + (temperatureCableData as TemperatureCableData).data + ); + } else if (g instanceof EmergencyLighting) { + const emergencyLightingData = g.saveData(); + fasStorage.emergencyLightings.push( + (emergencyLightingData as EmergencyLightingData).data + ); + } else if (g instanceof ElevatorLiftToTop) { + const elevatorLiftToTopData = g.saveData(); + fasStorage.elevatorLiftToTops.push( + (elevatorLiftToTopData as ElevatorLiftToTopData).data + ); + } else if (g instanceof ElectricButterflyValve) { + const electricButterflyValveData = g.saveData(); + fasStorage.electricButterflyValves.push( + (electricButterflyValveData as ElectricButterflyValveData).data + ); + } else if (g instanceof FireValve) { + const fireValveData = g.saveData(); + fasStorage.fireValves.push((fireValveData as FireValveData).data); + } else if (g instanceof ElectricFireExtinguishingValve) { + const electricFireExtinguishingValveData = g.saveData(); + fasStorage.electricFireExtinguishingValves.push( + ( + electricFireExtinguishingValveData as ElectricFireExtinguishingValveData + ).data + ); + } else if (g instanceof FireIntercommunicationSignal) { + const fireIntercommunicationSignalData = g.saveData(); + fasStorage.fireIntercommunicationSignals.push( + ( + fireIntercommunicationSignalData as FireIntercommunicationSignalData + ).data + ); + } + }); storage.fasOfPlatformAlarmStorages[i] = fasStorage; break; } } break; - case '监控布局图': - for (let i = 0; i < storage.cctvOfStationControlStorages.length; i++) { - let cctvOfStationControl = storage.cctvOfStationControlStorages[i]; + case 'CCTV设备布局图': + for (let i = 0; i < storage.cctvOfEquipmentLayoutStorages.length; i++) { + let cctvOfEquipmentLayout = storage.cctvOfEquipmentLayoutStorages[i]; if ( - cctvOfStationControl.stationName == + cctvOfEquipmentLayout.stationName == drawStore.selectSubmenuAndStation.station ) { - cctvOfStationControl = - new iscsGraphicData.CCTVOfStationControlStorage({ + cctvOfEquipmentLayout = + new iscsGraphicData.CCTVOfEquipmentLayoutStorage({ stationName: drawStore.selectSubmenuAndStation.station, commonGraphicStorage: new iscsGraphicData.CommonGraphicStorage(), }); const cctvStorage = saveCommonDrawDatas( app, - cctvOfStationControl - ) as iscsGraphicData.CCTVOfStationControlStorage; + cctvOfEquipmentLayout + ) as iscsGraphicData.CCTVOfEquipmentLayoutStorage; - graphics.forEach((g) => { + /* graphics.forEach((g) => { if (g instanceof CCTVButton) { const cctvButtonData = g.saveData(); cctvStorage.cctvButtons.push( (cctvButtonData as CCTVButtonData).data ); } + }); */ + storage.cctvOfEquipmentLayoutStorages[i] = cctvStorage; + break; + } + } + break; + case '电扶梯': + for (let i = 0; i < storage.basOfEscalatorStorages.length; i++) { + let basOfEscalator = storage.basOfEscalatorStorages[i]; + if ( + basOfEscalator.stationName == + drawStore.selectSubmenuAndStation.station + ) { + basOfEscalator = new iscsGraphicData.BASOfEscalatorStorage({ + stationName: drawStore.selectSubmenuAndStation.station, + commonGraphicStorage: new iscsGraphicData.CommonGraphicStorage(), }); - storage.cctvOfStationControlStorages[i] = cctvStorage; + const basOfEscalatorStorage = saveCommonDrawDatas( + app, + basOfEscalator + ) as iscsGraphicData.BASOfEscalatorStorage; + + graphics.forEach((g) => { + if (g instanceof Escalator) { + const escalatorData = g.saveData(); + basOfEscalatorStorage.escalators.push( + (escalatorData as EscalatorData).data + ); + } else if (g instanceof VerticalElevator) { + const verticalElevatorData = g.saveData(); + basOfEscalatorStorage.verticalElevators.push( + (verticalElevatorData as VerticalElevatorData).data + ); + } + }); + storage.basOfEscalatorStorages[i] = basOfEscalatorStorage; break; } } diff --git a/src/graphics/BAS/escalator/Escalator.ts b/src/graphics/BAS/escalator/Escalator.ts new file mode 100644 index 0000000..8d1fc89 --- /dev/null +++ b/src/graphics/BAS/escalator/Escalator.ts @@ -0,0 +1,74 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import tcc_Light_Assets from './escalator-spritesheet.png'; +import tcc_Light_JSON from './escalator-data.json'; + +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; + +interface EscalatorTextures { + redOn: Texture; + redOff: Texture; + greenOn: Texture; + greenOff: Texture; + blueOn: Texture; + blueOff: Texture; +} + +export interface IescalatorData extends GraphicData { + get code(): string; + set code(v: string); +} + +export class Escalator extends JlGraphic { + static Type = 'Escalator'; + _escalator: Sprite; + escalatorTextures: EscalatorTextures; + __state = 0; + + constructor(escalatorTextures: EscalatorTextures) { + super(Escalator.Type); + this.escalatorTextures = escalatorTextures; + this._escalator = new Sprite(); + this._escalator.texture = this.escalatorTextures.greenOff; + this._escalator.anchor.set(0.5); + this.addChild(this._escalator); + } + get code(): string { + return this.datas.code; + } + get datas(): IescalatorData { + return this.getDatas(); + } + doRepaint(): void { + this._escalator.texture = this.escalatorTextures.greenOn; + } +} + +export class EscalatorTemplate extends JlGraphicTemplate { + escalatorTextures?: EscalatorTextures; + constructor(dataTemplate: IescalatorData) { + super(Escalator.Type, { dataTemplate }); + this.loadAssets(); + } + new(): Escalator { + if (this.escalatorTextures) { + const g = new Escalator(this.escalatorTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(tcc_Light_Assets); + const escalatorSheet = new Spritesheet(texture, tcc_Light_JSON); + const result = await escalatorSheet.parse(); + this.escalatorTextures = { + redOff: result['red-off.png'], + redOn: result['red-on.png'], + blueOff: result['blue-off.png'], + blueOn: result['blue-on.png'], + greenOff: result['green-off.png'], + greenOn: result['green-on.png'], + }; + return this.escalatorTextures as EscalatorTextures; + } +} diff --git a/src/graphics/BAS/escalator/EscalatorDrawAssistant.ts b/src/graphics/BAS/escalator/EscalatorDrawAssistant.ts new file mode 100644 index 0000000..c70efbb --- /dev/null +++ b/src/graphics/BAS/escalator/EscalatorDrawAssistant.ts @@ -0,0 +1,117 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { IescalatorData, Escalator, EscalatorTemplate } from './Escalator'; + +export class EscalatorDraw extends GraphicDrawAssistant< + EscalatorTemplate, + IescalatorData +> { + _escalator: Escalator | null = null; + constructor(app: IDrawApp, template: EscalatorTemplate) { + super(app, template, 'escalator', '自动扶梯'); + EscalatorInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._escalator) { + this._escalator = this.graphicTemplate.new(); + this.container.addChild(this._escalator); + } + } + + public get escalator(): Escalator { + if (!this._escalator) { + this._escalator = this.graphicTemplate.new(); + this.container.addChild(this._escalator); + } + return this._escalator; + } + + redraw(cp: Point): void { + this.escalator.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.escalator.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IescalatorData): boolean { + data.transform = this.escalator.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param escalator + */ +function buildAbsorbablePositions(escalator: Escalator): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const escalators = escalator.queryStore.queryByType( + Escalator.Type + ); + const canvas = escalator.getCanvas(); + escalators.forEach((item) => { + if (item.id === escalator.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class EscalatorInteraction extends GraphicInteractionPlugin { + static Name = 'escalator_transform'; + constructor(app: IDrawApp) { + super(EscalatorInteraction.Name, app); + } + static init(app: IDrawApp) { + return new EscalatorInteraction(app); + } + filter(...grahpics: JlGraphic[]): Escalator[] | undefined { + return grahpics + .filter((g) => g.type === Escalator.Type) + .map((g) => g as Escalator); + } + bind(g: Escalator): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: Escalator): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const escalator = target.getGraphic() as Escalator; + escalator.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(escalator), + }); + } +} diff --git a/src/graphics/BAS/escalator/escalator-data.json b/src/graphics/BAS/escalator/escalator-data.json new file mode 100644 index 0000000..29b4ddc --- /dev/null +++ b/src/graphics/BAS/escalator/escalator-data.json @@ -0,0 +1,29 @@ +{ + "frames": { + "green-off.png": { + "frame": { "x": 0, "y": 0, "w": 45, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 46 }, + "sourceSize": { "w": 46, "h": 46 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "green-on.png": { + "frame": { "x": 45, "y": 0, "w": 45, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 46, "h": 46 }, + "sourceSize": { "w": 46, "h": 64 }, + "anchor": { "x": 0.5, "y": 0.5 } + } + }, + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.1", + "image": "tcc-light.png", + "format": "RGBA8888", + "size": { "w": 271, "h": 46 }, + "scale": "0.5", + "smartupdate": "$TexturePacker:SmartUpdate:e7620bd2d73cc0b3e2deea9704e7eefc:f129a1d9e4b9ba57720b3861c22b155b:eb2d421f7759984b7713aa4aa5354134$" + } +} diff --git a/src/graphics/BAS/escalator/escalator-spritesheet.png b/src/graphics/BAS/escalator/escalator-spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..81518d63c2b4a67d6fda343741c4fa2756103316 GIT binary patch literal 14013 zcmd6O1z42bzOT|bgft`FIYSPuAkrb-Fu;H)Far!FB_$vsA}J+^fKme}N|$tlbW3-a z2;9N%``mk6u>~`Y@;jQb>%^R=NXwZW;2R$RCk%qdY4ctipY74i933xdn z(9}0>NXvO4pf-ct>Cg~-^@{6w|dVKv@kcH_N3G%TF%iU{%Ohy{oObT#U z7?YR)h~EYT5@HgU5CDsbh(I8GOhOizq1?bUmWhi z+-zJO5J(5OGt)Iks5RUjDZ_%+^bZr95Wm?vyZz}Vw8I3wpa?;*0O;DJUxc)ZTqLxZhGDbn4k{K z4esu015@-sOJw~^F*l?R>~F65H;?aL2!}qy3j|OhQ5eASSMBxPTyFh=7v-7z7sj6Fv|@ zFhr8c4kBbHA}lN}2IgjB;xcq_wuO7TabLUWPu8$|P$W!-1&5 zAd(=^AEX*+5ZgkL(0?Qr2I+w$B!wj;g~a}W7;fue=lx%j+S*9k!Cjr8=q+||g4)9b z5zh9%q-khKsyMqLq0Tlim3uNQXjKIq9Bd^aBG=J@))68M6X%xziHPt^K*gc_LgFw9 z2n-}5h7O;<*58BMxL?EXdi@`fXbZPN^Z31Qk`M_A5pggK$`6JJ+3*X2L`3 z5D1+Q(AS^y#{b3q-=_7Q9ndZoVqv;QmgFz_y67Z_RzOTtR9N)S=h_ZlFh`?%4rs5r z{Zd2}{MV9SQ^x;c>N@LPN3*1|gBu#3-hbvLU6{+CBS#0OUjZx$wfVycn`j<^56M*g`~HV>iB z_Aqo26lD3oH`^L*DFlL!R}nD@bgV(q;cG2o2flWIwWtl$4g?dn`{!o=lQi=`#%vq7 zvj@!e?_iC9x2P59<=lR}vf>n&Po+kLHf+1_|5umt5IE_v_sr-^8j@8OW7{8S?kV8^y#?+wo< ze)=U(HE|>Mm)JJfPgj0l^3t1ryje41EDF4EC|U4b%Q{g#C$NP^{<2Z7-IIb^Vbq-i z8GH|fXV@}EP0H2}N zg>KO$e{X3GXPyVuZWK{9&*Aik4{kAKNN95M-=az~WvkbBdUDJ;`-w^(*|8Ts=nkooJD54^)=iM&C2Ksb3ReZtRJS{x|CyI|JieS zZ*)UJ^qC+zo)kB-`O!CCP}@Sr_|da0&&C4 zg@$`4e7IY}K;-I|iRflJ&mZb#Vj<0eKUE-!^*J943tR&AYGZ(&g|a<&`%;7J!fxPf zV_0a_x?!xQll_eAWlDdSfg2Ig*BSLZX6JdN+8v}iF#D|y86{;iW1B1|8(Wr<+5C*x zC#CftBObE`yX~^C+?bpwk70GuwQD<8@bx~J)`Tep;XtctxLHj*%|QBKV)VE|#C?0a zI%`5_UK?@H$?NqQ%CkMJ(K0>p{);ZJgixhnK?E+biPu#1-pLE4K7$tkQB_LcrLD~8 zfcxfJ8C#b#Cv^4<3Kxe8`I%3yQhaw`bt3|>g4+eFVyOMLQpWdNeBU=MnB^8#U(ybk z-!=qvIVr~wpr#Uu`i#Se1u#}21aG#O8ai!&GeS$K@TL%jwb#2JL;^n|kJ~>6*QK%; zND-noL18c@3*YpVd#$!q*jQ#ie|Dz`qsq${T4rV#00002iClcq_JXmk)TZs!28mR^ z8cq~obyzcaajF?u*GIAHJ?L3CgaG+* zvrJ6A^T@3B2@^H#BrzmORKM>TbHlxZO$FoIP${$i(^d+}T;<*pw&$x-`avB9r<=L8 z-;h+FWgpDYi@h$|_Pr&a>d$2)B0o@e^Ht&NH;&Upuv9y)akHg9${zYRb|XR9_Oqe- zGvcvy(wZD8=d@KFvm@+?Lezp4kf&jWkGWe-&&pJo*dXBph?~ON{xzQITP)Bqx%Gg5 zRbrH@DFJ6fs-MsR#uIzRehHN)V{S%T87&!`)TS#F1)fU^tU8Z=USP_}`TYwZA>TJTe*SNr_1uZU-O zbem6K$zCk1zybJdUt)@PX*d6QGp8s}wr~;gIiwlE99GN+_>KoqgzkIwA6Drh1swge z>-Zn$$Pd44fDVTld+_%kSK&0jks2dCA~pRk+xo1X#0s$|hO7xg9jbGFEc~iHqx*bR zno$*(L7)RSm}q**xkOfx_XK=%M9F2$lI`n!CpV&|?1mDrT~py5e5s+(Lqfb#fqPFs zQHS<>P=4PEwvE5M1rHZcK`-v@xO;--tz3ao^&Y4m84A&Pf7Z0#-9Sd3*#CWnI$SqT zvvGKs5)1}&@$krNXb{uU)4MEnQeH|63*T~aals=d4y~@1Qdd`>TU->Gmo!8Yb$h6O zS|6u6;EAGv_zstXHE;UtD}qYM=Mb#8k&kYw6X5kb>>JT5T3EdypOJVQrFi@ZnQ5=_ zrB_Bq=D_5u4-Sr+-hig|L(P?4hMNl~TfobSuKD_sfl@8kOYXHR3(+uBtb|@Qplc9B zB$r$BOYfOsrn>Qp+_&sa#4VNrhHef7P1sc1OjHRp z#XDSyRiES!?f^K9D>V6}JEbJ;jGt}TuRX!rE^)Qy6{2PK2IeZdLd=S9p08J;_|l_l zD={|Jmr>xf;0H{&7lc5h)~f-ATh^uTZai7x=p|LLkL@+mkbGRNEMGv3g@Xgw*zd?G zr&=rAlV9u3$=w@SoYTeu1f)rOlXGgO&CP3@nRN%h&C0r|udm@f+0ba-_H9-@@E3-t2uUwWd8S0tn2;NAa{9m5_7g3&nN7>MA_AGN7sVn_wyU2bnj6XKCkS(#UDa-9$Ca+|-r3+g4j&8(B-GUCJY_ zCKLEl^0(NS-hRge#tlzaSrcsXE;m)_5uX!=jA;s7R#^$j!*3$BREq5@LtDbI`m+)& zSGvE_u&facrf5AC8sq0214ELj1_;`b#kP_Kb=r~#1)f{sBQ3GX{x|>}3>*@w?D+Wj z-MRdd5+xXneSd#HHZ3hGJRI-z>}-B>yu9W!6bfzhVdyqZ0Z~`IgLRZH)_PXls}K4V zhy{=nbySUAks*qF^yL0JHmHEq+Oq;EHhA(Q>$%ZdQOIYl0;`+e!1C_lz1C805FkSq zD(UGdCIG)x5&+M)C7E`ymJ9QHeD=~pc7r%{tm)2}`Gt8r^ zST;fdUq;RQup4QM&!N8ZapJ{{(Uz!mw(?x;=k+GDJTb>`FA|OvteBb|sKp^GfE42K z&Nndn0plIHT@C~D)n+M9Q&fKzj$0Ao8|&AESsH!yI4{2Cs)aueSMV_1u0K+{AIa(g zuLISlZoS#P|F8?HOB3c7DnF+8u%W^gz}NK+^}=k3_^|dRN#(`jGW|J$)g1d*I+IVI z%q37Ddr{h~wU)gXWY-|38S)+%PS@bBDPtDwC=OaH{BaH7!XFc}!DZho62W@^f8<`%T_#hW)wUQeDh_4Gt*rA>^DHH?qbQm>sy^hFL-XGh_>5_XdvGdWCg{jwLA0h3keq2q73T(`!~0bSE(6u*q7W zs8P(`ks_WXU)BikP2UoIa@)FA3%7;fAv*#YD_y*_8>Si2wim#qewNX&XNu8wjukJp z2sRfa%a+qp-X$fM#>$UM2!V|9a&S1R6h5i39S@y9-}ey51EweM48~|+;k{Cu-DL># z9si{pA~v&6)A%^=33#-WQaENrez*ohp1_zQefz@A3-UG9#_(I} zSjsK|aDRlQVtgauDDoL~*ybd{pxm%8I;!KrQ~fsV98e%@CT$kSCXan{T2w!qAw#Rb zd?7>t43QB8Jg$+TiKFovti+|=Q~9wSvg_QMkmfRdpDq2aUZp$Q|+?SZOcv z!!dA${g+ixAzYZaT~1MftWr|+mzS5jySsPv^e8exuu4)6zLiGu4>L2eUub}$+a&IG z=HpadUo|qFq6UL1W|4d+`Ylzq5}Ujnh;LDW!SYRAEHq)$5>fSoFSEy#-)rxMSWqfs~bfF`|EGTt8cQTT&_B7j>NO#>&_^ZXT8m!==ht z{hFApH0GHSxFCq)0%Er18Tmu;ULRv>d-&nK8+rj=`^L(Z@sre5lY|LXjZbz#AKCZf z(#GqwrS0x$dN_mTN0Pi#VO30nq(s(Q(PPUWFdJ1CPdG&CT>x=W4ewTaED&pqPU*f8 z-&6fij-BJw1YR3>F_1Rx>1?A>iA6rUf$k&S-6v;9qsLNjSoys&u>A>%F6JFW~9x= zMDw(&=RZ!;rb%pQq9kxn+*Vu~hjv`75K{>?-z$i(@Ta$@)-7Cj3?{Fh+FQeVnai=7 z;iF33jXe8w9wF}=GPVocQ%LO$X&_h-4rZs%e~iEEQ*65r?kFRM zXRNnYe3>PM_`guV4hWRMR61rv3GdzFlNG-~x#5B5_>9T(3pGz$)f?+cOxUDF{`k>+ z!mW$3xqu=uou3&qav^OvYBsA+RGx?vu?}0&WJS3TyqedCooUUJsmzTn$`+Z9YFLL% z2w<3iL&hv~p0ZL7K`pbe4|Ld{L$N`J@!wSWJhSvCG}fvDwnJHU-iIm)GSQ4{k{r!hmLk=k{+caz#$i7i{p#IsYiAHu5rF5k;dZm z7_vgDbeNq72rOJfn;!&);bSU2!@J+u2|CPt7X8u z>qGlwy1C)!4;34UgI+T$BR{a8bPBj(!u{Jg*z{HM0uxQ+!gN8R0w1ep4wx zAS_WG1MhAw|5Y@6qpQ}B{;}|h`0&ebxr|jN0p6C6-G*Nm&(QNMygvxtJf}L)d?8H< zqz#ON5zfdCMLO*Sb6pkNfuVc{^$?eGC>% z9_iP`h!Djhan_=)Lx*-;RMTe8>WpC78>AeclyuN^6U~q}n&=qU>gQY(DLc+2JXSfW^0U(me6 zy1>IejlX)Lm}Xd2P*7L>UBf{6Q+!l^Lu3?43y)Apy1LUCRg|XUELSvRn_Oj&)o+*8 z=m2P4vGcGSPUL^ts=;wx0buCP$JX+L^wJ9BAz3g+0Xb|Qk5KK>5`o$cHE)&%ctn>3 ztnLO3R-cBMwzh01Nx9}(hs=TWxSF;;I4E~oJ{4saE^T+C1M~~Khx&VjeZLxDAs4FY zDg_?5M!cc_pgNbVIhRb>6{2w>I2;XE-Y=NTCzhEt{YgLqSav}n77y$qk{X*Ra7b`s zwAvr9_ju#PSbKk@T$A2>$eq|}ilvn|>z?N4dg#;m5}I%F$%;0VRf;^5l<%^E^L`Hj z+uRt{6%AY(6IU%qz=P43RR2fdOh68}cRq;M0GRSj5wMt@Y4}tzuJPUX?Oa3uHIow} zDNjt#0rM?g*|Sh|$*!qorLeCSpdmpBjwgpIRgyF$hbRZ@jY! z$q`nzuThs2R_Q22oRHvMhI<2vfQ|*CoSf*^nFeAM6u%^8M2s$)s4bHU%!L)k5lbCW z)I%0`CqC(ksm#2Xm)0uL%}1_e7=!Ups<$B@teGv{JA#9w%0L;x-jKirmcWH(TPe?XqLG3BL$lk{APYDY?f@5aUBA`gQU>>&t6Rco^0? zK1vA)Ynol9?yll}D@rZ>{*%drJ%C_nQ!e)N9&3l?sV}ZtvVimeF*Yww%!bjj%a)z> z@Y|NFf#Qk9ARR1wHYU}ysOP=1J(g9i5*;ETQR|mH_9HuY3(D$AeL6k~3+m5D?NfwX!4tgQ3QX zhvPAXm|-O)j2HsG^4hUvM`x8{s>9Rj5e;q9+cL4E1AeFC0s7=DC zK5%7!8e26`GL6=2aFJe1TtOOQw7q10I3{9~FiMKz{ z_;iWp+NksKkF~9F4wT}-6O)kkOy@qs(&QD=rarRJ3LMnB?1a89y2bW z1hjA55|Zx{VwW{Ud~p;4gfEryrw}C+54e!u35$vy_NNe2%TqXpeM?bsl($IBylUx_ zk!G8-($6YXMG^rE6BYQVSh=|)N+zvBE$aL)ztE6R8kx8|W$EE?F5zNt;ad{zM0P&x zBi)@$>L!JgiaaA=KMVc|3G(0yWYxZnb5|H8YA3s?bL>eWBC6$;+=Hk(=Y-815CX*lG9Wshrv%)_iuQo{`9hGI1 z-x~yZ{q*|`_rR8SB`UAJ%d zg4NPW;b|mg7gB*Bq8`!+6cQ0? zeT+>WuJ_7?fgrKXHGr4~r>~)66&s;m?#Si5os1Ye0!-;VDn@kP=1O^%A+3_{s@py9 z=>)vo=hK5KT4~_}8THhf;$wizF8Oah*?Ow^_;jTXdWiuPqdBxZI1oUFuisdEj26V7 z%dFM61WxU+F(@^j_)@O@*!9d>8oMd6VZn8~KF0mBnKqwI3N_{Zvt{c@e6dmyhb{E}5YXcaaQ{@Gza#15b zj0E~kEO9NApWc>pn#@*Zn5wRnX;E%Q`Q5tDER1Th7dmd`l}{6FP_DybXl{uE%EPm6 zWW4V*@^j%hRIm)SSs!>ln3&;x3lMWj|DlM|n=Y)U)vuBW-_4SR*B8(|Fi zkeQxGsHL@>x0><@ksXq}OPAhsEA1$f+2sJ$vk}p*rU8L^EzPa(UHcS_Jr*=^K;S0qm?pzm?~ zNVWM!QII(MS~a015Blh`#g6Li4BOXl-B``f)|PDts%L0;FlVKNLw+nX`5g8Xs-HXm zz`=Mp`m+d!$t>^m=AJmj$_pF-Tl?E8^{3S^U?${tj`k9rX(>L-XH}z! z3ZQ(seUrp=)}1LKh+mVG&G|FY$<87=95s>tm;BuH^@aith;t|rur}`C{LoJgM=1k8 z?9y5vBTU~x$?z&FVx%(XNVp|EOZ>TBIv#LQrTe4P(&Uz z`oIOcczmFg!u@@MR9PMR&)|>=sieDdM)>#1I(_ACrVdq#nc?Fwyh1JW34>hMI@&8Z z@J=&GHdNim424<7w|1|vEFFB4J=7Ob92Kf!#<3(OV6~K z6Nf|#wD3^tAyZCCUoh_ug6_DeH3wk^cC|S2dc2$N$`Y1SDVSegM1|+zRHzA!&~`o1 z&cMax6}Ojo5gSW7!wRhyq{ah+_aw*$`zt>d+1Ke-!TJ(c&pKv|dsy@B>?1eooZd3)zHm|*m&;;OQ zM1A>`L<6uaw-MEIcI!CD58u3gqhERgXMUcUYm%gqW%>T%7m_=dKR(9}jn|nKGG;ev zVOy$^8ZQWZmx);_90{B{+v0XzT#iJ1^u+=4tTcbnBhK}fr#W-;6{bzSTh*kvU7?j* zoi4(#+~w{qSzSvlf>P~&=RrguSl8=o@7Ob!dN<3(oCw&RY9+;C=k&if?@b&AYvE1aTak>M7S=#DWOX3Y~J(X@|L^!(?uQcR47G&{lxW4~u zqg!BlANiTPI-8G(DDrLex*xHH&=d|{ng{F*yUdoZZsuDKTa?Y$-rZxXi%(kuF$}AE zJQx$(oc+NzS>~7&>V2Ot9y(bu9s2rVvGlEBVT7T`d}yHPi`o7ohRWQB0hq3d=wq92 ztveaXw*IVZy7P^DN}HM&7zMufvs{uJTx@C90l^S*PgX0lyu3F3ug;!5Q?%|vj}5;) zI~Xbj-@~UD&FjD$3LUe|ZlKTd8wMsPaY5mLRQpD#L?}*Sw@)ah zr<{nK*Ok|7|7oXJTKgDwSa%Pidx~l$tx~jC*1=}*{tJicLI;iP@*7e^A&V|GG?G`3 zfTrX1V{%MC8)+b8F)FI6oqcpuM%dh#xRbfC4qXGT<+Y`A2)Bl>CY|Jp*vOg*yW^Ry zTelevwq{shJ&)MCPN-HO=|BfXqBa*IwI)Uf2LQ*3c@K(73%xx6zoIdrTlw~FK)3`v zn&bIKn^?SavHx}bV)e-KUJ=KZW5LK{!I2B={Ci~lNo>Mm{<@spr%&n{qlev5P9_Y% zP$J;afX>zeZ^Dm^P9?R(GNDAcqHgb8D^$65?9xxS@xs^IltYOkXy)jQo9AJE&Q~i2-;;$7j!kEzaw8o zKO|9rXYQ&eH1L>u%{SZ%YRc`Gel~SyI@~}-G4H_xhlA~=xPsixUU zL@Jka%vO99n_P8qiWm)G+gxX?;-p&@5NFsX@?_lJeNN+i0)P$9E+!6IoF2cxRNSv= zYg`wREk5_Q=i`;JFNYY#JacaaP!J60ik#G&7GtH;?wkV+FWy&}UUJ67NW72%y2&0Q zy8RYiAQ#i9Q0GzEBq_1Z&))Pho*mATU{ zw?|JZl22>R-@84l?&IN3GIB9;yl>6SG=Bz|7!Lj?XYS zTv>M68Wp~JSk{kfHwA-T!XqP<9Qp8Xzs5y#orXLG)d%z`G3%VQ*VWR`T=Rv?pn}31j*(_~ z3;kbWxQyk`oZ5|mdW(O^8clICYH%%ZE9sAf2@v@k>_=Khv?>flz#z+~(A{7Yj z@HZGZ^q006Je8Bo?!X&u{qeLOK*G!j?A2H$zHuNPvTJ3BQ8lKr$5qnL%7{k>2QH`t z=e(<1qJ>CCCdoKBwF6Ip$>y6(-+<4Uq$QP6Tuo8IN#GL%*rL3oHT#y~nuVwQY`|e& z;*;{y#2;N+-pPEf8^PK7xFj*+eE>OvZXc8lONK-5Vbdf3Wezo9S%;CMQp?ktXbt9% zPi|#-4yigBe88w)H-^aHZ-3q5ksCWtZfhWk_&GULVU|3TZtzMR+H)tD8hIw(O?$Sh zqPhCA_pu+g5p^e2c&%n7?kOBmUXao3qq6)CeR#nV`=PhuxYzd<{iF;u1BXzHM%n25 zEB$A=d3gt>B{mAa$tYjkE+14JvI4fTw57qIWE7zJplc+e-~03IBgcqzOeeTTcd2$8 zZ`-%CtY+R?d;;hz6gWb<(otf6JH$5`-7)iXyVi)KTeI=-yCXW8Cgvi{lGJU2O%LBo z&lYk3l8ET-ZkO-{H0CA+46<>f8%A_Bp(;l8@$C#K5Nh&1MzA7~6eUl-O~jYGu^|12 zi*a1r;0iOjgynqudsPaeGcJ#td9*rw^u$`Ezvrb~Ia0Ni_l}8c9+5&MnagTpJbQ^{ z@C1B8P@5Z&gByPSMmv|%CU;pl8|N@+nWqn(7G08;dFCFrAR)tii_@1Ep{~Ax!>T5G z?rH3pE@+nyXP6sa_TID0=)pWZMLi0LVJV7wo+I2w?Nyq@yVaG@R{A^zQPqUZP?d~C ziDq~k#7UAktogQg2MI1)qpaYMZM=zbZi&^VIklACkygUf`LBEdE}!LvTGBp!D?g*R@#C>cFWppB-%85t z`OYQwWoX2#%sCrrAkG^Ybb$G=D(1U>wQ7x96*jNHp@QHX)rgYs(=CL3qUtB3gTh#3APe7D+^VnL@Z!Y3w_C_&zhTjF-yJr z{fMfVcUhUxgi+DL-PItMU4F+%Z@gEBf>tlDlz`k9WFv|Jt$}KmP@AvS$vaajbF0|& zk7`<(BFfR#$baIsU^}$r{eVH2GI`=%+Qa-OFr4Wml#5QlXts}5VmmBehV(HYSTou#yasoQjW zObAOVRNr+Ss;-+!JNgl49u<9UZe2S?S%h#JDxQAO2!Tr}dQEVj{d9SScY!5?6Z5#` z`9rduRYy2HURCX)`>o;LhZDFJ=>c{kuIyLqdXiGnf?2pL&B+dNf-)uPan4y-3IK6T}YF1{8&Ts$F@xzerZJ(t)wZh80E|o-M!VG~= zBJ6S~xh*VPCYIj73pX45e7`DLIz(Y?2)47wQ)-X#--rQ%tqQinEg=uH^y;?0#yKv%~AhD^v jA{7{wNi_L(); + } + doRepaint(): void { + this._verticalElevator.texture = this.verticalElevatorTextures.greenOn; + } +} + +export class VerticalElevatorTemplate extends JlGraphicTemplate { + verticalElevatorTextures?: VerticalElevatorTextures; + constructor(dataTemplate: IverticalElevatorData) { + super(VerticalElevator.Type, { dataTemplate }); + this.loadAssets(); + } + new(): VerticalElevator { + if (this.verticalElevatorTextures) { + const g = new VerticalElevator(this.verticalElevatorTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(tcc_Light_Assets); + const verticalElevatorSheet = new Spritesheet(texture, tcc_Light_JSON); + const result = await verticalElevatorSheet.parse(); + this.verticalElevatorTextures = { + redOff: result['red-off.png'], + redOn: result['red-on.png'], + blueOff: result['blue-off.png'], + blueOn: result['blue-on.png'], + greenOff: result['green-off.png'], + greenOn: result['green-on.png'], + }; + return this.verticalElevatorTextures as VerticalElevatorTextures; + } +} diff --git a/src/graphics/BAS/verticalElevator/VerticalElevatorDrawAssistant.ts b/src/graphics/BAS/verticalElevator/VerticalElevatorDrawAssistant.ts new file mode 100644 index 0000000..47cedfc --- /dev/null +++ b/src/graphics/BAS/verticalElevator/VerticalElevatorDrawAssistant.ts @@ -0,0 +1,124 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IverticalElevatorData, + VerticalElevator, + VerticalElevatorTemplate, +} from './VerticalElevator'; + +export class VerticalElevatorDraw extends GraphicDrawAssistant< + VerticalElevatorTemplate, + IverticalElevatorData +> { + _verticalElevator: VerticalElevator | null = null; + constructor(app: IDrawApp, template: VerticalElevatorTemplate) { + super(app, template, 'elevator', '垂直电梯'); + VerticalElevatorInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._verticalElevator) { + this._verticalElevator = this.graphicTemplate.new(); + this.container.addChild(this._verticalElevator); + } + } + + public get verticalElevator(): VerticalElevator { + if (!this._verticalElevator) { + this._verticalElevator = this.graphicTemplate.new(); + this.container.addChild(this._verticalElevator); + } + return this._verticalElevator; + } + + redraw(cp: Point): void { + this.verticalElevator.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.verticalElevator.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IverticalElevatorData): boolean { + data.transform = this.verticalElevator.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param verticalElevator + */ +function buildAbsorbablePositions( + verticalElevator: VerticalElevator +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const verticalElevators = + verticalElevator.queryStore.queryByType( + VerticalElevator.Type + ); + const canvas = verticalElevator.getCanvas(); + verticalElevators.forEach((item) => { + if (item.id === verticalElevator.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class VerticalElevatorInteraction extends GraphicInteractionPlugin { + static Name = 'vertical_elevator_transform'; + constructor(app: IDrawApp) { + super(VerticalElevatorInteraction.Name, app); + } + static init(app: IDrawApp) { + return new VerticalElevatorInteraction(app); + } + filter(...grahpics: JlGraphic[]): VerticalElevator[] | undefined { + return grahpics + .filter((g) => g.type === VerticalElevator.Type) + .map((g) => g as VerticalElevator); + } + bind(g: VerticalElevator): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: VerticalElevator): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const verticalElevator = target.getGraphic() as VerticalElevator; + verticalElevator.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(verticalElevator), + }); + } +} diff --git a/src/graphics/BAS/verticalElevator/verticalElevator-data.json b/src/graphics/BAS/verticalElevator/verticalElevator-data.json new file mode 100644 index 0000000..76e7d53 --- /dev/null +++ b/src/graphics/BAS/verticalElevator/verticalElevator-data.json @@ -0,0 +1,29 @@ +{ + "frames": { + "green-off.png": { + "frame": { "x": 0, "y": 0, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 33, "h": 33 }, + "sourceSize": { "w": 128, "h": 33 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "green-on.png": { + "frame": { "x": 33, "y": 0, "w": 32, "h": 33 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 33, "h": 33 }, + "sourceSize": { "w": 128, "h": 33 }, + "anchor": { "x": 0.5, "y": 0.5 } + } + }, + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.1", + "image": "tcc-light.png", + "format": "RGBA8888", + "size": { "w": 129, "h": 33 }, + "scale": "0.5", + "smartupdate": "$TexturePacker:SmartUpdate:e7620bd2d73cc0b3e2deea9704e7eefc:f129a1d9e4b9ba57720b3861c22b155b:eb2d421f7759984b7713aa4aa5354134$" + } +} diff --git a/src/graphics/BAS/verticalElevator/verticalElevator-spritesheet.png b/src/graphics/BAS/verticalElevator/verticalElevator-spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..7950f1608d45add3c22c9c53daac3ccdbc96c0d9 GIT binary patch literal 8024 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 literal 0 HcmV?d00001 diff --git a/src/graphics/CCTV/cctvButton/CCTVButton.ts b/src/graphics/CCTV/cctvButton/CCTVButton.ts deleted file mode 100644 index 5259237..0000000 --- a/src/graphics/CCTV/cctvButton/CCTVButton.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; -import CCTV_Button_Assets from './cctv-button-spritesheet.png'; -import CCTV_Button_JSON from './cctv-button-data.json'; -import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; -import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; - -interface CCTVButtonTextures { - rectPressBtn: Texture; - rectBtn: Texture; - monitorBtn: Texture; - semicircleBtn: Texture; -} - -export interface ICCTVButtonData extends GraphicData { - get code(): string; - set code(v: string); - get buttonType(): iscsGraphicData.CCTVButton.ButtonType; - set buttonType(v: iscsGraphicData.CCTVButton.ButtonType); -} - -export class CCTVButton extends JlGraphic { - static Type = 'CCTVButton'; - _cctvButton: Sprite; - cctvButtonTextures: CCTVButtonTextures; - __state = 0; - - constructor(cctvButtonTextures: CCTVButtonTextures) { - super(CCTVButton.Type); - this.cctvButtonTextures = cctvButtonTextures; - this._cctvButton = new Sprite(); - this._cctvButton.texture = this.cctvButtonTextures.rectBtn; - this._cctvButton.anchor.set(0.5); - this.addChild(this._cctvButton); - } - get code(): string { - return this.datas.code; - } - get datas(): ICCTVButtonData { - return this.getDatas(); - } - - doRepaint(): void { - if (this.datas.buttonType == iscsGraphicData.CCTVButton.ButtonType.rect) { - this._cctvButton.texture = this.cctvButtonTextures.rectBtn; - } else if ( - this.datas.buttonType == iscsGraphicData.CCTVButton.ButtonType.monitor - ) { - this._cctvButton.texture = this.cctvButtonTextures.monitorBtn; - } else { - this._cctvButton.texture = this.cctvButtonTextures.semicircleBtn; - } - } -} - -export class CCTVButtonTemplate extends JlGraphicTemplate { - cctvButtonTextures?: CCTVButtonTextures; - constructor(dataTemplate: ICCTVButtonData) { - super(CCTVButton.Type, { dataTemplate }); - this.loadAssets(); - } - new(): CCTVButton { - if (this.cctvButtonTextures) { - const g = new CCTVButton(this.cctvButtonTextures); - g.loadData(this.datas); - return g; - } - throw new Error('资源未加载/加载失败'); - } - async loadAssets(): Promise { - const texture = await Assets.load(CCTV_Button_Assets); - const cctvButtonSheet = new Spritesheet(texture, CCTV_Button_JSON); - const result = await cctvButtonSheet.parse(); - this.cctvButtonTextures = { - rectPressBtn: result['rect-press-btn.png'], - rectBtn: result['rect-btn.png'], - monitorBtn: result['monitor-btn.png'], - semicircleBtn: result['semicircle-btn.png'], - }; - return this.cctvButtonTextures as CCTVButtonTextures; - } -} diff --git a/src/graphics/CCTV/cctvButton/CCTVButtonDrawAssistant.ts b/src/graphics/CCTV/cctvButton/CCTVButtonDrawAssistant.ts deleted file mode 100644 index b5ed24d..0000000 --- a/src/graphics/CCTV/cctvButton/CCTVButtonDrawAssistant.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; -import { - AbsorbableLine, - AbsorbablePosition, - GraphicDrawAssistant, - GraphicInteractionPlugin, - GraphicTransformEvent, - IDrawApp, - JlGraphic, -} from 'jl-graphic'; -import { ICCTVButtonData, CCTVButton, CCTVButtonTemplate } from './CCTVButton'; - -export class CCTVButtonDraw extends GraphicDrawAssistant< - CCTVButtonTemplate, - ICCTVButtonData -> { - _cctvButton: CCTVButton | null = null; - constructor(app: IDrawApp, template: CCTVButtonTemplate) { - super( - app, - template, - 'svguse:../drawIcon.svg#icon-psl-button', - 'cctv按钮' - ); - CCTVButtonInteraction.init(app); - } - - bind(): void { - super.bind(); - if (!this._cctvButton) { - this._cctvButton = this.graphicTemplate.new(); - this.container.addChild(this._cctvButton); - } - } - - public get cctvButton(): CCTVButton { - if (!this._cctvButton) { - this._cctvButton = this.graphicTemplate.new(); - this.container.addChild(this._cctvButton); - } - return this._cctvButton; - } - - redraw(cp: Point): void { - this.cctvButton.position.copyFrom(cp); - } - onLeftUp(e: FederatedMouseEvent): void { - this.cctvButton.position.copyFrom(this.toCanvasCoordinates(e.global)); - this.createAndStore(true); - } - prepareData(data: ICCTVButtonData): boolean { - data.transform = this.cctvButton.saveTransform(); - return true; - } - onEsc(): void { - this.finish(); - } -} - -/** - * 构建吸附线 - * @param cctvButton - */ -function buildAbsorbablePositions(cctvButton: CCTVButton): AbsorbablePosition[] { - const aps: AbsorbablePosition[] = []; - const cctvButtons = cctvButton.queryStore.queryByType( - CCTVButton.Type - ); - const canvas = cctvButton.getCanvas(); - cctvButtons.forEach((item) => { - if (item.id === cctvButton.id) { - return; - } - const ala = new AbsorbableLine( - new Point(item.x, 0), - new Point(item.x, canvas.height) - ); - const alb = new AbsorbableLine( - new Point(0, item.y), - new Point(canvas.width, item.y) - ); - aps.push(ala); - aps.push(alb); - }); - - return aps; -} - -export class CCTVButtonInteraction extends GraphicInteractionPlugin { - static Name = 'cctv_button_transform'; - constructor(app: IDrawApp) { - super(CCTVButtonInteraction.Name, app); - } - static init(app: IDrawApp) { - return new CCTVButtonInteraction(app); - } - filter(...grahpics: JlGraphic[]): CCTVButton[] | undefined { - return grahpics - .filter((g) => g.type === CCTVButton.Type) - .map((g) => g as CCTVButton); - } - bind(g: CCTVButton): void { - g.eventMode = 'static'; - g.cursor = 'pointer'; - g.scalable = true; - g.rotatable = true; - g.on('transformstart', this.transformstart, this); - } - unbind(g: CCTVButton): void { - g.eventMode = 'none'; - g.scalable = false; - g.rotatable = false; - g.off('transformstart', this.transformstart, this); - } - transformstart(e: GraphicTransformEvent) { - const target = e.target as DisplayObject; - const cctvButton = target.getGraphic() as CCTVButton; - cctvButton.getGraphicApp().setOptions({ - absorbablePositions: buildAbsorbablePositions(cctvButton), - }); - } -} diff --git a/src/graphics/CCTV/cctvButton/cctv-button-spritesheet.png b/src/graphics/CCTV/cctvButton/cctv-button-spritesheet.png deleted file mode 100644 index b1c9720f991a9e98d5b293d94843cafe0c38e370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4453 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 + } + doRepaint(): void { + const rectGraphic = this.rectGraphic; + rectGraphic.clear(); + rectGraphic.beginFill(acsConsts.rectBackground); + rectGraphic.drawRect(0, 0, acsConsts.rectWidth, acsConsts.rectHeight); + rectGraphic.endFill(); + + this.textGraphic.text = acsConsts.text; + this.textGraphic.setVectorFontSize(acsConsts.fontSize); + this.textGraphic.anchor.set(0.5); + this.textGraphic.style.fill = acsConsts.textColor; + this.textGraphic.position.set( + acsConsts.rectWidth / 2, + acsConsts.rectHeight / 2 + ); + } +} + +export class AcsTemplate extends JlGraphicTemplate { + constructor(dataTemplate: IAcsData) { + super(Acs.Type, { + dataTemplate, + }); + } + new(): Acs { + const acs = new Acs(); + acs.loadData(this.datas); + return acs; + } +} diff --git a/src/graphics/FAS/acs/AcsAssistant.ts b/src/graphics/FAS/acs/AcsAssistant.ts new file mode 100644 index 0000000..023b835 --- /dev/null +++ b/src/graphics/FAS/acs/AcsAssistant.ts @@ -0,0 +1,111 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { IAcsData, Acs, AcsTemplate } from './Acs'; + +export class AcsDraw extends GraphicDrawAssistant { + _acs: Acs | null = null; + constructor(app: IDrawApp, template: AcsTemplate) { + super(app, template, 'svguse:../drawIcon.svg#icon-acs', 'ACS'); + AcsInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._acs) { + this._acs = this.graphicTemplate.new(); + this.container.addChild(this._acs); + this._acs.doRepaint(); + } + } + + public get acs(): Acs { + if (!this._acs) { + this._acs = this.graphicTemplate.new(); + this.container.addChild(this._acs); + } + return this._acs; + } + + redraw(cp: Point): void { + this.acs.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.acs.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IAcsData): boolean { + data.transform = this.acs.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param acs + */ +function buildAbsorbablePositions(acs: Acs): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const acses = acs.queryStore.queryByType(Acs.Type); + const canvas = acs.getCanvas(); + acses.forEach((item) => { + if (item.id === acs.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class AcsInteraction extends GraphicInteractionPlugin { + static Name = 'acs_transform'; + constructor(app: IDrawApp) { + super(AcsInteraction.Name, app); + } + static init(app: IDrawApp) { + return new AcsInteraction(app); + } + filter(...grahpics: JlGraphic[]): Acs[] | undefined { + return grahpics.filter((g) => g.type === Acs.Type).map((g) => g as Acs); + } + bind(g: Acs): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: Acs): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const acs = target.getGraphic() as Acs; + acs.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(acs), + }); + } +} diff --git a/src/graphics/FAS/afc/Afc.ts b/src/graphics/FAS/afc/Afc.ts new file mode 100644 index 0000000..0a9a974 --- /dev/null +++ b/src/graphics/FAS/afc/Afc.ts @@ -0,0 +1,68 @@ +import { Graphics } from 'pixi.js'; +import { + GraphicData, + JlGraphic, + JlGraphicTemplate, + VectorText, +} from 'jl-graphic'; + +export interface IAfcData extends GraphicData { + get code(): string; // 编号 + set code(v: string); + clone(): IAfcData; + copyFrom(data: IAfcData): void; + eq(other: IAfcData): boolean; +} + +const afcConsts = { + rectWidth: 64, + rectHeight: 24, + rectBackground: '0x99ccff', + textColor: '0x33cc00', + text: 'AFC联动', + fontSize: 12, +}; + +export class Afc extends JlGraphic { + static Type = 'Afc'; + rectGraphic: Graphics = new Graphics(); + textGraphic: VectorText = new VectorText(); + constructor() { + super(Afc.Type); + this.addChild(this.rectGraphic); + this.addChild(this.textGraphic); + } + + get datas(): IAfcData { + return this.getDatas(); + } + doRepaint(): void { + const rectGraphic = this.rectGraphic; + rectGraphic.clear(); + rectGraphic.beginFill(afcConsts.rectBackground); + rectGraphic.drawRect(0, 0, afcConsts.rectWidth, afcConsts.rectHeight); + rectGraphic.endFill(); + + this.textGraphic.text = afcConsts.text; + this.textGraphic.setVectorFontSize(afcConsts.fontSize); + this.textGraphic.anchor.set(0.5); + this.textGraphic.style.fill = afcConsts.textColor; + this.textGraphic.position.set( + afcConsts.rectWidth / 2, + afcConsts.rectHeight / 2 + ); + } +} + +export class AfcTemplate extends JlGraphicTemplate { + constructor(dataTemplate: IAfcData) { + super(Afc.Type, { + dataTemplate, + }); + } + new(): Afc { + const afc = new Afc(); + afc.loadData(this.datas); + return afc; + } +} diff --git a/src/graphics/FAS/afc/AfcAssistant.ts b/src/graphics/FAS/afc/AfcAssistant.ts new file mode 100644 index 0000000..a0d8127 --- /dev/null +++ b/src/graphics/FAS/afc/AfcAssistant.ts @@ -0,0 +1,111 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { IAfcData, Afc, AfcTemplate } from './Afc'; + +export class AfcDraw extends GraphicDrawAssistant { + _afc: Afc | null = null; + constructor(app: IDrawApp, template: AfcTemplate) { + super(app, template, 'svguse:../drawIcon.svg#icon-afc', 'Afc'); + AfcInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._afc) { + this._afc = this.graphicTemplate.new(); + this.container.addChild(this._afc); + this._afc.doRepaint(); + } + } + + public get afc(): Afc { + if (!this._afc) { + this._afc = this.graphicTemplate.new(); + this.container.addChild(this._afc); + } + return this._afc; + } + + redraw(cp: Point): void { + this.afc.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.afc.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IAfcData): boolean { + data.transform = this.afc.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param afc + */ +function buildAbsorbablePositions(afc: Afc): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const afcs = afc.queryStore.queryByType(Afc.Type); + const canvas = afc.getCanvas(); + afcs.forEach((item) => { + if (item.id === afc.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class AfcInteraction extends GraphicInteractionPlugin { + static Name = 'afc_transform'; + constructor(app: IDrawApp) { + super(AfcInteraction.Name, app); + } + static init(app: IDrawApp) { + return new AfcInteraction(app); + } + filter(...grahpics: JlGraphic[]): Afc[] | undefined { + return grahpics.filter((g) => g.type === Afc.Type).map((g) => g as Afc); + } + bind(g: Afc): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: Afc): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const afc = target.getGraphic() as Afc; + afc.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(afc), + }); + } +} diff --git a/src/graphics/FAS/electricButterflyValve/ElectricButterflyValve.ts b/src/graphics/FAS/electricButterflyValve/ElectricButterflyValve.ts new file mode 100644 index 0000000..b932d68 --- /dev/null +++ b/src/graphics/FAS/electricButterflyValve/ElectricButterflyValve.ts @@ -0,0 +1,70 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IElectricButterflyValveData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface ElectricButterflyValveTextures { + normal: Texture; + fireFault: Texture; + fault: Texture; + interruption: Texture; +} + +export class ElectricButterflyValve extends JlGraphic { + static Type = 'ElectricButterflyValve'; + _electricButterflyValve: Sprite; + electricButterflyValveTextures: ElectricButterflyValveTextures; + __state = 0; + + constructor(electricButterflyValveTextures: ElectricButterflyValveTextures) { + super(ElectricButterflyValve.Type); + this._electricButterflyValve = new Sprite(); + this.electricButterflyValveTextures = electricButterflyValveTextures; + this._electricButterflyValve.anchor.set(0.5); + this.addChild(this._electricButterflyValve); + this._electricButterflyValve.texture = + this.electricButterflyValveTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IElectricButterflyValveData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class ElectricButterflyValveTemplate extends JlGraphicTemplate { + electricButterflyValveTextures?: ElectricButterflyValveTextures; + constructor(dataTemplate: IElectricButterflyValveData) { + super(ElectricButterflyValve.Type, { dataTemplate }); + this.loadAssets(); + } + new(): ElectricButterflyValve { + if (this.electricButterflyValveTextures) { + const g = new ElectricButterflyValve(this.electricButterflyValveTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const electricButterflyValveSheet = new Spritesheet(texture, FasDeviceJson); + const result = await electricButterflyValveSheet.parse(); + this.electricButterflyValveTextures = { + normal: result['electricButterflyValveNormal.png'], + fireFault: result['electricButterflyValveFireFault.png'], + fault: result['electricButterflyValveFault.png'], + interruption: result['electricButterflyValveInterruption.png'], + }; + return this + .electricButterflyValveTextures as ElectricButterflyValveTextures; + } +} diff --git a/src/graphics/FAS/electricButterflyValve/ElectricButterflyValveAssistant.ts b/src/graphics/FAS/electricButterflyValve/ElectricButterflyValveAssistant.ts new file mode 100644 index 0000000..0140f82 --- /dev/null +++ b/src/graphics/FAS/electricButterflyValve/ElectricButterflyValveAssistant.ts @@ -0,0 +1,132 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + ElectricButterflyValve, + IElectricButterflyValveData, + ElectricButterflyValveTemplate, +} from './ElectricButterflyValve'; + +export class ElectricButterflyValveDraw extends GraphicDrawAssistant< + ElectricButterflyValveTemplate, + IElectricButterflyValveData +> { + _electricButterflyValve: ElectricButterflyValve | null = null; + constructor(app: IDrawApp, template: ElectricButterflyValveTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-elevator-lift-to-top', + '电动蝶阀' + ); + ElectricButterflyValveInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._electricButterflyValve) { + this._electricButterflyValve = this.graphicTemplate.new(); + this.container.addChild(this._electricButterflyValve); + } + } + + public get electricButterflyValve(): ElectricButterflyValve { + if (!this._electricButterflyValve) { + this._electricButterflyValve = this.graphicTemplate.new(); + this.container.addChild(this._electricButterflyValve); + } + return this._electricButterflyValve; + } + + redraw(cp: Point): void { + this.electricButterflyValve.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.electricButterflyValve.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IElectricButterflyValveData): boolean { + data.transform = this.electricButterflyValve.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param electricButterflyValve + */ +function buildAbsorbablePositions( + electricButterflyValve: ElectricButterflyValve +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const electricButterflyValves = + electricButterflyValve.queryStore.queryByType( + ElectricButterflyValve.Type + ); + const canvas = electricButterflyValve.getCanvas(); + electricButterflyValves.forEach((item) => { + if (item.id === electricButterflyValve.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class ElectricButterflyValveInteraction extends GraphicInteractionPlugin { + static Name = 'electric_butter_fly_valve_transform'; + constructor(app: IDrawApp) { + super(ElectricButterflyValveInteraction.Name, app); + } + static init(app: IDrawApp) { + return new ElectricButterflyValveInteraction(app); + } + filter(...grahpics: JlGraphic[]): ElectricButterflyValve[] | undefined { + return grahpics + .filter((g) => g.type === ElectricButterflyValve.Type) + .map((g) => g as ElectricButterflyValve); + } + bind(g: ElectricButterflyValve): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: ElectricButterflyValve): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const electricButterflyValve = + target.getGraphic() as ElectricButterflyValve; + electricButterflyValve.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(electricButterflyValve), + }); + } +} diff --git a/src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValve.ts b/src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValve.ts new file mode 100644 index 0000000..c991522 --- /dev/null +++ b/src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValve.ts @@ -0,0 +1,78 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IElectricFireExtinguishingValveData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface ElectricFireExtinguishingValveTextures { + normal: Texture; + fireAlarm: Texture; + fault: Texture; + interruption: Texture; +} + +export class ElectricFireExtinguishingValve extends JlGraphic { + static Type = 'ElectricFireExtinguishingValve'; + _electricFireExtinguishingValve: Sprite; + electricFireExtinguishingValveTextures: ElectricFireExtinguishingValveTextures; + __state = 0; + + constructor( + electricFireExtinguishingValveTextures: ElectricFireExtinguishingValveTextures + ) { + super(ElectricFireExtinguishingValve.Type); + this._electricFireExtinguishingValve = new Sprite(); + this.electricFireExtinguishingValveTextures = + electricFireExtinguishingValveTextures; + this._electricFireExtinguishingValve.anchor.set(0.5); + this.addChild(this._electricFireExtinguishingValve); + this._electricFireExtinguishingValve.texture = + this.electricFireExtinguishingValveTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IElectricFireExtinguishingValveData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class ElectricFireExtinguishingValveTemplate extends JlGraphicTemplate { + electricFireExtinguishingValveTextures?: ElectricFireExtinguishingValveTextures; + constructor(dataTemplate: IElectricFireExtinguishingValveData) { + super(ElectricFireExtinguishingValve.Type, { dataTemplate }); + this.loadAssets(); + } + new(): ElectricFireExtinguishingValve { + if (this.electricFireExtinguishingValveTextures) { + const g = new ElectricFireExtinguishingValve( + this.electricFireExtinguishingValveTextures + ); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const electricFireExtinguishingValveSheet = new Spritesheet( + texture, + FasDeviceJson + ); + const result = await electricFireExtinguishingValveSheet.parse(); + this.electricFireExtinguishingValveTextures = { + normal: result['electricFireExtinguishingValveNormal.png'], + fireAlarm: result['_electricFireExtinguishingValveFireAlarm.png'], + fault: result['_electricFireExtinguishingValveFault.png'], + interruption: result['electricFireExtinguishingValveInterruption.png'], + }; + return this + .electricFireExtinguishingValveTextures as ElectricFireExtinguishingValveTextures; + } +} diff --git a/src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValveAssistant.ts b/src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValveAssistant.ts new file mode 100644 index 0000000..df347ec --- /dev/null +++ b/src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValveAssistant.ts @@ -0,0 +1,136 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + ElectricFireExtinguishingValve, + IElectricFireExtinguishingValveData, + ElectricFireExtinguishingValveTemplate, +} from './ElectricFireExtinguishingValve'; + +export class ElectricFireExtinguishingValveDraw extends GraphicDrawAssistant< + ElectricFireExtinguishingValveTemplate, + IElectricFireExtinguishingValveData +> { + _electricFireExtinguishingValve: ElectricFireExtinguishingValve | null = null; + constructor(app: IDrawApp, template: ElectricFireExtinguishingValveTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-electric-fire-extinguishing-valve', + '电动防烟防火阀' + ); + ElectricFireExtinguishingValveInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._electricFireExtinguishingValve) { + this._electricFireExtinguishingValve = this.graphicTemplate.new(); + this.container.addChild(this._electricFireExtinguishingValve); + } + } + + public get electricFireExtinguishingValve(): ElectricFireExtinguishingValve { + if (!this._electricFireExtinguishingValve) { + this._electricFireExtinguishingValve = this.graphicTemplate.new(); + this.container.addChild(this._electricFireExtinguishingValve); + } + return this._electricFireExtinguishingValve; + } + + redraw(cp: Point): void { + this.electricFireExtinguishingValve.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.electricFireExtinguishingValve.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IElectricFireExtinguishingValveData): boolean { + data.transform = this.electricFireExtinguishingValve.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param electricFireExtinguishingValve + */ +function buildAbsorbablePositions( + electricFireExtinguishingValve: ElectricFireExtinguishingValve +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const electricFireExtinguishingValves = + electricFireExtinguishingValve.queryStore.queryByType( + ElectricFireExtinguishingValve.Type + ); + const canvas = electricFireExtinguishingValve.getCanvas(); + electricFireExtinguishingValves.forEach((item) => { + if (item.id === electricFireExtinguishingValve.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class ElectricFireExtinguishingValveInteraction extends GraphicInteractionPlugin { + static Name = 'electric_fire_extinguishing_valve_transform'; + constructor(app: IDrawApp) { + super(ElectricFireExtinguishingValveInteraction.Name, app); + } + static init(app: IDrawApp) { + return new ElectricFireExtinguishingValveInteraction(app); + } + filter( + ...grahpics: JlGraphic[] + ): ElectricFireExtinguishingValve[] | undefined { + return grahpics + .filter((g) => g.type === ElectricFireExtinguishingValve.Type) + .map((g) => g as ElectricFireExtinguishingValve); + } + bind(g: ElectricFireExtinguishingValve): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: ElectricFireExtinguishingValve): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const electricFireExtinguishingValve = + target.getGraphic() as ElectricFireExtinguishingValve; + electricFireExtinguishingValve.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions( + electricFireExtinguishingValve + ), + }); + } +} diff --git a/src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTop.ts b/src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTop.ts new file mode 100644 index 0000000..b9cf357 --- /dev/null +++ b/src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTop.ts @@ -0,0 +1,68 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IElevatorLiftToTopData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface ElevatorLiftToTopTextures { + normal: Texture; + fireFault: Texture; + fault: Texture; + interruption: Texture; +} + +export class ElevatorLiftToTop extends JlGraphic { + static Type = 'ElevatorLiftToTop'; + _elevatorLiftToTop: Sprite; + elevatorLiftToTopTextures: ElevatorLiftToTopTextures; + __state = 0; + + constructor(elevatorLiftToTopTextures: ElevatorLiftToTopTextures) { + super(ElevatorLiftToTop.Type); + this._elevatorLiftToTop = new Sprite(); + this.elevatorLiftToTopTextures = elevatorLiftToTopTextures; + this._elevatorLiftToTop.anchor.set(0.5); + this.addChild(this._elevatorLiftToTop); + this._elevatorLiftToTop.texture = this.elevatorLiftToTopTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IElevatorLiftToTopData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class ElevatorLiftToTopTemplate extends JlGraphicTemplate { + elevatorLiftToTopTextures?: ElevatorLiftToTopTextures; + constructor(dataTemplate: IElevatorLiftToTopData) { + super(ElevatorLiftToTop.Type, { dataTemplate }); + this.loadAssets(); + } + new(): ElevatorLiftToTop { + if (this.elevatorLiftToTopTextures) { + const g = new ElevatorLiftToTop(this.elevatorLiftToTopTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const elevatorLiftToTopSheet = new Spritesheet(texture, FasDeviceJson); + const result = await elevatorLiftToTopSheet.parse(); + this.elevatorLiftToTopTextures = { + normal: result['elevatorLiftToTopNormal.png'], + fireFault: result['elevatorLiftToTopFireFault.png'], + fault: result['elevatorLiftToTopFault.png'], + interruption: result['elevatorLiftToTopInterruption.png'], + }; + return this.elevatorLiftToTopTextures as ElevatorLiftToTopTextures; + } +} diff --git a/src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTopAssistant.ts b/src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTopAssistant.ts new file mode 100644 index 0000000..fc4c6ca --- /dev/null +++ b/src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTopAssistant.ts @@ -0,0 +1,131 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + ElevatorLiftToTop, + IElevatorLiftToTopData, + ElevatorLiftToTopTemplate, +} from './ElevatorLiftToTop'; + +export class ElevatorLiftToTopDraw extends GraphicDrawAssistant< + ElevatorLiftToTopTemplate, + IElevatorLiftToTopData +> { + _elevatorLiftToTop: ElevatorLiftToTop | null = null; + constructor(app: IDrawApp, template: ElevatorLiftToTopTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-elevator-lift-to-top', + '电梯归首' + ); + ElevatorLiftToTopInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._elevatorLiftToTop) { + this._elevatorLiftToTop = this.graphicTemplate.new(); + this.container.addChild(this._elevatorLiftToTop); + } + } + + public get elevatorLiftToTop(): ElevatorLiftToTop { + if (!this._elevatorLiftToTop) { + this._elevatorLiftToTop = this.graphicTemplate.new(); + this.container.addChild(this._elevatorLiftToTop); + } + return this._elevatorLiftToTop; + } + + redraw(cp: Point): void { + this.elevatorLiftToTop.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.elevatorLiftToTop.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IElevatorLiftToTopData): boolean { + data.transform = this.elevatorLiftToTop.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param elevatorLiftToTop + */ +function buildAbsorbablePositions( + elevatorLiftToTop: ElevatorLiftToTop +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const elevatorLiftToTops = + elevatorLiftToTop.queryStore.queryByType( + ElevatorLiftToTop.Type + ); + const canvas = elevatorLiftToTop.getCanvas(); + elevatorLiftToTops.forEach((item) => { + if (item.id === elevatorLiftToTop.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class ElevatorLiftToTopInteraction extends GraphicInteractionPlugin { + static Name = 'elevator_lift_to_top_transform'; + constructor(app: IDrawApp) { + super(ElevatorLiftToTopInteraction.Name, app); + } + static init(app: IDrawApp) { + return new ElevatorLiftToTopInteraction(app); + } + filter(...grahpics: JlGraphic[]): ElevatorLiftToTop[] | undefined { + return grahpics + .filter((g) => g.type === ElevatorLiftToTop.Type) + .map((g) => g as ElevatorLiftToTop); + } + bind(g: ElevatorLiftToTop): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: ElevatorLiftToTop): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const elevatorLiftToTop = target.getGraphic() as ElevatorLiftToTop; + elevatorLiftToTop.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(elevatorLiftToTop), + }); + } +} diff --git a/src/graphics/FAS/emergencyLighting/EmergencyLighting.ts b/src/graphics/FAS/emergencyLighting/EmergencyLighting.ts new file mode 100644 index 0000000..0696273 --- /dev/null +++ b/src/graphics/FAS/emergencyLighting/EmergencyLighting.ts @@ -0,0 +1,68 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IEmergencyLightingData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface EmergencyLightingTextures { + normal: Texture; + run: Texture; + fault: Texture; + interruption: Texture; +} + +export class EmergencyLighting extends JlGraphic { + static Type = 'EmergencyLighting'; + _emergencyLighting: Sprite; + emergencyLightingTextures: EmergencyLightingTextures; + __state = 0; + + constructor(emergencyLightingTextures: EmergencyLightingTextures) { + super(EmergencyLighting.Type); + this._emergencyLighting = new Sprite(); + this.emergencyLightingTextures = emergencyLightingTextures; + this._emergencyLighting.anchor.set(0.5); + this.addChild(this._emergencyLighting); + this._emergencyLighting.texture = this.emergencyLightingTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IEmergencyLightingData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class EmergencyLightingTemplate extends JlGraphicTemplate { + emergencyLightingTextures?: EmergencyLightingTextures; + constructor(dataTemplate: IEmergencyLightingData) { + super(EmergencyLighting.Type, { dataTemplate }); + this.loadAssets(); + } + new(): EmergencyLighting { + if (this.emergencyLightingTextures) { + const g = new EmergencyLighting(this.emergencyLightingTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const emergencyLightingSheet = new Spritesheet(texture, FasDeviceJson); + const result = await emergencyLightingSheet.parse(); + this.emergencyLightingTextures = { + normal: result['emergencyLightingNormal.png'], + run: result['emergencyLightingRun.png'], + fault: result['emergencyLightingFault.png'], + interruption: result['emergencyLightingInterruption.png'], + }; + return this.emergencyLightingTextures as EmergencyLightingTextures; + } +} diff --git a/src/graphics/FAS/emergencyLighting/EmergencyLightingAssistant.ts b/src/graphics/FAS/emergencyLighting/EmergencyLightingAssistant.ts new file mode 100644 index 0000000..02a87f5 --- /dev/null +++ b/src/graphics/FAS/emergencyLighting/EmergencyLightingAssistant.ts @@ -0,0 +1,131 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IEmergencyLightingData, + EmergencyLighting, + EmergencyLightingTemplate, +} from './EmergencyLighting'; + +export class EmergencyLightingDraw extends GraphicDrawAssistant< + EmergencyLightingTemplate, + IEmergencyLightingData +> { + _emergencyLighting: EmergencyLighting | null = null; + constructor(app: IDrawApp, template: EmergencyLightingTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-emergency-lighting', + '应急照明' + ); + EmergencyLightingInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._emergencyLighting) { + this._emergencyLighting = this.graphicTemplate.new(); + this.container.addChild(this._emergencyLighting); + } + } + + public get emergencyLighting(): EmergencyLighting { + if (!this._emergencyLighting) { + this._emergencyLighting = this.graphicTemplate.new(); + this.container.addChild(this._emergencyLighting); + } + return this._emergencyLighting; + } + + redraw(cp: Point): void { + this.emergencyLighting.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.emergencyLighting.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IEmergencyLightingData): boolean { + data.transform = this.emergencyLighting.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param emergencyLighting + */ +function buildAbsorbablePositions( + emergencyLighting: EmergencyLighting +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const emergencyLightings = + emergencyLighting.queryStore.queryByType( + EmergencyLighting.Type + ); + const canvas = emergencyLighting.getCanvas(); + emergencyLightings.forEach((item) => { + if (item.id === emergencyLighting.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class EmergencyLightingInteraction extends GraphicInteractionPlugin { + static Name = 'emergency_lighting_transform'; + constructor(app: IDrawApp) { + super(EmergencyLightingInteraction.Name, app); + } + static init(app: IDrawApp) { + return new EmergencyLightingInteraction(app); + } + filter(...grahpics: JlGraphic[]): EmergencyLighting[] | undefined { + return grahpics + .filter((g) => g.type === EmergencyLighting.Type) + .map((g) => g as EmergencyLighting); + } + bind(g: EmergencyLighting): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: EmergencyLighting): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const emergencyLighting = target.getGraphic() as EmergencyLighting; + emergencyLighting.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(emergencyLighting), + }); + } +} diff --git a/src/graphics/FAS/fasAlarm/FasAlarm.ts b/src/graphics/FAS/fasAlarm/FasAlarm.ts new file mode 100644 index 0000000..edc1c03 --- /dev/null +++ b/src/graphics/FAS/fasAlarm/FasAlarm.ts @@ -0,0 +1,71 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +// import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IFasAlarmData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface FasAlarmTextures { + normal: Texture; + alarm: Texture; + isolate: Texture; + fault: Texture; + interruption: Texture; +} + +export class FasAlarm extends JlGraphic { + static Type = 'FasAlarm'; + _fasAlarm: Sprite; + fasAlarmTextures: FasAlarmTextures; + __state = 0; + + constructor(fasAlarmTextures: FasAlarmTextures) { + super(FasAlarm.Type); + this._fasAlarm = new Sprite(); + this.fasAlarmTextures = fasAlarmTextures; + this._fasAlarm.anchor.set(0.5); + this.addChild(this._fasAlarm); + this._fasAlarm.texture = this.fasAlarmTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IFasAlarmData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class FasAlarmTemplate extends JlGraphicTemplate { + fasAlarmTextures?: FasAlarmTextures; + constructor(dataTemplate: IFasAlarmData) { + super(FasAlarm.Type, { dataTemplate }); + this.loadAssets(); + } + new(): FasAlarm { + if (this.fasAlarmTextures) { + const g = new FasAlarm(this.fasAlarmTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const fasAlarmSheet = new Spritesheet(texture, FasDeviceJson); + const result = await fasAlarmSheet.parse(); + this.fasAlarmTextures = { + normal: result['fasAlarmNormal.png'], + alarm: result['fasAlarmAlarm.png'], + isolate: result['fasAlarmIsolate.png'], + fault: result['fasAlarmFault.png'], + interruption: result['fasAlarmInterruption.png'], + }; + return this.fasAlarmTextures as FasAlarmTextures; + } +} diff --git a/src/graphics/FAS/fasAlarm/FasAlarmAssistant.ts b/src/graphics/FAS/fasAlarm/FasAlarmAssistant.ts new file mode 100644 index 0000000..c74259a --- /dev/null +++ b/src/graphics/FAS/fasAlarm/FasAlarmAssistant.ts @@ -0,0 +1,115 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { IFasAlarmData, FasAlarm, FasAlarmTemplate } from './FasAlarm'; + +export class FasAlarmDraw extends GraphicDrawAssistant< + FasAlarmTemplate, + IFasAlarmData +> { + _fasAlarm: FasAlarm | null = null; + constructor(app: IDrawApp, template: FasAlarmTemplate) { + super(app, template, 'svguse:../drawIcon.svg#icon-fas-alarm', '警铃'); + FasAlarmInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._fasAlarm) { + this._fasAlarm = this.graphicTemplate.new(); + this.container.addChild(this._fasAlarm); + } + } + + public get fasAlarm(): FasAlarm { + if (!this._fasAlarm) { + this._fasAlarm = this.graphicTemplate.new(); + this.container.addChild(this._fasAlarm); + } + return this._fasAlarm; + } + + redraw(cp: Point): void { + this.fasAlarm.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.fasAlarm.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IFasAlarmData): boolean { + data.transform = this.fasAlarm.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param fasAlarm + */ +function buildAbsorbablePositions(fasAlarm: FasAlarm): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const fasAlarms = fasAlarm.queryStore.queryByType(FasAlarm.Type); + const canvas = fasAlarm.getCanvas(); + fasAlarms.forEach((item) => { + if (item.id === fasAlarm.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class FasAlarmInteraction extends GraphicInteractionPlugin { + static Name = 'fas_alarm_transform'; + constructor(app: IDrawApp) { + super(FasAlarmInteraction.Name, app); + } + static init(app: IDrawApp) { + return new FasAlarmInteraction(app); + } + filter(...grahpics: JlGraphic[]): FasAlarm[] | undefined { + return grahpics + .filter((g) => g.type === FasAlarm.Type) + .map((g) => g as FasAlarm); + } + bind(g: FasAlarm): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: FasAlarm): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const fasAlarm = target.getGraphic() as FasAlarm; + fasAlarm.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(fasAlarm), + }); + } +} diff --git a/src/graphics/FAS/faultValve/FaultValve.ts b/src/graphics/FAS/faultValve/FaultValve.ts new file mode 100644 index 0000000..be7db32 --- /dev/null +++ b/src/graphics/FAS/faultValve/FaultValve.ts @@ -0,0 +1,74 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IFaultValveData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface FaultValveTextures { + normal: Texture; + run: Texture; + fault: Texture; + interruption: Texture; +} + +export class FaultValve extends JlGraphic { + static Type = 'FaultValve'; + _faultValve: Sprite; + faultValveTextures: FaultValveTextures; + __state = 0; + + constructor(faultValveTextures: FaultValveTextures) { + super(FaultValve.Type); + this._faultValve = new Sprite(); + this.faultValveTextures = faultValveTextures; + this._faultValve.anchor.set(0.5); + this.addChild(this._faultValve); + this._faultValve.texture = this.faultValveTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IFaultValveData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class FaultValveTemplate extends JlGraphicTemplate { + faultValveTextures?: FaultValveTextures; + constructor(dataTemplate: IFaultValveData) { + super(FaultValve.Type, { dataTemplate }); + this.loadAssets(); + } + new(): FaultValve { + if (this.faultValveTextures) { + const g = new FaultValve(this.faultValveTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const faultValveSheet = new Spritesheet(texture, FasDeviceJson); + const result = await faultValveSheet.parse(); + this.faultValveTextures = { + normal: result['faultValveNormal.png'], + run: result['faultValveRun.png'], + fault: result['faultValveFault.png'], + interruption: result['faultValveInterruption.png'], + }; + console.log( + this.faultValveTextures, + 'faultValveTextures', + texture, + faultValveSheet + ); + return this.faultValveTextures as FaultValveTextures; + } +} diff --git a/src/graphics/FAS/faultValve/FaultValveAssistant.ts b/src/graphics/FAS/faultValve/FaultValveAssistant.ts new file mode 100644 index 0000000..bdecc78 --- /dev/null +++ b/src/graphics/FAS/faultValve/FaultValveAssistant.ts @@ -0,0 +1,124 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { FaultValve, IFaultValveData, FaultValveTemplate } from './FaultValve'; + +export class FaultValveDraw extends GraphicDrawAssistant< + FaultValveTemplate, + IFaultValveData +> { + _faultValve: FaultValve | null = null; + constructor(app: IDrawApp, template: FaultValveTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-pressure-switch', + '故障阀' + ); + FaultValveInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._faultValve) { + this._faultValve = this.graphicTemplate.new(); + this.container.addChild(this._faultValve); + } + } + + public get faultValve(): FaultValve { + if (!this._faultValve) { + this._faultValve = this.graphicTemplate.new(); + this.container.addChild(this._faultValve); + } + return this._faultValve; + } + + redraw(cp: Point): void { + this.faultValve.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.faultValve.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IFaultValveData): boolean { + data.transform = this.faultValve.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param faultValve + */ +function buildAbsorbablePositions( + faultValve: FaultValve +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const faultValves = faultValve.queryStore.queryByType( + FaultValve.Type + ); + const canvas = faultValve.getCanvas(); + faultValves.forEach((item) => { + if (item.id === faultValve.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class FaultValveInteraction extends GraphicInteractionPlugin { + static Name = 'fault_valve_transform'; + constructor(app: IDrawApp) { + super(FaultValveInteraction.Name, app); + } + static init(app: IDrawApp) { + return new FaultValveInteraction(app); + } + filter(...grahpics: JlGraphic[]): FaultValve[] | undefined { + return grahpics + .filter((g) => g.type === FaultValve.Type) + .map((g) => g as FaultValve); + } + bind(g: FaultValve): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: FaultValve): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const faultValve = target.getGraphic() as FaultValve; + faultValve.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(faultValve), + }); + } +} diff --git a/src/graphics/FAS/fireFailureControlHost/FasFailureContorlHostAssistant.ts b/src/graphics/FAS/fireFailureControlHost/FasFailureContorlHostAssistant.ts new file mode 100644 index 0000000..7d814ba --- /dev/null +++ b/src/graphics/FAS/fireFailureControlHost/FasFailureContorlHostAssistant.ts @@ -0,0 +1,131 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IFasFailureControlHostData, + FasFailureControlHost, + FasFailureControlHostTemplate, +} from './FasFailureControlHost'; + +export class FasFailureControlHostDraw extends GraphicDrawAssistant< + FasFailureControlHostTemplate, + IFasFailureControlHostData +> { + _fasFailureControlHost: FasFailureControlHost | null = null; + constructor(app: IDrawApp, template: FasFailureControlHostTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-fas-failure-control-host', + '火灾故障控制主机' + ); + FasFailureControlHostInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._fasFailureControlHost) { + this._fasFailureControlHost = this.graphicTemplate.new(); + this.container.addChild(this._fasFailureControlHost); + } + } + + public get fasFailureControlHost(): FasFailureControlHost { + if (!this._fasFailureControlHost) { + this._fasFailureControlHost = this.graphicTemplate.new(); + this.container.addChild(this._fasFailureControlHost); + } + return this._fasFailureControlHost; + } + + redraw(cp: Point): void { + this.fasFailureControlHost.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.fasFailureControlHost.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IFasFailureControlHostData): boolean { + data.transform = this.fasFailureControlHost.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param fasFailureControlHost + */ +function buildAbsorbablePositions( + fasFailureControlHost: FasFailureControlHost +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const fasFailureControlHosts = + fasFailureControlHost.queryStore.queryByType( + FasFailureControlHost.Type + ); + const canvas = fasFailureControlHost.getCanvas(); + fasFailureControlHosts.forEach((item) => { + if (item.id === fasFailureControlHost.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class FasFailureControlHostInteraction extends GraphicInteractionPlugin { + static Name = 'fas_failure_control_host_transform'; + constructor(app: IDrawApp) { + super(FasFailureControlHostInteraction.Name, app); + } + static init(app: IDrawApp) { + return new FasFailureControlHostInteraction(app); + } + filter(...grahpics: JlGraphic[]): FasFailureControlHost[] | undefined { + return grahpics + .filter((g) => g.type === FasFailureControlHost.Type) + .map((g) => g as FasFailureControlHost); + } + bind(g: FasFailureControlHost): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: FasFailureControlHost): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const fasFailureControlHost = target.getGraphic() as FasFailureControlHost; + fasFailureControlHost.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(fasFailureControlHost), + }); + } +} diff --git a/src/graphics/FAS/fireFailureControlHost/FasFailureControlHost.json b/src/graphics/FAS/fireFailureControlHost/FasFailureControlHost.json new file mode 100644 index 0000000..4de970d --- /dev/null +++ b/src/graphics/FAS/fireFailureControlHost/FasFailureControlHost.json @@ -0,0 +1,21 @@ +{ + "frames": { + "normal.png": { + "frame": { "x": 0, "y": 0, "w": 32, "h": 53 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 32, "h": 53 }, + "sourceSize": { "w": 32, "h": 53 }, + "anchor": { "x": 0.5, "y": 0.5 } + } + }, + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.1", + "image": "FasFailureControlHost.png", + "format": "RGBA8888", + "size": { "w": 32, "h": 53 }, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:e7620bd2d73cc0b3e2deea9704e7eefc:f129a1d9e4b9ba57720b3861c22b155b:eb2d421f7759984b7713aa4aa5354134$" + } +} diff --git a/src/graphics/FAS/fireFailureControlHost/FasFailureControlHost.png b/src/graphics/FAS/fireFailureControlHost/FasFailureControlHost.png new file mode 100644 index 0000000000000000000000000000000000000000..c789ff667d8eba4275f28f1a1a2ec9b15edc2651 GIT binary patch literal 2271 zcmV<52q5=~P)CM+#}es1jrAP&1T15+cTbD{iCWLhq1j* zY_He5eo|{%J=OjFzE|(n`&J3(Z0*lqQ0+$e1w$wd!GctZc#sBU8W0B(6qzaVBw)pI zS9LjpB?A`>=7JzCkGeo`O7IYZpaC=}E*NOV#4Ruq(8!*RK(W$Qc`hbe5t0=p?gVTU z5DgHN5WsmM1Oq6l;Ju;t5y3WtVz2)oo3 z%qpmA!8wC-g7-r3AObcDG>tHt#!Sl?7X%v_^2pQElBN;L($F}AYoPH$zRV|1T8n|JZ83R?v7j!<+Ac`G7ITC}W?CxY|fyrGo_7LtlA zc4&avEMh!~2>R%$WeF887T5UN(_dyQ?6Si)BONeilikS%WwlM64hi{;s&I@)ORPOT z<>}r8=U_TBl;z&^gtHfw1z{YfOyd%pSgv3A0$JR~sAVu5vNgERV7SHT{uZU*<=$6* z%|aKPhgoUx{)sAiUInU32!X~m>{df+sc5xYNVlPgTO{R0y5mKvk5k@jUdIJPVov+? z83-I_Aq1Rr)J;v^+>u8z1&l&vkWmB+eoo@h2M&@@M2Mnj zP9{x>^M=s~#?=XuSvMeJ>l82)_%p%1PB2>cM zb0ZI(Gs|$sE8l#D?|uC{{O|4uY;JB+RTZPrh}mq$bUG!3fcG9%i*lkfbJKYg)aX3p zPcci8a_djGkoQVPGGl#xoz>M{b9-9&$%O8f|4W&Ns>@i6}NBSCd)FcwM?f| zc6WCVDnf@j$+yp!fWdjLUAxBG`WoJQhQlG#=@jQ2B0{UxVsUYiUav=|+j;W(-*3x% zW~m*$UXL%m@-olWpQ9{GoO28Y1N!|wJ3Bj6RYhIbM6UCAd$|K0z@8R(z{1jQaqHGC zR<_&ZPj$I|{W{Cb%Urs2i5FgYfx52g_xlV61K#`F$DeNJj|OfPa(_e%%n7K{F4`b+ zpnmc^XK87PG)?JtyTozK)vH&z{_L0d^*_H4Js>&-_^=R30u(@bw1g}QsY&Rj9W*jz zc}AM1s45#98@&DY+lvMU;AM45>mE zB08NFV%GvazGnbvWw4hUTrIfz7|-X2283x!^?G0IKI6DFM3oTv7S<%#c82Xal048_ zY_N+p{+W9)C@^v|0R(U-doHRpqm1(PzQ7?-8Y0C+dv8q)%!E)2jT7j`_%wx!j(9yF z=J5oHpv-o1rmyu6LUZ(xMu1qsD$<(EDyTJpFz_^ZJbOaCD?BPX44E`ZaquX9$21C5{~T?iN(9m5c{R!Qt@vfF8Oc z=BrmNkOg#R&(); + } + + doRepaint(): void { + // this._fasFailureControlHost.texture = + // this.fasFailureControlHostTextures.normal; + } +} + +export class FasFailureControlHostTemplate extends JlGraphicTemplate { + fasFailureControlHostTextures?: FasFailureControlHostTextures; + constructor(dataTemplate: IFasFailureControlHostData) { + super(FasFailureControlHost.Type, { dataTemplate }); + this.loadAssets(); + } + new(): FasFailureControlHost { + if (this.fasFailureControlHostTextures) { + const g = new FasFailureControlHost(this.fasFailureControlHostTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasFailureControlHostAssets); + const fasFailureControlHostSheet = new Spritesheet( + texture, + FasFailureControlHostJson + ); + const result = await fasFailureControlHostSheet.parse(); + this.fasFailureControlHostTextures = { + normal: result['normal.png'], + }; + return this.fasFailureControlHostTextures as FasFailureControlHostTextures; + } +} diff --git a/src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignal.ts b/src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignal.ts new file mode 100644 index 0000000..985c73f --- /dev/null +++ b/src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignal.ts @@ -0,0 +1,75 @@ +import { Graphics } from 'pixi.js'; +import { + GraphicData, + JlGraphic, + JlGraphicTemplate, + VectorText, +} from 'jl-graphic'; + +export interface IFireIntercommunicationSignalData extends GraphicData { + get code(): string; // 编号 + set code(v: string); + clone(): IFireIntercommunicationSignalData; + copyFrom(data: IFireIntercommunicationSignalData): void; + eq(other: IFireIntercommunicationSignalData): boolean; +} + +const fireIntercommunicationSignalConsts = { + rectWidth: 64, + rectHeight: 24, + rectBackground: '0x99ccff', + textColor: '0x33cc00', + text: '2号线', + fontSize: 12, +}; + +export class FireIntercommunicationSignal extends JlGraphic { + static Type = 'FireIntercommunicationSignal'; + rectGraphic: Graphics = new Graphics(); + textGraphic: VectorText = new VectorText(); + constructor() { + super(FireIntercommunicationSignal.Type); + this.addChild(this.rectGraphic); + this.addChild(this.textGraphic); + } + + get datas(): IFireIntercommunicationSignalData { + return this.getDatas(); + } + doRepaint(): void { + const rectGraphic = this.rectGraphic; + rectGraphic.clear(); + rectGraphic.beginFill(fireIntercommunicationSignalConsts.rectBackground); + rectGraphic.drawRect( + 0, + 0, + fireIntercommunicationSignalConsts.rectWidth, + fireIntercommunicationSignalConsts.rectHeight + ); + rectGraphic.endFill(); + + this.textGraphic.text = fireIntercommunicationSignalConsts.text; + this.textGraphic.setVectorFontSize( + fireIntercommunicationSignalConsts.fontSize + ); + this.textGraphic.anchor.set(0.5); + this.textGraphic.style.fill = fireIntercommunicationSignalConsts.textColor; + this.textGraphic.position.set( + fireIntercommunicationSignalConsts.rectWidth / 2, + fireIntercommunicationSignalConsts.rectHeight / 2 + ); + } +} + +export class FireIntercommunicationSignalTemplate extends JlGraphicTemplate { + constructor(dataTemplate: IFireIntercommunicationSignalData) { + super(FireIntercommunicationSignal.Type, { + dataTemplate, + }); + } + new(): FireIntercommunicationSignal { + const fireIntercommunicationSignal = new FireIntercommunicationSignal(); + fireIntercommunicationSignal.loadData(this.datas); + return fireIntercommunicationSignal; + } +} diff --git a/src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignalAssistant.ts b/src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignalAssistant.ts new file mode 100644 index 0000000..1632918 --- /dev/null +++ b/src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignalAssistant.ts @@ -0,0 +1,135 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IFireIntercommunicationSignalData, + FireIntercommunicationSignal, + FireIntercommunicationSignalTemplate, +} from './FireIntercommunicationSignal'; + +export class FireIntercommunicationSignalDraw extends GraphicDrawAssistant< + FireIntercommunicationSignalTemplate, + IFireIntercommunicationSignalData +> { + _fireIntercommunicationSignal: FireIntercommunicationSignal | null = null; + constructor(app: IDrawApp, template: FireIntercommunicationSignalTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-fire-intercommunication-signal', + '火灾互联互通信号' + ); + FireIntercommunicationSignalInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._fireIntercommunicationSignal) { + this._fireIntercommunicationSignal = this.graphicTemplate.new(); + this.container.addChild(this._fireIntercommunicationSignal); + this._fireIntercommunicationSignal.doRepaint(); + } + } + + public get fireIntercommunicationSignal(): FireIntercommunicationSignal { + if (!this._fireIntercommunicationSignal) { + this._fireIntercommunicationSignal = this.graphicTemplate.new(); + this.container.addChild(this._fireIntercommunicationSignal); + } + return this._fireIntercommunicationSignal; + } + + redraw(cp: Point): void { + this.fireIntercommunicationSignal.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.fireIntercommunicationSignal.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IFireIntercommunicationSignalData): boolean { + data.transform = this.fireIntercommunicationSignal.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param fireIntercommunicationSignal + */ +function buildAbsorbablePositions( + fireIntercommunicationSignal: FireIntercommunicationSignal +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const fireIntercommunicationSignals = + fireIntercommunicationSignal.queryStore.queryByType( + FireIntercommunicationSignal.Type + ); + const canvas = fireIntercommunicationSignal.getCanvas(); + fireIntercommunicationSignals.forEach((item) => { + if (item.id === fireIntercommunicationSignal.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class FireIntercommunicationSignalInteraction extends GraphicInteractionPlugin { + static Name = 'fire_intercommunication_signal_transform'; + constructor(app: IDrawApp) { + super(FireIntercommunicationSignalInteraction.Name, app); + } + static init(app: IDrawApp) { + return new FireIntercommunicationSignalInteraction(app); + } + filter(...grahpics: JlGraphic[]): FireIntercommunicationSignal[] | undefined { + return grahpics + .filter((g) => g.type === FireIntercommunicationSignal.Type) + .map((g) => g as FireIntercommunicationSignal); + } + bind(g: FireIntercommunicationSignal): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: FireIntercommunicationSignal): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const fireIntercommunicationSignal = + target.getGraphic() as FireIntercommunicationSignal; + fireIntercommunicationSignal.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions( + fireIntercommunicationSignal + ), + }); + } +} diff --git a/src/graphics/FAS/firePump/FirePump.ts b/src/graphics/FAS/firePump/FirePump.ts new file mode 100644 index 0000000..222ec30 --- /dev/null +++ b/src/graphics/FAS/firePump/FirePump.ts @@ -0,0 +1,69 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +// import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IFirePumpData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface FirePumpTextures { + run: Texture; + stop: Texture; + fault: Texture; + interruption: Texture; +} + +export class FirePump extends JlGraphic { + static Type = 'FirePump'; + _firePump: Sprite; + firePumpTextures: FirePumpTextures; + __state = 0; + + constructor(firePumpTextures: FirePumpTextures) { + super(FirePump.Type); + this._firePump = new Sprite(); + this.firePumpTextures = firePumpTextures; + this._firePump.anchor.set(0.5); + this.addChild(this._firePump); + this._firePump.texture = this.firePumpTextures.run; + } + get code(): string { + return this.datas.code; + } + get datas(): IFirePumpData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class FirePumpTemplate extends JlGraphicTemplate { + firePumpTextures?: FirePumpTextures; + constructor(dataTemplate: IFirePumpData) { + super(FirePump.Type, { dataTemplate }); + this.loadAssets(); + } + new(): FirePump { + if (this.firePumpTextures) { + const g = new FirePump(this.firePumpTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const firePumpSheet = new Spritesheet(texture, FasDeviceJson); + const result = await firePumpSheet.parse(); + this.firePumpTextures = { + run: result['firePumpRun.png'], + stop: result['firePumpStop.png'], + fault: result['firePumpFault.png'], + interruption: result['firePumpInterruption.png'], + }; + return this.firePumpTextures as FirePumpTextures; + } +} diff --git a/src/graphics/FAS/firePump/FirePumpAssistant.ts b/src/graphics/FAS/firePump/FirePumpAssistant.ts new file mode 100644 index 0000000..6a5a79d --- /dev/null +++ b/src/graphics/FAS/firePump/FirePumpAssistant.ts @@ -0,0 +1,115 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { IFirePumpData, FirePump, FirePumpTemplate } from './FirePump'; + +export class FirePumpDraw extends GraphicDrawAssistant< + FirePumpTemplate, + IFirePumpData +> { + _firePump: FirePump | null = null; + constructor(app: IDrawApp, template: FirePumpTemplate) { + super(app, template, 'svguse:../drawIcon.svg#icon-fire-pump', '消防泵'); + FirePumpInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._firePump) { + this._firePump = this.graphicTemplate.new(); + this.container.addChild(this._firePump); + } + } + + public get firePump(): FirePump { + if (!this._firePump) { + this._firePump = this.graphicTemplate.new(); + this.container.addChild(this._firePump); + } + return this._firePump; + } + + redraw(cp: Point): void { + this.firePump.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.firePump.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IFirePumpData): boolean { + data.transform = this.firePump.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param firePump + */ +function buildAbsorbablePositions(firePump: FirePump): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const firePumps = firePump.queryStore.queryByType(FirePump.Type); + const canvas = firePump.getCanvas(); + firePumps.forEach((item) => { + if (item.id === firePump.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class FirePumpInteraction extends GraphicInteractionPlugin { + static Name = 'fire_pump_transform'; + constructor(app: IDrawApp) { + super(FirePumpInteraction.Name, app); + } + static init(app: IDrawApp) { + return new FirePumpInteraction(app); + } + filter(...grahpics: JlGraphic[]): FirePump[] | undefined { + return grahpics + .filter((g) => g.type === FirePump.Type) + .map((g) => g as FirePump); + } + bind(g: FirePump): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: FirePump): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const firePump = target.getGraphic() as FirePump; + firePump.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(firePump), + }); + } +} diff --git a/src/graphics/FAS/fireShutter/FireShutter.ts b/src/graphics/FAS/fireShutter/FireShutter.ts new file mode 100644 index 0000000..cabeb67 --- /dev/null +++ b/src/graphics/FAS/fireShutter/FireShutter.ts @@ -0,0 +1,71 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +// import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IFireShutterData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface FireShutterTextures { + normal: Texture; + alarm: Texture; + fall: Texture; + interruption: Texture; + halfFall: Texture; +} + +export class FireShutter extends JlGraphic { + static Type = 'FireShutter'; + _fireShutter: Sprite; + fireShutterTextures: FireShutterTextures; + __state = 0; + + constructor(fireShutterTextures: FireShutterTextures) { + super(FireShutter.Type); + this._fireShutter = new Sprite(); + this.fireShutterTextures = fireShutterTextures; + this._fireShutter.anchor.set(0.5); + this.addChild(this._fireShutter); + this._fireShutter.texture = this.fireShutterTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IFireShutterData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class FireShutterTemplate extends JlGraphicTemplate { + fireShutterTextures?: FireShutterTextures; + constructor(dataTemplate: IFireShutterData) { + super(FireShutter.Type, { dataTemplate }); + this.loadAssets(); + } + new(): FireShutter { + if (this.fireShutterTextures) { + const g = new FireShutter(this.fireShutterTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const fireShutterSheet = new Spritesheet(texture, FasDeviceJson); + const result = await fireShutterSheet.parse(); + this.fireShutterTextures = { + normal: result['fireShutterNormal.png'], + alarm: result['fireShutterAlarm.png'], + fall: result['fireShutterFall.png'], + interruption: result['fireShutterInterruption.png'], + halfFall: result['fireShutterHalfFall.png'], + }; + return this.fireShutterTextures as FireShutterTextures; + } +} diff --git a/src/graphics/FAS/fireShutter/FireShutterAssistant.ts b/src/graphics/FAS/fireShutter/FireShutterAssistant.ts new file mode 100644 index 0000000..dc4c3b2 --- /dev/null +++ b/src/graphics/FAS/fireShutter/FireShutterAssistant.ts @@ -0,0 +1,128 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IFireShutterData, + FireShutter, + FireShutterTemplate, +} from './FireShutter'; + +export class FireShutterDraw extends GraphicDrawAssistant< + FireShutterTemplate, + IFireShutterData +> { + _fireShutter: FireShutter | null = null; + constructor(app: IDrawApp, template: FireShutterTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-fire-shutter', + '防火卷帘' + ); + FireShutterInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._fireShutter) { + this._fireShutter = this.graphicTemplate.new(); + this.container.addChild(this._fireShutter); + } + } + + public get fireShutter(): FireShutter { + if (!this._fireShutter) { + this._fireShutter = this.graphicTemplate.new(); + this.container.addChild(this._fireShutter); + } + return this._fireShutter; + } + + redraw(cp: Point): void { + this.fireShutter.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.fireShutter.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IFireShutterData): boolean { + data.transform = this.fireShutter.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param fireShutter + */ +function buildAbsorbablePositions( + fireShutter: FireShutter +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const fireShutters = fireShutter.queryStore.queryByType( + FireShutter.Type + ); + const canvas = fireShutter.getCanvas(); + fireShutters.forEach((item) => { + if (item.id === fireShutter.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class FireShutterInteraction extends GraphicInteractionPlugin { + static Name = 'fas_alarm_transform'; + constructor(app: IDrawApp) { + super(FireShutterInteraction.Name, app); + } + static init(app: IDrawApp) { + return new FireShutterInteraction(app); + } + filter(...grahpics: JlGraphic[]): FireShutter[] | undefined { + return grahpics + .filter((g) => g.type === FireShutter.Type) + .map((g) => g as FireShutter); + } + bind(g: FireShutter): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: FireShutter): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const fireShutter = target.getGraphic() as FireShutter; + fireShutter.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(fireShutter), + }); + } +} diff --git a/src/graphics/FAS/fireValve/FireValve.ts b/src/graphics/FAS/fireValve/FireValve.ts new file mode 100644 index 0000000..7a691d0 --- /dev/null +++ b/src/graphics/FAS/fireValve/FireValve.ts @@ -0,0 +1,70 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IFireValveData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface FireValveTextures { + normal: Texture; + fireAlarm: Texture; + fault: Texture; + interruption: Texture; + isolate: Texture; +} + +export class FireValve extends JlGraphic { + static Type = 'FireValve'; + _fireValve: Sprite; + fireValveTextures: FireValveTextures; + __state = 0; + + constructor(fireValveTextures: FireValveTextures) { + super(FireValve.Type); + this._fireValve = new Sprite(); + this.fireValveTextures = fireValveTextures; + this._fireValve.anchor.set(0.5); + this.addChild(this._fireValve); + this._fireValve.texture = this.fireValveTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IFireValveData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class FireValveTemplate extends JlGraphicTemplate { + fireValveTextures?: FireValveTextures; + constructor(dataTemplate: IFireValveData) { + super(FireValve.Type, { dataTemplate }); + this.loadAssets(); + } + new(): FireValve { + if (this.fireValveTextures) { + const g = new FireValve(this.fireValveTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const fireValveSheet = new Spritesheet(texture, FasDeviceJson); + const result = await fireValveSheet.parse(); + this.fireValveTextures = { + normal: result['fireValveNormal.png'], + fireAlarm: result['fireValveFireAlarm.png'], + fault: result['fireValveFault.png'], + interruption: result['fireValveInterruption.png'], + isolate: result['fireValveIsolate.png'], + }; + return this.fireValveTextures as FireValveTextures; + } +} diff --git a/src/graphics/FAS/fireValve/FireValveAssistant.ts b/src/graphics/FAS/fireValve/FireValveAssistant.ts new file mode 100644 index 0000000..106530a --- /dev/null +++ b/src/graphics/FAS/fireValve/FireValveAssistant.ts @@ -0,0 +1,117 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { IFireValveData, FireValve, FireValveTemplate } from './FireValve'; + +export class FireValveDraw extends GraphicDrawAssistant< + FireValveTemplate, + IFireValveData +> { + _fireValve: FireValve | null = null; + constructor(app: IDrawApp, template: FireValveTemplate) { + super(app, template, 'svguse:../drawIcon.svg#icon-fire-valve', '防火阀'); + FireValveInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._fireValve) { + this._fireValve = this.graphicTemplate.new(); + this.container.addChild(this._fireValve); + } + } + + public get fireValve(): FireValve { + if (!this._fireValve) { + this._fireValve = this.graphicTemplate.new(); + this.container.addChild(this._fireValve); + } + return this._fireValve; + } + + redraw(cp: Point): void { + this.fireValve.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.fireValve.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IFireValveData): boolean { + data.transform = this.fireValve.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param fireValve + */ +function buildAbsorbablePositions(fireValve: FireValve): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const fireValves = fireValve.queryStore.queryByType( + FireValve.Type + ); + const canvas = fireValve.getCanvas(); + fireValves.forEach((item) => { + if (item.id === fireValve.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class FireValveInteraction extends GraphicInteractionPlugin { + static Name = 'fire_valve_transform'; + constructor(app: IDrawApp) { + super(FireValveInteraction.Name, app); + } + static init(app: IDrawApp) { + return new FireValveInteraction(app); + } + filter(...grahpics: JlGraphic[]): FireValve[] | undefined { + return grahpics + .filter((g) => g.type === FireValve.Type) + .map((g) => g as FireValve); + } + bind(g: FireValve): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: FireValve): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const fireValve = target.getGraphic() as FireValve; + fireValve.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(fireValve), + }); + } +} diff --git a/src/graphics/FAS/manualAlarmButton/ManualAlarmButton.json b/src/graphics/FAS/manualAlarmButton/ManualAlarmButton.json new file mode 100644 index 0000000..8225724 --- /dev/null +++ b/src/graphics/FAS/manualAlarmButton/ManualAlarmButton.json @@ -0,0 +1,21 @@ +{ + "frames": { + "normal.png": { + "frame": { "x": 0, "y": 0, "w": 26, "h": 24 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 26, "h": 24 }, + "sourceSize": { "w": 26, "h": 24 }, + "anchor": { "x": 0.5, "y": 0.5 } + } + }, + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.1", + "image": "ManualAlarmButton.png", + "format": "RGBA8888", + "size": { "w": 32, "h": 53 }, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:e7620bd2d73cc0b3e2deea9704e7eefc:f129a1d9e4b9ba57720b3861c22b155b:eb2d421f7759984b7713aa4aa5354134$" + } +} diff --git a/src/graphics/FAS/manualAlarmButton/ManualAlarmButton.png b/src/graphics/FAS/manualAlarmButton/ManualAlarmButton.png new file mode 100644 index 0000000000000000000000000000000000000000..1450d1789f707cee700114e8963d7979c3088ca3 GIT binary patch literal 4061 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 + } + + doRepaint(): void {} +} + +export class ManualAlarmButtonTemplate extends JlGraphicTemplate { + manualAlarmButtonTextures?: ManualAlarmButtonTextures; + constructor(dataTemplate: IManualAlarmButtonData) { + super(ManualAlarmButton.Type, { dataTemplate }); + this.loadAssets(); + } + new(): ManualAlarmButton { + if (this.manualAlarmButtonTextures) { + const g = new ManualAlarmButton(this.manualAlarmButtonTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(ManualAlarmButtonAssets); + const manualAlarmButtonSheet = new Spritesheet( + texture, + ManualAlarmButtonJson + ); + const result = await manualAlarmButtonSheet.parse(); + this.manualAlarmButtonTextures = { + normal: result['normal.png'], + }; + return this.manualAlarmButtonTextures as ManualAlarmButtonTextures; + } +} diff --git a/src/graphics/FAS/manualAlarmButton/ManualAlarmButtonAssistant.ts b/src/graphics/FAS/manualAlarmButton/ManualAlarmButtonAssistant.ts new file mode 100644 index 0000000..edf6d51 --- /dev/null +++ b/src/graphics/FAS/manualAlarmButton/ManualAlarmButtonAssistant.ts @@ -0,0 +1,131 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IManualAlarmButtonData, + ManualAlarmButton, + ManualAlarmButtonTemplate, +} from './ManualAlarmButton'; + +export class ManualAlarmButtonDraw extends GraphicDrawAssistant< + ManualAlarmButtonTemplate, + IManualAlarmButtonData +> { + _manualAlarmButton: ManualAlarmButton | null = null; + constructor(app: IDrawApp, template: ManualAlarmButtonTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-manual-alarm-button', + '手动火灾报警按钮' + ); + ManualAlarmButtonInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._manualAlarmButton) { + this._manualAlarmButton = this.graphicTemplate.new(); + this.container.addChild(this._manualAlarmButton); + } + } + + public get manualAlarmButton(): ManualAlarmButton { + if (!this._manualAlarmButton) { + this._manualAlarmButton = this.graphicTemplate.new(); + this.container.addChild(this._manualAlarmButton); + } + return this._manualAlarmButton; + } + + redraw(cp: Point): void { + this.manualAlarmButton.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.manualAlarmButton.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IManualAlarmButtonData): boolean { + data.transform = this.manualAlarmButton.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param manualAlarmButton + */ +function buildAbsorbablePositions( + manualAlarmButton: ManualAlarmButton +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const manualAlarmButtons = + manualAlarmButton.queryStore.queryByType( + ManualAlarmButton.Type + ); + const canvas = manualAlarmButton.getCanvas(); + manualAlarmButtons.forEach((item) => { + if (item.id === manualAlarmButton.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class ManualAlarmButtonInteraction extends GraphicInteractionPlugin { + static Name = 'manual_alarm_button_transform'; + constructor(app: IDrawApp) { + super(ManualAlarmButtonInteraction.Name, app); + } + static init(app: IDrawApp) { + return new ManualAlarmButtonInteraction(app); + } + filter(...grahpics: JlGraphic[]): ManualAlarmButton[] | undefined { + return grahpics + .filter((g) => g.type === ManualAlarmButton.Type) + .map((g) => g as ManualAlarmButton); + } + bind(g: ManualAlarmButton): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: ManualAlarmButton): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const manualAlarmButton = target.getGraphic() as ManualAlarmButton; + manualAlarmButton.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(manualAlarmButton), + }); + } +} diff --git a/src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupply.ts b/src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupply.ts new file mode 100644 index 0000000..540a247 --- /dev/null +++ b/src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupply.ts @@ -0,0 +1,68 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface INonFirePowerSupplyData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface NonFirePowerSupplyTextures { + normal: Texture; + run: Texture; + fault: Texture; + interruption: Texture; +} + +export class NonFirePowerSupply extends JlGraphic { + static Type = 'NonFirePowerSupply'; + _nonFirePowerSupply: Sprite; + nonFirePowerSupplyTextures: NonFirePowerSupplyTextures; + __state = 0; + + constructor(nonFirePowerSupplyTextures: NonFirePowerSupplyTextures) { + super(NonFirePowerSupply.Type); + this._nonFirePowerSupply = new Sprite(); + this.nonFirePowerSupplyTextures = nonFirePowerSupplyTextures; + this._nonFirePowerSupply.anchor.set(0.5); + this.addChild(this._nonFirePowerSupply); + this._nonFirePowerSupply.texture = this.nonFirePowerSupplyTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): INonFirePowerSupplyData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class NonFirePowerSupplyTemplate extends JlGraphicTemplate { + nonFirePowerSupplyTextures?: NonFirePowerSupplyTextures; + constructor(dataTemplate: INonFirePowerSupplyData) { + super(NonFirePowerSupply.Type, { dataTemplate }); + this.loadAssets(); + } + new(): NonFirePowerSupply { + if (this.nonFirePowerSupplyTextures) { + const g = new NonFirePowerSupply(this.nonFirePowerSupplyTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const nonFirePowerSupplySheet = new Spritesheet(texture, FasDeviceJson); + const result = await nonFirePowerSupplySheet.parse(); + this.nonFirePowerSupplyTextures = { + normal: result['nonFirePowerSupplyNormal.png'], + run: result['nonFirePowerSupplyRun.png'], + fault: result['nonFirePowerSupplyFault.png'], + interruption: result['nonFirePowerSupplyInterruption.png'], + }; + return this.nonFirePowerSupplyTextures as NonFirePowerSupplyTextures; + } +} diff --git a/src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupplyAssistant.ts b/src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupplyAssistant.ts new file mode 100644 index 0000000..237b221 --- /dev/null +++ b/src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupplyAssistant.ts @@ -0,0 +1,131 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + INonFirePowerSupplyData, + NonFirePowerSupply, + NonFirePowerSupplyTemplate, +} from './NonFirePowerSupply'; + +export class NonFirePowerSupplyDraw extends GraphicDrawAssistant< + NonFirePowerSupplyTemplate, + INonFirePowerSupplyData +> { + _nonFirePowerSupply: NonFirePowerSupply | null = null; + constructor(app: IDrawApp, template: NonFirePowerSupplyTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-non-fire-power-supply', + '非消防电源' + ); + NonFirePowerSupplyInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._nonFirePowerSupply) { + this._nonFirePowerSupply = this.graphicTemplate.new(); + this.container.addChild(this._nonFirePowerSupply); + } + } + + public get nonFirePowerSupply(): NonFirePowerSupply { + if (!this._nonFirePowerSupply) { + this._nonFirePowerSupply = this.graphicTemplate.new(); + this.container.addChild(this._nonFirePowerSupply); + } + return this._nonFirePowerSupply; + } + + redraw(cp: Point): void { + this.nonFirePowerSupply.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.nonFirePowerSupply.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: INonFirePowerSupplyData): boolean { + data.transform = this.nonFirePowerSupply.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param nonFirePowerSupply + */ +function buildAbsorbablePositions( + nonFirePowerSupply: NonFirePowerSupply +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const nonFirePowerSupplys = + nonFirePowerSupply.queryStore.queryByType( + NonFirePowerSupply.Type + ); + const canvas = nonFirePowerSupply.getCanvas(); + nonFirePowerSupplys.forEach((item) => { + if (item.id === nonFirePowerSupply.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class NonFirePowerSupplyInteraction extends GraphicInteractionPlugin { + static Name = 'non_fire_power_supply_transform'; + constructor(app: IDrawApp) { + super(NonFirePowerSupplyInteraction.Name, app); + } + static init(app: IDrawApp) { + return new NonFirePowerSupplyInteraction(app); + } + filter(...grahpics: JlGraphic[]): NonFirePowerSupply[] | undefined { + return grahpics + .filter((g) => g.type === NonFirePowerSupply.Type) + .map((g) => g as NonFirePowerSupply); + } + bind(g: NonFirePowerSupply): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: NonFirePowerSupply): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const nonFirePowerSupply = target.getGraphic() as NonFirePowerSupply; + nonFirePowerSupply.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(nonFirePowerSupply), + }); + } +} diff --git a/src/graphics/FAS/pndDevice/FasDevice.png b/src/graphics/FAS/pndDevice/FasDevice.png new file mode 100644 index 0000000000000000000000000000000000000000..5afbae5c6daa0f0de92cc7fbc82782552b62d807 GIT binary patch literal 121245 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
VjE!G2P?B=z1VZpz%kEr+fF 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 XCO$LF=cd?$00000NkvXXu0mjf{x~t! literal 0 HcmV?d00001 diff --git a/src/graphics/FAS/pndDevice/PngDevice.json b/src/graphics/FAS/pndDevice/PngDevice.json new file mode 100644 index 0000000..b412b54 --- /dev/null +++ b/src/graphics/FAS/pndDevice/PngDevice.json @@ -0,0 +1,725 @@ +{ + "frames": { + "fasFailureControlHostNormal.png": { + "frame": { "x": 0, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fasFailureControlHostFault.png": { + "frame": { "x": 32, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fasFailureControlHostInterruption.png": { + "frame": { "x": 64, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "smokeDetectorFireAlarm.png": { + "frame": { "x": 96, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "smokeDetectorNormal.png": { + "frame": { "x": 128, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "smokeDetectorIsolate.png": { + "frame": { "x": 160, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "smokeDetectorFault.png": { + "frame": { "x": 192, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "smokeDetectorForewarning.png": { + "frame": { "x": 224, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "smokeDetectorInterruption.png": { + "frame": { "x": 256, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "temperatureDetectorFireAlarm.png": { + "frame": { "x": 288, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "temperatureDetectorNormal.png": { + "frame": { "x": 320, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "temperatureDetectorIsolate.png": { + "frame": { "x": 352, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "temperatureDetectorFault.png": { + "frame": { "x": 384, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "temperatureDetectorForewarning.png": { + "frame": { "x": 416, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "temperatureDetectorInterruption.png": { + "frame": { "x": 448, "y": 0, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "manualAlarmButtonFireAlarm.png": { + "frame": { "x": 0, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "manualAlarmButtonNormal.png": { + "frame": { "x": 32, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "manualAlarmButtonIsolate.png": { + "frame": { "x": 64, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "manualAlarmButtonFault.png": { + "frame": { "x": 96, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "manualAlarmButtonInterruption.png": { + "frame": { "x": 128, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "gasExtinguishingNormal.png": { + "frame": { "x": 160, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "gasExtinguishingFault.png": { + "frame": { "x": 192, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "gasExtinguishingIsolate.png": { + "frame": { "x": 224, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "gasExtinguishingForewarning.png": { + "frame": { "x": 256, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "gasExtinguishingAlarm.png": { + "frame": { "x": 288, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "gasExtinguishingInterruption.png": { + "frame": { "x": 320, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fasAlarmAlarm.png": { + "frame": { "x": 352, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fasAlarmNormal.png": { + "frame": { "x": 384, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fasAlarmIsolate.png": { + "frame": { "x": 416, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fasAlarmFault.png": { + "frame": { "x": 448, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fasAlarmInterruption.png": { + "frame": { "x": 480, "y": 32, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireShutterNormal.png": { + "frame": { "x": 0, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireShutterAlarm.png": { + "frame": { "x": 32, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireShutterFall.png": { + "frame": { "x": 64, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireShutterInterruption.png": { + "frame": { "x": 96, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireShutterHalfFall.png": { + "frame": { "x": 128, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "firePumpRun.png": { + "frame": { "x": 160, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "firePumpStop.png": { + "frame": { "x": 192, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "firePumpFault.png": { + "frame": { "x": 224, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "firePumpInterruption.png": { + "frame": { "x": 256, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "sprayPumpRun.png": { + "frame": { "x": 288, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "sprayPumpStop.png": { + "frame": { "x": 320, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "sprayPumpFault.png": { + "frame": { "x": 356, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "sprayPumpInterruption.png": { + "frame": { "x": 388, "y": 64, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "stabilizedPressurePumpRun.png": { + "frame": { "x": 0, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "stabilizedPressurePumpStop.png": { + "frame": { "x": 32, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "stabilizedPressurePumpFault.png": { + "frame": { "x": 64, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "stabilizedPressurePumpInterruption.png": { + "frame": { "x": 96, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "nonFirePowerSupplyRun.png": { + "frame": { "x": 128, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "nonFirePowerSupplyNormal.png": { + "frame": { "x": 160, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "nonFirePowerSupplyFault.png": { + "frame": { "x": 192, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "nonFirePowerSupplyInterruption.png": { + "frame": { "x": 224, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "waterFlowIndicatorRun.png": { + "frame": { "x": 256, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "waterFlowIndicatorNormal.png": { + "frame": { "x": 288, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "waterFlowIndicatorStop.png": { + "frame": { "x": 320, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "waterFlowIndicatorInterruption.png": { + "frame": { "x": 352, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "signalButterflyValveRun.png": { + "frame": { "x": 384, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "signalButterflyValveNormal.png": { + "frame": { "x": 384, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "signalButterflyValveStop.png": { + "frame": { "x": 384, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "signalButterflyValveInterruption.png": { + "frame": { "x": 384, "y": 96, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "pressureSwitchRun.png": { + "frame": { "x": 0, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "pressureSwitchNormal.png": { + "frame": { "x": 32, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "pressureSwitchFault.png": { + "frame": { "x": 64, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "pressureSwitchInterruption.png": { + "frame": { "x": 96, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "faultValveRun.png": { + "frame": { "x": 128, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "faultValveNormal.png": { + "frame": { "x": 160, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "faultValveFault.png": { + "frame": { "x": 192, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "faultValveInterruption.png": { + "frame": { "x": 224, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "emergencyLightingRun.png": { + "frame": { "x": 256, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "emergencyLightingNormal.png": { + "frame": { "x": 288, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "emergencyLightingFault.png": { + "frame": { "x": 320, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "emergencyLightingInterruption.png": { + "frame": { "x": 352, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "elevatorLiftToTopFireFault.png": { + "frame": { "x": 384, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "elevatorLiftToTopNormal.png": { + "frame": { "x": 416, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "elevatorLiftToTopFault.png": { + "frame": { "x": 448, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "elevatorLiftToTopInterruption.png": { + "frame": { "x": 480, "y": 128, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "electricButterflyValveFireAlarm.png": { + "frame": { "x": 0, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "electricButterflyValveNormal.png": { + "frame": { "x": 32, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "electricButterflyValveFault.png": { + "frame": { "x": 64, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "electricButterflyValveInterruption.png": { + "frame": { "x": 96, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireValveFireAlarm.png": { + "frame": { "x": 128, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireValveNormal.png": { + "frame": { "x": 160, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireValveIsolate.png": { + "frame": { "x": 192, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireValveFault.png": { + "frame": { "x": 224, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "fireValveInterruption.png": { + "frame": { "x": 256, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "electricFireExtinguishingValveFireAlarm.png": { + "frame": { "x": 288, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "electricFireExtinguishingValveNormal.png": { + "frame": { "x": 320, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "electricFireExtinguishingValveFault.png": { + "frame": { "x": 352, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + }, + "electricFireExtinguishingValveInterruption.png": { + "frame": { "x": 384, "y": 160, "w": 32, "h": 32 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 512, "h": 194 }, + "sourceSize": { "w": 512, "h": 194 }, + "anchor": { "x": 0.5, "y": 0.5 } + } + }, + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.1", + "image": "FasDevice.png", + "format": "RGBA8888", + "size": { "w": 512, "h": 194 }, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:e7620bd2d73cc0b3e2deea9704e7eefc:f129a1d9e4b9ba57720b3861c22b155b:eb2d421f7759984b7713aa4aa5354134$" + } +} diff --git a/src/graphics/FAS/pressureSwitch/PressureSwitch.ts b/src/graphics/FAS/pressureSwitch/PressureSwitch.ts new file mode 100644 index 0000000..f2316ab --- /dev/null +++ b/src/graphics/FAS/pressureSwitch/PressureSwitch.ts @@ -0,0 +1,68 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IPressureSwitchData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface PressureSwitchTextures { + normal: Texture; + run: Texture; + fault: Texture; + interruption: Texture; +} + +export class PressureSwitch extends JlGraphic { + static Type = 'PressureSwitch'; + _pressureSwitch: Sprite; + pressureSwitchTextures: PressureSwitchTextures; + __state = 0; + + constructor(pressureSwitchTextures: PressureSwitchTextures) { + super(PressureSwitch.Type); + this._pressureSwitch = new Sprite(); + this.pressureSwitchTextures = pressureSwitchTextures; + this._pressureSwitch.anchor.set(0.5); + this.addChild(this._pressureSwitch); + this._pressureSwitch.texture = this.pressureSwitchTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IPressureSwitchData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class PressureSwitchTemplate extends JlGraphicTemplate { + pressureSwitchTextures?: PressureSwitchTextures; + constructor(dataTemplate: IPressureSwitchData) { + super(PressureSwitch.Type, { dataTemplate }); + this.loadAssets(); + } + new(): PressureSwitch { + if (this.pressureSwitchTextures) { + const g = new PressureSwitch(this.pressureSwitchTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const pressureSwitchSheet = new Spritesheet(texture, FasDeviceJson); + const result = await pressureSwitchSheet.parse(); + this.pressureSwitchTextures = { + normal: result['pressureSwitchNormal.png'], + run: result['pressureSwitchRun.png'], + fault: result['pressureSwitchFault.png'], + interruption: result['pressureSwitchInterruption.png'], + }; + return this.pressureSwitchTextures as PressureSwitchTextures; + } +} diff --git a/src/graphics/FAS/pressureSwitch/PressureSwitchAssistant.ts b/src/graphics/FAS/pressureSwitch/PressureSwitchAssistant.ts new file mode 100644 index 0000000..9406eb0 --- /dev/null +++ b/src/graphics/FAS/pressureSwitch/PressureSwitchAssistant.ts @@ -0,0 +1,123 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IPressureSwitchData, + PressureSwitch, + PressureSwitchTemplate, +} from './PressureSwitch'; + +export class PressureSwitchDraw extends GraphicDrawAssistant< + PressureSwitchTemplate, + IPressureSwitchData +> { + _pressureSwitch: PressureSwitch | null = null; + constructor(app: IDrawApp, template: PressureSwitchTemplate) { + super(app, template, 'svguse:../drawIcon.svg#icon-fault-valve', '压力开关'); + PressureSwitchInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._pressureSwitch) { + this._pressureSwitch = this.graphicTemplate.new(); + this.container.addChild(this._pressureSwitch); + } + } + + public get pressureSwitch(): PressureSwitch { + if (!this._pressureSwitch) { + this._pressureSwitch = this.graphicTemplate.new(); + this.container.addChild(this._pressureSwitch); + } + return this._pressureSwitch; + } + + redraw(cp: Point): void { + this.pressureSwitch.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.pressureSwitch.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IPressureSwitchData): boolean { + data.transform = this.pressureSwitch.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param pressureSwitch + */ +function buildAbsorbablePositions( + pressureSwitch: PressureSwitch +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const pressureSwitchs = pressureSwitch.queryStore.queryByType( + PressureSwitch.Type + ); + const canvas = pressureSwitch.getCanvas(); + pressureSwitchs.forEach((item) => { + if (item.id === pressureSwitch.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class PressureSwitchInteraction extends GraphicInteractionPlugin { + static Name = 'pressure_switch_transform'; + constructor(app: IDrawApp) { + super(PressureSwitchInteraction.Name, app); + } + static init(app: IDrawApp) { + return new PressureSwitchInteraction(app); + } + filter(...grahpics: JlGraphic[]): PressureSwitch[] | undefined { + return grahpics + .filter((g) => g.type === PressureSwitch.Type) + .map((g) => g as PressureSwitch); + } + bind(g: PressureSwitch): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: PressureSwitch): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const pressureSwitch = target.getGraphic() as PressureSwitch; + pressureSwitch.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(pressureSwitch), + }); + } +} diff --git a/src/graphics/FAS/signalButterflyValve/SignalButterflyValve.ts b/src/graphics/FAS/signalButterflyValve/SignalButterflyValve.ts new file mode 100644 index 0000000..9cb80fb --- /dev/null +++ b/src/graphics/FAS/signalButterflyValve/SignalButterflyValve.ts @@ -0,0 +1,69 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface ISignalButterflyValveData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface SignalButterflyValveTextures { + normal: Texture; + run: Texture; + stop: Texture; + interruption: Texture; +} + +export class SignalButterflyValve extends JlGraphic { + static Type = 'SignalButterflyValve'; + _signalButterflyValve: Sprite; + signalButterflyValveTextures: SignalButterflyValveTextures; + __state = 0; + + constructor(signalButterflyValveTextures: SignalButterflyValveTextures) { + super(SignalButterflyValve.Type); + this._signalButterflyValve = new Sprite(); + this.signalButterflyValveTextures = signalButterflyValveTextures; + this._signalButterflyValve.anchor.set(0.5); + this.addChild(this._signalButterflyValve); + this._signalButterflyValve.texture = + this.signalButterflyValveTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): ISignalButterflyValveData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class SignalButterflyValveTemplate extends JlGraphicTemplate { + signalButterflyValveTextures?: SignalButterflyValveTextures; + constructor(dataTemplate: ISignalButterflyValveData) { + super(SignalButterflyValve.Type, { dataTemplate }); + this.loadAssets(); + } + new(): SignalButterflyValve { + if (this.signalButterflyValveTextures) { + const g = new SignalButterflyValve(this.signalButterflyValveTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const signalButterflyValveSheet = new Spritesheet(texture, FasDeviceJson); + const result = await signalButterflyValveSheet.parse(); + this.signalButterflyValveTextures = { + normal: result['signalButterflyValveNormal.png'], + run: result['signalButterflyValveRun.png'], + stop: result['signalButterflyValveStop.png'], + interruption: result['signalButterflyValveInterruption.png'], + }; + return this.signalButterflyValveTextures as SignalButterflyValveTextures; + } +} diff --git a/src/graphics/FAS/signalButterflyValve/SignalButterflyValveAssistant.ts b/src/graphics/FAS/signalButterflyValve/SignalButterflyValveAssistant.ts new file mode 100644 index 0000000..678059e --- /dev/null +++ b/src/graphics/FAS/signalButterflyValve/SignalButterflyValveAssistant.ts @@ -0,0 +1,131 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + ISignalButterflyValveData, + SignalButterflyValve, + SignalButterflyValveTemplate, +} from './SignalButterflyValve'; + +export class SignalButterflyValveDraw extends GraphicDrawAssistant< + SignalButterflyValveTemplate, + ISignalButterflyValveData +> { + _signalButterflyValve: SignalButterflyValve | null = null; + constructor(app: IDrawApp, template: SignalButterflyValveTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-signal-butterfly-valve', + '信号蝶阀' + ); + SignalButterflyValveInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._signalButterflyValve) { + this._signalButterflyValve = this.graphicTemplate.new(); + this.container.addChild(this._signalButterflyValve); + } + } + + public get signalButterflyValve(): SignalButterflyValve { + if (!this._signalButterflyValve) { + this._signalButterflyValve = this.graphicTemplate.new(); + this.container.addChild(this._signalButterflyValve); + } + return this._signalButterflyValve; + } + + redraw(cp: Point): void { + this.signalButterflyValve.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.signalButterflyValve.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: ISignalButterflyValveData): boolean { + data.transform = this.signalButterflyValve.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param signalButterflyValve + */ +function buildAbsorbablePositions( + signalButterflyValve: SignalButterflyValve +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const signalButterflyValves = + signalButterflyValve.queryStore.queryByType( + SignalButterflyValve.Type + ); + const canvas = signalButterflyValve.getCanvas(); + signalButterflyValves.forEach((item) => { + if (item.id === signalButterflyValve.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class SignalButterflyValveInteraction extends GraphicInteractionPlugin { + static Name = 'signal_butterfly_valve_transform'; + constructor(app: IDrawApp) { + super(SignalButterflyValveInteraction.Name, app); + } + static init(app: IDrawApp) { + return new SignalButterflyValveInteraction(app); + } + filter(...grahpics: JlGraphic[]): SignalButterflyValve[] | undefined { + return grahpics + .filter((g) => g.type === SignalButterflyValve.Type) + .map((g) => g as SignalButterflyValve); + } + bind(g: SignalButterflyValve): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: SignalButterflyValve): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const signalButterflyValve = target.getGraphic() as SignalButterflyValve; + signalButterflyValve.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(signalButterflyValve), + }); + } +} diff --git a/src/graphics/FAS/smokeDetector/SmokeDetector.ts b/src/graphics/FAS/smokeDetector/SmokeDetector.ts new file mode 100644 index 0000000..514be5a --- /dev/null +++ b/src/graphics/FAS/smokeDetector/SmokeDetector.ts @@ -0,0 +1,73 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +// import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface ISmokeDetectorData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface SmokeDetectorTextures { + normal: Texture; + fireAlarm: Texture; + isolate: Texture; + fault: Texture; + forewarning: Texture; + interruption: Texture; +} + +export class SmokeDetector extends JlGraphic { + static Type = 'SmokeDetector'; + _smokeDetector: Sprite; + smokeDetectorTextures: SmokeDetectorTextures; + __state = 0; + + constructor(smokeDetectorTextures: SmokeDetectorTextures) { + super(SmokeDetector.Type); + this._smokeDetector = new Sprite(); + this.smokeDetectorTextures = smokeDetectorTextures; + this._smokeDetector.anchor.set(0.5); + this.addChild(this._smokeDetector); + this._smokeDetector.texture = this.smokeDetectorTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): ISmokeDetectorData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class SmokeDetectorTemplate extends JlGraphicTemplate { + smokeDetectorTextures?: SmokeDetectorTextures; + constructor(dataTemplate: ISmokeDetectorData) { + super(SmokeDetector.Type, { dataTemplate }); + this.loadAssets(); + } + new(): SmokeDetector { + if (this.smokeDetectorTextures) { + const g = new SmokeDetector(this.smokeDetectorTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const smokeDetectorSheet = new Spritesheet(texture, FasDeviceJson); + const result = await smokeDetectorSheet.parse(); + this.smokeDetectorTextures = { + normal: result['smokeDetectorNormal.png'], + fireAlarm: result['smokeDetectorFireAlarm.png'], + isolate: result['smokeDetectorIsolate.png'], + fault: result['smokeDetectorFault.png'], + forewarning: result['smokeDetectorForewarning.png'], + interruption: result['smokeDetectorInterruption.png'], + }; + return this.smokeDetectorTextures as SmokeDetectorTextures; + } +} diff --git a/src/graphics/FAS/smokeDetector/SmokeDetectorAssistant.ts b/src/graphics/FAS/smokeDetector/SmokeDetectorAssistant.ts new file mode 100644 index 0000000..b82ec90 --- /dev/null +++ b/src/graphics/FAS/smokeDetector/SmokeDetectorAssistant.ts @@ -0,0 +1,123 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + ISmokeDetectorData, + SmokeDetector, + SmokeDetectorTemplate, +} from './SmokeDetector'; + +export class SmokeDetectorDraw extends GraphicDrawAssistant< + SmokeDetectorTemplate, + ISmokeDetectorData +> { + _smokeDetector: SmokeDetector | null = null; + constructor(app: IDrawApp, template: SmokeDetectorTemplate) { + super(app, template, 'svguse:../drawIcon.svg#icon-smoke-detector', '烟感'); + SmokeDetectorInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._smokeDetector) { + this._smokeDetector = this.graphicTemplate.new(); + this.container.addChild(this._smokeDetector); + } + } + + public get smokeDetector(): SmokeDetector { + if (!this._smokeDetector) { + this._smokeDetector = this.graphicTemplate.new(); + this.container.addChild(this._smokeDetector); + } + return this._smokeDetector; + } + + redraw(cp: Point): void { + this.smokeDetector.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.smokeDetector.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: ISmokeDetectorData): boolean { + data.transform = this.smokeDetector.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param smokeDetector + */ +function buildAbsorbablePositions( + smokeDetector: SmokeDetector +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const smokeDetectors = smokeDetector.queryStore.queryByType( + SmokeDetector.Type + ); + const canvas = smokeDetector.getCanvas(); + smokeDetectors.forEach((item) => { + if (item.id === smokeDetector.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class SmokeDetectorInteraction extends GraphicInteractionPlugin { + static Name = 'smoke_detector_transform'; + constructor(app: IDrawApp) { + super(SmokeDetectorInteraction.Name, app); + } + static init(app: IDrawApp) { + return new SmokeDetectorInteraction(app); + } + filter(...grahpics: JlGraphic[]): SmokeDetector[] | undefined { + return grahpics + .filter((g) => g.type === SmokeDetector.Type) + .map((g) => g as SmokeDetector); + } + bind(g: SmokeDetector): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: SmokeDetector): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const smokeDetector = target.getGraphic() as SmokeDetector; + smokeDetector.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(smokeDetector), + }); + } +} diff --git a/src/graphics/FAS/sprayPump/SprayPump.ts b/src/graphics/FAS/sprayPump/SprayPump.ts new file mode 100644 index 0000000..a340adf --- /dev/null +++ b/src/graphics/FAS/sprayPump/SprayPump.ts @@ -0,0 +1,69 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +// import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface ISprayPumpData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface SprayPumpTextures { + run: Texture; + stop: Texture; + fault: Texture; + interruption: Texture; +} + +export class SprayPump extends JlGraphic { + static Type = 'SprayPump'; + _sprayPump: Sprite; + sprayPumpTextures: SprayPumpTextures; + __state = 0; + + constructor(sprayPumpTextures: SprayPumpTextures) { + super(SprayPump.Type); + this._sprayPump = new Sprite(); + this.sprayPumpTextures = sprayPumpTextures; + this._sprayPump.anchor.set(0.5); + this.addChild(this._sprayPump); + this._sprayPump.texture = this.sprayPumpTextures.run; + } + get code(): string { + return this.datas.code; + } + get datas(): ISprayPumpData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class SprayPumpTemplate extends JlGraphicTemplate { + sprayPumpTextures?: SprayPumpTextures; + constructor(dataTemplate: ISprayPumpData) { + super(SprayPump.Type, { dataTemplate }); + this.loadAssets(); + } + new(): SprayPump { + if (this.sprayPumpTextures) { + const g = new SprayPump(this.sprayPumpTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const sprayPumpSheet = new Spritesheet(texture, FasDeviceJson); + const result = await sprayPumpSheet.parse(); + this.sprayPumpTextures = { + run: result['sprayPumpRun.png'], + stop: result['sprayPumpStop.png'], + fault: result['sprayPumpFault.png'], + interruption: result['sprayPumpInterruption.png'], + }; + return this.sprayPumpTextures as SprayPumpTextures; + } +} diff --git a/src/graphics/FAS/sprayPump/SprayPumpAssistant.ts b/src/graphics/FAS/sprayPump/SprayPumpAssistant.ts new file mode 100644 index 0000000..a58adf4 --- /dev/null +++ b/src/graphics/FAS/sprayPump/SprayPumpAssistant.ts @@ -0,0 +1,117 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { ISprayPumpData, SprayPump, SprayPumpTemplate } from './SprayPump'; + +export class SprayPumpDraw extends GraphicDrawAssistant< + SprayPumpTemplate, + ISprayPumpData +> { + _sprayPump: SprayPump | null = null; + constructor(app: IDrawApp, template: SprayPumpTemplate) { + super(app, template, 'svguse:../drawIcon.svg#icon-spray-pump', '喷淋泵'); + SprayPumpInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._sprayPump) { + this._sprayPump = this.graphicTemplate.new(); + this.container.addChild(this._sprayPump); + } + } + + public get sprayPump(): SprayPump { + if (!this._sprayPump) { + this._sprayPump = this.graphicTemplate.new(); + this.container.addChild(this._sprayPump); + } + return this._sprayPump; + } + + redraw(cp: Point): void { + this.sprayPump.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.sprayPump.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: ISprayPumpData): boolean { + data.transform = this.sprayPump.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param sprayPump + */ +function buildAbsorbablePositions(sprayPump: SprayPump): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const sprayPumps = sprayPump.queryStore.queryByType( + SprayPump.Type + ); + const canvas = sprayPump.getCanvas(); + sprayPumps.forEach((item) => { + if (item.id === sprayPump.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class SprayPumpInteraction extends GraphicInteractionPlugin { + static Name = 'spary_pump_transform'; + constructor(app: IDrawApp) { + super(SprayPumpInteraction.Name, app); + } + static init(app: IDrawApp) { + return new SprayPumpInteraction(app); + } + filter(...grahpics: JlGraphic[]): SprayPump[] | undefined { + return grahpics + .filter((g) => g.type === SprayPump.Type) + .map((g) => g as SprayPump); + } + bind(g: SprayPump): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: SprayPump): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const sprayPump = target.getGraphic() as SprayPump; + sprayPump.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(sprayPump), + }); + } +} diff --git a/src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump.json b/src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump.json new file mode 100644 index 0000000..b05230f --- /dev/null +++ b/src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump.json @@ -0,0 +1,21 @@ +{ + "frames": { + "normal.png": { + "frame": { "x": 0, "y": 0, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 25 }, + "sourceSize": { "w": 27, "h": 26 }, + "anchor": { "x": 0.5, "y": 0.5 } + } + }, + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.1", + "image": "StabilizedPressurePump.png", + "format": "RGBA8888", + "size": { "w": 36, "h": 25 }, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:e7620bd2d73cc0b3e2deea9704e7eefc:f129a1d9e4b9ba57720b3861c22b155b:eb2d421f7759984b7713aa4aa5354134$" + } +} diff --git a/src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump.png b/src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump.png new file mode 100644 index 0000000000000000000000000000000000000000..b36ecb01cb534a49b9e3b482850f74f393f21779 GIT binary patch literal 1748 zcmV;_1}piAP)X0ssI2)`lCr00009a7bBm000XU z000XU0RWnu7ytkUhDk(0R7i0Bq-gG_u3ZEOy%f z=79ML+X(|IjwFGygGwvRZo&i^VCNHiS5q@#_`w}tx$?^07hm$hC;s%I zw>Fy&qX$V;(vbUopZ_o`&YTd5ac#Eo;tL1A{>6I!Z_7<#0r+2a#GD;202N?Gz*5|` zYwLyL)X3FCum0kP!{R~y-=k-d+9;Hfu^BuS&NaP`k0I&J3# z|GMO~Ku#S?fn};7dQ#Aab7qf*S@fGtrJ6AfEHX??EqHw;ra+md2}H~Ne_a^bcXq8T zUHb*wCCGi-&I{98mdv(@ajMCZx=W@2WcFPT?pb)p+dD|pE|LYjy6?bC*L-MM3Pg_) zCh9y-!aoCXAkEf>Acm#IO=oQ%PFQJ8n4ke>RJzju zRCGsLj1DLZK{86cSqT~hSSB?$Em;+`4Y8^W2j@0I5vZ!Qb?4Y-WgrcuK}5kMZ`iXc zfFC_QRhc~$W`=cj6j&jTn4Io0ey9Kb?=ko;lu6dIHqY- zBZv})sxEX|8!T8|I@bF}Q>CF9fOVjdnHfP<4J?zhwWB$1tar2qpvxj~tg0Zcug?xX z?{U^%p3O{=s5kALbV_v1>><56`fx+*<3J)|d#z^se{=sM&pbWW$g)@ft8%*f#u3ic z3EDKsBfXPR**T6h+Q#;CSNHw-YkO9Ibmv!Xn`Ppar~Y!vIp>cZ8#Q~QW-pB~Ld!z9 zB+W9$o46_k)A*XSrAa|j2}NxXu&L45{j(Jeb;{MtShd1 zUyV%dy!np3x8HPhwziV7B22PNnq->__6RhH0uT~b(Z(1V zgLO1>K5;0YeC0LGMF&|yOC_MH21+y6%*g7BVe323+I`RO{`k!s{{FzdgGrANv(RV& z$*w{PDnaRl2)keZ)EkeVyCSHqY(D9eSD*T&n_B~mLRG1oWiy1UfA-*`cYfpOQ%|~S zVLD{wurR&!w!1IA?RzqAxqi2dQ4*3BojuUtBtocB7I4`WpEK+Idk)z&qnKqhYle&p z!VSPc**}(); + } + + doRepaint(): void {} +} + +export class StabilizedPressurePumpTemplate extends JlGraphicTemplate { + stabilizedPressurePumpTextures?: StabilizedPressurePumpTextures; + constructor(dataTemplate: IStabilizedPressurePumpData) { + super(StabilizedPressurePump.Type, { dataTemplate }); + this.loadAssets(); + } + new(): StabilizedPressurePump { + if (this.stabilizedPressurePumpTextures) { + const g = new StabilizedPressurePump(this.stabilizedPressurePumpTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(StabilizedPressurePumpAssets); + const stabilizedPressurePumpSheet = new Spritesheet( + texture, + StabilizedPressurePumpJson + ); + const result = await stabilizedPressurePumpSheet.parse(); + this.stabilizedPressurePumpTextures = { + normal: result['normal.png'], + }; + return this + .stabilizedPressurePumpTextures as StabilizedPressurePumpTextures; + } +} diff --git a/src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePumpAssistant.ts b/src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePumpAssistant.ts new file mode 100644 index 0000000..20fc1a7 --- /dev/null +++ b/src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePumpAssistant.ts @@ -0,0 +1,132 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + StabilizedPressurePump, + IStabilizedPressurePumpData, + StabilizedPressurePumpTemplate, +} from './StabilizedPressurePump'; + +export class StabilizedPressurePumpDraw extends GraphicDrawAssistant< + StabilizedPressurePumpTemplate, + IStabilizedPressurePumpData +> { + _stabilizedPressurePump: StabilizedPressurePump | null = null; + constructor(app: IDrawApp, template: StabilizedPressurePumpTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-stabilized-pressure-pump', + '稳压泵' + ); + StabilizedPressurePumpInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._stabilizedPressurePump) { + this._stabilizedPressurePump = this.graphicTemplate.new(); + this.container.addChild(this._stabilizedPressurePump); + } + } + + public get stabilizedPressurePump(): StabilizedPressurePump { + if (!this._stabilizedPressurePump) { + this._stabilizedPressurePump = this.graphicTemplate.new(); + this.container.addChild(this._stabilizedPressurePump); + } + return this._stabilizedPressurePump; + } + + redraw(cp: Point): void { + this.stabilizedPressurePump.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.stabilizedPressurePump.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IStabilizedPressurePumpData): boolean { + data.transform = this.stabilizedPressurePump.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param stabilizedPressurePump + */ +function buildAbsorbablePositions( + stabilizedPressurePump: StabilizedPressurePump +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const stabilizedPressurePumps = + stabilizedPressurePump.queryStore.queryByType( + StabilizedPressurePump.Type + ); + const canvas = stabilizedPressurePump.getCanvas(); + stabilizedPressurePumps.forEach((item) => { + if (item.id === stabilizedPressurePump.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class StabilizedPressurePumpInteraction extends GraphicInteractionPlugin { + static Name = 'stabilized_pressure_pump_transform'; + constructor(app: IDrawApp) { + super(StabilizedPressurePumpInteraction.Name, app); + } + static init(app: IDrawApp) { + return new StabilizedPressurePumpInteraction(app); + } + filter(...grahpics: JlGraphic[]): StabilizedPressurePump[] | undefined { + return grahpics + .filter((g) => g.type === StabilizedPressurePump.Type) + .map((g) => g as StabilizedPressurePump); + } + bind(g: StabilizedPressurePump): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: StabilizedPressurePump): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const stabilizedPressurePump = + target.getGraphic() as StabilizedPressurePump; + stabilizedPressurePump.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(stabilizedPressurePump), + }); + } +} diff --git a/src/graphics/FAS/startPumpButton/StartPumpButton.ts b/src/graphics/FAS/startPumpButton/StartPumpButton.ts new file mode 100644 index 0000000..e33dbb9 --- /dev/null +++ b/src/graphics/FAS/startPumpButton/StartPumpButton.ts @@ -0,0 +1,65 @@ +import { + GraphicData, + JlGraphic, + JlGraphicTemplate, + VectorText, +} from 'jl-graphic'; +import { Graphics } from 'pixi.js'; + +export interface IStartPumpButtonData extends GraphicData { + get code(): string; + set code(v: string); +} + +const startPumpConsts = { + circleR: 16, + circleBackground: '0x99ccff', + textColor: '0xffffff', + text: 'ON', + fontSize: 18, +}; + +export class StartPumpButton extends JlGraphic { + static Type = 'StartPumpButton'; + circleGraphic: Graphics = new Graphics(); + textGraphic: VectorText = new VectorText(); + + constructor() { + super(StartPumpButton.Type); + this.addChild(this.circleGraphic); + this.addChild(this.textGraphic); + } + get code(): string { + return this.datas.code; + } + get datas(): IStartPumpButtonData { + return this.getDatas(); + } + + doRepaint(): void { + const circleGraphic = this.circleGraphic; + circleGraphic.clear(); + circleGraphic.beginFill(startPumpConsts.circleBackground); + circleGraphic.drawCircle(0, 0, startPumpConsts.circleR); + circleGraphic.endFill(); + + this.textGraphic.text = startPumpConsts.text; + this.textGraphic.setVectorFontSize(startPumpConsts.fontSize); + this.textGraphic.anchor.set(0.5); + this.textGraphic.style.fill = startPumpConsts.textColor; + this.textGraphic.position.set(0, 0); + } +} + +export class StartPumpButtonTemplate extends JlGraphicTemplate { + constructor(dataTemplate: IStartPumpButtonData) { + super(StartPumpButton.Type, { + dataTemplate, + }); + } + new(): StartPumpButton { + const startPumpButton = new StartPumpButton(); + startPumpButton.loadData(this.datas); + return startPumpButton; + } +} diff --git a/src/graphics/FAS/startPumpButton/StartPumpButtonAssistant.ts b/src/graphics/FAS/startPumpButton/StartPumpButtonAssistant.ts new file mode 100644 index 0000000..9c5a331 --- /dev/null +++ b/src/graphics/FAS/startPumpButton/StartPumpButtonAssistant.ts @@ -0,0 +1,130 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IStartPumpButtonData, + StartPumpButton, + StartPumpButtonTemplate, +} from './StartPumpButton'; + +export class StartPumpButtonDraw extends GraphicDrawAssistant< + StartPumpButtonTemplate, + IStartPumpButtonData +> { + _startPumpButton: StartPumpButton | null = null; + constructor(app: IDrawApp, template: StartPumpButtonTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-start-pump-button', + '启泵按钮' + ); + StartPumpButtonInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._startPumpButton) { + this._startPumpButton = this.graphicTemplate.new(); + this.container.addChild(this._startPumpButton); + this._startPumpButton.doRepaint(); + } + } + + public get startPumpButton(): StartPumpButton { + if (!this._startPumpButton) { + this._startPumpButton = this.graphicTemplate.new(); + this.container.addChild(this._startPumpButton); + } + return this._startPumpButton; + } + + redraw(cp: Point): void { + this.startPumpButton.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.startPumpButton.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: IStartPumpButtonData): boolean { + data.transform = this.startPumpButton.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param startPumpButton + */ +function buildAbsorbablePositions( + startPumpButton: StartPumpButton +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const startPumpButtons = + startPumpButton.queryStore.queryByType( + StartPumpButton.Type + ); + const canvas = startPumpButton.getCanvas(); + startPumpButtons.forEach((item) => { + if (item.id === startPumpButton.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class StartPumpButtonInteraction extends GraphicInteractionPlugin { + static Name = 'start_pump_button_transform'; + constructor(app: IDrawApp) { + super(StartPumpButtonInteraction.Name, app); + } + static init(app: IDrawApp) { + return new StartPumpButtonInteraction(app); + } + filter(...grahpics: JlGraphic[]): StartPumpButton[] | undefined { + return grahpics + .filter((g) => g.type === StartPumpButton.Type) + .map((g) => g as StartPumpButton); + } + bind(g: StartPumpButton): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: StartPumpButton): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const startPumpButton = target.getGraphic() as StartPumpButton; + startPumpButton.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(startPumpButton), + }); + } +} diff --git a/src/graphics/FAS/temperatureCable/TemperatureCable.ts b/src/graphics/FAS/temperatureCable/TemperatureCable.ts new file mode 100644 index 0000000..093c204 --- /dev/null +++ b/src/graphics/FAS/temperatureCable/TemperatureCable.ts @@ -0,0 +1,73 @@ +import { Graphics } from 'pixi.js'; +import { + GraphicData, + JlGraphic, + JlGraphicTemplate, + VectorText, +} from 'jl-graphic'; + +export interface ITemperatureCableData extends GraphicData { + get code(): string; // 编号 + set code(v: string); + clone(): ITemperatureCableData; + copyFrom(data: ITemperatureCableData): void; + eq(other: ITemperatureCableData): boolean; +} + +const temperatureCableConsts = { + rectWidth: 64, + rectHeight: 24, + rectBackground: '0x99ccff', + textColor: '0x33cc00', + text: '电缆', + fontSize: 12, +}; + +export class TemperatureCable extends JlGraphic { + static Type = 'TemperatureCable'; + rectGraphic: Graphics = new Graphics(); + textGraphic: VectorText = new VectorText(); + constructor() { + super(TemperatureCable.Type); + this.addChild(this.rectGraphic); + this.addChild(this.textGraphic); + } + + get datas(): ITemperatureCableData { + return this.getDatas(); + } + doRepaint(): void { + const rectGraphic = this.rectGraphic; + rectGraphic.clear(); + rectGraphic.beginFill(temperatureCableConsts.rectBackground); + rectGraphic.drawRect( + 0, + 0, + temperatureCableConsts.rectWidth, + temperatureCableConsts.rectHeight + ); + rectGraphic.endFill(); + + this.textGraphic.text = temperatureCableConsts.text; + this.textGraphic.setVectorFontSize(temperatureCableConsts.fontSize); + this.textGraphic.anchor.set(0.5); + this.textGraphic.style.fill = temperatureCableConsts.textColor; + this.textGraphic.position.set( + temperatureCableConsts.rectWidth / 2, + temperatureCableConsts.rectHeight / 2 + ); + } +} + +export class TemperatureCableTemplate extends JlGraphicTemplate { + constructor(dataTemplate: ITemperatureCableData) { + super(TemperatureCable.Type, { + dataTemplate, + }); + } + new(): TemperatureCable { + const temperatureCable = new TemperatureCable(); + temperatureCable.loadData(this.datas); + return temperatureCable; + } +} diff --git a/src/graphics/FAS/temperatureCable/TemperatureCableAssistant.ts b/src/graphics/FAS/temperatureCable/TemperatureCableAssistant.ts new file mode 100644 index 0000000..0ee33d7 --- /dev/null +++ b/src/graphics/FAS/temperatureCable/TemperatureCableAssistant.ts @@ -0,0 +1,130 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + ITemperatureCableData, + TemperatureCable, + TemperatureCableTemplate, +} from './TemperatureCable'; + +export class TemperatureCableDraw extends GraphicDrawAssistant< + TemperatureCableTemplate, + ITemperatureCableData +> { + _temperatureCable: TemperatureCable | null = null; + constructor(app: IDrawApp, template: TemperatureCableTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-temperature-cable', + '感温电缆' + ); + TemperatureCableInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._temperatureCable) { + this._temperatureCable = this.graphicTemplate.new(); + this.container.addChild(this._temperatureCable); + this._temperatureCable.doRepaint(); + } + } + + public get temperatureCable(): TemperatureCable { + if (!this._temperatureCable) { + this._temperatureCable = this.graphicTemplate.new(); + this.container.addChild(this._temperatureCable); + } + return this._temperatureCable; + } + + redraw(cp: Point): void { + this.temperatureCable.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.temperatureCable.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + prepareData(data: ITemperatureCableData): boolean { + data.transform = this.temperatureCable.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param temperatureCable + */ +function buildAbsorbablePositions( + temperatureCable: TemperatureCable +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const temperatureCables = + temperatureCable.queryStore.queryByType( + TemperatureCable.Type + ); + const canvas = temperatureCable.getCanvas(); + temperatureCables.forEach((item) => { + if (item.id === temperatureCable.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class TemperatureCableInteraction extends GraphicInteractionPlugin { + static Name = 'temperature_cable_transform'; + constructor(app: IDrawApp) { + super(TemperatureCableInteraction.Name, app); + } + static init(app: IDrawApp) { + return new TemperatureCableInteraction(app); + } + filter(...grahpics: JlGraphic[]): TemperatureCable[] | undefined { + return grahpics + .filter((g) => g.type === TemperatureCable.Type) + .map((g) => g as TemperatureCable); + } + bind(g: TemperatureCable): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: TemperatureCable): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const temperatureCable = target.getGraphic() as TemperatureCable; + temperatureCable.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(temperatureCable), + }); + } +} diff --git a/src/graphics/FAS/temperatureDetector/TemperatureDetector.json b/src/graphics/FAS/temperatureDetector/TemperatureDetector.json new file mode 100644 index 0000000..47369d4 --- /dev/null +++ b/src/graphics/FAS/temperatureDetector/TemperatureDetector.json @@ -0,0 +1,21 @@ +{ + "frames": { + "normal.png": { + "frame": { "x": 0, "y": 0, "w": 21, "h": 11 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 21, "h": 11 }, + "sourceSize": { "w": 21, "h": 11 }, + "anchor": { "x": 0.5, "y": 0.5 } + } + }, + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.1", + "image": "TemperatureDetector.png", + "format": "RGBA8888", + "size": { "w": 21, "h": 11 }, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:e7620bd2d73cc0b3e2deea9704e7eefc:f129a1d9e4b9ba57720b3861c22b155b:eb2d421f7759984b7713aa4aa5354134$" + } +} diff --git a/src/graphics/FAS/temperatureDetector/TemperatureDetector.png b/src/graphics/FAS/temperatureDetector/TemperatureDetector.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e24cf5be0ebf5f8c1b7f40b3b46dddf90d8d91 GIT binary patch literal 644 zcmV-~0((3v>sCIkZw9w_uc`?cTuJPzs)xQ2^Y7mwH7 zswu}o!i$FmV*?6k1Ztq(!1jp%P*4#IjHN9q6ZC>v;v_jNmXkDVZ5=v z^`-wcm@Ln1e6DS5`fZSX7khOyF#;tFsOm^kMU^mW6>8xFVXD8|wAJDqRdsoJ`PI_P z58qx#=}yAA*haQ*oVuQgOcEMdD^_hByO^y+ugjEAoji2u=AB!!^D|UY5DMITe12v4 zZ92q0mv7icyNxhm^YQSm{kiMoLWUU$w|_V4HB5F+y?FFq4Fxa&1WMrI_}%z01V^{3uD)$p6HzW*v~Y(Yqp#I z)y-~q(#>eqNv_pC^C{ZJ?C9m

BEm&`?wfs4B_z+SH#)~wOETK%>=>tm-Euv( zCf?i*0R8|dYY=S(); + } + + doRepaint(): void {} +} + +export class TemperatureDetectorTemplate extends JlGraphicTemplate { + temperatureDetectorTextures?: TemperatureDetectorTextures; + constructor(dataTemplate: ITemperatureDetectorData) { + super(TemperatureDetector.Type, { dataTemplate }); + this.loadAssets(); + } + new(): TemperatureDetector { + if (this.temperatureDetectorTextures) { + const g = new TemperatureDetector(this.temperatureDetectorTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(TemperatureDetectorAsset); + const temperatureDetectorSheet = new Spritesheet( + texture, + TemperatureDetectorJson + ); + const result = await temperatureDetectorSheet.parse(); + this.temperatureDetectorTextures = { + normal: result['normal.png'], + }; + return this.temperatureDetectorTextures as TemperatureDetectorTextures; + } +} diff --git a/src/graphics/FAS/temperatureDetector/TemperatureDetectorAssistant.ts b/src/graphics/FAS/temperatureDetector/TemperatureDetectorAssistant.ts new file mode 100644 index 0000000..16eb0d2 --- /dev/null +++ b/src/graphics/FAS/temperatureDetector/TemperatureDetectorAssistant.ts @@ -0,0 +1,131 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + ITemperatureDetectorData, + TemperatureDetector, + TemperatureDetectorTemplate, +} from './TemperatureDetector'; + +export class TemperatureDetectorDraw extends GraphicDrawAssistant< + TemperatureDetectorTemplate, + ITemperatureDetectorData +> { + _temperatureDetector: TemperatureDetector | null = null; + constructor(app: IDrawApp, template: TemperatureDetectorTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-temperature-detector', + '温感' + ); + TemperatureDetectorInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._temperatureDetector) { + this._temperatureDetector = this.graphicTemplate.new(); + this.container.addChild(this._temperatureDetector); + } + } + + public get temperatureDetector(): TemperatureDetector { + if (!this._temperatureDetector) { + this._temperatureDetector = this.graphicTemplate.new(); + this.container.addChild(this._temperatureDetector); + } + return this._temperatureDetector; + } + + redraw(cp: Point): void { + this.temperatureDetector.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.temperatureDetector.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: ITemperatureDetectorData): boolean { + data.transform = this.temperatureDetector.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param temperatureDetector + */ +function buildAbsorbablePositions( + temperatureDetector: TemperatureDetector +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const temperatureDetectors = + temperatureDetector.queryStore.queryByType( + TemperatureDetector.Type + ); + const canvas = temperatureDetector.getCanvas(); + temperatureDetectors.forEach((item) => { + if (item.id === temperatureDetector.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class TemperatureDetectorInteraction extends GraphicInteractionPlugin { + static Name = 'temperature_detector_transform'; + constructor(app: IDrawApp) { + super(TemperatureDetectorInteraction.Name, app); + } + static init(app: IDrawApp) { + return new TemperatureDetectorInteraction(app); + } + filter(...grahpics: JlGraphic[]): TemperatureDetector[] | undefined { + return grahpics + .filter((g) => g.type === TemperatureDetector.Type) + .map((g) => g as TemperatureDetector); + } + bind(g: TemperatureDetector): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: TemperatureDetector): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const temperatureDetector = target.getGraphic() as TemperatureDetector; + temperatureDetector.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(temperatureDetector), + }); + } +} diff --git a/src/graphics/FAS/waterFlowIndicator/WaterFlowIndicator.ts b/src/graphics/FAS/waterFlowIndicator/WaterFlowIndicator.ts new file mode 100644 index 0000000..e9d403f --- /dev/null +++ b/src/graphics/FAS/waterFlowIndicator/WaterFlowIndicator.ts @@ -0,0 +1,69 @@ +import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic'; +import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js'; +// import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; +import FasDeviceJson from '../pndDevice/PngDevice.json'; +import FasDeviceAssets from '../pndDevice/FasDevice.png'; + +export interface IWaterFlowIndicatorData extends GraphicData { + get code(): string; + set code(v: string); +} + +interface WaterFlowIndicatorTextures { + normal: Texture; + run: Texture; + stop: Texture; + interruption: Texture; +} + +export class WaterFlowIndicator extends JlGraphic { + static Type = 'WaterFlowIndicator'; + _waterFlowIndicator: Sprite; + waterFlowIndicatorTextures: WaterFlowIndicatorTextures; + __state = 0; + + constructor(waterFlowIndicatorTextures: WaterFlowIndicatorTextures) { + super(WaterFlowIndicator.Type); + this._waterFlowIndicator = new Sprite(); + this.waterFlowIndicatorTextures = waterFlowIndicatorTextures; + this._waterFlowIndicator.anchor.set(0.5); + this.addChild(this._waterFlowIndicator); + this._waterFlowIndicator.texture = this.waterFlowIndicatorTextures.normal; + } + get code(): string { + return this.datas.code; + } + get datas(): IWaterFlowIndicatorData { + return this.getDatas(); + } + + doRepaint(): void {} +} + +export class WaterFlowIndicatorTemplate extends JlGraphicTemplate { + waterFlowIndicatorTextures?: WaterFlowIndicatorTextures; + constructor(dataTemplate: IWaterFlowIndicatorData) { + super(WaterFlowIndicator.Type, { dataTemplate }); + this.loadAssets(); + } + new(): WaterFlowIndicator { + if (this.waterFlowIndicatorTextures) { + const g = new WaterFlowIndicator(this.waterFlowIndicatorTextures); + g.loadData(this.datas); + return g; + } + throw new Error('资源未加载/加载失败'); + } + async loadAssets(): Promise { + const texture = await Assets.load(FasDeviceAssets); + const waterFlowIndicatorSheet = new Spritesheet(texture, FasDeviceJson); + const result = await waterFlowIndicatorSheet.parse(); + this.waterFlowIndicatorTextures = { + normal: result['waterFlowIndicatorNormal.png'], + run: result['waterFlowIndicatorRun.png'], + stop: result['waterFlowIndicatorStop.png'], + interruption: result['waterFlowIndicatorInterruption.png'], + }; + return this.waterFlowIndicatorTextures as WaterFlowIndicatorTextures; + } +} diff --git a/src/graphics/FAS/waterFlowIndicator/WaterFlowIndicatorAssistant.ts b/src/graphics/FAS/waterFlowIndicator/WaterFlowIndicatorAssistant.ts new file mode 100644 index 0000000..06155ad --- /dev/null +++ b/src/graphics/FAS/waterFlowIndicator/WaterFlowIndicatorAssistant.ts @@ -0,0 +1,131 @@ +import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + IDrawApp, + JlGraphic, +} from 'jl-graphic'; +import { + IWaterFlowIndicatorData, + WaterFlowIndicator, + WaterFlowIndicatorTemplate, +} from './WaterFlowIndicator'; + +export class WaterFlowIndicatorDraw extends GraphicDrawAssistant< + WaterFlowIndicatorTemplate, + IWaterFlowIndicatorData +> { + _waterFlowIndicator: WaterFlowIndicator | null = null; + constructor(app: IDrawApp, template: WaterFlowIndicatorTemplate) { + super( + app, + template, + 'svguse:../drawIcon.svg#icon-water-flow-indicator', + '水流指示器' + ); + WaterFlowIndicatorInteraction.init(app); + } + + bind(): void { + super.bind(); + if (!this._waterFlowIndicator) { + this._waterFlowIndicator = this.graphicTemplate.new(); + this.container.addChild(this._waterFlowIndicator); + } + } + + public get waterFlowIndicator(): WaterFlowIndicator { + if (!this._waterFlowIndicator) { + this._waterFlowIndicator = this.graphicTemplate.new(); + this.container.addChild(this._waterFlowIndicator); + } + return this._waterFlowIndicator; + } + + redraw(cp: Point): void { + this.waterFlowIndicator.position.copyFrom(cp); + } + onLeftUp(e: FederatedMouseEvent): void { + this.waterFlowIndicator.position.copyFrom( + this.toCanvasCoordinates(e.global) + ); + this.createAndStore(true); + } + prepareData(data: IWaterFlowIndicatorData): boolean { + data.transform = this.waterFlowIndicator.saveTransform(); + return true; + } + onEsc(): void { + this.finish(); + } +} + +/** + * 构建吸附线 + * @param waterFlowIndicator + */ +function buildAbsorbablePositions( + waterFlowIndicator: WaterFlowIndicator +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const waterFlowIndicators = + waterFlowIndicator.queryStore.queryByType( + WaterFlowIndicator.Type + ); + const canvas = waterFlowIndicator.getCanvas(); + waterFlowIndicators.forEach((item) => { + if (item.id === waterFlowIndicator.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + + return aps; +} + +export class WaterFlowIndicatorInteraction extends GraphicInteractionPlugin { + static Name = 'water_flow_indicator_transform'; + constructor(app: IDrawApp) { + super(WaterFlowIndicatorInteraction.Name, app); + } + static init(app: IDrawApp) { + return new WaterFlowIndicatorInteraction(app); + } + filter(...grahpics: JlGraphic[]): WaterFlowIndicator[] | undefined { + return grahpics + .filter((g) => g.type === WaterFlowIndicator.Type) + .map((g) => g as WaterFlowIndicator); + } + bind(g: WaterFlowIndicator): void { + g.eventMode = 'static'; + g.cursor = 'pointer'; + g.scalable = true; + g.rotatable = true; + g.on('transformstart', this.transformstart, this); + } + unbind(g: WaterFlowIndicator): void { + g.eventMode = 'none'; + g.scalable = false; + g.rotatable = false; + g.off('transformstart', this.transformstart, this); + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const waterFlowIndicator = target.getGraphic() as WaterFlowIndicator; + waterFlowIndicator.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(waterFlowIndicator), + }); + } +} diff --git a/src/graphics/button/Button.ts b/src/graphics/button/Button.ts new file mode 100644 index 0000000..5d18d87 --- /dev/null +++ b/src/graphics/button/Button.ts @@ -0,0 +1,203 @@ +import { + getRectangleCenter, + GraphicData, + JlGraphic, + JlGraphicTemplate, + VectorText, +} from 'jl-graphic'; +import CCTV_Button_Assets from './cctv-button-spritesheet.png'; +import CCTV_Button_JSON from './cctv-button-data.json'; +import { + Assets, + Color, + Graphics, + Rectangle, + Sprite, + Spritesheet, + Texture, +} from 'pixi.js'; +import { iscsGraphicData } from 'src/protos/iscs_graphic_data'; + +interface ButtonTextures { + rectPressBtn: Texture; + rectBtn: Texture; + monitorBtn: Texture; + semicircleBtn: Texture; +} + +export const buttonConsts = { + width: 60, + height: 30, + radius: 2, + fillColor: '0x1976D2', + alpha: 1, + codeColor: '#000', + codeFontSize: 16, +}; + +export interface IButtonData extends GraphicData { + get code(): string; + set code(v: string); + get codeColor(): string; // 填充色 + set codeColor(v: string); + get codeFontSize(): number; // 宽度 + set codeFontSize(v: number); + get belongSubMenu(): string; // 所属子菜单 + set belongSubMenu(v: string); + get buttonType(): iscsGraphicData.Button.ButtonType; + set buttonType(v: iscsGraphicData.Button.ButtonType); + get width(): number; // 宽度 + set width(v: number); + get height(): number; // 高度 + set height(v: number); + get radius(): number; // 圆角半径 + set radius(v: number); + get fillColor(): string; // 填充色 + set fillColor(v: string); + get alpha(): number; // 透明度 + set alpha(v: number); +} + +export class Button extends JlGraphic { + static Type = 'Button'; + _buttonIcon: Sprite; + labelGraphic = new VectorText(); + buttonTextures: ButtonTextures; + buttonBackground: Graphics = new Graphics(); + __state = 0; + + constructor(buttonTextures: ButtonTextures) { + super(Button.Type); + this.buttonTextures = buttonTextures; + this._buttonIcon = new Sprite(); + this._buttonIcon.anchor.set(0.5); + this.addChild(this.buttonBackground); + } + get code(): string { + return this.datas.code; + } + get datas(): IButtonData { + return this.getDatas(); + } + + doRepaint(): void { + this.buttonBackground.clear(); + if (this.datas.width > 0 && this.datas.height > 0) { + this.drawRect(); + } else { + this.removeChild(this.buttonBackground); + } + + if (this.datas.buttonType !== iscsGraphicData.Button.ButtonType.noIcon) { + this.addChild(this._buttonIcon); + this._buttonIcon.transformSave = true; + this._buttonIcon.name = 'buttonIcon'; + if (this.datas.buttonType == iscsGraphicData.Button.ButtonType.cctvRect) { + this._buttonIcon.texture = this.buttonTextures.rectBtn; + } else if ( + this.datas.buttonType == iscsGraphicData.Button.ButtonType.cctvMonitor + ) { + this._buttonIcon.texture = this.buttonTextures.monitorBtn; + } + if ( + this.datas.buttonType == + iscsGraphicData.Button.ButtonType.cctvSemicircle + ) { + this._buttonIcon.texture = this.buttonTextures.semicircleBtn; + } + const iconPosition = this.datas.childTransforms?.find( + (t) => t.name === this._buttonIcon.name + )?.transform.position; + if (iconPosition) { + this._buttonIcon.position.set(iconPosition.x, iconPosition.y); + } else { + this._buttonIcon.position.set(0, 0); + } + const iconScale = this.datas.childTransforms?.find( + (t) => t.name === this._buttonIcon.name + )?.transform.scale; + if (iconScale) { + this._buttonIcon.scale.set(iconScale.x, iconScale.y); + } else { + this._buttonIcon.scale.set(1, 1); + } + } else { + this.removeChild(this._buttonIcon); + } + + if (this.datas.code) { + this.labelGraphic.text = this.datas.code; + this.datas.codeFontSize = + this.datas.codeFontSize || buttonConsts.codeFontSize; + this.datas.codeColor = this.datas.codeColor || buttonConsts.codeColor; + this.setTextGraphic(this.labelGraphic, 'label'); + const labelPosition = this.datas.childTransforms?.find( + (t) => t.name === this.labelGraphic.name + )?.transform.position; + if (labelPosition) { + this.labelGraphic.position.set(labelPosition.x, labelPosition.y); + } else { + this.labelGraphic.position.set(0, 0); + } + this.addChild(this.labelGraphic); + } else { + this.removeChild(this.labelGraphic); + } + } + + drawRect(): void { + const buttonBackground = this.buttonBackground; + const width = this.datas.width || buttonConsts.width; + const height = this.datas.height || buttonConsts.height; + const radius = this.datas?.radius || buttonConsts.radius; + const fillColor = this.datas.fillColor || buttonConsts.fillColor; + buttonBackground.lineStyle(1, new Color(fillColor)); + buttonBackground.beginFill( + fillColor, + this.datas.alpha || buttonConsts.alpha + ); + buttonBackground.drawRoundedRect(0, 0, width, height, radius); + buttonBackground.endFill; + buttonBackground.pivot = getRectangleCenter( + new Rectangle(0, 0, width, height) + ); + } + + setTextGraphic(g: VectorText, name: string) { + const fontSize = this.datas.codeFontSize; + g.setVectorFontSize(fontSize); + g.anchor.set(0.5); + g.style.fill = this.datas.codeColor; + g.transformSave = true; + g.name = name; + } +} + +export class ButtonTemplate extends JlGraphicTemplate

@@ -256,7 +292,7 @@ import { onMounted, onUnmounted, reactive, ref, watch } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { date, useQuasar } from 'quasar'; import { useDrawStore } from 'src/stores/draw-store'; -import { CCTVButton } from 'src/graphics/CCTV/cctvButton/CCTVButton'; +import { Button } from 'src/graphics/button/Button'; import { Arrow } from 'src/graphics/arrow/Arrow'; import { TextContent } from 'src/graphics/textContent/TextContent'; import { Rect } from 'src/graphics/rect/Rect'; @@ -278,6 +314,35 @@ import { common } from 'src/protos/common'; import { toStorageTransform } from 'src/drawApp/graphics/GraphicDataBase'; import { Circle } from 'src/graphics/circle/Circle'; import IscsBottomAlarm from 'src/components/Iscs/IscsBottomAlarm.vue'; +import CCTVMonitoring from 'src/components/Iscs/CCTVMonitoring.vue'; +import PSD from 'src/components/Iscs/PSD.vue'; +import ModeControl from 'src/components/Iscs/ModeControl.vue'; +import FASPlaneGraph from 'src/components/Iscs/FASPlaneGraph.vue'; +import { FasFailureControlHost } from 'src/graphics/FAS/fireFailureControlHost/FasFailureControlHost'; +import { FasAlarm } from 'src/graphics/FAS/fasAlarm/FasAlarm'; +import { ManualAlarmButton } from 'src/graphics/FAS/manualAlarmButton/ManualAlarmButton'; +import { SmokeDetector } from 'src/graphics/FAS/smokeDetector/SmokeDetector'; +import { Escalator } from 'src/graphics/BAS/escalator/Escalator'; +import { TemperatureDetector } from 'src/graphics/FAS/temperatureDetector/TemperatureDetector'; +import { FireShutter } from 'src/graphics/FAS/fireShutter/FireShutter'; +import { FirePump } from 'src/graphics/FAS/firePump/FirePump'; +import { SprayPump } from 'src/graphics/FAS/sprayPump/SprayPump'; +import { StabilizedPressurePump } from 'src/graphics/FAS/stabilizedPressurePump/StabilizedPressurePump'; +import { Acs } from 'src/graphics/FAS/acs/Acs'; +import { VerticalElevator } from 'src/graphics/BAS/verticalElevator/VerticalElevator'; +import { Afc } from 'src/graphics/FAS/afc/Afc'; +import { NonFirePowerSupply } from 'src/graphics/FAS/nonFirePowerSupply/NonFirePowerSupply'; +import { WaterFlowIndicator } from 'src/graphics/FAS/waterFlowIndicator/WaterFlowIndicator'; +import { SignalButterflyValve } from 'src/graphics/FAS/signalButterflyValve/SignalButterflyValve'; +import { PressureSwitch } from 'src/graphics/FAS/pressureSwitch/PressureSwitch'; +import { FaultValve } from 'src/graphics/FAS/faultValve/FaultValve'; +import { StartPumpButton } from 'src/graphics/FAS/startPumpButton/StartPumpButton'; +import { TemperatureCable } from 'src/graphics/FAS/temperatureCable/TemperatureCable'; +import { ElevatorLiftToTop } from 'src/graphics/FAS/elevatorLiftToTop/ElevatorLiftToTop'; +import { ElectricButterflyValve } from 'src/graphics/FAS/electricButterflyValve/ElectricButterflyValve'; +import { FireValve } from 'src/graphics/FAS/fireValve/FireValve'; +import { ElectricFireExtinguishingValve } from 'src/graphics/FAS/electricFireExtinguishingValve/ElectricFireExtinguishingValve'; +import { FireIntercommunicationSignal } from 'src/graphics/FAS/fireIntercommunicationSignal/FireIntercommunicationSignal'; const $q = useQuasar(); const route = useRoute(); @@ -355,10 +420,36 @@ function handleUtilsOption() { Circle.Type, Rect.Type, Line.Type, + Button.Type, ]; switch (drawStore.selectSubmenuAndStation.submenu) { - case '监控布局图': - drawAssistantsTypes.push(CCTVButton.Type); + case '电扶梯': + drawAssistantsTypes.push(...[Escalator.Type, VerticalElevator.Type]); + break; + case '火灾报警平面图': + drawAssistantsTypes.push(FasFailureControlHost.Type); + drawAssistantsTypes.push(FasAlarm.Type); + drawAssistantsTypes.push(ManualAlarmButton.Type); + drawAssistantsTypes.push(SmokeDetector.Type); + drawAssistantsTypes.push(TemperatureDetector.Type); + drawAssistantsTypes.push(FireShutter.Type); + drawAssistantsTypes.push(FirePump.Type); + drawAssistantsTypes.push(SprayPump.Type); + drawAssistantsTypes.push(StabilizedPressurePump.Type); + drawAssistantsTypes.push(Acs.Type); + drawAssistantsTypes.push(Afc.Type); + drawAssistantsTypes.push(NonFirePowerSupply.Type); + drawAssistantsTypes.push(WaterFlowIndicator.Type); + drawAssistantsTypes.push(SignalButterflyValve.Type); + drawAssistantsTypes.push(PressureSwitch.Type); + drawAssistantsTypes.push(FaultValve.Type); + drawAssistantsTypes.push(StartPumpButton.Type); + drawAssistantsTypes.push(TemperatureCable.Type); + drawAssistantsTypes.push(ElevatorLiftToTop.Type); + drawAssistantsTypes.push(ElectricButterflyValve.Type); + drawAssistantsTypes.push(FireValve.Type); + drawAssistantsTypes.push(ElectricFireExtinguishingValve.Type); + drawAssistantsTypes.push(FireIntercommunicationSignal.Type); break; } drawAssistantsTypes.forEach((type) => { @@ -377,10 +468,20 @@ function handleUtilsOption() { drawDialogHeight.value = 44 * Math.ceil(utilsOption.length / 2); } //左侧功能按钮 +const fabPos = ref([18, 18]); +const draggingFab = ref(false); const leftMenuConfig = [ { label: '保存', click: saveAllDrawDatas }, - { label: '另存为', click: () => (saveAsDialog.value = true) }, + { label: '另存', click: () => (saveAsDialog.value = true) }, ]; +function moveFab(ev: { + isFirst: boolean; + isFinal: boolean; + delta: { x: number; y: number }; +}) { + draggingFab.value = ev.isFirst !== true && ev.isFinal !== true; + fabPos.value = [fabPos.value[0] - ev.delta.x, fabPos.value[1] - ev.delta.y]; +} onMounted(() => { console.log('绘制应用layout mounted'); @@ -522,6 +623,10 @@ const canvasHeight = ref(0); const headerHeight = ref(0); const footerHeight = ref(0); const rightWidth = ref(0); +const showComponent = reactive({ + width: 0, + height: 0, +}); function onHeaderResize(size: { height: number; width: number }) { headerHeight.value = size.height; @@ -545,16 +650,23 @@ function onResize() { clientWidth - (rightDrawerOpen.value ? rightWidth.value : 0); canvasHeight.value = clientHeight - headerHeight.value - footerHeight.value; const dom = document.getElementById('draw-app-container'); + const componentDom = document.getElementById('component-container'); if (dom) { + dom.style.width = canvasWidth.value + 'px'; + showComponent.width = canvasWidth.value; if (subMenuDisplayForm.value == DisplayForm.draw) { - dom.style.width = canvasWidth.value + 'px'; dom.style.height = canvasHeight.value + 'px'; } else if (subMenuDisplayForm.value == DisplayForm.drawAndComponent) { const heightPercent = subMenuOption.value.find( (subMenu) => subMenu.value == selectSubMenuName.value ).heightPercent; - dom.style.width = canvasWidth.value + 'px'; dom.style.height = (heightPercent / 100) * canvasHeight.value + 'px'; + const height = (1 - heightPercent / 100) * canvasHeight.value - 1; + componentDom.style.height = height + 'px'; + showComponent.height = height; + } else { + componentDom.style.height = canvasHeight.value + 'px'; + showComponent.height = canvasHeight.value; } } } @@ -630,16 +742,26 @@ const subMenuOption = ref< }[] >([]); function selectedSubMenu(subName: string) { + if (selectSubMenuName.value !== subName) { + selectSubMenuName.value = subName; + } drawStore.selectSubmenuAndStation.submenu = subName; + if (drawStore.selectSubmenuAndStation.submenu === '火灾报警平面图') { + drawStore.selectSubmenuAndStation.partition = '设备分区一'; + } else { + drawStore.selectSubmenuAndStation.partition = ''; + } subMenuDisplayForm.value = subMenuOption.value.find( (subMenu) => subMenu.value == subName ).displayForm; if (subMenuDisplayForm.value !== DisplayForm.component) { showDrawTool.value = true; + rightDrawerOpen.value = true; forceReloadDate(); handleUtilsOption(); } else { showDrawTool.value = false; + rightDrawerOpen.value = false; } onResize(); } @@ -951,4 +1073,9 @@ onUnmounted(() => { } } } +.show-component { + display: flex; + justify-content: center; + overflow: auto; +} diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue index d87dc03..a407731 100644 --- a/src/layouts/MainLayout.vue +++ b/src/layouts/MainLayout.vue @@ -72,7 +72,7 @@ ID: - {{ userInfo?.id }} + {{ userInfo.id }} @@ -80,7 +80,15 @@ 用户名: - {{ userInfo?.name }} + {{ userInfo.username }} + + + + + 昵称: + + + {{ userInfo.nickname }} @@ -89,7 +97,7 @@ - {{ getRoleName(userInfo?.roles) }} + {{ getRoleName(userInfo.roles) }} @@ -98,15 +106,27 @@ 电话: - {{ userInfo?.mobile }} + {{ userInfo.mobile }} - 注册时间: + 创建时间: - {{ userInfo?.register_time }} + {{ + formatTime(userInfo.createdAt) + }} + + + + + 更新时间: + + + {{ + formatTime(userInfo.updatedAt) + }} @@ -123,23 +143,13 @@ diff --git a/src/pages/ElectronicMapDraftManage.vue b/src/pages/ElectronicMapDraftManage.vue new file mode 100644 index 0000000..0cf95fc --- /dev/null +++ b/src/pages/ElectronicMapDraftManage.vue @@ -0,0 +1,838 @@ + + + +src/api/ElectronicMapDraftApi diff --git a/src/pages/ElectronicMapPublishManage.vue b/src/pages/ElectronicMapPublishManage.vue new file mode 100644 index 0000000..828807b --- /dev/null +++ b/src/pages/ElectronicMapPublishManage.vue @@ -0,0 +1,544 @@ + + + diff --git a/src/pages/IscsDraftManage.vue b/src/pages/IscsDraftManage.vue index a5ee606..57db263 100644 --- a/src/pages/IscsDraftManage.vue +++ b/src/pages/IscsDraftManage.vue @@ -41,7 +41,14 @@ color="primary" v-if="route.name == 'iscsDraft'" label="新建" - @click="createFormShow = true" + @click="showCreateDialog" + /> +
@@ -436,6 +443,11 @@ const isSharedOption = ['全部', '共享', '不共享']; //新建相关 const createFormShow = ref(false); +function showCreateDialog() { + createFormShow.value = true; + createForm.draftName = ''; + createForm.style = IscsStyle.DA_SHI_ZHI_NENG; +} const createForm = reactive({ draftName: '', style: IscsStyle.DA_SHI_ZHI_NENG, diff --git a/src/pages/IscsPublishManage.vue b/src/pages/IscsPublishManage.vue index c1f03cf..dc2f7f4 100644 --- a/src/pages/IscsPublishManage.vue +++ b/src/pages/IscsPublishManage.vue @@ -39,6 +39,7 @@ label="上下架" style="width: 130px" /> + @@ -246,7 +247,6 @@ const pagination = ref({ let allRequestData: PublishIscsDataDto[] = []; async function onRequest(props: any) { const { page, rowsPerPage } = props.pagination; - const filter = props.filter; loading.value = true; const variables = { diff --git a/src/pages/UserLogin.vue b/src/pages/UserLogin.vue new file mode 100644 index 0000000..803e453 --- /dev/null +++ b/src/pages/UserLogin.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/src/pages/UserManage.vue b/src/pages/UserManage.vue index 9b053af..9c02e2d 100644 --- a/src/pages/UserManage.vue +++ b/src/pages/UserManage.vue @@ -17,7 +17,12 @@ > @@ -53,7 +52,56 @@ + + + + + + +
修改用户角色
+ + + + + + + +
+
+
+
@@ -62,10 +110,13 @@ import { ref, reactive, onMounted, computed } from 'vue'; import { useQuasar, type QTableColumn } from 'quasar'; import { PagingQueryParams, + rolesOptions, + updateUserRoles, + User, userPageQuery, - syncUsersInfo, } from '../api/UserApi'; import { ApiError } from 'src/boot/axios'; +import { successNotify } from 'src/utils/CommonNotify'; const $q = useQuasar(); @@ -86,9 +137,16 @@ onMounted(() => { const columnDefs: QTableColumn[] = [ { name: 'id', label: '用户ID', field: 'id', align: 'center' }, { - name: 'name', + name: 'username', label: '用户名', - field: 'name', + field: 'username', + required: true, + align: 'center', + }, + { + name: 'nickname', + label: '昵称', + field: 'nickname', required: true, align: 'center', }, @@ -123,12 +181,18 @@ const columnDefs: QTableColumn[] = [ field: (row) => new Date(row.updatedAt).toLocaleString(), align: 'center', }, + { + name: 'operations', + label: '操作', + field: 'operations', + align: 'center', + }, ]; const tableRef = ref(); const rows = reactive([]); const filter = reactive({ - name: '', + username: '', roles: [], }); const loading = ref(false); @@ -153,8 +217,8 @@ async function onRequest(props: any) { }, query: {}, }; - if (filter.name) { - Object.assign(variables.query, { name: filter.name }); + if (filter.username) { + Object.assign(variables.query, { username: filter.username }); } if (filter.roles) { Object.assign(variables.query, { roles: filter.roles }); @@ -176,10 +240,6 @@ async function onRequest(props: any) { } } -const rolesOptions = [ - { label: '管理员', value: 'ADMIN' }, - { label: '用户', value: 'USER' }, -]; function getRolesName(role: string) { for (let i = 0; i < rolesOptions.length; i++) { if (rolesOptions[i].value == role) { @@ -188,12 +248,38 @@ function getRolesName(role: string) { } } +const editFormShow = ref(false); +const userInfo = reactive({ + id: 0, + username: '', + nickname: '', + roles: [], +}); const operateDisabled = ref(false); -async function syncUsersInfoFn() { +function edieUserData(row: User) { + userInfo.id = row.id; + userInfo.username = row.username; + if (row?.roles) { + userInfo.roles = row.roles; + } else { + userInfo.roles = []; + } + editFormShow.value = true; +} +async function edieUserRole() { operateDisabled.value = true; - const res = await syncUsersInfo(); + const res = await updateUserRoles({ + userId: userInfo.id, + roles: userInfo.roles, + }); operateDisabled.value = false; - if (res.syncUser) { + if (res.data?.errors && res.data?.errors.length) { + $q.notify({ + type: 'negative', + message: res.data.errors[0].message, + }); + } else { + successNotify('修改成功'); tableRef.value.requestServerInteraction(); } } diff --git a/src/pages/UserRegister.vue b/src/pages/UserRegister.vue new file mode 100644 index 0000000..817e998 --- /dev/null +++ b/src/pages/UserRegister.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/protos/common.ts b/src/protos/common.ts index 8b500a6..87f4635 100644 --- a/src/protos/common.ts +++ b/src/protos/common.ts @@ -8,13 +8,23 @@ export namespace common { export enum Role { Role_Unknown = 0, Role_Admin = 1, - Role_User = 2 + Role_User = 2, + Role_OrgManager = 11, + Role_OrgTeacher = 12, + Role_OrgStudent = 13, + Role_OrgGuest = 14 } export enum DataType { DataType_Unknown = 0, DataType_Em = 1, DataType_Iscs = 4 } + export enum LineType { + LineType_Unknown = 0, + LineType_Ur = 1, + LineType_Ir = 2, + LineType_Cr = 3 + } export enum IscsStyle { IscsStyle_Unknown = 0, IscsStyle_DaShiZhiNeng = 1 diff --git a/src/protos/electronicMap_graphic_data.ts b/src/protos/electronicMap_graphic_data.ts new file mode 100644 index 0000000..e5d244c --- /dev/null +++ b/src/protos/electronicMap_graphic_data.ts @@ -0,0 +1,2459 @@ +/** + * Generated by the protoc-gen-ts. DO NOT EDIT! + * compiler version: 5.27.4 + * source: electronicMap_graphic_data.proto + * git: https://github.com/thesayyn/protoc-gen-ts */ +import * as dependency_1 from "./common"; +import * as pb_1 from "google-protobuf"; +export namespace electronicMapGraphicData { + export enum Direction { + UP = 0, + DOWN = 1 + } + export class ElectronicMapGraphicStorage extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + canvas?: dependency_1.common.Canvas; + stations?: Station[]; + Platforms?: Platform[]; + screenDoors?: ScreenDoor[]; + section?: Section[]; + turnouts?: Turnout[]; + signals?: Signal[]; + axleCountings?: AxleCounting[]; + generateAxleCountingConfig?: GenerateAxleCountingConfig; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2, 3, 4, 5, 6, 7, 8], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("canvas" in data && data.canvas != undefined) { + this.canvas = data.canvas; + } + if ("stations" in data && data.stations != undefined) { + this.stations = data.stations; + } + if ("Platforms" in data && data.Platforms != undefined) { + this.Platforms = data.Platforms; + } + if ("screenDoors" in data && data.screenDoors != undefined) { + this.screenDoors = data.screenDoors; + } + if ("section" in data && data.section != undefined) { + this.section = data.section; + } + if ("turnouts" in data && data.turnouts != undefined) { + this.turnouts = data.turnouts; + } + if ("signals" in data && data.signals != undefined) { + this.signals = data.signals; + } + if ("axleCountings" in data && data.axleCountings != undefined) { + this.axleCountings = data.axleCountings; + } + if ("generateAxleCountingConfig" in data && data.generateAxleCountingConfig != undefined) { + this.generateAxleCountingConfig = data.generateAxleCountingConfig; + } + } + } + get canvas() { + return pb_1.Message.getWrapperField(this, dependency_1.common.Canvas, 1) as dependency_1.common.Canvas; + } + set canvas(value: dependency_1.common.Canvas) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_canvas() { + return pb_1.Message.getField(this, 1) != null; + } + get stations() { + return pb_1.Message.getRepeatedWrapperField(this, Station, 2) as Station[]; + } + set stations(value: Station[]) { + pb_1.Message.setRepeatedWrapperField(this, 2, value); + } + get Platforms() { + return pb_1.Message.getRepeatedWrapperField(this, Platform, 3) as Platform[]; + } + set Platforms(value: Platform[]) { + pb_1.Message.setRepeatedWrapperField(this, 3, value); + } + get screenDoors() { + return pb_1.Message.getRepeatedWrapperField(this, ScreenDoor, 4) as ScreenDoor[]; + } + set screenDoors(value: ScreenDoor[]) { + pb_1.Message.setRepeatedWrapperField(this, 4, value); + } + get section() { + return pb_1.Message.getRepeatedWrapperField(this, Section, 5) as Section[]; + } + set section(value: Section[]) { + pb_1.Message.setRepeatedWrapperField(this, 5, value); + } + get turnouts() { + return pb_1.Message.getRepeatedWrapperField(this, Turnout, 6) as Turnout[]; + } + set turnouts(value: Turnout[]) { + pb_1.Message.setRepeatedWrapperField(this, 6, value); + } + get signals() { + return pb_1.Message.getRepeatedWrapperField(this, Signal, 7) as Signal[]; + } + set signals(value: Signal[]) { + pb_1.Message.setRepeatedWrapperField(this, 7, value); + } + get axleCountings() { + return pb_1.Message.getRepeatedWrapperField(this, AxleCounting, 8) as AxleCounting[]; + } + set axleCountings(value: AxleCounting[]) { + pb_1.Message.setRepeatedWrapperField(this, 8, value); + } + get generateAxleCountingConfig() { + return pb_1.Message.getWrapperField(this, GenerateAxleCountingConfig, 9) as GenerateAxleCountingConfig; + } + set generateAxleCountingConfig(value: GenerateAxleCountingConfig) { + pb_1.Message.setWrapperField(this, 9, value); + } + get has_generateAxleCountingConfig() { + return pb_1.Message.getField(this, 9) != null; + } + static fromObject(data: { + canvas?: ReturnType; + stations?: ReturnType[]; + Platforms?: ReturnType[]; + screenDoors?: ReturnType[]; + section?: ReturnType[]; + turnouts?: ReturnType[]; + signals?: ReturnType[]; + axleCountings?: ReturnType[]; + generateAxleCountingConfig?: ReturnType; + }): ElectronicMapGraphicStorage { + const message = new ElectronicMapGraphicStorage({}); + if (data.canvas != null) { + message.canvas = dependency_1.common.Canvas.fromObject(data.canvas); + } + if (data.stations != null) { + message.stations = data.stations.map(item => Station.fromObject(item)); + } + if (data.Platforms != null) { + message.Platforms = data.Platforms.map(item => Platform.fromObject(item)); + } + if (data.screenDoors != null) { + message.screenDoors = data.screenDoors.map(item => ScreenDoor.fromObject(item)); + } + if (data.section != null) { + message.section = data.section.map(item => Section.fromObject(item)); + } + if (data.turnouts != null) { + message.turnouts = data.turnouts.map(item => Turnout.fromObject(item)); + } + if (data.signals != null) { + message.signals = data.signals.map(item => Signal.fromObject(item)); + } + if (data.axleCountings != null) { + message.axleCountings = data.axleCountings.map(item => AxleCounting.fromObject(item)); + } + if (data.generateAxleCountingConfig != null) { + message.generateAxleCountingConfig = GenerateAxleCountingConfig.fromObject(data.generateAxleCountingConfig); + } + return message; + } + toObject() { + const data: { + canvas?: ReturnType; + stations?: ReturnType[]; + Platforms?: ReturnType[]; + screenDoors?: ReturnType[]; + section?: ReturnType[]; + turnouts?: ReturnType[]; + signals?: ReturnType[]; + axleCountings?: ReturnType[]; + generateAxleCountingConfig?: ReturnType; + } = {}; + if (this.canvas != null) { + data.canvas = this.canvas.toObject(); + } + if (this.stations != null) { + data.stations = this.stations.map((item: Station) => item.toObject()); + } + if (this.Platforms != null) { + data.Platforms = this.Platforms.map((item: Platform) => item.toObject()); + } + if (this.screenDoors != null) { + data.screenDoors = this.screenDoors.map((item: ScreenDoor) => item.toObject()); + } + if (this.section != null) { + data.section = this.section.map((item: Section) => item.toObject()); + } + if (this.turnouts != null) { + data.turnouts = this.turnouts.map((item: Turnout) => item.toObject()); + } + if (this.signals != null) { + data.signals = this.signals.map((item: Signal) => item.toObject()); + } + if (this.axleCountings != null) { + data.axleCountings = this.axleCountings.map((item: AxleCounting) => item.toObject()); + } + if (this.generateAxleCountingConfig != null) { + data.generateAxleCountingConfig = this.generateAxleCountingConfig.toObject(); + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_canvas) + writer.writeMessage(1, this.canvas, () => this.canvas.serialize(writer)); + if (this.stations.length) + writer.writeRepeatedMessage(2, this.stations, (item: Station) => item.serialize(writer)); + if (this.Platforms.length) + writer.writeRepeatedMessage(3, this.Platforms, (item: Platform) => item.serialize(writer)); + if (this.screenDoors.length) + writer.writeRepeatedMessage(4, this.screenDoors, (item: ScreenDoor) => item.serialize(writer)); + if (this.section.length) + writer.writeRepeatedMessage(5, this.section, (item: Section) => item.serialize(writer)); + if (this.turnouts.length) + writer.writeRepeatedMessage(6, this.turnouts, (item: Turnout) => item.serialize(writer)); + if (this.signals.length) + writer.writeRepeatedMessage(7, this.signals, (item: Signal) => item.serialize(writer)); + if (this.axleCountings.length) + writer.writeRepeatedMessage(8, this.axleCountings, (item: AxleCounting) => item.serialize(writer)); + if (this.has_generateAxleCountingConfig) + writer.writeMessage(9, this.generateAxleCountingConfig, () => this.generateAxleCountingConfig.serialize(writer)); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ElectronicMapGraphicStorage { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ElectronicMapGraphicStorage(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.canvas, () => message.canvas = dependency_1.common.Canvas.deserialize(reader)); + break; + case 2: + reader.readMessage(message.stations, () => pb_1.Message.addToRepeatedWrapperField(message, 2, Station.deserialize(reader), Station)); + break; + case 3: + reader.readMessage(message.Platforms, () => pb_1.Message.addToRepeatedWrapperField(message, 3, Platform.deserialize(reader), Platform)); + break; + case 4: + reader.readMessage(message.screenDoors, () => pb_1.Message.addToRepeatedWrapperField(message, 4, ScreenDoor.deserialize(reader), ScreenDoor)); + break; + case 5: + reader.readMessage(message.section, () => pb_1.Message.addToRepeatedWrapperField(message, 5, Section.deserialize(reader), Section)); + break; + case 6: + reader.readMessage(message.turnouts, () => pb_1.Message.addToRepeatedWrapperField(message, 6, Turnout.deserialize(reader), Turnout)); + break; + case 7: + reader.readMessage(message.signals, () => pb_1.Message.addToRepeatedWrapperField(message, 7, Signal.deserialize(reader), Signal)); + break; + case 8: + reader.readMessage(message.axleCountings, () => pb_1.Message.addToRepeatedWrapperField(message, 8, AxleCounting.deserialize(reader), AxleCounting)); + break; + case 9: + reader.readMessage(message.generateAxleCountingConfig, () => message.generateAxleCountingConfig = GenerateAxleCountingConfig.deserialize(reader)); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): ElectronicMapGraphicStorage { + return ElectronicMapGraphicStorage.deserialize(bytes); + } + } + export class Station extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + concentrationStations?: boolean; + kilometerSystem?: KilometerSystem; + stationName?: string; + stationNameAcronym?: string; + depots?: boolean; + manageStations?: number[]; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [8], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("concentrationStations" in data && data.concentrationStations != undefined) { + this.concentrationStations = data.concentrationStations; + } + if ("kilometerSystem" in data && data.kilometerSystem != undefined) { + this.kilometerSystem = data.kilometerSystem; + } + if ("stationName" in data && data.stationName != undefined) { + this.stationName = data.stationName; + } + if ("stationNameAcronym" in data && data.stationNameAcronym != undefined) { + this.stationNameAcronym = data.stationNameAcronym; + } + if ("depots" in data && data.depots != undefined) { + this.depots = data.depots; + } + if ("manageStations" in data && data.manageStations != undefined) { + this.manageStations = data.manageStations; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get concentrationStations() { + return pb_1.Message.getFieldWithDefault(this, 3, false) as boolean; + } + set concentrationStations(value: boolean) { + pb_1.Message.setField(this, 3, value); + } + get kilometerSystem() { + return pb_1.Message.getWrapperField(this, KilometerSystem, 4) as KilometerSystem; + } + set kilometerSystem(value: KilometerSystem) { + pb_1.Message.setWrapperField(this, 4, value); + } + get has_kilometerSystem() { + return pb_1.Message.getField(this, 4) != null; + } + get stationName() { + return pb_1.Message.getFieldWithDefault(this, 5, "") as string; + } + set stationName(value: string) { + pb_1.Message.setField(this, 5, value); + } + get stationNameAcronym() { + return pb_1.Message.getFieldWithDefault(this, 6, "") as string; + } + set stationNameAcronym(value: string) { + pb_1.Message.setField(this, 6, value); + } + get depots() { + return pb_1.Message.getFieldWithDefault(this, 7, false) as boolean; + } + set depots(value: boolean) { + pb_1.Message.setField(this, 7, value); + } + get manageStations() { + return pb_1.Message.getFieldWithDefault(this, 8, []) as number[]; + } + set manageStations(value: number[]) { + pb_1.Message.setField(this, 8, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + concentrationStations?: boolean; + kilometerSystem?: ReturnType; + stationName?: string; + stationNameAcronym?: string; + depots?: boolean; + manageStations?: number[]; + }): Station { + const message = new Station({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.concentrationStations != null) { + message.concentrationStations = data.concentrationStations; + } + if (data.kilometerSystem != null) { + message.kilometerSystem = KilometerSystem.fromObject(data.kilometerSystem); + } + if (data.stationName != null) { + message.stationName = data.stationName; + } + if (data.stationNameAcronym != null) { + message.stationNameAcronym = data.stationNameAcronym; + } + if (data.depots != null) { + message.depots = data.depots; + } + if (data.manageStations != null) { + message.manageStations = data.manageStations; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + concentrationStations?: boolean; + kilometerSystem?: ReturnType; + stationName?: string; + stationNameAcronym?: string; + depots?: boolean; + manageStations?: number[]; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.concentrationStations != null) { + data.concentrationStations = this.concentrationStations; + } + if (this.kilometerSystem != null) { + data.kilometerSystem = this.kilometerSystem.toObject(); + } + if (this.stationName != null) { + data.stationName = this.stationName; + } + if (this.stationNameAcronym != null) { + data.stationNameAcronym = this.stationNameAcronym; + } + if (this.depots != null) { + data.depots = this.depots; + } + if (this.manageStations != null) { + data.manageStations = this.manageStations; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.concentrationStations != false) + writer.writeBool(3, this.concentrationStations); + if (this.has_kilometerSystem) + writer.writeMessage(4, this.kilometerSystem, () => this.kilometerSystem.serialize(writer)); + if (this.stationName.length) + writer.writeString(5, this.stationName); + if (this.stationNameAcronym.length) + writer.writeString(6, this.stationNameAcronym); + if (this.depots != false) + writer.writeBool(7, this.depots); + if (this.manageStations.length) + writer.writePackedUint32(8, this.manageStations); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Station { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Station(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + message.concentrationStations = reader.readBool(); + break; + case 4: + reader.readMessage(message.kilometerSystem, () => message.kilometerSystem = KilometerSystem.deserialize(reader)); + break; + case 5: + message.stationName = reader.readString(); + break; + case 6: + message.stationNameAcronym = reader.readString(); + break; + case 7: + message.depots = reader.readBool(); + break; + case 8: + message.manageStations = reader.readPackedUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Station { + return Station.deserialize(bytes); + } + } + export class Platform extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + refEsbRelayCode?: string; + type?: Platform.TypeOfPlatform; + refStationId?: number; + refSectionId?: number; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("refEsbRelayCode" in data && data.refEsbRelayCode != undefined) { + this.refEsbRelayCode = data.refEsbRelayCode; + } + if ("type" in data && data.type != undefined) { + this.type = data.type; + } + if ("refStationId" in data && data.refStationId != undefined) { + this.refStationId = data.refStationId; + } + if ("refSectionId" in data && data.refSectionId != undefined) { + this.refSectionId = data.refSectionId; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get refEsbRelayCode() { + return pb_1.Message.getFieldWithDefault(this, 3, "") as string; + } + set refEsbRelayCode(value: string) { + pb_1.Message.setField(this, 3, value); + } + get type() { + return pb_1.Message.getFieldWithDefault(this, 4, Platform.TypeOfPlatform.Unknown) as Platform.TypeOfPlatform; + } + set type(value: Platform.TypeOfPlatform) { + pb_1.Message.setField(this, 4, value); + } + get refStationId() { + return pb_1.Message.getFieldWithDefault(this, 5, 0) as number; + } + set refStationId(value: number) { + pb_1.Message.setField(this, 5, value); + } + get refSectionId() { + return pb_1.Message.getFieldWithDefault(this, 6, 0) as number; + } + set refSectionId(value: number) { + pb_1.Message.setField(this, 6, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + refEsbRelayCode?: string; + type?: Platform.TypeOfPlatform; + refStationId?: number; + refSectionId?: number; + }): Platform { + const message = new Platform({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.refEsbRelayCode != null) { + message.refEsbRelayCode = data.refEsbRelayCode; + } + if (data.type != null) { + message.type = data.type; + } + if (data.refStationId != null) { + message.refStationId = data.refStationId; + } + if (data.refSectionId != null) { + message.refSectionId = data.refSectionId; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + refEsbRelayCode?: string; + type?: Platform.TypeOfPlatform; + refStationId?: number; + refSectionId?: number; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.refEsbRelayCode != null) { + data.refEsbRelayCode = this.refEsbRelayCode; + } + if (this.type != null) { + data.type = this.type; + } + if (this.refStationId != null) { + data.refStationId = this.refStationId; + } + if (this.refSectionId != null) { + data.refSectionId = this.refSectionId; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.refEsbRelayCode.length) + writer.writeString(3, this.refEsbRelayCode); + if (this.type != Platform.TypeOfPlatform.Unknown) + writer.writeEnum(4, this.type); + if (this.refStationId != 0) + writer.writeUint32(5, this.refStationId); + if (this.refSectionId != 0) + writer.writeUint32(6, this.refSectionId); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Platform { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Platform(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + message.refEsbRelayCode = reader.readString(); + break; + case 4: + message.type = reader.readEnum(); + break; + case 5: + message.refStationId = reader.readUint32(); + break; + case 6: + message.refSectionId = reader.readUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Platform { + return Platform.deserialize(bytes); + } + } + export namespace Platform { + export enum TypeOfPlatform { + Unknown = 0, + up = 1, + down = 2 + } + } + export class ScreenDoor extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + refPlatformId?: number; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("refPlatformId" in data && data.refPlatformId != undefined) { + this.refPlatformId = data.refPlatformId; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get refPlatformId() { + return pb_1.Message.getFieldWithDefault(this, 3, 0) as number; + } + set refPlatformId(value: number) { + pb_1.Message.setField(this, 3, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + refPlatformId?: number; + }): ScreenDoor { + const message = new ScreenDoor({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.refPlatformId != null) { + message.refPlatformId = data.refPlatformId; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + refPlatformId?: number; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.refPlatformId != null) { + data.refPlatformId = this.refPlatformId; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.refPlatformId != 0) + writer.writeUint32(3, this.refPlatformId); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ScreenDoor { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ScreenDoor(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + message.refPlatformId = reader.readUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): ScreenDoor { + return ScreenDoor.deserialize(bytes); + } + } + export class Section extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + points?: dependency_1.common.Point[]; + paRef?: RelatedRef; + pbRef?: RelatedRef; + sectionType?: Section.SectionType; + isCurve?: boolean; + segmentsCount?: number; + normalRunningDirection?: Section.RunningDirection; + isTurnBackZone?: boolean; + direction?: Direction; + axleCountings?: number[]; + trackSectionId?: number; + centralizedStations?: number[]; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [3, 12, 14], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("points" in data && data.points != undefined) { + this.points = data.points; + } + if ("paRef" in data && data.paRef != undefined) { + this.paRef = data.paRef; + } + if ("pbRef" in data && data.pbRef != undefined) { + this.pbRef = data.pbRef; + } + if ("sectionType" in data && data.sectionType != undefined) { + this.sectionType = data.sectionType; + } + if ("isCurve" in data && data.isCurve != undefined) { + this.isCurve = data.isCurve; + } + if ("segmentsCount" in data && data.segmentsCount != undefined) { + this.segmentsCount = data.segmentsCount; + } + if ("normalRunningDirection" in data && data.normalRunningDirection != undefined) { + this.normalRunningDirection = data.normalRunningDirection; + } + if ("isTurnBackZone" in data && data.isTurnBackZone != undefined) { + this.isTurnBackZone = data.isTurnBackZone; + } + if ("direction" in data && data.direction != undefined) { + this.direction = data.direction; + } + if ("axleCountings" in data && data.axleCountings != undefined) { + this.axleCountings = data.axleCountings; + } + if ("trackSectionId" in data && data.trackSectionId != undefined) { + this.trackSectionId = data.trackSectionId; + } + if ("centralizedStations" in data && data.centralizedStations != undefined) { + this.centralizedStations = data.centralizedStations; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get points() { + return pb_1.Message.getRepeatedWrapperField(this, dependency_1.common.Point, 3) as dependency_1.common.Point[]; + } + set points(value: dependency_1.common.Point[]) { + pb_1.Message.setRepeatedWrapperField(this, 3, value); + } + get paRef() { + return pb_1.Message.getWrapperField(this, RelatedRef, 4) as RelatedRef; + } + set paRef(value: RelatedRef) { + pb_1.Message.setWrapperField(this, 4, value); + } + get has_paRef() { + return pb_1.Message.getField(this, 4) != null; + } + get pbRef() { + return pb_1.Message.getWrapperField(this, RelatedRef, 5) as RelatedRef; + } + set pbRef(value: RelatedRef) { + pb_1.Message.setWrapperField(this, 5, value); + } + get has_pbRef() { + return pb_1.Message.getField(this, 5) != null; + } + get sectionType() { + return pb_1.Message.getFieldWithDefault(this, 6, Section.SectionType.Physical) as Section.SectionType; + } + set sectionType(value: Section.SectionType) { + pb_1.Message.setField(this, 6, value); + } + get isCurve() { + return pb_1.Message.getFieldWithDefault(this, 7, false) as boolean; + } + set isCurve(value: boolean) { + pb_1.Message.setField(this, 7, value); + } + get segmentsCount() { + return pb_1.Message.getFieldWithDefault(this, 8, 0) as number; + } + set segmentsCount(value: number) { + pb_1.Message.setField(this, 8, value); + } + get normalRunningDirection() { + return pb_1.Message.getFieldWithDefault(this, 9, Section.RunningDirection.AtoB) as Section.RunningDirection; + } + set normalRunningDirection(value: Section.RunningDirection) { + pb_1.Message.setField(this, 9, value); + } + get isTurnBackZone() { + return pb_1.Message.getFieldWithDefault(this, 10, false) as boolean; + } + set isTurnBackZone(value: boolean) { + pb_1.Message.setField(this, 10, value); + } + get direction() { + return pb_1.Message.getFieldWithDefault(this, 11, Direction.UP) as Direction; + } + set direction(value: Direction) { + pb_1.Message.setField(this, 11, value); + } + get axleCountings() { + return pb_1.Message.getFieldWithDefault(this, 12, []) as number[]; + } + set axleCountings(value: number[]) { + pb_1.Message.setField(this, 12, value); + } + get trackSectionId() { + return pb_1.Message.getFieldWithDefault(this, 13, 0) as number; + } + set trackSectionId(value: number) { + pb_1.Message.setField(this, 13, value); + } + get centralizedStations() { + return pb_1.Message.getFieldWithDefault(this, 14, []) as number[]; + } + set centralizedStations(value: number[]) { + pb_1.Message.setField(this, 14, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + points?: ReturnType[]; + paRef?: ReturnType; + pbRef?: ReturnType; + sectionType?: Section.SectionType; + isCurve?: boolean; + segmentsCount?: number; + normalRunningDirection?: Section.RunningDirection; + isTurnBackZone?: boolean; + direction?: Direction; + axleCountings?: number[]; + trackSectionId?: number; + centralizedStations?: number[]; + }): Section { + const message = new Section({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.points != null) { + message.points = data.points.map(item => dependency_1.common.Point.fromObject(item)); + } + if (data.paRef != null) { + message.paRef = RelatedRef.fromObject(data.paRef); + } + if (data.pbRef != null) { + message.pbRef = RelatedRef.fromObject(data.pbRef); + } + if (data.sectionType != null) { + message.sectionType = data.sectionType; + } + if (data.isCurve != null) { + message.isCurve = data.isCurve; + } + if (data.segmentsCount != null) { + message.segmentsCount = data.segmentsCount; + } + if (data.normalRunningDirection != null) { + message.normalRunningDirection = data.normalRunningDirection; + } + if (data.isTurnBackZone != null) { + message.isTurnBackZone = data.isTurnBackZone; + } + if (data.direction != null) { + message.direction = data.direction; + } + if (data.axleCountings != null) { + message.axleCountings = data.axleCountings; + } + if (data.trackSectionId != null) { + message.trackSectionId = data.trackSectionId; + } + if (data.centralizedStations != null) { + message.centralizedStations = data.centralizedStations; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + points?: ReturnType[]; + paRef?: ReturnType; + pbRef?: ReturnType; + sectionType?: Section.SectionType; + isCurve?: boolean; + segmentsCount?: number; + normalRunningDirection?: Section.RunningDirection; + isTurnBackZone?: boolean; + direction?: Direction; + axleCountings?: number[]; + trackSectionId?: number; + centralizedStations?: number[]; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.points != null) { + data.points = this.points.map((item: dependency_1.common.Point) => item.toObject()); + } + if (this.paRef != null) { + data.paRef = this.paRef.toObject(); + } + if (this.pbRef != null) { + data.pbRef = this.pbRef.toObject(); + } + if (this.sectionType != null) { + data.sectionType = this.sectionType; + } + if (this.isCurve != null) { + data.isCurve = this.isCurve; + } + if (this.segmentsCount != null) { + data.segmentsCount = this.segmentsCount; + } + if (this.normalRunningDirection != null) { + data.normalRunningDirection = this.normalRunningDirection; + } + if (this.isTurnBackZone != null) { + data.isTurnBackZone = this.isTurnBackZone; + } + if (this.direction != null) { + data.direction = this.direction; + } + if (this.axleCountings != null) { + data.axleCountings = this.axleCountings; + } + if (this.trackSectionId != null) { + data.trackSectionId = this.trackSectionId; + } + if (this.centralizedStations != null) { + data.centralizedStations = this.centralizedStations; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.points.length) + writer.writeRepeatedMessage(3, this.points, (item: dependency_1.common.Point) => item.serialize(writer)); + if (this.has_paRef) + writer.writeMessage(4, this.paRef, () => this.paRef.serialize(writer)); + if (this.has_pbRef) + writer.writeMessage(5, this.pbRef, () => this.pbRef.serialize(writer)); + if (this.sectionType != Section.SectionType.Physical) + writer.writeEnum(6, this.sectionType); + if (this.isCurve != false) + writer.writeBool(7, this.isCurve); + if (this.segmentsCount != 0) + writer.writeInt32(8, this.segmentsCount); + if (this.normalRunningDirection != Section.RunningDirection.AtoB) + writer.writeEnum(9, this.normalRunningDirection); + if (this.isTurnBackZone != false) + writer.writeBool(10, this.isTurnBackZone); + if (this.direction != Direction.UP) + writer.writeEnum(11, this.direction); + if (this.axleCountings.length) + writer.writePackedUint32(12, this.axleCountings); + if (this.trackSectionId != 0) + writer.writeUint32(13, this.trackSectionId); + if (this.centralizedStations.length) + writer.writePackedUint32(14, this.centralizedStations); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Section { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Section(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + reader.readMessage(message.points, () => pb_1.Message.addToRepeatedWrapperField(message, 3, dependency_1.common.Point.deserialize(reader), dependency_1.common.Point)); + break; + case 4: + reader.readMessage(message.paRef, () => message.paRef = RelatedRef.deserialize(reader)); + break; + case 5: + reader.readMessage(message.pbRef, () => message.pbRef = RelatedRef.deserialize(reader)); + break; + case 6: + message.sectionType = reader.readEnum(); + break; + case 7: + message.isCurve = reader.readBool(); + break; + case 8: + message.segmentsCount = reader.readInt32(); + break; + case 9: + message.normalRunningDirection = reader.readEnum(); + break; + case 10: + message.isTurnBackZone = reader.readBool(); + break; + case 11: + message.direction = reader.readEnum(); + break; + case 12: + message.axleCountings = reader.readPackedUint32(); + break; + case 13: + message.trackSectionId = reader.readUint32(); + break; + case 14: + message.centralizedStations = reader.readPackedUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Section { + return Section.deserialize(bytes); + } + } + export namespace Section { + export enum SectionType { + Physical = 0, + TurnoutPhysical = 1 + } + export enum RunningDirection { + AtoB = 0, + BtoA = 1, + BOTH = 2 + } + } + export class Turnout extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + pointA?: dependency_1.common.Point[]; + pointB?: dependency_1.common.Point[]; + pointC?: dependency_1.common.Point[]; + paRef?: RelatedRef; + pbRef?: RelatedRef; + pcRef?: RelatedRef; + kilometerSystem?: KilometerSystem[]; + switchMachineType?: Turnout.SwitchMachineType; + centralizedStations?: number[]; + paTrackSectionId?: number; + pbTrackSectionId?: number; + pcTrackSectionId?: number; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [3, 4, 5, 9, 11], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("pointA" in data && data.pointA != undefined) { + this.pointA = data.pointA; + } + if ("pointB" in data && data.pointB != undefined) { + this.pointB = data.pointB; + } + if ("pointC" in data && data.pointC != undefined) { + this.pointC = data.pointC; + } + if ("paRef" in data && data.paRef != undefined) { + this.paRef = data.paRef; + } + if ("pbRef" in data && data.pbRef != undefined) { + this.pbRef = data.pbRef; + } + if ("pcRef" in data && data.pcRef != undefined) { + this.pcRef = data.pcRef; + } + if ("kilometerSystem" in data && data.kilometerSystem != undefined) { + this.kilometerSystem = data.kilometerSystem; + } + if ("switchMachineType" in data && data.switchMachineType != undefined) { + this.switchMachineType = data.switchMachineType; + } + if ("centralizedStations" in data && data.centralizedStations != undefined) { + this.centralizedStations = data.centralizedStations; + } + if ("paTrackSectionId" in data && data.paTrackSectionId != undefined) { + this.paTrackSectionId = data.paTrackSectionId; + } + if ("pbTrackSectionId" in data && data.pbTrackSectionId != undefined) { + this.pbTrackSectionId = data.pbTrackSectionId; + } + if ("pcTrackSectionId" in data && data.pcTrackSectionId != undefined) { + this.pcTrackSectionId = data.pcTrackSectionId; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get pointA() { + return pb_1.Message.getRepeatedWrapperField(this, dependency_1.common.Point, 3) as dependency_1.common.Point[]; + } + set pointA(value: dependency_1.common.Point[]) { + pb_1.Message.setRepeatedWrapperField(this, 3, value); + } + get pointB() { + return pb_1.Message.getRepeatedWrapperField(this, dependency_1.common.Point, 4) as dependency_1.common.Point[]; + } + set pointB(value: dependency_1.common.Point[]) { + pb_1.Message.setRepeatedWrapperField(this, 4, value); + } + get pointC() { + return pb_1.Message.getRepeatedWrapperField(this, dependency_1.common.Point, 5) as dependency_1.common.Point[]; + } + set pointC(value: dependency_1.common.Point[]) { + pb_1.Message.setRepeatedWrapperField(this, 5, value); + } + get paRef() { + return pb_1.Message.getWrapperField(this, RelatedRef, 6) as RelatedRef; + } + set paRef(value: RelatedRef) { + pb_1.Message.setWrapperField(this, 6, value); + } + get has_paRef() { + return pb_1.Message.getField(this, 6) != null; + } + get pbRef() { + return pb_1.Message.getWrapperField(this, RelatedRef, 7) as RelatedRef; + } + set pbRef(value: RelatedRef) { + pb_1.Message.setWrapperField(this, 7, value); + } + get has_pbRef() { + return pb_1.Message.getField(this, 7) != null; + } + get pcRef() { + return pb_1.Message.getWrapperField(this, RelatedRef, 8) as RelatedRef; + } + set pcRef(value: RelatedRef) { + pb_1.Message.setWrapperField(this, 8, value); + } + get has_pcRef() { + return pb_1.Message.getField(this, 8) != null; + } + get kilometerSystem() { + return pb_1.Message.getRepeatedWrapperField(this, KilometerSystem, 9) as KilometerSystem[]; + } + set kilometerSystem(value: KilometerSystem[]) { + pb_1.Message.setRepeatedWrapperField(this, 9, value); + } + get switchMachineType() { + return pb_1.Message.getFieldWithDefault(this, 10, Turnout.SwitchMachineType.Unknown) as Turnout.SwitchMachineType; + } + set switchMachineType(value: Turnout.SwitchMachineType) { + pb_1.Message.setField(this, 10, value); + } + get centralizedStations() { + return pb_1.Message.getFieldWithDefault(this, 11, []) as number[]; + } + set centralizedStations(value: number[]) { + pb_1.Message.setField(this, 11, value); + } + get paTrackSectionId() { + return pb_1.Message.getFieldWithDefault(this, 12, 0) as number; + } + set paTrackSectionId(value: number) { + pb_1.Message.setField(this, 12, value); + } + get pbTrackSectionId() { + return pb_1.Message.getFieldWithDefault(this, 13, 0) as number; + } + set pbTrackSectionId(value: number) { + pb_1.Message.setField(this, 13, value); + } + get pcTrackSectionId() { + return pb_1.Message.getFieldWithDefault(this, 14, 0) as number; + } + set pcTrackSectionId(value: number) { + pb_1.Message.setField(this, 14, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + pointA?: ReturnType[]; + pointB?: ReturnType[]; + pointC?: ReturnType[]; + paRef?: ReturnType; + pbRef?: ReturnType; + pcRef?: ReturnType; + kilometerSystem?: ReturnType[]; + switchMachineType?: Turnout.SwitchMachineType; + centralizedStations?: number[]; + paTrackSectionId?: number; + pbTrackSectionId?: number; + pcTrackSectionId?: number; + }): Turnout { + const message = new Turnout({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.pointA != null) { + message.pointA = data.pointA.map(item => dependency_1.common.Point.fromObject(item)); + } + if (data.pointB != null) { + message.pointB = data.pointB.map(item => dependency_1.common.Point.fromObject(item)); + } + if (data.pointC != null) { + message.pointC = data.pointC.map(item => dependency_1.common.Point.fromObject(item)); + } + if (data.paRef != null) { + message.paRef = RelatedRef.fromObject(data.paRef); + } + if (data.pbRef != null) { + message.pbRef = RelatedRef.fromObject(data.pbRef); + } + if (data.pcRef != null) { + message.pcRef = RelatedRef.fromObject(data.pcRef); + } + if (data.kilometerSystem != null) { + message.kilometerSystem = data.kilometerSystem.map(item => KilometerSystem.fromObject(item)); + } + if (data.switchMachineType != null) { + message.switchMachineType = data.switchMachineType; + } + if (data.centralizedStations != null) { + message.centralizedStations = data.centralizedStations; + } + if (data.paTrackSectionId != null) { + message.paTrackSectionId = data.paTrackSectionId; + } + if (data.pbTrackSectionId != null) { + message.pbTrackSectionId = data.pbTrackSectionId; + } + if (data.pcTrackSectionId != null) { + message.pcTrackSectionId = data.pcTrackSectionId; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + pointA?: ReturnType[]; + pointB?: ReturnType[]; + pointC?: ReturnType[]; + paRef?: ReturnType; + pbRef?: ReturnType; + pcRef?: ReturnType; + kilometerSystem?: ReturnType[]; + switchMachineType?: Turnout.SwitchMachineType; + centralizedStations?: number[]; + paTrackSectionId?: number; + pbTrackSectionId?: number; + pcTrackSectionId?: number; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.pointA != null) { + data.pointA = this.pointA.map((item: dependency_1.common.Point) => item.toObject()); + } + if (this.pointB != null) { + data.pointB = this.pointB.map((item: dependency_1.common.Point) => item.toObject()); + } + if (this.pointC != null) { + data.pointC = this.pointC.map((item: dependency_1.common.Point) => item.toObject()); + } + if (this.paRef != null) { + data.paRef = this.paRef.toObject(); + } + if (this.pbRef != null) { + data.pbRef = this.pbRef.toObject(); + } + if (this.pcRef != null) { + data.pcRef = this.pcRef.toObject(); + } + if (this.kilometerSystem != null) { + data.kilometerSystem = this.kilometerSystem.map((item: KilometerSystem) => item.toObject()); + } + if (this.switchMachineType != null) { + data.switchMachineType = this.switchMachineType; + } + if (this.centralizedStations != null) { + data.centralizedStations = this.centralizedStations; + } + if (this.paTrackSectionId != null) { + data.paTrackSectionId = this.paTrackSectionId; + } + if (this.pbTrackSectionId != null) { + data.pbTrackSectionId = this.pbTrackSectionId; + } + if (this.pcTrackSectionId != null) { + data.pcTrackSectionId = this.pcTrackSectionId; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.pointA.length) + writer.writeRepeatedMessage(3, this.pointA, (item: dependency_1.common.Point) => item.serialize(writer)); + if (this.pointB.length) + writer.writeRepeatedMessage(4, this.pointB, (item: dependency_1.common.Point) => item.serialize(writer)); + if (this.pointC.length) + writer.writeRepeatedMessage(5, this.pointC, (item: dependency_1.common.Point) => item.serialize(writer)); + if (this.has_paRef) + writer.writeMessage(6, this.paRef, () => this.paRef.serialize(writer)); + if (this.has_pbRef) + writer.writeMessage(7, this.pbRef, () => this.pbRef.serialize(writer)); + if (this.has_pcRef) + writer.writeMessage(8, this.pcRef, () => this.pcRef.serialize(writer)); + if (this.kilometerSystem.length) + writer.writeRepeatedMessage(9, this.kilometerSystem, (item: KilometerSystem) => item.serialize(writer)); + if (this.switchMachineType != Turnout.SwitchMachineType.Unknown) + writer.writeEnum(10, this.switchMachineType); + if (this.centralizedStations.length) + writer.writePackedUint32(11, this.centralizedStations); + if (this.paTrackSectionId != 0) + writer.writeUint32(12, this.paTrackSectionId); + if (this.pbTrackSectionId != 0) + writer.writeUint32(13, this.pbTrackSectionId); + if (this.pcTrackSectionId != 0) + writer.writeUint32(14, this.pcTrackSectionId); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Turnout { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Turnout(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + reader.readMessage(message.pointA, () => pb_1.Message.addToRepeatedWrapperField(message, 3, dependency_1.common.Point.deserialize(reader), dependency_1.common.Point)); + break; + case 4: + reader.readMessage(message.pointB, () => pb_1.Message.addToRepeatedWrapperField(message, 4, dependency_1.common.Point.deserialize(reader), dependency_1.common.Point)); + break; + case 5: + reader.readMessage(message.pointC, () => pb_1.Message.addToRepeatedWrapperField(message, 5, dependency_1.common.Point.deserialize(reader), dependency_1.common.Point)); + break; + case 6: + reader.readMessage(message.paRef, () => message.paRef = RelatedRef.deserialize(reader)); + break; + case 7: + reader.readMessage(message.pbRef, () => message.pbRef = RelatedRef.deserialize(reader)); + break; + case 8: + reader.readMessage(message.pcRef, () => message.pcRef = RelatedRef.deserialize(reader)); + break; + case 9: + reader.readMessage(message.kilometerSystem, () => pb_1.Message.addToRepeatedWrapperField(message, 9, KilometerSystem.deserialize(reader), KilometerSystem)); + break; + case 10: + message.switchMachineType = reader.readEnum(); + break; + case 11: + message.centralizedStations = reader.readPackedUint32(); + break; + case 12: + message.paTrackSectionId = reader.readUint32(); + break; + case 13: + message.pbTrackSectionId = reader.readUint32(); + break; + case 14: + message.pcTrackSectionId = reader.readUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Turnout { + return Turnout.deserialize(bytes); + } + } + export namespace Turnout { + export enum SwitchMachineType { + Unknown = 0, + ZDJ9_Single = 1, + ZDJ9_Double = 2 + } + } + export class Signal extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + mirror?: boolean; + kilometerSystem?: KilometerSystem; + refDev?: RelatedRef; + mt?: Signal.Model; + direction?: Direction; + centralizedStations?: number[]; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [8], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("mirror" in data && data.mirror != undefined) { + this.mirror = data.mirror; + } + if ("kilometerSystem" in data && data.kilometerSystem != undefined) { + this.kilometerSystem = data.kilometerSystem; + } + if ("refDev" in data && data.refDev != undefined) { + this.refDev = data.refDev; + } + if ("mt" in data && data.mt != undefined) { + this.mt = data.mt; + } + if ("direction" in data && data.direction != undefined) { + this.direction = data.direction; + } + if ("centralizedStations" in data && data.centralizedStations != undefined) { + this.centralizedStations = data.centralizedStations; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get mirror() { + return pb_1.Message.getFieldWithDefault(this, 3, false) as boolean; + } + set mirror(value: boolean) { + pb_1.Message.setField(this, 3, value); + } + get kilometerSystem() { + return pb_1.Message.getWrapperField(this, KilometerSystem, 4) as KilometerSystem; + } + set kilometerSystem(value: KilometerSystem) { + pb_1.Message.setWrapperField(this, 4, value); + } + get has_kilometerSystem() { + return pb_1.Message.getField(this, 4) != null; + } + get refDev() { + return pb_1.Message.getWrapperField(this, RelatedRef, 5) as RelatedRef; + } + set refDev(value: RelatedRef) { + pb_1.Message.setWrapperField(this, 5, value); + } + get has_refDev() { + return pb_1.Message.getField(this, 5) != null; + } + get mt() { + return pb_1.Message.getFieldWithDefault(this, 6, Signal.Model.HL) as Signal.Model; + } + set mt(value: Signal.Model) { + pb_1.Message.setField(this, 6, value); + } + get direction() { + return pb_1.Message.getFieldWithDefault(this, 7, Direction.UP) as Direction; + } + set direction(value: Direction) { + pb_1.Message.setField(this, 7, value); + } + get centralizedStations() { + return pb_1.Message.getFieldWithDefault(this, 8, []) as number[]; + } + set centralizedStations(value: number[]) { + pb_1.Message.setField(this, 8, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + mirror?: boolean; + kilometerSystem?: ReturnType; + refDev?: ReturnType; + mt?: Signal.Model; + direction?: Direction; + centralizedStations?: number[]; + }): Signal { + const message = new Signal({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.mirror != null) { + message.mirror = data.mirror; + } + if (data.kilometerSystem != null) { + message.kilometerSystem = KilometerSystem.fromObject(data.kilometerSystem); + } + if (data.refDev != null) { + message.refDev = RelatedRef.fromObject(data.refDev); + } + if (data.mt != null) { + message.mt = data.mt; + } + if (data.direction != null) { + message.direction = data.direction; + } + if (data.centralizedStations != null) { + message.centralizedStations = data.centralizedStations; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + mirror?: boolean; + kilometerSystem?: ReturnType; + refDev?: ReturnType; + mt?: Signal.Model; + direction?: Direction; + centralizedStations?: number[]; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.mirror != null) { + data.mirror = this.mirror; + } + if (this.kilometerSystem != null) { + data.kilometerSystem = this.kilometerSystem.toObject(); + } + if (this.refDev != null) { + data.refDev = this.refDev.toObject(); + } + if (this.mt != null) { + data.mt = this.mt; + } + if (this.direction != null) { + data.direction = this.direction; + } + if (this.centralizedStations != null) { + data.centralizedStations = this.centralizedStations; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.mirror != false) + writer.writeBool(3, this.mirror); + if (this.has_kilometerSystem) + writer.writeMessage(4, this.kilometerSystem, () => this.kilometerSystem.serialize(writer)); + if (this.has_refDev) + writer.writeMessage(5, this.refDev, () => this.refDev.serialize(writer)); + if (this.mt != Signal.Model.HL) + writer.writeEnum(6, this.mt); + if (this.direction != Direction.UP) + writer.writeEnum(7, this.direction); + if (this.centralizedStations.length) + writer.writePackedUint32(8, this.centralizedStations); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Signal { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Signal(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + message.mirror = reader.readBool(); + break; + case 4: + reader.readMessage(message.kilometerSystem, () => message.kilometerSystem = KilometerSystem.deserialize(reader)); + break; + case 5: + reader.readMessage(message.refDev, () => message.refDev = RelatedRef.deserialize(reader)); + break; + case 6: + message.mt = reader.readEnum(); + break; + case 7: + message.direction = reader.readEnum(); + break; + case 8: + message.centralizedStations = reader.readPackedUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Signal { + return Signal.deserialize(bytes); + } + } + export namespace Signal { + export enum Model { + HL = 0, + HLU_FU = 1, + HLU_DU_YY = 2, + HLU_YY = 3, + HLU_FL_DU_YY = 4, + HLU_DU = 5, + AB = 6, + HBU_DU = 7 + } + } + export class AxleCounting extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + kilometerSystem?: KilometerSystem; + axleCountingRef?: RelatedRef[]; + type?: AxleCounting.TypeDetectionPoint; + centralizedStations?: number[]; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [4, 6], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("kilometerSystem" in data && data.kilometerSystem != undefined) { + this.kilometerSystem = data.kilometerSystem; + } + if ("axleCountingRef" in data && data.axleCountingRef != undefined) { + this.axleCountingRef = data.axleCountingRef; + } + if ("type" in data && data.type != undefined) { + this.type = data.type; + } + if ("centralizedStations" in data && data.centralizedStations != undefined) { + this.centralizedStations = data.centralizedStations; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get kilometerSystem() { + return pb_1.Message.getWrapperField(this, KilometerSystem, 3) as KilometerSystem; + } + set kilometerSystem(value: KilometerSystem) { + pb_1.Message.setWrapperField(this, 3, value); + } + get has_kilometerSystem() { + return pb_1.Message.getField(this, 3) != null; + } + get axleCountingRef() { + return pb_1.Message.getRepeatedWrapperField(this, RelatedRef, 4) as RelatedRef[]; + } + set axleCountingRef(value: RelatedRef[]) { + pb_1.Message.setRepeatedWrapperField(this, 4, value); + } + get type() { + return pb_1.Message.getFieldWithDefault(this, 5, AxleCounting.TypeDetectionPoint.AxleCounting) as AxleCounting.TypeDetectionPoint; + } + set type(value: AxleCounting.TypeDetectionPoint) { + pb_1.Message.setField(this, 5, value); + } + get centralizedStations() { + return pb_1.Message.getFieldWithDefault(this, 6, []) as number[]; + } + set centralizedStations(value: number[]) { + pb_1.Message.setField(this, 6, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + kilometerSystem?: ReturnType; + axleCountingRef?: ReturnType[]; + type?: AxleCounting.TypeDetectionPoint; + centralizedStations?: number[]; + }): AxleCounting { + const message = new AxleCounting({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.kilometerSystem != null) { + message.kilometerSystem = KilometerSystem.fromObject(data.kilometerSystem); + } + if (data.axleCountingRef != null) { + message.axleCountingRef = data.axleCountingRef.map(item => RelatedRef.fromObject(item)); + } + if (data.type != null) { + message.type = data.type; + } + if (data.centralizedStations != null) { + message.centralizedStations = data.centralizedStations; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + kilometerSystem?: ReturnType; + axleCountingRef?: ReturnType[]; + type?: AxleCounting.TypeDetectionPoint; + centralizedStations?: number[]; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.kilometerSystem != null) { + data.kilometerSystem = this.kilometerSystem.toObject(); + } + if (this.axleCountingRef != null) { + data.axleCountingRef = this.axleCountingRef.map((item: RelatedRef) => item.toObject()); + } + if (this.type != null) { + data.type = this.type; + } + if (this.centralizedStations != null) { + data.centralizedStations = this.centralizedStations; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.has_kilometerSystem) + writer.writeMessage(3, this.kilometerSystem, () => this.kilometerSystem.serialize(writer)); + if (this.axleCountingRef.length) + writer.writeRepeatedMessage(4, this.axleCountingRef, (item: RelatedRef) => item.serialize(writer)); + if (this.type != AxleCounting.TypeDetectionPoint.AxleCounting) + writer.writeEnum(5, this.type); + if (this.centralizedStations.length) + writer.writePackedUint32(6, this.centralizedStations); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): AxleCounting { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new AxleCounting(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + reader.readMessage(message.kilometerSystem, () => message.kilometerSystem = KilometerSystem.deserialize(reader)); + break; + case 4: + reader.readMessage(message.axleCountingRef, () => pb_1.Message.addToRepeatedWrapperField(message, 4, RelatedRef.deserialize(reader), RelatedRef)); + break; + case 5: + message.type = reader.readEnum(); + break; + case 6: + message.centralizedStations = reader.readPackedUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): AxleCounting { + return AxleCounting.deserialize(bytes); + } + } + export namespace AxleCounting { + export enum TypeDetectionPoint { + AxleCounting = 0, + SectionBoundary = 1 + } + } + export class KilometerSystem extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + kilometer?: number; + coordinateSystem?: string; + direction?: KilometerSystem.Direction; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("kilometer" in data && data.kilometer != undefined) { + this.kilometer = data.kilometer; + } + if ("coordinateSystem" in data && data.coordinateSystem != undefined) { + this.coordinateSystem = data.coordinateSystem; + } + if ("direction" in data && data.direction != undefined) { + this.direction = data.direction; + } + } + } + get kilometer() { + return pb_1.Message.getFieldWithDefault(this, 1, 0) as number; + } + set kilometer(value: number) { + pb_1.Message.setField(this, 1, value); + } + get coordinateSystem() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set coordinateSystem(value: string) { + pb_1.Message.setField(this, 2, value); + } + get direction() { + return pb_1.Message.getFieldWithDefault(this, 3, KilometerSystem.Direction.LEFT) as KilometerSystem.Direction; + } + set direction(value: KilometerSystem.Direction) { + pb_1.Message.setField(this, 3, value); + } + static fromObject(data: { + kilometer?: number; + coordinateSystem?: string; + direction?: KilometerSystem.Direction; + }): KilometerSystem { + const message = new KilometerSystem({}); + if (data.kilometer != null) { + message.kilometer = data.kilometer; + } + if (data.coordinateSystem != null) { + message.coordinateSystem = data.coordinateSystem; + } + if (data.direction != null) { + message.direction = data.direction; + } + return message; + } + toObject() { + const data: { + kilometer?: number; + coordinateSystem?: string; + direction?: KilometerSystem.Direction; + } = {}; + if (this.kilometer != null) { + data.kilometer = this.kilometer; + } + if (this.coordinateSystem != null) { + data.coordinateSystem = this.coordinateSystem; + } + if (this.direction != null) { + data.direction = this.direction; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.kilometer != 0) + writer.writeInt64(1, this.kilometer); + if (this.coordinateSystem.length) + writer.writeString(2, this.coordinateSystem); + if (this.direction != KilometerSystem.Direction.LEFT) + writer.writeEnum(3, this.direction); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): KilometerSystem { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new KilometerSystem(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + message.kilometer = reader.readInt64(); + break; + case 2: + message.coordinateSystem = reader.readString(); + break; + case 3: + message.direction = reader.readEnum(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): KilometerSystem { + return KilometerSystem.deserialize(bytes); + } + } + export namespace KilometerSystem { + export enum Direction { + LEFT = 0, + RIGHT = 1 + } + } + export class SimpleRef extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + deviceType?: SimpleRef.DeviceType; + id?: number; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("deviceType" in data && data.deviceType != undefined) { + this.deviceType = data.deviceType; + } + if ("id" in data && data.id != undefined) { + this.id = data.id; + } + } + } + get deviceType() { + return pb_1.Message.getFieldWithDefault(this, 1, SimpleRef.DeviceType.Turnout) as SimpleRef.DeviceType; + } + set deviceType(value: SimpleRef.DeviceType) { + pb_1.Message.setField(this, 1, value); + } + get id() { + return pb_1.Message.getFieldWithDefault(this, 2, 0) as number; + } + set id(value: number) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + deviceType?: SimpleRef.DeviceType; + id?: number; + }): SimpleRef { + const message = new SimpleRef({}); + if (data.deviceType != null) { + message.deviceType = data.deviceType; + } + if (data.id != null) { + message.id = data.id; + } + return message; + } + toObject() { + const data: { + deviceType?: SimpleRef.DeviceType; + id?: number; + } = {}; + if (this.deviceType != null) { + data.deviceType = this.deviceType; + } + if (this.id != null) { + data.id = this.id; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.deviceType != SimpleRef.DeviceType.Turnout) + writer.writeEnum(1, this.deviceType); + if (this.id != 0) + writer.writeUint32(2, this.id); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SimpleRef { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new SimpleRef(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + message.deviceType = reader.readEnum(); + break; + case 2: + message.id = reader.readUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): SimpleRef { + return SimpleRef.deserialize(bytes); + } + } + export namespace SimpleRef { + export enum DeviceType { + Turnout = 0, + AxleCounting = 1 + } + } + export class RelatedRef extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + deviceType?: RelatedRef.DeviceType; + devicePort?: RelatedRef.DevicePort; + id?: number; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("deviceType" in data && data.deviceType != undefined) { + this.deviceType = data.deviceType; + } + if ("devicePort" in data && data.devicePort != undefined) { + this.devicePort = data.devicePort; + } + if ("id" in data && data.id != undefined) { + this.id = data.id; + } + } + } + get deviceType() { + return pb_1.Message.getFieldWithDefault(this, 1, RelatedRef.DeviceType.station) as RelatedRef.DeviceType; + } + set deviceType(value: RelatedRef.DeviceType) { + pb_1.Message.setField(this, 1, value); + } + get devicePort() { + return pb_1.Message.getFieldWithDefault(this, 2, RelatedRef.DevicePort.A) as RelatedRef.DevicePort; + } + set devicePort(value: RelatedRef.DevicePort) { + pb_1.Message.setField(this, 2, value); + } + get id() { + return pb_1.Message.getFieldWithDefault(this, 3, 0) as number; + } + set id(value: number) { + pb_1.Message.setField(this, 3, value); + } + static fromObject(data: { + deviceType?: RelatedRef.DeviceType; + devicePort?: RelatedRef.DevicePort; + id?: number; + }): RelatedRef { + const message = new RelatedRef({}); + if (data.deviceType != null) { + message.deviceType = data.deviceType; + } + if (data.devicePort != null) { + message.devicePort = data.devicePort; + } + if (data.id != null) { + message.id = data.id; + } + return message; + } + toObject() { + const data: { + deviceType?: RelatedRef.DeviceType; + devicePort?: RelatedRef.DevicePort; + id?: number; + } = {}; + if (this.deviceType != null) { + data.deviceType = this.deviceType; + } + if (this.devicePort != null) { + data.devicePort = this.devicePort; + } + if (this.id != null) { + data.id = this.id; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.deviceType != RelatedRef.DeviceType.station) + writer.writeEnum(1, this.deviceType); + if (this.devicePort != RelatedRef.DevicePort.A) + writer.writeEnum(2, this.devicePort); + if (this.id != 0) + writer.writeUint32(3, this.id); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): RelatedRef { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new RelatedRef(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + message.deviceType = reader.readEnum(); + break; + case 2: + message.devicePort = reader.readEnum(); + break; + case 3: + message.id = reader.readUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): RelatedRef { + return RelatedRef.deserialize(bytes); + } + } + export namespace RelatedRef { + export enum DeviceType { + station = 0, + ScreenDoor = 1, + Section = 2, + Turnout = 3, + signal = 4, + AxleCounting = 5 + } + export enum DevicePort { + A = 0, + B = 1, + C = 2 + } + } + export class GenerateAxleCountingConfig extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + bbConnect?: number[]; + noGenerateGroup?: number[]; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [1, 2], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("bbConnect" in data && data.bbConnect != undefined) { + this.bbConnect = data.bbConnect; + } + if ("noGenerateGroup" in data && data.noGenerateGroup != undefined) { + this.noGenerateGroup = data.noGenerateGroup; + } + } + } + get bbConnect() { + return pb_1.Message.getFieldWithDefault(this, 1, []) as number[]; + } + set bbConnect(value: number[]) { + pb_1.Message.setField(this, 1, value); + } + get noGenerateGroup() { + return pb_1.Message.getFieldWithDefault(this, 2, []) as number[]; + } + set noGenerateGroup(value: number[]) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + bbConnect?: number[]; + noGenerateGroup?: number[]; + }): GenerateAxleCountingConfig { + const message = new GenerateAxleCountingConfig({}); + if (data.bbConnect != null) { + message.bbConnect = data.bbConnect; + } + if (data.noGenerateGroup != null) { + message.noGenerateGroup = data.noGenerateGroup; + } + return message; + } + toObject() { + const data: { + bbConnect?: number[]; + noGenerateGroup?: number[]; + } = {}; + if (this.bbConnect != null) { + data.bbConnect = this.bbConnect; + } + if (this.noGenerateGroup != null) { + data.noGenerateGroup = this.noGenerateGroup; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.bbConnect.length) + writer.writePackedUint32(1, this.bbConnect); + if (this.noGenerateGroup.length) + writer.writePackedUint32(2, this.noGenerateGroup); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): GenerateAxleCountingConfig { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new GenerateAxleCountingConfig(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + message.bbConnect = reader.readPackedUint32(); + break; + case 2: + message.noGenerateGroup = reader.readPackedUint32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): GenerateAxleCountingConfig { + return GenerateAxleCountingConfig.deserialize(bytes); + } + } +} diff --git a/src/protos/em_data.ts b/src/protos/em_data.ts deleted file mode 100644 index bdb0c3b..0000000 --- a/src/protos/em_data.ts +++ /dev/null @@ -1,426 +0,0 @@ -/** - * Generated by the protoc-gen-ts. DO NOT EDIT! - * compiler version: 5.27.4 - * source: em_data.proto - * git: https://github.com/thesayyn/protoc-gen-ts */ -import * as dependency_1 from "./common"; -import * as pb_1 from "google-protobuf"; -export namespace em_data { - export class Em extends pb_1.Message { - #one_of_decls: number[][] = []; - constructor(data?: any[] | { - canvas?: dependency_1.common.Canvas; - stations?: Station[]; - }) { - super(); - pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2], this.#one_of_decls); - if (!Array.isArray(data) && typeof data == "object") { - if ("canvas" in data && data.canvas != undefined) { - this.canvas = data.canvas; - } - if ("stations" in data && data.stations != undefined) { - this.stations = data.stations; - } - } - } - get canvas() { - return pb_1.Message.getWrapperField(this, dependency_1.common.Canvas, 1) as dependency_1.common.Canvas; - } - set canvas(value: dependency_1.common.Canvas) { - pb_1.Message.setWrapperField(this, 1, value); - } - get has_canvas() { - return pb_1.Message.getField(this, 1) != null; - } - get stations() { - return pb_1.Message.getRepeatedWrapperField(this, Station, 2) as Station[]; - } - set stations(value: Station[]) { - pb_1.Message.setRepeatedWrapperField(this, 2, value); - } - static fromObject(data: { - canvas?: ReturnType; - stations?: ReturnType[]; - }): Em { - const message = new Em({}); - if (data.canvas != null) { - message.canvas = dependency_1.common.Canvas.fromObject(data.canvas); - } - if (data.stations != null) { - message.stations = data.stations.map(item => Station.fromObject(item)); - } - return message; - } - toObject() { - const data: { - canvas?: ReturnType; - stations?: ReturnType[]; - } = {}; - if (this.canvas != null) { - data.canvas = this.canvas.toObject(); - } - if (this.stations != null) { - data.stations = this.stations.map((item: Station) => item.toObject()); - } - return data; - } - serialize(): Uint8Array; - serialize(w: pb_1.BinaryWriter): void; - serialize(w?: pb_1.BinaryWriter): Uint8Array | void { - const writer = w || new pb_1.BinaryWriter(); - if (this.has_canvas) - writer.writeMessage(1, this.canvas, () => this.canvas.serialize(writer)); - if (this.stations.length) - writer.writeRepeatedMessage(2, this.stations, (item: Station) => item.serialize(writer)); - if (!w) - return writer.getResultBuffer(); - } - static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Em { - const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Em(); - while (reader.nextField()) { - if (reader.isEndGroup()) - break; - switch (reader.getFieldNumber()) { - case 1: - reader.readMessage(message.canvas, () => message.canvas = dependency_1.common.Canvas.deserialize(reader)); - break; - case 2: - reader.readMessage(message.stations, () => pb_1.Message.addToRepeatedWrapperField(message, 2, Station.deserialize(reader), Station)); - break; - default: reader.skipField(); - } - } - return message; - } - serializeBinary(): Uint8Array { - return this.serialize(); - } - static deserializeBinary(bytes: Uint8Array): Em { - return Em.deserialize(bytes); - } - } - export class KilometerMark extends pb_1.Message { - #one_of_decls: number[][] = []; - constructor(data?: any[] | { - coordinate?: string; - value?: number; - }) { - super(); - pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); - if (!Array.isArray(data) && typeof data == "object") { - if ("coordinate" in data && data.coordinate != undefined) { - this.coordinate = data.coordinate; - } - if ("value" in data && data.value != undefined) { - this.value = data.value; - } - } - } - get coordinate() { - return pb_1.Message.getFieldWithDefault(this, 1, "") as string; - } - set coordinate(value: string) { - pb_1.Message.setField(this, 1, value); - } - get value() { - return pb_1.Message.getFieldWithDefault(this, 2, 0) as number; - } - set value(value: number) { - pb_1.Message.setField(this, 2, value); - } - static fromObject(data: { - coordinate?: string; - value?: number; - }): KilometerMark { - const message = new KilometerMark({}); - if (data.coordinate != null) { - message.coordinate = data.coordinate; - } - if (data.value != null) { - message.value = data.value; - } - return message; - } - toObject() { - const data: { - coordinate?: string; - value?: number; - } = {}; - if (this.coordinate != null) { - data.coordinate = this.coordinate; - } - if (this.value != null) { - data.value = this.value; - } - return data; - } - serialize(): Uint8Array; - serialize(w: pb_1.BinaryWriter): void; - serialize(w?: pb_1.BinaryWriter): Uint8Array | void { - const writer = w || new pb_1.BinaryWriter(); - if (this.coordinate.length) - writer.writeString(1, this.coordinate); - if (this.value != 0) - writer.writeInt64(2, this.value); - if (!w) - return writer.getResultBuffer(); - } - static deserialize(bytes: Uint8Array | pb_1.BinaryReader): KilometerMark { - const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new KilometerMark(); - while (reader.nextField()) { - if (reader.isEndGroup()) - break; - switch (reader.getFieldNumber()) { - case 1: - message.coordinate = reader.readString(); - break; - case 2: - message.value = reader.readInt64(); - break; - default: reader.skipField(); - } - } - return message; - } - serializeBinary(): Uint8Array { - return this.serialize(); - } - static deserializeBinary(bytes: Uint8Array): KilometerMark { - return KilometerMark.deserialize(bytes); - } - } - export class Station extends pb_1.Message { - #one_of_decls: number[][] = []; - constructor(data?: any[] | { - common?: dependency_1.common.CommonInfo; - name?: string; - zhanName?: string; - namePinyin?: string; - km?: KilometerMark; - concentration?: boolean; - depots?: boolean; - manageStationIds?: number[]; - }) { - super(); - pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [13], this.#one_of_decls); - if (!Array.isArray(data) && typeof data == "object") { - if ("common" in data && data.common != undefined) { - this.common = data.common; - } - if ("name" in data && data.name != undefined) { - this.name = data.name; - } - if ("zhanName" in data && data.zhanName != undefined) { - this.zhanName = data.zhanName; - } - if ("namePinyin" in data && data.namePinyin != undefined) { - this.namePinyin = data.namePinyin; - } - if ("km" in data && data.km != undefined) { - this.km = data.km; - } - if ("concentration" in data && data.concentration != undefined) { - this.concentration = data.concentration; - } - if ("depots" in data && data.depots != undefined) { - this.depots = data.depots; - } - if ("manageStationIds" in data && data.manageStationIds != undefined) { - this.manageStationIds = data.manageStationIds; - } - } - } - get common() { - return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; - } - set common(value: dependency_1.common.CommonInfo) { - pb_1.Message.setWrapperField(this, 1, value); - } - get has_common() { - return pb_1.Message.getField(this, 1) != null; - } - get name() { - return pb_1.Message.getFieldWithDefault(this, 2, "") as string; - } - set name(value: string) { - pb_1.Message.setField(this, 2, value); - } - get zhanName() { - return pb_1.Message.getFieldWithDefault(this, 3, "") as string; - } - set zhanName(value: string) { - pb_1.Message.setField(this, 3, value); - } - get namePinyin() { - return pb_1.Message.getFieldWithDefault(this, 4, "") as string; - } - set namePinyin(value: string) { - pb_1.Message.setField(this, 4, value); - } - get km() { - return pb_1.Message.getWrapperField(this, KilometerMark, 6) as KilometerMark; - } - set km(value: KilometerMark) { - pb_1.Message.setWrapperField(this, 6, value); - } - get has_km() { - return pb_1.Message.getField(this, 6) != null; - } - get concentration() { - return pb_1.Message.getFieldWithDefault(this, 10, false) as boolean; - } - set concentration(value: boolean) { - pb_1.Message.setField(this, 10, value); - } - get depots() { - return pb_1.Message.getFieldWithDefault(this, 11, false) as boolean; - } - set depots(value: boolean) { - pb_1.Message.setField(this, 11, value); - } - get manageStationIds() { - return pb_1.Message.getFieldWithDefault(this, 13, []) as number[]; - } - set manageStationIds(value: number[]) { - pb_1.Message.setField(this, 13, value); - } - static fromObject(data: { - common?: ReturnType; - name?: string; - zhanName?: string; - namePinyin?: string; - km?: ReturnType; - concentration?: boolean; - depots?: boolean; - manageStationIds?: number[]; - }): Station { - const message = new Station({}); - if (data.common != null) { - message.common = dependency_1.common.CommonInfo.fromObject(data.common); - } - if (data.name != null) { - message.name = data.name; - } - if (data.zhanName != null) { - message.zhanName = data.zhanName; - } - if (data.namePinyin != null) { - message.namePinyin = data.namePinyin; - } - if (data.km != null) { - message.km = KilometerMark.fromObject(data.km); - } - if (data.concentration != null) { - message.concentration = data.concentration; - } - if (data.depots != null) { - message.depots = data.depots; - } - if (data.manageStationIds != null) { - message.manageStationIds = data.manageStationIds; - } - return message; - } - toObject() { - const data: { - common?: ReturnType; - name?: string; - zhanName?: string; - namePinyin?: string; - km?: ReturnType; - concentration?: boolean; - depots?: boolean; - manageStationIds?: number[]; - } = {}; - if (this.common != null) { - data.common = this.common.toObject(); - } - if (this.name != null) { - data.name = this.name; - } - if (this.zhanName != null) { - data.zhanName = this.zhanName; - } - if (this.namePinyin != null) { - data.namePinyin = this.namePinyin; - } - if (this.km != null) { - data.km = this.km.toObject(); - } - if (this.concentration != null) { - data.concentration = this.concentration; - } - if (this.depots != null) { - data.depots = this.depots; - } - if (this.manageStationIds != null) { - data.manageStationIds = this.manageStationIds; - } - return data; - } - serialize(): Uint8Array; - serialize(w: pb_1.BinaryWriter): void; - serialize(w?: pb_1.BinaryWriter): Uint8Array | void { - const writer = w || new pb_1.BinaryWriter(); - if (this.has_common) - writer.writeMessage(1, this.common, () => this.common.serialize(writer)); - if (this.name.length) - writer.writeString(2, this.name); - if (this.zhanName.length) - writer.writeString(3, this.zhanName); - if (this.namePinyin.length) - writer.writeString(4, this.namePinyin); - if (this.has_km) - writer.writeMessage(6, this.km, () => this.km.serialize(writer)); - if (this.concentration != false) - writer.writeBool(10, this.concentration); - if (this.depots != false) - writer.writeBool(11, this.depots); - if (this.manageStationIds.length) - writer.writePackedUint32(13, this.manageStationIds); - if (!w) - return writer.getResultBuffer(); - } - static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Station { - const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Station(); - while (reader.nextField()) { - if (reader.isEndGroup()) - break; - switch (reader.getFieldNumber()) { - case 1: - reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); - break; - case 2: - message.name = reader.readString(); - break; - case 3: - message.zhanName = reader.readString(); - break; - case 4: - message.namePinyin = reader.readString(); - break; - case 6: - reader.readMessage(message.km, () => message.km = KilometerMark.deserialize(reader)); - break; - case 10: - message.concentration = reader.readBool(); - break; - case 11: - message.depots = reader.readBool(); - break; - case 13: - message.manageStationIds = reader.readPackedUint32(); - break; - default: reader.skipField(); - } - } - return message; - } - serializeBinary(): Uint8Array { - return this.serialize(); - } - static deserializeBinary(bytes: Uint8Array): Station { - return Station.deserialize(bytes); - } - } -} diff --git a/src/protos/iscs_graphic_data.ts b/src/protos/iscs_graphic_data.ts index 3faa48c..d2130f5 100644 --- a/src/protos/iscs_graphic_data.ts +++ b/src/protos/iscs_graphic_data.ts @@ -9,24 +9,28 @@ export namespace iscsGraphicData { export class IscsGraphicStorage extends pb_1.Message { #one_of_decls: number[][] = []; constructor(data?: any[] | { - cctvOfStationControlStorages?: CCTVOfStationControlStorage[]; + cctvOfEquipmentLayoutStorages?: CCTVOfEquipmentLayoutStorage[]; fasOfPlatformAlarmStorages?: FASOfPlatformAlarmStorage[]; + basOfEscalatorStorages?: BASOfEscalatorStorage[]; }) { super(); - pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [1, 2], this.#one_of_decls); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [1, 2, 3], this.#one_of_decls); if (!Array.isArray(data) && typeof data == "object") { - if ("cctvOfStationControlStorages" in data && data.cctvOfStationControlStorages != undefined) { - this.cctvOfStationControlStorages = data.cctvOfStationControlStorages; + if ("cctvOfEquipmentLayoutStorages" in data && data.cctvOfEquipmentLayoutStorages != undefined) { + this.cctvOfEquipmentLayoutStorages = data.cctvOfEquipmentLayoutStorages; } if ("fasOfPlatformAlarmStorages" in data && data.fasOfPlatformAlarmStorages != undefined) { this.fasOfPlatformAlarmStorages = data.fasOfPlatformAlarmStorages; } + if ("basOfEscalatorStorages" in data && data.basOfEscalatorStorages != undefined) { + this.basOfEscalatorStorages = data.basOfEscalatorStorages; + } } } - get cctvOfStationControlStorages() { - return pb_1.Message.getRepeatedWrapperField(this, CCTVOfStationControlStorage, 1) as CCTVOfStationControlStorage[]; + get cctvOfEquipmentLayoutStorages() { + return pb_1.Message.getRepeatedWrapperField(this, CCTVOfEquipmentLayoutStorage, 1) as CCTVOfEquipmentLayoutStorage[]; } - set cctvOfStationControlStorages(value: CCTVOfStationControlStorage[]) { + set cctvOfEquipmentLayoutStorages(value: CCTVOfEquipmentLayoutStorage[]) { pb_1.Message.setRepeatedWrapperField(this, 1, value); } get fasOfPlatformAlarmStorages() { @@ -35,40 +39,56 @@ export namespace iscsGraphicData { set fasOfPlatformAlarmStorages(value: FASOfPlatformAlarmStorage[]) { pb_1.Message.setRepeatedWrapperField(this, 2, value); } + get basOfEscalatorStorages() { + return pb_1.Message.getRepeatedWrapperField(this, BASOfEscalatorStorage, 3) as BASOfEscalatorStorage[]; + } + set basOfEscalatorStorages(value: BASOfEscalatorStorage[]) { + pb_1.Message.setRepeatedWrapperField(this, 3, value); + } static fromObject(data: { - cctvOfStationControlStorages?: ReturnType[]; + cctvOfEquipmentLayoutStorages?: ReturnType[]; fasOfPlatformAlarmStorages?: ReturnType[]; + basOfEscalatorStorages?: ReturnType[]; }): IscsGraphicStorage { const message = new IscsGraphicStorage({}); - if (data.cctvOfStationControlStorages != null) { - message.cctvOfStationControlStorages = data.cctvOfStationControlStorages.map(item => CCTVOfStationControlStorage.fromObject(item)); + if (data.cctvOfEquipmentLayoutStorages != null) { + message.cctvOfEquipmentLayoutStorages = data.cctvOfEquipmentLayoutStorages.map(item => CCTVOfEquipmentLayoutStorage.fromObject(item)); } if (data.fasOfPlatformAlarmStorages != null) { message.fasOfPlatformAlarmStorages = data.fasOfPlatformAlarmStorages.map(item => FASOfPlatformAlarmStorage.fromObject(item)); } + if (data.basOfEscalatorStorages != null) { + message.basOfEscalatorStorages = data.basOfEscalatorStorages.map(item => BASOfEscalatorStorage.fromObject(item)); + } return message; } toObject() { const data: { - cctvOfStationControlStorages?: ReturnType[]; + cctvOfEquipmentLayoutStorages?: ReturnType[]; fasOfPlatformAlarmStorages?: ReturnType[]; + basOfEscalatorStorages?: ReturnType[]; } = {}; - if (this.cctvOfStationControlStorages != null) { - data.cctvOfStationControlStorages = this.cctvOfStationControlStorages.map((item: CCTVOfStationControlStorage) => item.toObject()); + if (this.cctvOfEquipmentLayoutStorages != null) { + data.cctvOfEquipmentLayoutStorages = this.cctvOfEquipmentLayoutStorages.map((item: CCTVOfEquipmentLayoutStorage) => item.toObject()); } if (this.fasOfPlatformAlarmStorages != null) { data.fasOfPlatformAlarmStorages = this.fasOfPlatformAlarmStorages.map((item: FASOfPlatformAlarmStorage) => item.toObject()); } + if (this.basOfEscalatorStorages != null) { + data.basOfEscalatorStorages = this.basOfEscalatorStorages.map((item: BASOfEscalatorStorage) => item.toObject()); + } return data; } serialize(): Uint8Array; serialize(w: pb_1.BinaryWriter): void; serialize(w?: pb_1.BinaryWriter): Uint8Array | void { const writer = w || new pb_1.BinaryWriter(); - if (this.cctvOfStationControlStorages.length) - writer.writeRepeatedMessage(1, this.cctvOfStationControlStorages, (item: CCTVOfStationControlStorage) => item.serialize(writer)); + if (this.cctvOfEquipmentLayoutStorages.length) + writer.writeRepeatedMessage(1, this.cctvOfEquipmentLayoutStorages, (item: CCTVOfEquipmentLayoutStorage) => item.serialize(writer)); if (this.fasOfPlatformAlarmStorages.length) writer.writeRepeatedMessage(2, this.fasOfPlatformAlarmStorages, (item: FASOfPlatformAlarmStorage) => item.serialize(writer)); + if (this.basOfEscalatorStorages.length) + writer.writeRepeatedMessage(3, this.basOfEscalatorStorages, (item: BASOfEscalatorStorage) => item.serialize(writer)); if (!w) return writer.getResultBuffer(); } @@ -79,11 +99,14 @@ export namespace iscsGraphicData { break; switch (reader.getFieldNumber()) { case 1: - reader.readMessage(message.cctvOfStationControlStorages, () => pb_1.Message.addToRepeatedWrapperField(message, 1, CCTVOfStationControlStorage.deserialize(reader), CCTVOfStationControlStorage)); + reader.readMessage(message.cctvOfEquipmentLayoutStorages, () => pb_1.Message.addToRepeatedWrapperField(message, 1, CCTVOfEquipmentLayoutStorage.deserialize(reader), CCTVOfEquipmentLayoutStorage)); break; case 2: reader.readMessage(message.fasOfPlatformAlarmStorages, () => pb_1.Message.addToRepeatedWrapperField(message, 2, FASOfPlatformAlarmStorage.deserialize(reader), FASOfPlatformAlarmStorage)); break; + case 3: + reader.readMessage(message.basOfEscalatorStorages, () => pb_1.Message.addToRepeatedWrapperField(message, 3, BASOfEscalatorStorage.deserialize(reader), BASOfEscalatorStorage)); + break; default: reader.skipField(); } } @@ -217,9 +240,10 @@ export namespace iscsGraphicData { rects?: Rect[]; lines?: Line[]; circles?: Circle[]; + buttons?: Button[]; }) { super(); - pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [1, 2, 3, 4, 5], this.#one_of_decls); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [1, 2, 3, 4, 5, 6], this.#one_of_decls); if (!Array.isArray(data) && typeof data == "object") { if ("arrows" in data && data.arrows != undefined) { this.arrows = data.arrows; @@ -236,6 +260,9 @@ export namespace iscsGraphicData { if ("circles" in data && data.circles != undefined) { this.circles = data.circles; } + if ("buttons" in data && data.buttons != undefined) { + this.buttons = data.buttons; + } } } get arrows() { @@ -268,12 +295,19 @@ export namespace iscsGraphicData { set circles(value: Circle[]) { pb_1.Message.setRepeatedWrapperField(this, 5, value); } + get buttons() { + return pb_1.Message.getRepeatedWrapperField(this, Button, 6) as Button[]; + } + set buttons(value: Button[]) { + pb_1.Message.setRepeatedWrapperField(this, 6, value); + } static fromObject(data: { arrows?: ReturnType[]; texts?: ReturnType[]; rects?: ReturnType[]; lines?: ReturnType[]; circles?: ReturnType[]; + buttons?: ReturnType[]; }): CommonGraphicStorage { const message = new CommonGraphicStorage({}); if (data.arrows != null) { @@ -291,6 +325,9 @@ export namespace iscsGraphicData { if (data.circles != null) { message.circles = data.circles.map(item => Circle.fromObject(item)); } + if (data.buttons != null) { + message.buttons = data.buttons.map(item => Button.fromObject(item)); + } return message; } toObject() { @@ -300,6 +337,7 @@ export namespace iscsGraphicData { rects?: ReturnType[]; lines?: ReturnType[]; circles?: ReturnType[]; + buttons?: ReturnType[]; } = {}; if (this.arrows != null) { data.arrows = this.arrows.map((item: Arrow) => item.toObject()); @@ -316,6 +354,9 @@ export namespace iscsGraphicData { if (this.circles != null) { data.circles = this.circles.map((item: Circle) => item.toObject()); } + if (this.buttons != null) { + data.buttons = this.buttons.map((item: Button) => item.toObject()); + } return data; } serialize(): Uint8Array; @@ -332,6 +373,8 @@ export namespace iscsGraphicData { writer.writeRepeatedMessage(4, this.lines, (item: Line) => item.serialize(writer)); if (this.circles.length) writer.writeRepeatedMessage(5, this.circles, (item: Circle) => item.serialize(writer)); + if (this.buttons.length) + writer.writeRepeatedMessage(6, this.buttons, (item: Button) => item.serialize(writer)); if (!w) return writer.getResultBuffer(); } @@ -356,6 +399,9 @@ export namespace iscsGraphicData { case 5: reader.readMessage(message.circles, () => pb_1.Message.addToRepeatedWrapperField(message, 5, Circle.deserialize(reader), Circle)); break; + case 6: + reader.readMessage(message.buttons, () => pb_1.Message.addToRepeatedWrapperField(message, 6, Button.deserialize(reader), Button)); + break; default: reader.skipField(); } } @@ -1368,12 +1414,20 @@ export namespace iscsGraphicData { return Circle.deserialize(bytes); } } - export class CCTVButton extends pb_1.Message { + export class Button extends pb_1.Message { #one_of_decls: number[][] = []; constructor(data?: any[] | { common?: dependency_1.common.CommonInfo; code?: string; - buttonType?: CCTVButton.ButtonType; + codeColor?: string; + codeFontSize?: number; + belongSubMenu?: string; + buttonType?: Button.ButtonType; + width?: number; + height?: number; + radius?: number; + fillColor?: string; + alpha?: number; }) { super(); pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); @@ -1384,9 +1438,33 @@ export namespace iscsGraphicData { if ("code" in data && data.code != undefined) { this.code = data.code; } + if ("codeColor" in data && data.codeColor != undefined) { + this.codeColor = data.codeColor; + } + if ("codeFontSize" in data && data.codeFontSize != undefined) { + this.codeFontSize = data.codeFontSize; + } + if ("belongSubMenu" in data && data.belongSubMenu != undefined) { + this.belongSubMenu = data.belongSubMenu; + } if ("buttonType" in data && data.buttonType != undefined) { this.buttonType = data.buttonType; } + if ("width" in data && data.width != undefined) { + this.width = data.width; + } + if ("height" in data && data.height != undefined) { + this.height = data.height; + } + if ("radius" in data && data.radius != undefined) { + this.radius = data.radius; + } + if ("fillColor" in data && data.fillColor != undefined) { + this.fillColor = data.fillColor; + } + if ("alpha" in data && data.alpha != undefined) { + this.alpha = data.alpha; + } } } get common() { @@ -1404,34 +1482,122 @@ export namespace iscsGraphicData { set code(value: string) { pb_1.Message.setField(this, 2, value); } - get buttonType() { - return pb_1.Message.getFieldWithDefault(this, 3, CCTVButton.ButtonType.rect) as CCTVButton.ButtonType; + get codeColor() { + return pb_1.Message.getFieldWithDefault(this, 3, "") as string; } - set buttonType(value: CCTVButton.ButtonType) { + set codeColor(value: string) { pb_1.Message.setField(this, 3, value); } + get codeFontSize() { + return pb_1.Message.getFieldWithDefault(this, 4, 0) as number; + } + set codeFontSize(value: number) { + pb_1.Message.setField(this, 4, value); + } + get belongSubMenu() { + return pb_1.Message.getFieldWithDefault(this, 5, "") as string; + } + set belongSubMenu(value: string) { + pb_1.Message.setField(this, 5, value); + } + get buttonType() { + return pb_1.Message.getFieldWithDefault(this, 6, Button.ButtonType.noIcon) as Button.ButtonType; + } + set buttonType(value: Button.ButtonType) { + pb_1.Message.setField(this, 6, value); + } + get width() { + return pb_1.Message.getFieldWithDefault(this, 7, 0) as number; + } + set width(value: number) { + pb_1.Message.setField(this, 7, value); + } + get height() { + return pb_1.Message.getFieldWithDefault(this, 8, 0) as number; + } + set height(value: number) { + pb_1.Message.setField(this, 8, value); + } + get radius() { + return pb_1.Message.getFieldWithDefault(this, 9, 0) as number; + } + set radius(value: number) { + pb_1.Message.setField(this, 9, value); + } + get fillColor() { + return pb_1.Message.getFieldWithDefault(this, 10, "") as string; + } + set fillColor(value: string) { + pb_1.Message.setField(this, 10, value); + } + get alpha() { + return pb_1.Message.getFieldWithDefault(this, 11, 0) as number; + } + set alpha(value: number) { + pb_1.Message.setField(this, 11, value); + } static fromObject(data: { common?: ReturnType; code?: string; - buttonType?: CCTVButton.ButtonType; - }): CCTVButton { - const message = new CCTVButton({}); + codeColor?: string; + codeFontSize?: number; + belongSubMenu?: string; + buttonType?: Button.ButtonType; + width?: number; + height?: number; + radius?: number; + fillColor?: string; + alpha?: number; + }): Button { + const message = new Button({}); if (data.common != null) { message.common = dependency_1.common.CommonInfo.fromObject(data.common); } if (data.code != null) { message.code = data.code; } + if (data.codeColor != null) { + message.codeColor = data.codeColor; + } + if (data.codeFontSize != null) { + message.codeFontSize = data.codeFontSize; + } + if (data.belongSubMenu != null) { + message.belongSubMenu = data.belongSubMenu; + } if (data.buttonType != null) { message.buttonType = data.buttonType; } + if (data.width != null) { + message.width = data.width; + } + if (data.height != null) { + message.height = data.height; + } + if (data.radius != null) { + message.radius = data.radius; + } + if (data.fillColor != null) { + message.fillColor = data.fillColor; + } + if (data.alpha != null) { + message.alpha = data.alpha; + } return message; } toObject() { const data: { common?: ReturnType; code?: string; - buttonType?: CCTVButton.ButtonType; + codeColor?: string; + codeFontSize?: number; + belongSubMenu?: string; + buttonType?: Button.ButtonType; + width?: number; + height?: number; + radius?: number; + fillColor?: string; + alpha?: number; } = {}; if (this.common != null) { data.common = this.common.toObject(); @@ -1439,9 +1605,33 @@ export namespace iscsGraphicData { if (this.code != null) { data.code = this.code; } + if (this.codeColor != null) { + data.codeColor = this.codeColor; + } + if (this.codeFontSize != null) { + data.codeFontSize = this.codeFontSize; + } + if (this.belongSubMenu != null) { + data.belongSubMenu = this.belongSubMenu; + } if (this.buttonType != null) { data.buttonType = this.buttonType; } + if (this.width != null) { + data.width = this.width; + } + if (this.height != null) { + data.height = this.height; + } + if (this.radius != null) { + data.radius = this.radius; + } + if (this.fillColor != null) { + data.fillColor = this.fillColor; + } + if (this.alpha != null) { + data.alpha = this.alpha; + } return data; } serialize(): Uint8Array; @@ -1452,13 +1642,29 @@ export namespace iscsGraphicData { writer.writeMessage(1, this.common, () => this.common.serialize(writer)); if (this.code.length) writer.writeString(2, this.code); - if (this.buttonType != CCTVButton.ButtonType.rect) - writer.writeEnum(3, this.buttonType); + if (this.codeColor.length) + writer.writeString(3, this.codeColor); + if (this.codeFontSize != 0) + writer.writeInt32(4, this.codeFontSize); + if (this.belongSubMenu.length) + writer.writeString(5, this.belongSubMenu); + if (this.buttonType != Button.ButtonType.noIcon) + writer.writeEnum(6, this.buttonType); + if (this.width != 0) + writer.writeFloat(7, this.width); + if (this.height != 0) + writer.writeFloat(8, this.height); + if (this.radius != 0) + writer.writeInt32(9, this.radius); + if (this.fillColor.length) + writer.writeString(10, this.fillColor); + if (this.alpha != 0) + writer.writeFloat(11, this.alpha); if (!w) return writer.getResultBuffer(); } - static deserialize(bytes: Uint8Array | pb_1.BinaryReader): CCTVButton { - const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new CCTVButton(); + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Button { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Button(); while (reader.nextField()) { if (reader.isEndGroup()) break; @@ -1470,8 +1676,32 @@ export namespace iscsGraphicData { message.code = reader.readString(); break; case 3: + message.codeColor = reader.readString(); + break; + case 4: + message.codeFontSize = reader.readInt32(); + break; + case 5: + message.belongSubMenu = reader.readString(); + break; + case 6: message.buttonType = reader.readEnum(); break; + case 7: + message.width = reader.readFloat(); + break; + case 8: + message.height = reader.readFloat(); + break; + case 9: + message.radius = reader.readInt32(); + break; + case 10: + message.fillColor = reader.readString(); + break; + case 11: + message.alpha = reader.readFloat(); + break; default: reader.skipField(); } } @@ -1480,15 +1710,16 @@ export namespace iscsGraphicData { serializeBinary(): Uint8Array { return this.serialize(); } - static deserializeBinary(bytes: Uint8Array): CCTVButton { - return CCTVButton.deserialize(bytes); + static deserializeBinary(bytes: Uint8Array): Button { + return Button.deserialize(bytes); } } - export namespace CCTVButton { + export namespace Button { export enum ButtonType { - rect = 0, - monitor = 1, - semicircle = 2 + noIcon = 0, + cctvRect = 1, + cctvMonitor = 2, + cctvSemicircle = 3 } } export class ManualAlarmButton extends pb_1.Message { @@ -1956,16 +2187,17 @@ export namespace iscsGraphicData { return TemperatureDetector.deserialize(bytes); } } - export class CCTVOfStationControlStorage extends pb_1.Message { + export class BASOfEscalatorStorage extends pb_1.Message { #one_of_decls: number[][] = []; constructor(data?: any[] | { stationName?: string; canvas?: dependency_1.common.Canvas; commonGraphicStorage?: CommonGraphicStorage; - cctvButtons?: CCTVButton[]; + escalators?: Escalator[]; + verticalElevators?: VerticalElevator[]; }) { super(); - pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [4], this.#one_of_decls); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [4, 5], this.#one_of_decls); if (!Array.isArray(data) && typeof data == "object") { if ("stationName" in data && data.stationName != undefined) { this.stationName = data.stationName; @@ -1976,8 +2208,11 @@ export namespace iscsGraphicData { if ("commonGraphicStorage" in data && data.commonGraphicStorage != undefined) { this.commonGraphicStorage = data.commonGraphicStorage; } - if ("cctvButtons" in data && data.cctvButtons != undefined) { - this.cctvButtons = data.cctvButtons; + if ("escalators" in data && data.escalators != undefined) { + this.escalators = data.escalators; + } + if ("verticalElevators" in data && data.verticalElevators != undefined) { + this.verticalElevators = data.verticalElevators; } } } @@ -2005,19 +2240,26 @@ export namespace iscsGraphicData { get has_commonGraphicStorage() { return pb_1.Message.getField(this, 3) != null; } - get cctvButtons() { - return pb_1.Message.getRepeatedWrapperField(this, CCTVButton, 4) as CCTVButton[]; + get escalators() { + return pb_1.Message.getRepeatedWrapperField(this, Escalator, 4) as Escalator[]; } - set cctvButtons(value: CCTVButton[]) { + set escalators(value: Escalator[]) { pb_1.Message.setRepeatedWrapperField(this, 4, value); } + get verticalElevators() { + return pb_1.Message.getRepeatedWrapperField(this, VerticalElevator, 5) as VerticalElevator[]; + } + set verticalElevators(value: VerticalElevator[]) { + pb_1.Message.setRepeatedWrapperField(this, 5, value); + } static fromObject(data: { stationName?: string; canvas?: ReturnType; commonGraphicStorage?: ReturnType; - cctvButtons?: ReturnType[]; - }): CCTVOfStationControlStorage { - const message = new CCTVOfStationControlStorage({}); + escalators?: ReturnType[]; + verticalElevators?: ReturnType[]; + }): BASOfEscalatorStorage { + const message = new BASOfEscalatorStorage({}); if (data.stationName != null) { message.stationName = data.stationName; } @@ -2027,8 +2269,11 @@ export namespace iscsGraphicData { if (data.commonGraphicStorage != null) { message.commonGraphicStorage = CommonGraphicStorage.fromObject(data.commonGraphicStorage); } - if (data.cctvButtons != null) { - message.cctvButtons = data.cctvButtons.map(item => CCTVButton.fromObject(item)); + if (data.escalators != null) { + message.escalators = data.escalators.map(item => Escalator.fromObject(item)); + } + if (data.verticalElevators != null) { + message.verticalElevators = data.verticalElevators.map(item => VerticalElevator.fromObject(item)); } return message; } @@ -2037,7 +2282,8 @@ export namespace iscsGraphicData { stationName?: string; canvas?: ReturnType; commonGraphicStorage?: ReturnType; - cctvButtons?: ReturnType[]; + escalators?: ReturnType[]; + verticalElevators?: ReturnType[]; } = {}; if (this.stationName != null) { data.stationName = this.stationName; @@ -2048,8 +2294,11 @@ export namespace iscsGraphicData { if (this.commonGraphicStorage != null) { data.commonGraphicStorage = this.commonGraphicStorage.toObject(); } - if (this.cctvButtons != null) { - data.cctvButtons = this.cctvButtons.map((item: CCTVButton) => item.toObject()); + if (this.escalators != null) { + data.escalators = this.escalators.map((item: Escalator) => item.toObject()); + } + if (this.verticalElevators != null) { + data.verticalElevators = this.verticalElevators.map((item: VerticalElevator) => item.toObject()); } return data; } @@ -2063,13 +2312,15 @@ export namespace iscsGraphicData { writer.writeMessage(2, this.canvas, () => this.canvas.serialize(writer)); if (this.has_commonGraphicStorage) writer.writeMessage(3, this.commonGraphicStorage, () => this.commonGraphicStorage.serialize(writer)); - if (this.cctvButtons.length) - writer.writeRepeatedMessage(4, this.cctvButtons, (item: CCTVButton) => item.serialize(writer)); + if (this.escalators.length) + writer.writeRepeatedMessage(4, this.escalators, (item: Escalator) => item.serialize(writer)); + if (this.verticalElevators.length) + writer.writeRepeatedMessage(5, this.verticalElevators, (item: VerticalElevator) => item.serialize(writer)); if (!w) return writer.getResultBuffer(); } - static deserialize(bytes: Uint8Array | pb_1.BinaryReader): CCTVOfStationControlStorage { - const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new CCTVOfStationControlStorage(); + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BASOfEscalatorStorage { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new BASOfEscalatorStorage(); while (reader.nextField()) { if (reader.isEndGroup()) break; @@ -2084,7 +2335,10 @@ export namespace iscsGraphicData { reader.readMessage(message.commonGraphicStorage, () => message.commonGraphicStorage = CommonGraphicStorage.deserialize(reader)); break; case 4: - reader.readMessage(message.cctvButtons, () => pb_1.Message.addToRepeatedWrapperField(message, 4, CCTVButton.deserialize(reader), CCTVButton)); + reader.readMessage(message.escalators, () => pb_1.Message.addToRepeatedWrapperField(message, 4, Escalator.deserialize(reader), Escalator)); + break; + case 5: + reader.readMessage(message.verticalElevators, () => pb_1.Message.addToRepeatedWrapperField(message, 5, VerticalElevator.deserialize(reader), VerticalElevator)); break; default: reader.skipField(); } @@ -2094,16 +2348,203 @@ export namespace iscsGraphicData { serializeBinary(): Uint8Array { return this.serialize(); } - static deserializeBinary(bytes: Uint8Array): CCTVOfStationControlStorage { - return CCTVOfStationControlStorage.deserialize(bytes); + static deserializeBinary(bytes: Uint8Array): BASOfEscalatorStorage { + return BASOfEscalatorStorage.deserialize(bytes); } } - export class FASOfPlatformAlarmStorage extends pb_1.Message { + export class Escalator extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): Escalator { + const message = new Escalator({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Escalator { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Escalator(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Escalator { + return Escalator.deserialize(bytes); + } + } + export class VerticalElevator extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): VerticalElevator { + const message = new VerticalElevator({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): VerticalElevator { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new VerticalElevator(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): VerticalElevator { + return VerticalElevator.deserialize(bytes); + } + } + export class CCTVOfEquipmentLayoutStorage extends pb_1.Message { #one_of_decls: number[][] = []; constructor(data?: any[] | { stationName?: string; canvas?: dependency_1.common.Canvas; commonGraphicStorage?: CommonGraphicStorage; + layer?: CCTVOfEquipmentLayoutStorage.LayerType; }) { super(); pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); @@ -2117,6 +2558,9 @@ export namespace iscsGraphicData { if ("commonGraphicStorage" in data && data.commonGraphicStorage != undefined) { this.commonGraphicStorage = data.commonGraphicStorage; } + if ("layer" in data && data.layer != undefined) { + this.layer = data.layer; + } } } get stationName() { @@ -2143,12 +2587,19 @@ export namespace iscsGraphicData { get has_commonGraphicStorage() { return pb_1.Message.getField(this, 3) != null; } + get layer() { + return pb_1.Message.getFieldWithDefault(this, 4, CCTVOfEquipmentLayoutStorage.LayerType.StationHall) as CCTVOfEquipmentLayoutStorage.LayerType; + } + set layer(value: CCTVOfEquipmentLayoutStorage.LayerType) { + pb_1.Message.setField(this, 4, value); + } static fromObject(data: { stationName?: string; canvas?: ReturnType; commonGraphicStorage?: ReturnType; - }): FASOfPlatformAlarmStorage { - const message = new FASOfPlatformAlarmStorage({}); + layer?: CCTVOfEquipmentLayoutStorage.LayerType; + }): CCTVOfEquipmentLayoutStorage { + const message = new CCTVOfEquipmentLayoutStorage({}); if (data.stationName != null) { message.stationName = data.stationName; } @@ -2158,6 +2609,9 @@ export namespace iscsGraphicData { if (data.commonGraphicStorage != null) { message.commonGraphicStorage = CommonGraphicStorage.fromObject(data.commonGraphicStorage); } + if (data.layer != null) { + message.layer = data.layer; + } return message; } toObject() { @@ -2165,6 +2619,7 @@ export namespace iscsGraphicData { stationName?: string; canvas?: ReturnType; commonGraphicStorage?: ReturnType; + layer?: CCTVOfEquipmentLayoutStorage.LayerType; } = {}; if (this.stationName != null) { data.stationName = this.stationName; @@ -2175,6 +2630,9 @@ export namespace iscsGraphicData { if (this.commonGraphicStorage != null) { data.commonGraphicStorage = this.commonGraphicStorage.toObject(); } + if (this.layer != null) { + data.layer = this.layer; + } return data; } serialize(): Uint8Array; @@ -2187,6 +2645,677 @@ export namespace iscsGraphicData { writer.writeMessage(2, this.canvas, () => this.canvas.serialize(writer)); if (this.has_commonGraphicStorage) writer.writeMessage(3, this.commonGraphicStorage, () => this.commonGraphicStorage.serialize(writer)); + if (this.layer != CCTVOfEquipmentLayoutStorage.LayerType.StationHall) + writer.writeEnum(4, this.layer); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): CCTVOfEquipmentLayoutStorage { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new CCTVOfEquipmentLayoutStorage(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + message.stationName = reader.readString(); + break; + case 2: + reader.readMessage(message.canvas, () => message.canvas = dependency_1.common.Canvas.deserialize(reader)); + break; + case 3: + reader.readMessage(message.commonGraphicStorage, () => message.commonGraphicStorage = CommonGraphicStorage.deserialize(reader)); + break; + case 4: + message.layer = reader.readEnum(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): CCTVOfEquipmentLayoutStorage { + return CCTVOfEquipmentLayoutStorage.deserialize(bytes); + } + } + export namespace CCTVOfEquipmentLayoutStorage { + export enum LayerType { + StationHall = 0, + platform = 1, + PTZ = 2 + } + } + export class FASOfPlatformAlarmStorage extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + stationName?: string; + canvas?: dependency_1.common.Canvas; + commonGraphicStorage?: CommonGraphicStorage; + partition?: string; + fasFailureControlHosts?: FasFailureControlHost[]; + fasAlarms?: FasAlarm[]; + manualAlarmButtons?: ManualAlarmButton[]; + hydrantAlarmButtons?: HydrantAlarmButton[]; + gasExtinguishings?: GasExtinguishing[]; + smokeDetectors?: SmokeDetector[]; + temperatureDetectors?: TemperatureDetector[]; + fireShutters?: FireShutter[]; + firePumps?: FirePump[]; + sprayPumps?: SprayPump[]; + stabilizedPressurePumps?: StabilizedPressurePump[]; + acs?: Acs[]; + afc?: Afc[]; + nonFirePowerSupplies?: NonFirePowerSupply[]; + waterFlowIndicators?: WaterFlowIndicator[]; + signalButterflyValves?: SignalButterflyValve[]; + pressureSwitches?: PressureSwitch[]; + faultValves?: FaultValve[]; + startPumpButtons?: StartPumpButton[]; + temperatureCables?: TemperatureCable[]; + emergencyLightings?: EmergencyLighting[]; + elevatorLiftToTops?: ElevatorLiftToTop[]; + electricButterflyValves?: ElectricButterflyValve[]; + fireValves?: FireValve[]; + electricFireExtinguishingValves?: ElectricFireExtinguishingValve[]; + fireIntercommunicationSignals?: FireIntercommunicationSignal[]; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("stationName" in data && data.stationName != undefined) { + this.stationName = data.stationName; + } + if ("canvas" in data && data.canvas != undefined) { + this.canvas = data.canvas; + } + if ("commonGraphicStorage" in data && data.commonGraphicStorage != undefined) { + this.commonGraphicStorage = data.commonGraphicStorage; + } + if ("partition" in data && data.partition != undefined) { + this.partition = data.partition; + } + if ("fasFailureControlHosts" in data && data.fasFailureControlHosts != undefined) { + this.fasFailureControlHosts = data.fasFailureControlHosts; + } + if ("fasAlarms" in data && data.fasAlarms != undefined) { + this.fasAlarms = data.fasAlarms; + } + if ("manualAlarmButtons" in data && data.manualAlarmButtons != undefined) { + this.manualAlarmButtons = data.manualAlarmButtons; + } + if ("hydrantAlarmButtons" in data && data.hydrantAlarmButtons != undefined) { + this.hydrantAlarmButtons = data.hydrantAlarmButtons; + } + if ("gasExtinguishings" in data && data.gasExtinguishings != undefined) { + this.gasExtinguishings = data.gasExtinguishings; + } + if ("smokeDetectors" in data && data.smokeDetectors != undefined) { + this.smokeDetectors = data.smokeDetectors; + } + if ("temperatureDetectors" in data && data.temperatureDetectors != undefined) { + this.temperatureDetectors = data.temperatureDetectors; + } + if ("fireShutters" in data && data.fireShutters != undefined) { + this.fireShutters = data.fireShutters; + } + if ("firePumps" in data && data.firePumps != undefined) { + this.firePumps = data.firePumps; + } + if ("sprayPumps" in data && data.sprayPumps != undefined) { + this.sprayPumps = data.sprayPumps; + } + if ("stabilizedPressurePumps" in data && data.stabilizedPressurePumps != undefined) { + this.stabilizedPressurePumps = data.stabilizedPressurePumps; + } + if ("acs" in data && data.acs != undefined) { + this.acs = data.acs; + } + if ("afc" in data && data.afc != undefined) { + this.afc = data.afc; + } + if ("nonFirePowerSupplies" in data && data.nonFirePowerSupplies != undefined) { + this.nonFirePowerSupplies = data.nonFirePowerSupplies; + } + if ("waterFlowIndicators" in data && data.waterFlowIndicators != undefined) { + this.waterFlowIndicators = data.waterFlowIndicators; + } + if ("signalButterflyValves" in data && data.signalButterflyValves != undefined) { + this.signalButterflyValves = data.signalButterflyValves; + } + if ("pressureSwitches" in data && data.pressureSwitches != undefined) { + this.pressureSwitches = data.pressureSwitches; + } + if ("faultValves" in data && data.faultValves != undefined) { + this.faultValves = data.faultValves; + } + if ("startPumpButtons" in data && data.startPumpButtons != undefined) { + this.startPumpButtons = data.startPumpButtons; + } + if ("temperatureCables" in data && data.temperatureCables != undefined) { + this.temperatureCables = data.temperatureCables; + } + if ("emergencyLightings" in data && data.emergencyLightings != undefined) { + this.emergencyLightings = data.emergencyLightings; + } + if ("elevatorLiftToTops" in data && data.elevatorLiftToTops != undefined) { + this.elevatorLiftToTops = data.elevatorLiftToTops; + } + if ("electricButterflyValves" in data && data.electricButterflyValves != undefined) { + this.electricButterflyValves = data.electricButterflyValves; + } + if ("fireValves" in data && data.fireValves != undefined) { + this.fireValves = data.fireValves; + } + if ("electricFireExtinguishingValves" in data && data.electricFireExtinguishingValves != undefined) { + this.electricFireExtinguishingValves = data.electricFireExtinguishingValves; + } + if ("fireIntercommunicationSignals" in data && data.fireIntercommunicationSignals != undefined) { + this.fireIntercommunicationSignals = data.fireIntercommunicationSignals; + } + } + } + get stationName() { + return pb_1.Message.getFieldWithDefault(this, 1, "") as string; + } + set stationName(value: string) { + pb_1.Message.setField(this, 1, value); + } + get canvas() { + return pb_1.Message.getWrapperField(this, dependency_1.common.Canvas, 2) as dependency_1.common.Canvas; + } + set canvas(value: dependency_1.common.Canvas) { + pb_1.Message.setWrapperField(this, 2, value); + } + get has_canvas() { + return pb_1.Message.getField(this, 2) != null; + } + get commonGraphicStorage() { + return pb_1.Message.getWrapperField(this, CommonGraphicStorage, 3) as CommonGraphicStorage; + } + set commonGraphicStorage(value: CommonGraphicStorage) { + pb_1.Message.setWrapperField(this, 3, value); + } + get has_commonGraphicStorage() { + return pb_1.Message.getField(this, 3) != null; + } + get partition() { + return pb_1.Message.getFieldWithDefault(this, 4, "") as string; + } + set partition(value: string) { + pb_1.Message.setField(this, 4, value); + } + get fasFailureControlHosts() { + return pb_1.Message.getRepeatedWrapperField(this, FasFailureControlHost, 5) as FasFailureControlHost[]; + } + set fasFailureControlHosts(value: FasFailureControlHost[]) { + pb_1.Message.setRepeatedWrapperField(this, 5, value); + } + get fasAlarms() { + return pb_1.Message.getRepeatedWrapperField(this, FasAlarm, 6) as FasAlarm[]; + } + set fasAlarms(value: FasAlarm[]) { + pb_1.Message.setRepeatedWrapperField(this, 6, value); + } + get manualAlarmButtons() { + return pb_1.Message.getRepeatedWrapperField(this, ManualAlarmButton, 7) as ManualAlarmButton[]; + } + set manualAlarmButtons(value: ManualAlarmButton[]) { + pb_1.Message.setRepeatedWrapperField(this, 7, value); + } + get hydrantAlarmButtons() { + return pb_1.Message.getRepeatedWrapperField(this, HydrantAlarmButton, 8) as HydrantAlarmButton[]; + } + set hydrantAlarmButtons(value: HydrantAlarmButton[]) { + pb_1.Message.setRepeatedWrapperField(this, 8, value); + } + get gasExtinguishings() { + return pb_1.Message.getRepeatedWrapperField(this, GasExtinguishing, 9) as GasExtinguishing[]; + } + set gasExtinguishings(value: GasExtinguishing[]) { + pb_1.Message.setRepeatedWrapperField(this, 9, value); + } + get smokeDetectors() { + return pb_1.Message.getRepeatedWrapperField(this, SmokeDetector, 10) as SmokeDetector[]; + } + set smokeDetectors(value: SmokeDetector[]) { + pb_1.Message.setRepeatedWrapperField(this, 10, value); + } + get temperatureDetectors() { + return pb_1.Message.getRepeatedWrapperField(this, TemperatureDetector, 11) as TemperatureDetector[]; + } + set temperatureDetectors(value: TemperatureDetector[]) { + pb_1.Message.setRepeatedWrapperField(this, 11, value); + } + get fireShutters() { + return pb_1.Message.getRepeatedWrapperField(this, FireShutter, 12) as FireShutter[]; + } + set fireShutters(value: FireShutter[]) { + pb_1.Message.setRepeatedWrapperField(this, 12, value); + } + get firePumps() { + return pb_1.Message.getRepeatedWrapperField(this, FirePump, 13) as FirePump[]; + } + set firePumps(value: FirePump[]) { + pb_1.Message.setRepeatedWrapperField(this, 13, value); + } + get sprayPumps() { + return pb_1.Message.getRepeatedWrapperField(this, SprayPump, 14) as SprayPump[]; + } + set sprayPumps(value: SprayPump[]) { + pb_1.Message.setRepeatedWrapperField(this, 14, value); + } + get stabilizedPressurePumps() { + return pb_1.Message.getRepeatedWrapperField(this, StabilizedPressurePump, 15) as StabilizedPressurePump[]; + } + set stabilizedPressurePumps(value: StabilizedPressurePump[]) { + pb_1.Message.setRepeatedWrapperField(this, 15, value); + } + get acs() { + return pb_1.Message.getRepeatedWrapperField(this, Acs, 16) as Acs[]; + } + set acs(value: Acs[]) { + pb_1.Message.setRepeatedWrapperField(this, 16, value); + } + get afc() { + return pb_1.Message.getRepeatedWrapperField(this, Afc, 17) as Afc[]; + } + set afc(value: Afc[]) { + pb_1.Message.setRepeatedWrapperField(this, 17, value); + } + get nonFirePowerSupplies() { + return pb_1.Message.getRepeatedWrapperField(this, NonFirePowerSupply, 18) as NonFirePowerSupply[]; + } + set nonFirePowerSupplies(value: NonFirePowerSupply[]) { + pb_1.Message.setRepeatedWrapperField(this, 18, value); + } + get waterFlowIndicators() { + return pb_1.Message.getRepeatedWrapperField(this, WaterFlowIndicator, 19) as WaterFlowIndicator[]; + } + set waterFlowIndicators(value: WaterFlowIndicator[]) { + pb_1.Message.setRepeatedWrapperField(this, 19, value); + } + get signalButterflyValves() { + return pb_1.Message.getRepeatedWrapperField(this, SignalButterflyValve, 20) as SignalButterflyValve[]; + } + set signalButterflyValves(value: SignalButterflyValve[]) { + pb_1.Message.setRepeatedWrapperField(this, 20, value); + } + get pressureSwitches() { + return pb_1.Message.getRepeatedWrapperField(this, PressureSwitch, 21) as PressureSwitch[]; + } + set pressureSwitches(value: PressureSwitch[]) { + pb_1.Message.setRepeatedWrapperField(this, 21, value); + } + get faultValves() { + return pb_1.Message.getRepeatedWrapperField(this, FaultValve, 22) as FaultValve[]; + } + set faultValves(value: FaultValve[]) { + pb_1.Message.setRepeatedWrapperField(this, 22, value); + } + get startPumpButtons() { + return pb_1.Message.getRepeatedWrapperField(this, StartPumpButton, 23) as StartPumpButton[]; + } + set startPumpButtons(value: StartPumpButton[]) { + pb_1.Message.setRepeatedWrapperField(this, 23, value); + } + get temperatureCables() { + return pb_1.Message.getRepeatedWrapperField(this, TemperatureCable, 24) as TemperatureCable[]; + } + set temperatureCables(value: TemperatureCable[]) { + pb_1.Message.setRepeatedWrapperField(this, 24, value); + } + get emergencyLightings() { + return pb_1.Message.getRepeatedWrapperField(this, EmergencyLighting, 25) as EmergencyLighting[]; + } + set emergencyLightings(value: EmergencyLighting[]) { + pb_1.Message.setRepeatedWrapperField(this, 25, value); + } + get elevatorLiftToTops() { + return pb_1.Message.getRepeatedWrapperField(this, ElevatorLiftToTop, 26) as ElevatorLiftToTop[]; + } + set elevatorLiftToTops(value: ElevatorLiftToTop[]) { + pb_1.Message.setRepeatedWrapperField(this, 26, value); + } + get electricButterflyValves() { + return pb_1.Message.getRepeatedWrapperField(this, ElectricButterflyValve, 27) as ElectricButterflyValve[]; + } + set electricButterflyValves(value: ElectricButterflyValve[]) { + pb_1.Message.setRepeatedWrapperField(this, 27, value); + } + get fireValves() { + return pb_1.Message.getRepeatedWrapperField(this, FireValve, 28) as FireValve[]; + } + set fireValves(value: FireValve[]) { + pb_1.Message.setRepeatedWrapperField(this, 28, value); + } + get electricFireExtinguishingValves() { + return pb_1.Message.getRepeatedWrapperField(this, ElectricFireExtinguishingValve, 29) as ElectricFireExtinguishingValve[]; + } + set electricFireExtinguishingValves(value: ElectricFireExtinguishingValve[]) { + pb_1.Message.setRepeatedWrapperField(this, 29, value); + } + get fireIntercommunicationSignals() { + return pb_1.Message.getRepeatedWrapperField(this, FireIntercommunicationSignal, 30) as FireIntercommunicationSignal[]; + } + set fireIntercommunicationSignals(value: FireIntercommunicationSignal[]) { + pb_1.Message.setRepeatedWrapperField(this, 30, value); + } + static fromObject(data: { + stationName?: string; + canvas?: ReturnType; + commonGraphicStorage?: ReturnType; + partition?: string; + fasFailureControlHosts?: ReturnType[]; + fasAlarms?: ReturnType[]; + manualAlarmButtons?: ReturnType[]; + hydrantAlarmButtons?: ReturnType[]; + gasExtinguishings?: ReturnType[]; + smokeDetectors?: ReturnType[]; + temperatureDetectors?: ReturnType[]; + fireShutters?: ReturnType[]; + firePumps?: ReturnType[]; + sprayPumps?: ReturnType[]; + stabilizedPressurePumps?: ReturnType[]; + acs?: ReturnType[]; + afc?: ReturnType[]; + nonFirePowerSupplies?: ReturnType[]; + waterFlowIndicators?: ReturnType[]; + signalButterflyValves?: ReturnType[]; + pressureSwitches?: ReturnType[]; + faultValves?: ReturnType[]; + startPumpButtons?: ReturnType[]; + temperatureCables?: ReturnType[]; + emergencyLightings?: ReturnType[]; + elevatorLiftToTops?: ReturnType[]; + electricButterflyValves?: ReturnType[]; + fireValves?: ReturnType[]; + electricFireExtinguishingValves?: ReturnType[]; + fireIntercommunicationSignals?: ReturnType[]; + }): FASOfPlatformAlarmStorage { + const message = new FASOfPlatformAlarmStorage({}); + if (data.stationName != null) { + message.stationName = data.stationName; + } + if (data.canvas != null) { + message.canvas = dependency_1.common.Canvas.fromObject(data.canvas); + } + if (data.commonGraphicStorage != null) { + message.commonGraphicStorage = CommonGraphicStorage.fromObject(data.commonGraphicStorage); + } + if (data.partition != null) { + message.partition = data.partition; + } + if (data.fasFailureControlHosts != null) { + message.fasFailureControlHosts = data.fasFailureControlHosts.map(item => FasFailureControlHost.fromObject(item)); + } + if (data.fasAlarms != null) { + message.fasAlarms = data.fasAlarms.map(item => FasAlarm.fromObject(item)); + } + if (data.manualAlarmButtons != null) { + message.manualAlarmButtons = data.manualAlarmButtons.map(item => ManualAlarmButton.fromObject(item)); + } + if (data.hydrantAlarmButtons != null) { + message.hydrantAlarmButtons = data.hydrantAlarmButtons.map(item => HydrantAlarmButton.fromObject(item)); + } + if (data.gasExtinguishings != null) { + message.gasExtinguishings = data.gasExtinguishings.map(item => GasExtinguishing.fromObject(item)); + } + if (data.smokeDetectors != null) { + message.smokeDetectors = data.smokeDetectors.map(item => SmokeDetector.fromObject(item)); + } + if (data.temperatureDetectors != null) { + message.temperatureDetectors = data.temperatureDetectors.map(item => TemperatureDetector.fromObject(item)); + } + if (data.fireShutters != null) { + message.fireShutters = data.fireShutters.map(item => FireShutter.fromObject(item)); + } + if (data.firePumps != null) { + message.firePumps = data.firePumps.map(item => FirePump.fromObject(item)); + } + if (data.sprayPumps != null) { + message.sprayPumps = data.sprayPumps.map(item => SprayPump.fromObject(item)); + } + if (data.stabilizedPressurePumps != null) { + message.stabilizedPressurePumps = data.stabilizedPressurePumps.map(item => StabilizedPressurePump.fromObject(item)); + } + if (data.acs != null) { + message.acs = data.acs.map(item => Acs.fromObject(item)); + } + if (data.afc != null) { + message.afc = data.afc.map(item => Afc.fromObject(item)); + } + if (data.nonFirePowerSupplies != null) { + message.nonFirePowerSupplies = data.nonFirePowerSupplies.map(item => NonFirePowerSupply.fromObject(item)); + } + if (data.waterFlowIndicators != null) { + message.waterFlowIndicators = data.waterFlowIndicators.map(item => WaterFlowIndicator.fromObject(item)); + } + if (data.signalButterflyValves != null) { + message.signalButterflyValves = data.signalButterflyValves.map(item => SignalButterflyValve.fromObject(item)); + } + if (data.pressureSwitches != null) { + message.pressureSwitches = data.pressureSwitches.map(item => PressureSwitch.fromObject(item)); + } + if (data.faultValves != null) { + message.faultValves = data.faultValves.map(item => FaultValve.fromObject(item)); + } + if (data.startPumpButtons != null) { + message.startPumpButtons = data.startPumpButtons.map(item => StartPumpButton.fromObject(item)); + } + if (data.temperatureCables != null) { + message.temperatureCables = data.temperatureCables.map(item => TemperatureCable.fromObject(item)); + } + if (data.emergencyLightings != null) { + message.emergencyLightings = data.emergencyLightings.map(item => EmergencyLighting.fromObject(item)); + } + if (data.elevatorLiftToTops != null) { + message.elevatorLiftToTops = data.elevatorLiftToTops.map(item => ElevatorLiftToTop.fromObject(item)); + } + if (data.electricButterflyValves != null) { + message.electricButterflyValves = data.electricButterflyValves.map(item => ElectricButterflyValve.fromObject(item)); + } + if (data.fireValves != null) { + message.fireValves = data.fireValves.map(item => FireValve.fromObject(item)); + } + if (data.electricFireExtinguishingValves != null) { + message.electricFireExtinguishingValves = data.electricFireExtinguishingValves.map(item => ElectricFireExtinguishingValve.fromObject(item)); + } + if (data.fireIntercommunicationSignals != null) { + message.fireIntercommunicationSignals = data.fireIntercommunicationSignals.map(item => FireIntercommunicationSignal.fromObject(item)); + } + return message; + } + toObject() { + const data: { + stationName?: string; + canvas?: ReturnType; + commonGraphicStorage?: ReturnType; + partition?: string; + fasFailureControlHosts?: ReturnType[]; + fasAlarms?: ReturnType[]; + manualAlarmButtons?: ReturnType[]; + hydrantAlarmButtons?: ReturnType[]; + gasExtinguishings?: ReturnType[]; + smokeDetectors?: ReturnType[]; + temperatureDetectors?: ReturnType[]; + fireShutters?: ReturnType[]; + firePumps?: ReturnType[]; + sprayPumps?: ReturnType[]; + stabilizedPressurePumps?: ReturnType[]; + acs?: ReturnType[]; + afc?: ReturnType[]; + nonFirePowerSupplies?: ReturnType[]; + waterFlowIndicators?: ReturnType[]; + signalButterflyValves?: ReturnType[]; + pressureSwitches?: ReturnType[]; + faultValves?: ReturnType[]; + startPumpButtons?: ReturnType[]; + temperatureCables?: ReturnType[]; + emergencyLightings?: ReturnType[]; + elevatorLiftToTops?: ReturnType[]; + electricButterflyValves?: ReturnType[]; + fireValves?: ReturnType[]; + electricFireExtinguishingValves?: ReturnType[]; + fireIntercommunicationSignals?: ReturnType[]; + } = {}; + if (this.stationName != null) { + data.stationName = this.stationName; + } + if (this.canvas != null) { + data.canvas = this.canvas.toObject(); + } + if (this.commonGraphicStorage != null) { + data.commonGraphicStorage = this.commonGraphicStorage.toObject(); + } + if (this.partition != null) { + data.partition = this.partition; + } + if (this.fasFailureControlHosts != null) { + data.fasFailureControlHosts = this.fasFailureControlHosts.map((item: FasFailureControlHost) => item.toObject()); + } + if (this.fasAlarms != null) { + data.fasAlarms = this.fasAlarms.map((item: FasAlarm) => item.toObject()); + } + if (this.manualAlarmButtons != null) { + data.manualAlarmButtons = this.manualAlarmButtons.map((item: ManualAlarmButton) => item.toObject()); + } + if (this.hydrantAlarmButtons != null) { + data.hydrantAlarmButtons = this.hydrantAlarmButtons.map((item: HydrantAlarmButton) => item.toObject()); + } + if (this.gasExtinguishings != null) { + data.gasExtinguishings = this.gasExtinguishings.map((item: GasExtinguishing) => item.toObject()); + } + if (this.smokeDetectors != null) { + data.smokeDetectors = this.smokeDetectors.map((item: SmokeDetector) => item.toObject()); + } + if (this.temperatureDetectors != null) { + data.temperatureDetectors = this.temperatureDetectors.map((item: TemperatureDetector) => item.toObject()); + } + if (this.fireShutters != null) { + data.fireShutters = this.fireShutters.map((item: FireShutter) => item.toObject()); + } + if (this.firePumps != null) { + data.firePumps = this.firePumps.map((item: FirePump) => item.toObject()); + } + if (this.sprayPumps != null) { + data.sprayPumps = this.sprayPumps.map((item: SprayPump) => item.toObject()); + } + if (this.stabilizedPressurePumps != null) { + data.stabilizedPressurePumps = this.stabilizedPressurePumps.map((item: StabilizedPressurePump) => item.toObject()); + } + if (this.acs != null) { + data.acs = this.acs.map((item: Acs) => item.toObject()); + } + if (this.afc != null) { + data.afc = this.afc.map((item: Afc) => item.toObject()); + } + if (this.nonFirePowerSupplies != null) { + data.nonFirePowerSupplies = this.nonFirePowerSupplies.map((item: NonFirePowerSupply) => item.toObject()); + } + if (this.waterFlowIndicators != null) { + data.waterFlowIndicators = this.waterFlowIndicators.map((item: WaterFlowIndicator) => item.toObject()); + } + if (this.signalButterflyValves != null) { + data.signalButterflyValves = this.signalButterflyValves.map((item: SignalButterflyValve) => item.toObject()); + } + if (this.pressureSwitches != null) { + data.pressureSwitches = this.pressureSwitches.map((item: PressureSwitch) => item.toObject()); + } + if (this.faultValves != null) { + data.faultValves = this.faultValves.map((item: FaultValve) => item.toObject()); + } + if (this.startPumpButtons != null) { + data.startPumpButtons = this.startPumpButtons.map((item: StartPumpButton) => item.toObject()); + } + if (this.temperatureCables != null) { + data.temperatureCables = this.temperatureCables.map((item: TemperatureCable) => item.toObject()); + } + if (this.emergencyLightings != null) { + data.emergencyLightings = this.emergencyLightings.map((item: EmergencyLighting) => item.toObject()); + } + if (this.elevatorLiftToTops != null) { + data.elevatorLiftToTops = this.elevatorLiftToTops.map((item: ElevatorLiftToTop) => item.toObject()); + } + if (this.electricButterflyValves != null) { + data.electricButterflyValves = this.electricButterflyValves.map((item: ElectricButterflyValve) => item.toObject()); + } + if (this.fireValves != null) { + data.fireValves = this.fireValves.map((item: FireValve) => item.toObject()); + } + if (this.electricFireExtinguishingValves != null) { + data.electricFireExtinguishingValves = this.electricFireExtinguishingValves.map((item: ElectricFireExtinguishingValve) => item.toObject()); + } + if (this.fireIntercommunicationSignals != null) { + data.fireIntercommunicationSignals = this.fireIntercommunicationSignals.map((item: FireIntercommunicationSignal) => item.toObject()); + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.stationName.length) + writer.writeString(1, this.stationName); + if (this.has_canvas) + writer.writeMessage(2, this.canvas, () => this.canvas.serialize(writer)); + if (this.has_commonGraphicStorage) + writer.writeMessage(3, this.commonGraphicStorage, () => this.commonGraphicStorage.serialize(writer)); + if (this.partition.length) + writer.writeString(4, this.partition); + if (this.fasFailureControlHosts.length) + writer.writeRepeatedMessage(5, this.fasFailureControlHosts, (item: FasFailureControlHost) => item.serialize(writer)); + if (this.fasAlarms.length) + writer.writeRepeatedMessage(6, this.fasAlarms, (item: FasAlarm) => item.serialize(writer)); + if (this.manualAlarmButtons.length) + writer.writeRepeatedMessage(7, this.manualAlarmButtons, (item: ManualAlarmButton) => item.serialize(writer)); + if (this.hydrantAlarmButtons.length) + writer.writeRepeatedMessage(8, this.hydrantAlarmButtons, (item: HydrantAlarmButton) => item.serialize(writer)); + if (this.gasExtinguishings.length) + writer.writeRepeatedMessage(9, this.gasExtinguishings, (item: GasExtinguishing) => item.serialize(writer)); + if (this.smokeDetectors.length) + writer.writeRepeatedMessage(10, this.smokeDetectors, (item: SmokeDetector) => item.serialize(writer)); + if (this.temperatureDetectors.length) + writer.writeRepeatedMessage(11, this.temperatureDetectors, (item: TemperatureDetector) => item.serialize(writer)); + if (this.fireShutters.length) + writer.writeRepeatedMessage(12, this.fireShutters, (item: FireShutter) => item.serialize(writer)); + if (this.firePumps.length) + writer.writeRepeatedMessage(13, this.firePumps, (item: FirePump) => item.serialize(writer)); + if (this.sprayPumps.length) + writer.writeRepeatedMessage(14, this.sprayPumps, (item: SprayPump) => item.serialize(writer)); + if (this.stabilizedPressurePumps.length) + writer.writeRepeatedMessage(15, this.stabilizedPressurePumps, (item: StabilizedPressurePump) => item.serialize(writer)); + if (this.acs.length) + writer.writeRepeatedMessage(16, this.acs, (item: Acs) => item.serialize(writer)); + if (this.afc.length) + writer.writeRepeatedMessage(17, this.afc, (item: Afc) => item.serialize(writer)); + if (this.nonFirePowerSupplies.length) + writer.writeRepeatedMessage(18, this.nonFirePowerSupplies, (item: NonFirePowerSupply) => item.serialize(writer)); + if (this.waterFlowIndicators.length) + writer.writeRepeatedMessage(19, this.waterFlowIndicators, (item: WaterFlowIndicator) => item.serialize(writer)); + if (this.signalButterflyValves.length) + writer.writeRepeatedMessage(20, this.signalButterflyValves, (item: SignalButterflyValve) => item.serialize(writer)); + if (this.pressureSwitches.length) + writer.writeRepeatedMessage(21, this.pressureSwitches, (item: PressureSwitch) => item.serialize(writer)); + if (this.faultValves.length) + writer.writeRepeatedMessage(22, this.faultValves, (item: FaultValve) => item.serialize(writer)); + if (this.startPumpButtons.length) + writer.writeRepeatedMessage(23, this.startPumpButtons, (item: StartPumpButton) => item.serialize(writer)); + if (this.temperatureCables.length) + writer.writeRepeatedMessage(24, this.temperatureCables, (item: TemperatureCable) => item.serialize(writer)); + if (this.emergencyLightings.length) + writer.writeRepeatedMessage(25, this.emergencyLightings, (item: EmergencyLighting) => item.serialize(writer)); + if (this.elevatorLiftToTops.length) + writer.writeRepeatedMessage(26, this.elevatorLiftToTops, (item: ElevatorLiftToTop) => item.serialize(writer)); + if (this.electricButterflyValves.length) + writer.writeRepeatedMessage(27, this.electricButterflyValves, (item: ElectricButterflyValve) => item.serialize(writer)); + if (this.fireValves.length) + writer.writeRepeatedMessage(28, this.fireValves, (item: FireValve) => item.serialize(writer)); + if (this.electricFireExtinguishingValves.length) + writer.writeRepeatedMessage(29, this.electricFireExtinguishingValves, (item: ElectricFireExtinguishingValve) => item.serialize(writer)); + if (this.fireIntercommunicationSignals.length) + writer.writeRepeatedMessage(30, this.fireIntercommunicationSignals, (item: FireIntercommunicationSignal) => item.serialize(writer)); if (!w) return writer.getResultBuffer(); } @@ -2205,6 +3334,87 @@ export namespace iscsGraphicData { case 3: reader.readMessage(message.commonGraphicStorage, () => message.commonGraphicStorage = CommonGraphicStorage.deserialize(reader)); break; + case 4: + message.partition = reader.readString(); + break; + case 5: + reader.readMessage(message.fasFailureControlHosts, () => pb_1.Message.addToRepeatedWrapperField(message, 5, FasFailureControlHost.deserialize(reader), FasFailureControlHost)); + break; + case 6: + reader.readMessage(message.fasAlarms, () => pb_1.Message.addToRepeatedWrapperField(message, 6, FasAlarm.deserialize(reader), FasAlarm)); + break; + case 7: + reader.readMessage(message.manualAlarmButtons, () => pb_1.Message.addToRepeatedWrapperField(message, 7, ManualAlarmButton.deserialize(reader), ManualAlarmButton)); + break; + case 8: + reader.readMessage(message.hydrantAlarmButtons, () => pb_1.Message.addToRepeatedWrapperField(message, 8, HydrantAlarmButton.deserialize(reader), HydrantAlarmButton)); + break; + case 9: + reader.readMessage(message.gasExtinguishings, () => pb_1.Message.addToRepeatedWrapperField(message, 9, GasExtinguishing.deserialize(reader), GasExtinguishing)); + break; + case 10: + reader.readMessage(message.smokeDetectors, () => pb_1.Message.addToRepeatedWrapperField(message, 10, SmokeDetector.deserialize(reader), SmokeDetector)); + break; + case 11: + reader.readMessage(message.temperatureDetectors, () => pb_1.Message.addToRepeatedWrapperField(message, 11, TemperatureDetector.deserialize(reader), TemperatureDetector)); + break; + case 12: + reader.readMessage(message.fireShutters, () => pb_1.Message.addToRepeatedWrapperField(message, 12, FireShutter.deserialize(reader), FireShutter)); + break; + case 13: + reader.readMessage(message.firePumps, () => pb_1.Message.addToRepeatedWrapperField(message, 13, FirePump.deserialize(reader), FirePump)); + break; + case 14: + reader.readMessage(message.sprayPumps, () => pb_1.Message.addToRepeatedWrapperField(message, 14, SprayPump.deserialize(reader), SprayPump)); + break; + case 15: + reader.readMessage(message.stabilizedPressurePumps, () => pb_1.Message.addToRepeatedWrapperField(message, 15, StabilizedPressurePump.deserialize(reader), StabilizedPressurePump)); + break; + case 16: + reader.readMessage(message.acs, () => pb_1.Message.addToRepeatedWrapperField(message, 16, Acs.deserialize(reader), Acs)); + break; + case 17: + reader.readMessage(message.afc, () => pb_1.Message.addToRepeatedWrapperField(message, 17, Afc.deserialize(reader), Afc)); + break; + case 18: + reader.readMessage(message.nonFirePowerSupplies, () => pb_1.Message.addToRepeatedWrapperField(message, 18, NonFirePowerSupply.deserialize(reader), NonFirePowerSupply)); + break; + case 19: + reader.readMessage(message.waterFlowIndicators, () => pb_1.Message.addToRepeatedWrapperField(message, 19, WaterFlowIndicator.deserialize(reader), WaterFlowIndicator)); + break; + case 20: + reader.readMessage(message.signalButterflyValves, () => pb_1.Message.addToRepeatedWrapperField(message, 20, SignalButterflyValve.deserialize(reader), SignalButterflyValve)); + break; + case 21: + reader.readMessage(message.pressureSwitches, () => pb_1.Message.addToRepeatedWrapperField(message, 21, PressureSwitch.deserialize(reader), PressureSwitch)); + break; + case 22: + reader.readMessage(message.faultValves, () => pb_1.Message.addToRepeatedWrapperField(message, 22, FaultValve.deserialize(reader), FaultValve)); + break; + case 23: + reader.readMessage(message.startPumpButtons, () => pb_1.Message.addToRepeatedWrapperField(message, 23, StartPumpButton.deserialize(reader), StartPumpButton)); + break; + case 24: + reader.readMessage(message.temperatureCables, () => pb_1.Message.addToRepeatedWrapperField(message, 24, TemperatureCable.deserialize(reader), TemperatureCable)); + break; + case 25: + reader.readMessage(message.emergencyLightings, () => pb_1.Message.addToRepeatedWrapperField(message, 25, EmergencyLighting.deserialize(reader), EmergencyLighting)); + break; + case 26: + reader.readMessage(message.elevatorLiftToTops, () => pb_1.Message.addToRepeatedWrapperField(message, 26, ElevatorLiftToTop.deserialize(reader), ElevatorLiftToTop)); + break; + case 27: + reader.readMessage(message.electricButterflyValves, () => pb_1.Message.addToRepeatedWrapperField(message, 27, ElectricButterflyValve.deserialize(reader), ElectricButterflyValve)); + break; + case 28: + reader.readMessage(message.fireValves, () => pb_1.Message.addToRepeatedWrapperField(message, 28, FireValve.deserialize(reader), FireValve)); + break; + case 29: + reader.readMessage(message.electricFireExtinguishingValves, () => pb_1.Message.addToRepeatedWrapperField(message, 29, ElectricFireExtinguishingValve.deserialize(reader), ElectricFireExtinguishingValve)); + break; + case 30: + reader.readMessage(message.fireIntercommunicationSignals, () => pb_1.Message.addToRepeatedWrapperField(message, 30, FireIntercommunicationSignal.deserialize(reader), FireIntercommunicationSignal)); + break; default: reader.skipField(); } } @@ -2217,4 +3427,1986 @@ export namespace iscsGraphicData { return FASOfPlatformAlarmStorage.deserialize(bytes); } } + export class FasFailureControlHost extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): FasFailureControlHost { + const message = new FasFailureControlHost({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): FasFailureControlHost { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new FasFailureControlHost(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): FasFailureControlHost { + return FasFailureControlHost.deserialize(bytes); + } + } + export class FasAlarm extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): FasAlarm { + const message = new FasAlarm({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): FasAlarm { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new FasAlarm(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): FasAlarm { + return FasAlarm.deserialize(bytes); + } + } + export class FireShutter extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + type?: FireShutter.ShutterType; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("type" in data && data.type != undefined) { + this.type = data.type; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get type() { + return pb_1.Message.getFieldWithDefault(this, 3, FireShutter.ShutterType.partition) as FireShutter.ShutterType; + } + set type(value: FireShutter.ShutterType) { + pb_1.Message.setField(this, 3, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + type?: FireShutter.ShutterType; + }): FireShutter { + const message = new FireShutter({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.type != null) { + message.type = data.type; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + type?: FireShutter.ShutterType; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.type != null) { + data.type = this.type; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.type != FireShutter.ShutterType.partition) + writer.writeEnum(3, this.type); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): FireShutter { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new FireShutter(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + message.type = reader.readEnum(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): FireShutter { + return FireShutter.deserialize(bytes); + } + } + export namespace FireShutter { + export enum ShutterType { + partition = 0, + dispersal = 1 + } + } + export class FirePump extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): FirePump { + const message = new FirePump({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): FirePump { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new FirePump(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): FirePump { + return FirePump.deserialize(bytes); + } + } + export class SprayPump extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): SprayPump { + const message = new SprayPump({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SprayPump { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new SprayPump(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): SprayPump { + return SprayPump.deserialize(bytes); + } + } + export class StabilizedPressurePump extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): StabilizedPressurePump { + const message = new StabilizedPressurePump({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StabilizedPressurePump { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new StabilizedPressurePump(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): StabilizedPressurePump { + return StabilizedPressurePump.deserialize(bytes); + } + } + export class Acs extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): Acs { + const message = new Acs({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Acs { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Acs(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Acs { + return Acs.deserialize(bytes); + } + } + export class Afc extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): Afc { + const message = new Afc({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Afc { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Afc(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Afc { + return Afc.deserialize(bytes); + } + } + export class NonFirePowerSupply extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): NonFirePowerSupply { + const message = new NonFirePowerSupply({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): NonFirePowerSupply { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new NonFirePowerSupply(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): NonFirePowerSupply { + return NonFirePowerSupply.deserialize(bytes); + } + } + export class WaterFlowIndicator extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): WaterFlowIndicator { + const message = new WaterFlowIndicator({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): WaterFlowIndicator { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new WaterFlowIndicator(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): WaterFlowIndicator { + return WaterFlowIndicator.deserialize(bytes); + } + } + export class SignalButterflyValve extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): SignalButterflyValve { + const message = new SignalButterflyValve({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SignalButterflyValve { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new SignalButterflyValve(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): SignalButterflyValve { + return SignalButterflyValve.deserialize(bytes); + } + } + export class PressureSwitch extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): PressureSwitch { + const message = new PressureSwitch({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): PressureSwitch { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new PressureSwitch(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): PressureSwitch { + return PressureSwitch.deserialize(bytes); + } + } + export class FaultValve extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): FaultValve { + const message = new FaultValve({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): FaultValve { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new FaultValve(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): FaultValve { + return FaultValve.deserialize(bytes); + } + } + export class StartPumpButton extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): StartPumpButton { + const message = new StartPumpButton({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StartPumpButton { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new StartPumpButton(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): StartPumpButton { + return StartPumpButton.deserialize(bytes); + } + } + export class TemperatureCable extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): TemperatureCable { + const message = new TemperatureCable({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): TemperatureCable { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new TemperatureCable(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): TemperatureCable { + return TemperatureCable.deserialize(bytes); + } + } + export class EmergencyLighting extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): EmergencyLighting { + const message = new EmergencyLighting({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): EmergencyLighting { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new EmergencyLighting(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): EmergencyLighting { + return EmergencyLighting.deserialize(bytes); + } + } + export class ElevatorLiftToTop extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): ElevatorLiftToTop { + const message = new ElevatorLiftToTop({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ElevatorLiftToTop { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ElevatorLiftToTop(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): ElevatorLiftToTop { + return ElevatorLiftToTop.deserialize(bytes); + } + } + export class ElectricButterflyValve extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): ElectricButterflyValve { + const message = new ElectricButterflyValve({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ElectricButterflyValve { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ElectricButterflyValve(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): ElectricButterflyValve { + return ElectricButterflyValve.deserialize(bytes); + } + } + export class FireValve extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): FireValve { + const message = new FireValve({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): FireValve { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new FireValve(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): FireValve { + return FireValve.deserialize(bytes); + } + } + export class ElectricFireExtinguishingValve extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): ElectricFireExtinguishingValve { + const message = new ElectricFireExtinguishingValve({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ElectricFireExtinguishingValve { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ElectricFireExtinguishingValve(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): ElectricFireExtinguishingValve { + return ElectricFireExtinguishingValve.deserialize(bytes); + } + } + export class FireIntercommunicationSignal extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: dependency_1.common.CommonInfo; + code?: string; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, dependency_1.common.CommonInfo, 1) as dependency_1.common.CommonInfo; + } + set common(value: dependency_1.common.CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + }): FireIntercommunicationSignal { + const message = new FireIntercommunicationSignal({}); + if (data.common != null) { + message.common = dependency_1.common.CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): FireIntercommunicationSignal { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new FireIntercommunicationSignal(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = dependency_1.common.CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): FireIntercommunicationSignal { + return FireIntercommunicationSignal.deserialize(bytes); + } + } } diff --git a/src/protos/picture.ts b/src/protos/picture.ts deleted file mode 100644 index ba6f447..0000000 --- a/src/protos/picture.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Generated by the protoc-gen-ts. DO NOT EDIT! - * compiler version: 5.27.4 - * source: picture.proto - * git: https://github.com/thesayyn/protoc-gen-ts */ -import * as pb_1 from "google-protobuf"; -export enum PictureType { - FireAlarm = 0, - Electromechanical = 1, - Broadcast = 2, - PassengerInformation = 3, - CCTV = 4, - PSD = 5, - TicketSalesAndChecking = 6, - AccessControl = 7, - FloodGate = 8, - NetworkStatus = 9 -} diff --git a/src/protos/simulation.ts b/src/protos/simulation.ts new file mode 100644 index 0000000..aa14f80 --- /dev/null +++ b/src/protos/simulation.ts @@ -0,0 +1,187 @@ +/** + * Generated by the protoc-gen-ts. DO NOT EDIT! + * compiler version: 5.27.4 + * source: simulation.proto + * git: https://github.com/thesayyn/protoc-gen-ts */ +import * as dependency_1 from "./google\\protobuf\\any"; +import * as pb_1 from "google-protobuf"; +export namespace simulation { + export enum OperationType { + Unknown = 0, + Pause = 1, + Unpause = 2, + Reset = 3, + SetSpeed = 4, + Destroy = 5 + } + export class Operation extends pb_1.Message { + #one_of_decls: number[][] = [[2]]; + constructor(data?: any[] | ({ + otype?: OperationType; + } & (({ + setSpeedParam?: SetSpeedParam; + })))) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("otype" in data && data.otype != undefined) { + this.otype = data.otype; + } + if ("setSpeedParam" in data && data.setSpeedParam != undefined) { + this.setSpeedParam = data.setSpeedParam; + } + } + } + get otype() { + return pb_1.Message.getFieldWithDefault(this, 1, OperationType.Unknown) as OperationType; + } + set otype(value: OperationType) { + pb_1.Message.setField(this, 1, value); + } + get setSpeedParam() { + return pb_1.Message.getWrapperField(this, SetSpeedParam, 2) as SetSpeedParam; + } + set setSpeedParam(value: SetSpeedParam) { + pb_1.Message.setOneofWrapperField(this, 2, this.#one_of_decls[0], value); + } + get has_setSpeedParam() { + return pb_1.Message.getField(this, 2) != null; + } + get param() { + const cases: { + [index: number]: "none" | "setSpeedParam"; + } = { + 0: "none", + 2: "setSpeedParam" + }; + return cases[pb_1.Message.computeOneofCase(this, [2])]; + } + static fromObject(data: { + otype?: OperationType; + setSpeedParam?: ReturnType; + }): Operation { + const message = new Operation({}); + if (data.otype != null) { + message.otype = data.otype; + } + if (data.setSpeedParam != null) { + message.setSpeedParam = SetSpeedParam.fromObject(data.setSpeedParam); + } + return message; + } + toObject() { + const data: { + otype?: OperationType; + setSpeedParam?: ReturnType; + } = {}; + if (this.otype != null) { + data.otype = this.otype; + } + if (this.setSpeedParam != null) { + data.setSpeedParam = this.setSpeedParam.toObject(); + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.otype != OperationType.Unknown) + writer.writeEnum(1, this.otype); + if (this.has_setSpeedParam) + writer.writeMessage(2, this.setSpeedParam, () => this.setSpeedParam.serialize(writer)); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Operation { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Operation(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + message.otype = reader.readEnum(); + break; + case 2: + reader.readMessage(message.setSpeedParam, () => message.setSpeedParam = SetSpeedParam.deserialize(reader)); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Operation { + return Operation.deserialize(bytes); + } + } + export class SetSpeedParam extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + speed?: number; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("speed" in data && data.speed != undefined) { + this.speed = data.speed; + } + } + } + get speed() { + return pb_1.Message.getFieldWithDefault(this, 1, 0) as number; + } + set speed(value: number) { + pb_1.Message.setField(this, 1, value); + } + static fromObject(data: { + speed?: number; + }): SetSpeedParam { + const message = new SetSpeedParam({}); + if (data.speed != null) { + message.speed = data.speed; + } + return message; + } + toObject() { + const data: { + speed?: number; + } = {}; + if (this.speed != null) { + data.speed = this.speed; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.speed != 0) + writer.writeFloat(1, this.speed); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SetSpeedParam { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new SetSpeedParam(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + message.speed = reader.readFloat(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): SetSpeedParam { + return SetSpeedParam.deserialize(bytes); + } + } +} diff --git a/src/router/routes.ts b/src/router/routes.ts index 8581e32..6ca18ed 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -3,18 +3,28 @@ import { RouteRecordRaw } from 'vue-router'; const routes: RouteRecordRaw[] = [ { path: '/', - redirect: '/home/b82f4bb0398b01263b6ef12764c6eb20', + name: 'home', + redirect: '/login', meta: { hidden: true, }, }, { - path: '/home/:token', - component: () => import('layouts/MainLayout.vue'), + path: '/login', + name: 'login', + component: () => import('pages/UserLogin.vue'), + meta: { + hidden: true, + }, + }, + + { + path: '/register', + name: 'register', + component: () => import('pages/UserRegister.vue'), meta: { hidden: true, }, - // children: [{ path: '', component: () => import('pages/IndexPage.vue') }], }, { @@ -39,8 +49,8 @@ const routes: RouteRecordRaw[] = [ }, { - path: '/dataManage', - name: 'dataManage', + path: '/iscsDataManage', + name: 'iscsDataManage', component: () => import('layouts/MainLayout.vue'), meta: { label: 'ISCS数据管理', @@ -76,6 +86,44 @@ const routes: RouteRecordRaw[] = [ }, ], }, + { + path: '/emDataManage', + name: 'emDataManage', + component: () => import('layouts/MainLayout.vue'), + meta: { + label: '电子地图数据管理', + icon: 'list_alt', + }, + children: [ + { + path: 'emDraft', + name: 'emDraft', + component: () => import('pages/ElectronicMapDraftManage.vue'), + meta: { + label: '草稿数据', + icon: 'app_registration', + }, + }, + { + path: 'emSharedDraft', + name: 'emSharedDraft', + component: () => import('pages/ElectronicMapDraftManage.vue'), + meta: { + label: '共享草稿数据', + icon: 'app_registration', + }, + }, + { + path: 'emPublish', + name: 'emPublish', + component: () => import('pages/ElectronicMapPublishManage.vue'), + meta: { + label: '发布数据', + icon: 'playlist_add_check', + }, + }, + ], + }, { path: '/iscsPainting/:id', name: 'iscsPainting', @@ -84,6 +132,14 @@ const routes: RouteRecordRaw[] = [ hidden: true, }, }, + { + path: '/emPainting/:id', + name: 'emPainting', + component: () => import('layouts/electronicMapDrawLayout.vue'), + meta: { + hidden: true, + }, + }, { path: '/:catchAll(.*)*', meta: { diff --git a/src/stores/draw-store.ts b/src/stores/draw-store.ts index adf467e..a158596 100644 --- a/src/stores/draw-store.ts +++ b/src/stores/draw-store.ts @@ -12,15 +12,13 @@ import { JlGraphic, } from 'jl-graphic'; import { markRaw } from 'vue'; -import { PictureType } from 'src/protos/picture'; export const useDrawStore = defineStore('draw', { state: () => ({ drawAssistant: null as DrawAssistant | null, selectedGraphics: null as JlGraphic[] | null, draftId: null as number | null, - drawPictureType: null as PictureType | null, - selectSubmenuAndStation: { submenu: '', station: '' }, + selectSubmenuAndStation: { submenu: '', station: '', partition: '' }, }), getters: { drawMode: (state) => state.drawAssistant != null, diff --git a/src/stores/electronicMap-draw-store.ts b/src/stores/electronicMap-draw-store.ts new file mode 100644 index 0000000..ba625e3 --- /dev/null +++ b/src/stores/electronicMap-draw-store.ts @@ -0,0 +1,107 @@ +import { defineStore } from 'pinia'; +import { + initElectronicMapDrawApp, + destroyElectronicMapDrawApp, + getElectronicMapDrawApp, +} from 'src/drawApp/electronicMapApp'; +import { + DrawAssistant, + GraphicData, + IDrawApp, + IJlCanvas, + JlGraphic, +} from 'jl-graphic'; +import { markRaw } from 'vue'; + +export const useDrawStore = defineStore('draw', { + state: () => ({ + drawAssistant: null as DrawAssistant | null, + selectedGraphics: null as JlGraphic[] | null, + draftId: null as number | null, + oneClickType: '', + }), + getters: { + drawMode: (state) => state.drawAssistant != null, + drawGraphicType: (state) => state.drawAssistant?.type, + drawGraphicName: (state) => state.drawAssistant?.description, + drawGraphicTemplate: (state) => state.drawAssistant?.graphicTemplate, + selectedGraphicType: (state) => { + if (state.selectedGraphics) { + if (state.selectedGraphics.length === 1) { + return state.selectedGraphics[0].type; + } + } + }, + selectedObjName(state): string { + if (state.selectedGraphics) { + if (state.selectedGraphics.length == 0) { + return '画布'; + } else if (state.selectedGraphics.length == 1) { + const name = getElectronicMapDrawApp()?.getDrawAssistant( + state.selectedGraphics[0].type + ).description; + return name || ''; + } + return '批量设置'; + } + return ''; + }, + selectedGraphic: (state) => { + if (state.selectedGraphics) { + if (state.selectedGraphics.length === 1) { + return state.selectedGraphics[0]; + } + } + return null; + }, + }, + actions: { + getDrawApp(): IDrawApp { + const app = getElectronicMapDrawApp(); + if (app == null) { + throw new Error('未初始化app'); + } + return app; + }, + getJlCanvas(): IJlCanvas { + return this.getDrawApp().canvas; + }, + bindFormData(form: GraphicData): void { + const app = this.getDrawApp(); + app.bindFormData(form); + }, + unbindFormData(form: GraphicData): void { + const app = this.getDrawApp(); + app.unbindFormData(form); + }, + initDrawApp() { + const app = initElectronicMapDrawApp(); + if (app == null) { + throw new Error('未初始化app'); + } + app.on('interaction-plugin-resume', (plugin) => { + if (plugin.isAppPlugin()) { + if (Object.hasOwn(plugin, '__GraphicDrawAssistant')) { + this.drawAssistant = plugin as DrawAssistant; + } else { + this.drawAssistant = null; + } + } + }); + app.on('graphicselected', (graphics) => { + this.selectedGraphics = markRaw(graphics); + }); + this.selectedGraphics = []; + return app; + }, + destroy() { + // console.log('绘制状态清空,绘制应用销毁'); + this.drawAssistant = null; + this.selectedGraphics = null; + destroyElectronicMapDrawApp(); + }, + setDraftId(id: number | null) { + this.draftId = id; + }, + }, +}); diff --git a/yarn.lock b/yarn.lock index 8e0a362..979fbcd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@babel/code-frame@^7.12.13": version "7.24.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: "@babel/highlight" "^7.24.7" @@ -12,17 +12,17 @@ "@babel/helper-string-parser@^7.24.8": version "7.24.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz" integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== "@babel/helper-validator-identifier@^7.24.7": version "7.24.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== "@babel/highlight@^7.24.7": version "7.24.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.24.7.tgz" integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: "@babel/helper-validator-identifier" "^7.24.7" @@ -32,47 +32,42 @@ "@babel/parser@^7.25.3": version "7.25.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.6.tgz" integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== dependencies: "@babel/types" "^7.25.6" "@babel/runtime@^7.23.8", "@babel/runtime@^7.24.5": version "7.25.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.25.6.tgz" integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== dependencies: regenerator-runtime "^0.14.0" "@babel/types@^7.25.6": version "7.25.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" + resolved "https://registry.npmmirror.com/@babel/types/-/types-7.25.6.tgz" integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== dependencies: "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" -"@esbuild/linux-loong64@0.14.54": - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" - integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== - "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.11.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" - integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== + version "4.11.0" + resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== "@eslint/eslintrc@^2.1.4": version "2.1.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" @@ -85,33 +80,33 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" - integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" - integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.3" + "@humanwhocodes/object-schema" "^2.0.2" debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.3": +"@humanwhocodes/object-schema@^2.0.2": version "2.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: "@jridgewell/set-array" "^1.2.1" @@ -120,17 +115,17 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": version "0.3.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz" integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -138,12 +133,12 @@ "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" - resolved "https://mirrors.huaweicloud.com/repository/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -151,20 +146,20 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -172,46 +167,46 @@ "@pixi/accessibility@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/accessibility/-/accessibility-7.4.2.tgz#8c7105bd19b979330baea36cc09f7c367975812e" + resolved "https://registry.npmmirror.com/@pixi/accessibility/-/accessibility-7.4.2.tgz" integrity sha512-R6VEolm8uyy1FB1F2qaLKxVbzXAFTZCF2ka8fl9lsz7We6ZfO4QpXv9ur7DvzratjCQUQVCKo0/V7xL5q1EV/g== "@pixi/app@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/app/-/app-7.4.2.tgz#f1d9c9c52ff1d4133766590fbda677a23658fec7" + resolved "https://registry.npmmirror.com/@pixi/app/-/app-7.4.2.tgz" integrity sha512-ugkH3kOgjT8P1mTMY29yCOgEh+KuVMAn8uBxeY0aMqaUgIMysfpnFv+Aepp2CtvI9ygr22NC+OiKl+u+eEaQHw== "@pixi/assets@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/assets/-/assets-7.4.2.tgz#1df0c38c4fb64c391202cea8768e81eaa42de221" + resolved "https://registry.npmmirror.com/@pixi/assets/-/assets-7.4.2.tgz" integrity sha512-anxho59H9egZwoaEdM5aLvYyxoz6NCy3CaQIvNHD1bbGg8L16Ih0e26QSBR5fu53jl8OjT6M7s+p6n7uu4+fGA== dependencies: "@types/css-font-loading-module" "^0.0.12" "@pixi/color@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/color/-/color-7.4.2.tgz#d564a0b589166afb1c4a0e85c968b7375dbfc06f" + resolved "https://registry.npmmirror.com/@pixi/color/-/color-7.4.2.tgz" integrity sha512-av1LOvhHsiaW8+T4n/FgnOKHby55/w7VcA1HzPIHRBtEcsmxvSCDanT1HU2LslNhrxLPzyVx18nlmalOyt5OBg== dependencies: "@pixi/colord" "^2.9.6" "@pixi/colord@^2.9.6": version "2.9.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/colord/-/colord-2.9.6.tgz#7e4e7851480da6fd3cef4e331f008d60be7e1204" + resolved "https://registry.npmmirror.com/@pixi/colord/-/colord-2.9.6.tgz" integrity sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA== "@pixi/compressed-textures@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/compressed-textures/-/compressed-textures-7.4.2.tgz#5c256d3a2071848e7503d499aae22684bbd69529" + resolved "https://registry.npmmirror.com/@pixi/compressed-textures/-/compressed-textures-7.4.2.tgz" integrity sha512-VJrt7el6O4ZJSWkeOGXwrhJaiLg1UBhHB3fj42VR4YloYkAxpfd9K6s6IcbcVz7n9L48APKBMgHyaB2pX2Ck/A== "@pixi/constants@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/constants/-/constants-7.4.2.tgz#e1b12316e1c637f3ebe80b599a707de4bdc4ab9b" + resolved "https://registry.npmmirror.com/@pixi/constants/-/constants-7.4.2.tgz" integrity sha512-N9vn6Wpz5WIQg7ugUg2+SdqD2u2+NM0QthE8YzLJ4tLH2Iz+/TrnPKUJzeyIqbg3sxJG5ZpGGPiacqIBpy1KyA== "@pixi/core@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/core/-/core-7.4.2.tgz#521de6fe99d48ffffef7e79d4dfde5c5055e8a13" + resolved "https://registry.npmmirror.com/@pixi/core/-/core-7.4.2.tgz" integrity sha512-UbMtgSEnyCOFPzbE6ThB9qopXxbZ5GCof2ArB4FXOC5Xi/83MOIIYg5kf5M8689C5HJMhg2SrJu3xLKppF+CMg== dependencies: "@pixi/color" "7.4.2" @@ -225,112 +220,112 @@ "@pixi/display@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/display/-/display-7.4.2.tgz#f0b7db822fba80cd2e8c28f6f489244360a578ba" + resolved "https://registry.npmmirror.com/@pixi/display/-/display-7.4.2.tgz" integrity sha512-DaD0J7gIlNlzO0Fdlby/0OH+tB5LtCY6rgFeCBKVDnzmn8wKW3zYZRenWBSFJ0Psx6vLqXYkSIM/rcokaKviIw== "@pixi/events@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/events/-/events-7.4.2.tgz#efd3361f7a78161aa0dffb484ea4ce3b7a0043c4" + resolved "https://registry.npmmirror.com/@pixi/events/-/events-7.4.2.tgz" integrity sha512-Jw/w57heZjzZShIXL0bxOvKB+XgGIevyezhGtfF2ZSzQoSBWo+Fj1uE0QwKd0RIaXegZw/DhSmiMJSbNmcjifA== "@pixi/extensions@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/extensions/-/extensions-7.4.2.tgz#4e939e3670ca66fdcd2590e8ab90a6a04a176dec" + resolved "https://registry.npmmirror.com/@pixi/extensions/-/extensions-7.4.2.tgz" integrity sha512-Hmx2+O0yZ8XIvgomHM9GZEGcy9S9Dd8flmtOK5Aa3fXs/8v7xD08+ANQpN9ZqWU2Xs+C6UBlpqlt2BWALvKKKA== "@pixi/extract@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/extract/-/extract-7.4.2.tgz#0e52446202bc8521ca9821a276e919020b0688f4" + resolved "https://registry.npmmirror.com/@pixi/extract/-/extract-7.4.2.tgz" integrity sha512-JOX27TRWjVEjauGBbF8PU7/g6LYXnivehdgqS5QlVDv1CNHTOrz/j3MdKcVWOhyZPbH5c9sh7lxyRxvd9AIuTQ== "@pixi/filter-alpha@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/filter-alpha/-/filter-alpha-7.4.2.tgz#0cd7bccadb91109cdb05679a17f8ba4d5281d0ec" + resolved "https://registry.npmmirror.com/@pixi/filter-alpha/-/filter-alpha-7.4.2.tgz" integrity sha512-9OsKJ+yvY2wIcQXwswj5HQBiwNGymwmqdxfp7mo+nZSBoDmxUqvMZzE9UNJ3eUlswuNvNRO8zNOsQvwdz7WFww== "@pixi/filter-blur@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/filter-blur/-/filter-blur-7.4.2.tgz#89458c467a553ec62ce799b4e68c6c574ba3a5bb" + resolved "https://registry.npmmirror.com/@pixi/filter-blur/-/filter-blur-7.4.2.tgz" integrity sha512-gOXBbIUx6CRZP1fmsis2wLzzSsofrqmIHhbf1gIkZMIQaLsc9T7brj+PaLTTiOiyJgnvGN5j20RZnkERWWKV0Q== "@pixi/filter-color-matrix@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/filter-color-matrix/-/filter-color-matrix-7.4.2.tgz#b792d6624a1b019edcc7f96e131078f8bc21c6d1" + resolved "https://registry.npmmirror.com/@pixi/filter-color-matrix/-/filter-color-matrix-7.4.2.tgz" integrity sha512-ykZiR59Gvj80UKs9qm7jeUTKvn+wWk6HBVJOmJbK9jFK5juakDWp7BbH26U78Q61EWj97kI1FdfcbMkuQ7rqkA== "@pixi/filter-displacement@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/filter-displacement/-/filter-displacement-7.4.2.tgz#e001f66c7f8bf02241c468cb33a01d21090ee09a" + resolved "https://registry.npmmirror.com/@pixi/filter-displacement/-/filter-displacement-7.4.2.tgz" integrity sha512-QS/eWp/ivsxef3xapNeGwpPX7vrqQQeo99Fux4k5zsvplnNEsf91t6QYJLG776AbZEu/qh8VYRBA5raIVY/REw== "@pixi/filter-fxaa@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/filter-fxaa/-/filter-fxaa-7.4.2.tgz#d11d6ee1fd098a8a6bee49b804d3b3ff087af1bf" + resolved "https://registry.npmmirror.com/@pixi/filter-fxaa/-/filter-fxaa-7.4.2.tgz" integrity sha512-U/ptJgDsfs/r8y2a6gCaiPfDu2IFAxpQ4wtfmBpz6vRhqeE4kI8yNIUx5dZbui57zlsJaW0BNacOQxHU0vLkyQ== "@pixi/filter-noise@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/filter-noise/-/filter-noise-7.4.2.tgz#99aebe14d0f52aaa8509e2531f1a4e658a702da9" + resolved "https://registry.npmmirror.com/@pixi/filter-noise/-/filter-noise-7.4.2.tgz" integrity sha512-Vy9ViBFhZEGh6xKkd3kFWErolZTwv1Y5Qb1bV7qPIYbvBECYsqzlR4uCrrjBV6KKm0PufpG/+NKC5vICZaqKzg== "@pixi/graphics-extras@^7.3.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/graphics-extras/-/graphics-extras-7.4.2.tgz#17ac16d1a021d870e31f9c18d2252a4312c05041" + resolved "https://registry.npmmirror.com/@pixi/graphics-extras/-/graphics-extras-7.4.2.tgz" integrity sha512-X4tHRIhbatT/kUQJ0PAquuo19eAK8S9NDbqxtHv9AWgYnDlhdvWFPqd16xkPvq8POadaRyLzfwwcYYeNWLQEig== "@pixi/graphics@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/graphics/-/graphics-7.4.2.tgz#b4fcc39f6a0af4c74d66b3d45b6728c33467bc78" + resolved "https://registry.npmmirror.com/@pixi/graphics/-/graphics-7.4.2.tgz" integrity sha512-jH4/Tum2RqWzHGzvlwEr7HIVduoLO57Ze705N2zQPkUD57TInn5911aGUeoua7f/wK8cTLGzgB9BzSo2kTdcHw== "@pixi/math@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/math/-/math-7.4.2.tgz#473b400c89ac8fcdf6e09259ab097ce35cd8ac68" + resolved "https://registry.npmmirror.com/@pixi/math/-/math-7.4.2.tgz" integrity sha512-7jHmCQoYk6e0rfSKjdNFOPl0wCcdgoraxgteXJTTHv3r0bMNx2pHD9FJ0VvocEUG7XHfj55O3+u7yItOAx0JaQ== "@pixi/mesh-extras@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/mesh-extras/-/mesh-extras-7.4.2.tgz#92eb4f41fd08907f6118dbfcb4b65fc5642d14d3" + resolved "https://registry.npmmirror.com/@pixi/mesh-extras/-/mesh-extras-7.4.2.tgz" integrity sha512-vNR/7wjxjs7sv9fGoKkHyU91ZAD+7EnMHBS5F3CVISlOIFxLi96NNZCB81oUIdky/90pHw40johd/4izR5zTyw== "@pixi/mesh@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/mesh/-/mesh-7.4.2.tgz#f2095eb8ec792a102c76f18838f75d860bd42dff" + resolved "https://registry.npmmirror.com/@pixi/mesh/-/mesh-7.4.2.tgz" integrity sha512-mEkKyQvvMrYXC3pahvH5WBIKtrtB63WixRr91ANFI7zXD+ESG6Ap6XtxMCJmXDQPwBDNk7SWVMiCflYuchG7kA== "@pixi/mixin-cache-as-bitmap@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-7.4.2.tgz#288f9700a2bbb524798cea86b06bd1be36f90659" + resolved "https://registry.npmmirror.com/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-7.4.2.tgz" integrity sha512-6dgthi2ruUT/lervSrFDQ7vXkEsHo6CxdgV7W/wNdW1dqgQlKfDvO6FhjXzyIMRLSooUf5FoeluVtfsjkUIYrw== "@pixi/mixin-get-child-by-name@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-7.4.2.tgz#d8671526637c09a87502466e27066049aebd240f" + resolved "https://registry.npmmirror.com/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-7.4.2.tgz" integrity sha512-0Cfw8JpQhsixprxiYph4Lj+B5n83Kk4ftNMXgM5xtZz+tVLz5s91qR0MqcdzwTGTJ7utVygiGmS4/3EfR/duRQ== "@pixi/mixin-get-global-position@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/mixin-get-global-position/-/mixin-get-global-position-7.4.2.tgz#9dcc9f49fa8001103ceadb1061efe03a71761952" + resolved "https://registry.npmmirror.com/@pixi/mixin-get-global-position/-/mixin-get-global-position-7.4.2.tgz" integrity sha512-LcsahbVdX4DFS2IcGfNp4KaXuu7SjAwUp/flZSGIfstyKOKb5FWFgihtqcc9ZT4coyri3gs2JbILZub/zPZj1w== "@pixi/particle-container@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/particle-container/-/particle-container-7.4.2.tgz#f829caaa724be10b7e0a04fca89a68f64e80012a" + resolved "https://registry.npmmirror.com/@pixi/particle-container/-/particle-container-7.4.2.tgz" integrity sha512-B78Qq86kt0lEa5WtB2YFIm3+PjhKfw9La9R++GBSgABl+g13s2UaZ6BIPxvY3JxWMdxPm4iPrQPFX1QWRN68mw== "@pixi/prepare@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/prepare/-/prepare-7.4.2.tgz#36fa8f5a044e6c4f46e7d2df1bef82dce7d40455" + resolved "https://registry.npmmirror.com/@pixi/prepare/-/prepare-7.4.2.tgz" integrity sha512-PugyMzReCHXUzc3so9PPJj2OdHwibpUNWyqG4mWY2UUkb6c8NAGK1AnAPiscOvLilJcv/XQSFoNhX+N1jrvJEg== "@pixi/runner@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/runner/-/runner-7.4.2.tgz#92b9748a2f85b9835bb36ce196a37215b8396392" + resolved "https://registry.npmmirror.com/@pixi/runner/-/runner-7.4.2.tgz" integrity sha512-LPBpwym4vdyyDY5ucF4INQccaGyxztERyLTY1YN6aqJyyMmnc7iqXlIKt+a0euMBtNoLoxy6MWMvIuZj0JfFPA== "@pixi/settings@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/settings/-/settings-7.4.2.tgz#36ebeec5f15bc9c538399e0692363be00a7bf28e" + resolved "https://registry.npmmirror.com/@pixi/settings/-/settings-7.4.2.tgz" integrity sha512-pMN+L6aWgvUbwhFIL/BTHKe2ShYGPZ8h9wlVBnFHMtUcJcFLMF1B3lzuvCayZRepOphs6RY0TqvnDvVb585JhQ== dependencies: "@pixi/constants" "7.4.2" @@ -339,51 +334,51 @@ "@pixi/sprite-animated@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/sprite-animated/-/sprite-animated-7.4.2.tgz#c28a3b2a8ee986517657ad5a1406fdddd610f56b" + resolved "https://registry.npmmirror.com/@pixi/sprite-animated/-/sprite-animated-7.4.2.tgz" integrity sha512-QPT6yxCUGOBN+98H3pyIZ1ZO6Y7BN1o0Q2IMZEsD1rNfZJrTYS3Q8VlCG5t2YlFlcB8j5iBo24bZb6FUxLOmsQ== "@pixi/sprite-tiling@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/sprite-tiling/-/sprite-tiling-7.4.2.tgz#ba6e3c596cb6dadb21795153058a900dcb1cfd2b" + resolved "https://registry.npmmirror.com/@pixi/sprite-tiling/-/sprite-tiling-7.4.2.tgz" integrity sha512-Z8PP6ewy3nuDYL+NeEdltHAhuucVgia33uzAitvH3OqqRSx6a6YRBFbNLUM9Sx+fBO2Lk3PpV1g6QZX+NE5LOg== "@pixi/sprite@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/sprite/-/sprite-7.4.2.tgz#beed8c2fd2e00a02e340eaba9844b180bf1f1b24" + resolved "https://registry.npmmirror.com/@pixi/sprite/-/sprite-7.4.2.tgz" integrity sha512-Ccf/OVQsB+HQV0Fyf5lwD+jk1jeU7uSIqEjbxenNNssmEdB7S5qlkTBV2EJTHT83+T6Z9OMOHsreJZerydpjeg== "@pixi/spritesheet@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/spritesheet/-/spritesheet-7.4.2.tgz#e95ee2814fdf41a0028530d3f942a2bdb75b5543" + resolved "https://registry.npmmirror.com/@pixi/spritesheet/-/spritesheet-7.4.2.tgz" integrity sha512-YIvHdpXW+AYp8vD0NkjJmrdnVHTZKidCnx6k8ATSuuvCT6O5Tuh2N/Ul2oDj4/QaePy0lVhyhAbZpJW00Jr7mQ== "@pixi/text-bitmap@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/text-bitmap/-/text-bitmap-7.4.2.tgz#0027f50025bbb13953c829200c99b5a6e212dee7" + resolved "https://registry.npmmirror.com/@pixi/text-bitmap/-/text-bitmap-7.4.2.tgz" integrity sha512-lPBMJ83JnpFVL+6ckQ8KO8QmwdPm0z9Zs/M0NgFKH2F+BcjelRNnk80NI3O0qBDYSEDQIE+cFbKoZ213kf7zwA== "@pixi/text-html@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/text-html/-/text-html-7.4.2.tgz#843e153d1f8c09fdf18c2527baa9f778061e94d3" + resolved "https://registry.npmmirror.com/@pixi/text-html/-/text-html-7.4.2.tgz" integrity sha512-duOu8oDYeDNuyPozj2DAsQ5VZBbRiwIXy78Gn7H2pCiEAefw/Uv5jJYwdgneKME0e1tOxz1eOUGKPcI6IJnZjw== "@pixi/text@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/text/-/text-7.4.2.tgz#ee9f54083ecbf5b07d4410ede0cd005a312d2e71" + resolved "https://registry.npmmirror.com/@pixi/text/-/text-7.4.2.tgz" integrity sha512-rZZWpJNsIQ8WoCWrcVg8Gi6L/PDakB941clo6dO3XjoII2ucoOUcnpe5HIkudxi2xPvS/8Bfq990gFEx50TP5A== "@pixi/ticker@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/ticker/-/ticker-7.4.2.tgz#804994ddd0c771bdf938c9eeb8ad5ed4a28c0374" + resolved "https://registry.npmmirror.com/@pixi/ticker/-/ticker-7.4.2.tgz" integrity sha512-cAvxCh/KI6IW4m3tp2b+GQIf+DoSj9NNmPJmsOeEJ7LzvruG8Ps7SKI6CdjQob5WbceL1apBTDbqZ/f77hFDiQ== dependencies: "@pixi/extensions" "7.4.2" "@pixi/settings" "7.4.2" "@pixi/utils" "7.4.2" -"@pixi/utils@7.4.2", "@pixi/utils@^7.3.2": +"@pixi/utils@^7.3.2", "@pixi/utils@7.4.2": version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/@pixi/utils/-/utils-7.4.2.tgz#bbbe60eec3d91fa294a0c3bb6410be6a85eaaadc" + resolved "https://registry.npmmirror.com/@pixi/utils/-/utils-7.4.2.tgz" integrity sha512-aU/itcyMC4TxFbmdngmak6ey4kC5c16Y5ntIYob9QnjNAfD/7GTsYIBnP6FqEAyO1eq0MjkAALxdONuay1BG3g== dependencies: "@pixi/color" "7.4.2" @@ -395,9 +390,9 @@ url "^0.11.0" "@quasar/app-vite@^1.9.0": - version "1.10.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@quasar/app-vite/-/app-vite-1.10.0.tgz#06cc410e23e7ab3ed0321ee3df6c37652a2af516" - integrity sha512-9zJfSBh1GtsmS1c3zIKa78gwPAMJoJ4AHv7KftkaaLQ4F1z2DpoqKbJG8YiXVR9STOronPAh+4JNypFP1RHFfQ== + version "1.9.5" + resolved "https://registry.npmmirror.com/@quasar/app-vite/-/app-vite-1.9.5.tgz" + integrity sha512-WO/S8Omav28BzV6BAOY9Gq5k/jmrIklZ+/rXtWqmW1OFIyyI9Gw62kGsVHgLQ0f1Jv1BNdaqWixD6fUcV+knTw== dependencies: "@quasar/render-ssr-error" "^1.0.3" "@quasar/vite-plugin" "^1.7.0" @@ -427,7 +422,7 @@ open "^8.4.0" register-service-worker "^1.7.2" rollup-plugin-visualizer "^5.5.4" - sass "^1.79.1" + sass "^1.33.0" semver "^7.3.5" serialize-javascript "^6.0.0" table "^6.8.0" @@ -436,37 +431,42 @@ "@quasar/extras@^1.16.4": version "1.16.12" - resolved "https://mirrors.huaweicloud.com/repository/npm/@quasar/extras/-/extras-1.16.12.tgz#2dac82eac8bb6b069a677d2817e479261d51f234" + resolved "https://registry.npmmirror.com/@quasar/extras/-/extras-1.16.12.tgz" integrity sha512-hLlb3Buxo38Xg/2w0BTkz98RBh/VH8apZ2r6Fl8YpPgrVQ0diHyN/BVTvIOk5Kch2y38L2kvwOIddsB2UcCuIg== "@quasar/render-ssr-error@^1.0.3": version "1.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/@quasar/render-ssr-error/-/render-ssr-error-1.0.3.tgz#33f27231007d1b222de41d3d70c29a6d14f9498a" + resolved "https://registry.npmmirror.com/@quasar/render-ssr-error/-/render-ssr-error-1.0.3.tgz" integrity sha512-A8RF99q6/sOSe1Ighnh5syEIbliD3qUYEJd2HyfFyBPSMF+WYGXon5dmzg4nUoK662NgOggInevkDyBDJcZugg== dependencies: stack-trace "^1.0.0-pre2" "@quasar/vite-plugin@^1.7.0": version "1.7.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@quasar/vite-plugin/-/vite-plugin-1.7.0.tgz#8873391ed7f69677948180f6eb14aa0821747478" + resolved "https://registry.npmmirror.com/@quasar/vite-plugin/-/vite-plugin-1.7.0.tgz" integrity sha512-ia4w1n4DuPYm92MQLPNpMqLJID1WGGRyVGxkVeg8V+V25Vh3p9QBo++iuXR4sW/bCmzzx66Ko6VStsr1zp90GQ== "@rollup/pluginutils@^4.1.2": version "4.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz" integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== dependencies: estree-walker "^2.0.1" picomatch "^2.2.2" +"@rollup/rollup-win32-x64-msvc@4.21.2": + version "4.21.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz" + integrity sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA== + "@stomp/stompjs@^7.0.0": version "7.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@stomp/stompjs/-/stompjs-7.0.0.tgz#46b5c454a9dc8262e0b20f3b3dbacaa113993077" + resolved "https://registry.npmmirror.com/@stomp/stompjs/-/stompjs-7.0.0.tgz" integrity sha512-fGdq4wPDnSV/KyOsjq4P+zLc8MFWC3lMmP5FBgLWKPJTYcuCbAIrnRGjB7q2jHZdYCOD5vxLuFoKIYLy5/u8Pw== "@types/body-parser@*": version "1.19.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz" integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" @@ -474,7 +474,7 @@ "@types/chrome@^0.0.208": version "0.0.208" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/chrome/-/chrome-0.0.208.tgz#c52992e46723c783d3fd84a8b90dd8b3e87af67f" + resolved "https://registry.npmmirror.com/@types/chrome/-/chrome-0.0.208.tgz" integrity sha512-VDU/JnXkF5qaI7WBz14Azpa2VseZTgML0ia/g/B1sr9OfdOnHiH/zZ7P7qCDqxSlkqJh76/bPc8jLFcx8rHJmw== dependencies: "@types/filesystem" "*" @@ -482,36 +482,41 @@ "@types/compression@^1.7.2": version "1.7.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/compression/-/compression-1.7.5.tgz#0f80efef6eb031be57b12221c4ba6bc3577808f7" + resolved "https://registry.npmmirror.com/@types/compression/-/compression-1.7.5.tgz" integrity sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg== dependencies: "@types/express" "*" "@types/connect@*": version "3.4.38" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + resolved "https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/cordova@0.0.34": version "0.0.34" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/cordova/-/cordova-0.0.34.tgz#ea7addf74ecec3d7629827a0c39e2c9addc73d04" + resolved "https://registry.npmmirror.com/@types/cordova/-/cordova-0.0.34.tgz" integrity sha512-rkiiTuf/z2wTd4RxFOb+clE7PF4AEJU0hsczbUdkHHBtkUmpWQpEddynNfJYKYtZFJKbq4F+brfekt1kx85IZA== "@types/css-font-loading-module@^0.0.12": version "0.0.12" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/css-font-loading-module/-/css-font-loading-module-0.0.12.tgz#65494833928823f998fbe8e86312821875d80db5" + resolved "https://registry.npmmirror.com/@types/css-font-loading-module/-/css-font-loading-module-0.0.12.tgz" integrity sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA== "@types/earcut@^2.1.0": version "2.1.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/earcut/-/earcut-2.1.4.tgz#5811d7d333048f5a7573b22ddc84923e69596da6" + resolved "https://registry.npmmirror.com/@types/earcut/-/earcut-2.1.4.tgz" integrity sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ== +"@types/estree@1.0.5": + version "1.0.5" + resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/express-serve-static-core@^4.17.33": version "4.19.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" + resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz" integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== dependencies: "@types/node" "*" @@ -521,7 +526,7 @@ "@types/express@*", "@types/express@^4.17.13": version "4.17.21" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + resolved "https://registry.npmmirror.com/@types/express/-/express-4.17.21.tgz" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" @@ -531,61 +536,54 @@ "@types/filesystem@*": version "0.0.36" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/filesystem/-/filesystem-0.0.36.tgz#7227c2d76bfed1b21819db310816c7821d303857" + resolved "https://registry.npmmirror.com/@types/filesystem/-/filesystem-0.0.36.tgz" integrity sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA== dependencies: "@types/filewriter" "*" "@types/filewriter@*": version "0.0.33" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/filewriter/-/filewriter-0.0.33.tgz#d9d611db9d9cd99ae4e458de420eeb64ad604ea8" + resolved "https://registry.npmmirror.com/@types/filewriter/-/filewriter-0.0.33.tgz" integrity sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g== "@types/google-protobuf@^3.15.6": version "3.15.12" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/google-protobuf/-/google-protobuf-3.15.12.tgz#eb2ba0eddd65712211a2b455dc6071d665ccf49b" + resolved "https://registry.npmmirror.com/@types/google-protobuf/-/google-protobuf-3.15.12.tgz" integrity sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ== "@types/har-format@*": version "1.2.15" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/har-format/-/har-format-1.2.15.tgz#f352493638c2f89d706438a19a9eb300b493b506" + resolved "https://registry.npmmirror.com/@types/har-format/-/har-format-1.2.15.tgz" integrity sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA== "@types/http-errors@*": version "2.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + resolved "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/mime@^1": version "1.3.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + resolved "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/node@*": - version "22.6.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/node/-/node-22.6.1.tgz#e531a45f4d78f14a8468cb9cdc29dc9602afc7ac" - integrity sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw== - dependencies: - undici-types "~6.19.2" - -"@types/node@^12.20.21": +"@types/node@*", "@types/node@^12.20.21": version "12.20.55" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + resolved "https://registry.npmmirror.com/@types/node/-/node-12.20.55.tgz" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/qs@*": - version "6.9.16" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794" - integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== + version "6.9.15" + resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.15.tgz" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== "@types/range-parser@*": version "1.2.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/readable-stream@^4.0.0", "@types/readable-stream@^4.0.5": version "4.0.15" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/readable-stream/-/readable-stream-4.0.15.tgz#e6ec26fe5b02f578c60baf1fa9452e90957d2bfb" + resolved "https://registry.npmmirror.com/@types/readable-stream/-/readable-stream-4.0.15.tgz" integrity sha512-oAZ3kw+kJFkEqyh7xORZOku1YAKvsFTogRY8kVl4vHpEKiDkfnSA/My8haRE7fvmix5Zyy+1pwzOi7yycGLBJw== dependencies: "@types/node" "*" @@ -593,7 +591,7 @@ "@types/send@*": version "0.17.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + resolved "https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz" integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" @@ -601,7 +599,7 @@ "@types/serve-static@*": version "1.15.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + resolved "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz" integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" @@ -610,14 +608,14 @@ "@types/ws@^8.5.9": version "8.5.12" - resolved "https://mirrors.huaweicloud.com/repository/npm/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.12.tgz" integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" "@typescript-eslint/eslint-plugin@^7.16.0": version "7.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz" integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== dependencies: "@eslint-community/regexpp" "^4.10.0" @@ -630,9 +628,9 @@ natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^7.16.0": +"@typescript-eslint/parser@^7.0.0", "@typescript-eslint/parser@^7.16.0": version "7.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-7.18.0.tgz" integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== dependencies: "@typescript-eslint/scope-manager" "7.18.0" @@ -643,7 +641,7 @@ "@typescript-eslint/scope-manager@7.18.0": version "7.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz" integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== dependencies: "@typescript-eslint/types" "7.18.0" @@ -651,7 +649,7 @@ "@typescript-eslint/type-utils@7.18.0": version "7.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz" integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== dependencies: "@typescript-eslint/typescript-estree" "7.18.0" @@ -661,12 +659,12 @@ "@typescript-eslint/types@7.18.0": version "7.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-7.18.0.tgz" integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== "@typescript-eslint/typescript-estree@7.18.0": version "7.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz" integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== dependencies: "@typescript-eslint/types" "7.18.0" @@ -680,7 +678,7 @@ "@typescript-eslint/utils@7.18.0": version "7.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-7.18.0.tgz" integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" @@ -690,7 +688,7 @@ "@typescript-eslint/visitor-keys@7.18.0": version "7.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz" integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== dependencies: "@typescript-eslint/types" "7.18.0" @@ -698,80 +696,80 @@ "@ungap/structured-clone@^1.2.0": version "1.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@vitejs/plugin-vue@^2.2.0": +"@vitejs/plugin-vue@^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "@vitejs/plugin-vue@^2.2.0": version "2.3.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz#966a6279060eb2d9d1a02ea1a331af071afdcf9e" + resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz" integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg== -"@volar/language-core@2.4.5", "@volar/language-core@~2.4.0-alpha.18": - version "2.4.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@volar/language-core/-/language-core-2.4.5.tgz#af8ba724b05fc4dce2339c49662e732e9c22c897" - integrity sha512-F4tA0DCO5Q1F5mScHmca0umsi2ufKULAnMOVBfMsZdT4myhVl4WdKRwCaKcfOkIEuyrAVvtq1ESBdZ+rSyLVww== +"@volar/language-core@~2.4.0-alpha.18", "@volar/language-core@2.4.4": + version "2.4.4" + resolved "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.4.tgz" + integrity sha512-kO9k4kTLfxpg+6lq7/KAIv3m2d62IHuCL6GbVgYZTpfKvIGoAIlDxK7pFcB/eczN2+ydg/vnyaeZ6SGyZrJw2w== dependencies: - "@volar/source-map" "2.4.5" + "@volar/source-map" "2.4.4" -"@volar/source-map@2.4.5": - version "2.4.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@volar/source-map/-/source-map-2.4.5.tgz#81223a06321aaa067b40619189b44a9f0b7ac2d8" - integrity sha512-varwD7RaKE2J/Z+Zu6j3mNNJbNT394qIxXwdvz/4ao/vxOfyClZpSDtLKkwWmecinkOVos5+PWkWraelfMLfpw== +"@volar/source-map@2.4.4": + version "2.4.4" + resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.4.tgz" + integrity sha512-xG3PZqOP2haG8XG4Pg3PD1UGDAdqZg24Ru8c/qYjYAnmcj6GBR64mstx+bZux5QOyRaJK+/lNM/RnpvBD3489g== "@volar/typescript@~2.4.0-alpha.18": - version "2.4.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/@volar/typescript/-/typescript-2.4.5.tgz#1210c1e8561ac20af46348ceaf8e6e96c797063f" - integrity sha512-mcT1mHvLljAEtHviVcBuOyAwwMKz1ibXTi5uYtP/pf4XxoAzpdkQ+Br2IC0NPCvLCbjPZmbf3I0udndkfB1CDg== + version "2.4.4" + resolved "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.4.tgz" + integrity sha512-QQMQRVj0fVHJ3XdRKiS1LclhG0VBXdFYlyuHRQF/xLk2PuJuHNWP26MDZNvEVCvnyUQuUQhIAfylwY5TGPgc6w== dependencies: - "@volar/language-core" "2.4.5" + "@volar/language-core" "2.4.4" path-browserify "^1.0.1" vscode-uri "^3.0.8" -"@vue/compiler-core@3.5.8": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/compiler-core/-/compiler-core-3.5.8.tgz#03ee4a2fa022c9bc3e59f789a1e14593b1e95b10" - integrity sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA== +"@vue/compiler-core@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.4.tgz" + integrity sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ== dependencies: "@babel/parser" "^7.25.3" - "@vue/shared" "3.5.8" + "@vue/shared" "3.5.4" entities "^4.5.0" estree-walker "^2.0.2" source-map-js "^1.2.0" -"@vue/compiler-dom@3.5.8", "@vue/compiler-dom@^3.4.0": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/compiler-dom/-/compiler-dom-3.5.8.tgz#03e4a6bef00a1979613a1db2ab39e9b2dced3373" - integrity sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg== +"@vue/compiler-dom@^3.4.0", "@vue/compiler-dom@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.4.tgz" + integrity sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw== dependencies: - "@vue/compiler-core" "3.5.8" - "@vue/shared" "3.5.8" + "@vue/compiler-core" "3.5.4" + "@vue/shared" "3.5.4" -"@vue/compiler-sfc@3.5.8": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/compiler-sfc/-/compiler-sfc-3.5.8.tgz#b2091ec01c63ab02a1cd6783224322f245c6a308" - integrity sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg== +"@vue/compiler-sfc@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.4.tgz" + integrity sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ== dependencies: "@babel/parser" "^7.25.3" - "@vue/compiler-core" "3.5.8" - "@vue/compiler-dom" "3.5.8" - "@vue/compiler-ssr" "3.5.8" - "@vue/shared" "3.5.8" + "@vue/compiler-core" "3.5.4" + "@vue/compiler-dom" "3.5.4" + "@vue/compiler-ssr" "3.5.4" + "@vue/shared" "3.5.4" estree-walker "^2.0.2" magic-string "^0.30.11" - postcss "^8.4.47" + postcss "^8.4.44" source-map-js "^1.2.0" -"@vue/compiler-ssr@3.5.8": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/compiler-ssr/-/compiler-ssr-3.5.8.tgz#fbad34f8bbed15aa6e7b9d78324d93af93403145" - integrity sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q== +"@vue/compiler-ssr@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.4.tgz" + integrity sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg== dependencies: - "@vue/compiler-dom" "3.5.8" - "@vue/shared" "3.5.8" + "@vue/compiler-dom" "3.5.4" + "@vue/shared" "3.5.4" "@vue/compiler-vue2@^2.7.16": version "2.7.16" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz#2ba837cbd3f1b33c2bc865fbe1a3b53fb611e249" + resolved "https://registry.npmmirror.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz" integrity sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A== dependencies: de-indent "^1.0.2" @@ -779,12 +777,12 @@ "@vue/devtools-api@^6.6.3", "@vue/devtools-api@^6.6.4": version "6.6.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343" + resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz" integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== "@vue/language-core@2.0.29": version "2.0.29" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/language-core/-/language-core-2.0.29.tgz#19462d786cd7a1c21dbe575b46970a57094e0357" + resolved "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.0.29.tgz" integrity sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ== dependencies: "@volar/language-core" "~2.4.0-alpha.18" @@ -796,54 +794,54 @@ muggle-string "^0.4.1" path-browserify "^1.0.1" -"@vue/reactivity@3.5.8": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/reactivity/-/reactivity-3.5.8.tgz#23e1bceceb9b94b136fa91f11b308e3f712dea6d" - integrity sha512-mlgUyFHLCUZcAYkqvzYnlBRCh0t5ZQfLYit7nukn1GR96gc48Bp4B7OIcSfVSvlG1k3BPfD+p22gi1t2n9tsXg== +"@vue/reactivity@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.4.tgz" + integrity sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw== dependencies: - "@vue/shared" "3.5.8" + "@vue/shared" "3.5.4" -"@vue/runtime-core@3.5.8": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/runtime-core/-/runtime-core-3.5.8.tgz#235251fa40dae61db7becacf6bda5bc6561cbbc5" - integrity sha512-fJuPelh64agZ8vKkZgp5iCkPaEqFJsYzxLk9vSC0X3G8ppknclNDr61gDc45yBGTaN5Xqc1qZWU3/NoaBMHcjQ== +"@vue/runtime-core@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.4.tgz" + integrity sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA== dependencies: - "@vue/reactivity" "3.5.8" - "@vue/shared" "3.5.8" + "@vue/reactivity" "3.5.4" + "@vue/shared" "3.5.4" -"@vue/runtime-dom@3.5.8": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/runtime-dom/-/runtime-dom-3.5.8.tgz#9d3a4f4a9a9a0002b085a5e18a2ca16c009cb3ad" - integrity sha512-DpAUz+PKjTZPUOB6zJgkxVI3GuYc2iWZiNeeHQUw53kdrparSTG6HeXUrYDjaam8dVsCdvQxDz6ZWxnyjccUjQ== +"@vue/runtime-dom@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.4.tgz" + integrity sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw== dependencies: - "@vue/reactivity" "3.5.8" - "@vue/runtime-core" "3.5.8" - "@vue/shared" "3.5.8" + "@vue/reactivity" "3.5.4" + "@vue/runtime-core" "3.5.4" + "@vue/shared" "3.5.4" csstype "^3.1.3" -"@vue/server-renderer@3.5.8": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/server-renderer/-/server-renderer-3.5.8.tgz#d6c292409e880db4151223c27fa0d1cd879cc239" - integrity sha512-7AmC9/mEeV9mmXNVyUIm1a1AjUhyeeGNbkLh39J00E7iPeGks8OGRB5blJiMmvqSh8SkaS7jkLWSpXtxUCeagA== +"@vue/server-renderer@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.4.tgz" + integrity sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g== dependencies: - "@vue/compiler-ssr" "3.5.8" - "@vue/shared" "3.5.8" + "@vue/compiler-ssr" "3.5.4" + "@vue/shared" "3.5.4" -"@vue/shared@3.5.8", "@vue/shared@^3.4.0": - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/@vue/shared/-/shared-3.5.8.tgz#6ef14933872dcc4f7b79fee3aaecf648ff807fed" - integrity sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A== +"@vue/shared@^3.4.0", "@vue/shared@3.5.4": + version "3.5.4" + resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.4.tgz" + integrity sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA== abort-controller@^3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -851,17 +849,17 @@ accepts@~1.3.5, accepts@~1.3.8: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.8.2, acorn@^8.9.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.8.2, acorn@^8.9.0: version "8.12.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== ajv@^6.12.4: version "6.12.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -871,7 +869,7 @@ ajv@^6.12.4: ajv@^8.0.1: version "8.17.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + resolved "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" @@ -881,33 +879,33 @@ ajv@^8.0.1: ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -915,7 +913,7 @@ anymatch@~3.1.2: archiver-utils@^2.1.0: version "2.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + resolved "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz" integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== dependencies: glob "^7.1.4" @@ -931,7 +929,7 @@ archiver-utils@^2.1.0: archiver-utils@^3.0.4: version "3.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/archiver-utils/-/archiver-utils-3.0.4.tgz#a0d201f1cf8fce7af3b5a05aea0a337329e96ec7" + resolved "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-3.0.4.tgz" integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw== dependencies: glob "^7.2.3" @@ -947,7 +945,7 @@ archiver-utils@^3.0.4: archiver@^5.3.0: version "5.3.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0" + resolved "https://registry.npmmirror.com/archiver/-/archiver-5.3.2.tgz" integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== dependencies: archiver-utils "^2.1.0" @@ -960,37 +958,37 @@ archiver@^5.3.0: argparse@^2.0.1: version "2.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-flatten@1.1.1: version "1.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-union@^2.1.0: version "2.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== astral-regex@^2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async@^3.2.4: version "3.2.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + resolved "https://registry.npmmirror.com/async/-/async-3.2.6.tgz" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== autoprefixer@^10.4.2: version "10.4.20" - resolved "https://mirrors.huaweicloud.com/repository/npm/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.20.tgz" integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: browserslist "^4.23.3" @@ -1002,7 +1000,7 @@ autoprefixer@^10.4.2: axios@^1.2.1: version "1.7.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" + resolved "https://registry.npmmirror.com/axios/-/axios-1.7.7.tgz" integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== dependencies: follow-redirects "^1.15.6" @@ -1011,22 +1009,22 @@ axios@^1.2.1: balanced-match@^1.0.0: version "1.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== binary-extensions@^2.0.0: version "2.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -1035,7 +1033,7 @@ bl@^4.0.3, bl@^4.1.0: bl@^6.0.8: version "6.0.15" - resolved "https://mirrors.huaweicloud.com/repository/npm/bl/-/bl-6.0.15.tgz#eeee4af50c6f16eb08fc5ddbca6f2d9f2ff12d78" + resolved "https://registry.npmmirror.com/bl/-/bl-6.0.15.tgz" integrity sha512-RGhjD1XCPS7ZdAH6cEJVaR3gLV4KJP2hvkQ49AH5kwScjiyd0jBM8RsP4oHKzcx+kNCON9752zPeRnuv0HHwzw== dependencies: "@types/readable-stream" "^4.0.0" @@ -1045,7 +1043,7 @@ bl@^6.0.8: body-parser@1.20.3: version "1.20.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz" integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" @@ -1063,12 +1061,12 @@ body-parser@1.20.3: boolbase@^1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://mirrors.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1076,21 +1074,21 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -browserslist@^4.23.3: +browserslist@^4.23.3, "browserslist@>= 4.21.0": version "4.23.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.3.tgz" integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: caniuse-lite "^1.0.30001646" @@ -1100,17 +1098,17 @@ browserslist@^4.23.3: buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: version "0.2.13" - resolved "https://mirrors.huaweicloud.com/repository/npm/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-from@^1.0.0: version "1.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.5.0: version "5.7.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -1118,7 +1116,7 @@ buffer@^5.5.0: buffer@^6.0.3: version "6.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -1126,17 +1124,17 @@ buffer@^6.0.3: bytes@3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== bytes@3.1.2: version "3.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.7: version "1.0.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: es-define-property "^1.0.0" @@ -1147,25 +1145,25 @@ call-bind@^1.0.7: callsites@^3.0.0: version "3.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" tslib "^2.0.3" caniuse-lite@^1.0.30001646: - version "1.0.30001663" - resolved "https://mirrors.huaweicloud.com/repository/npm/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz#1529a723505e429fdfd49532e9fc42273ba7fed7" - integrity sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA== + version "1.0.30001660" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz" + integrity sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg== chalk@^2.4.2: version "2.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1174,7 +1172,7 @@ chalk@^2.4.2: chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1182,12 +1180,12 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: chardet@^0.7.0: version "0.7.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^3.5.1, chokidar@^3.5.3: +chokidar@^3.5.1, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": version "3.6.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -1200,45 +1198,38 @@ chokidar@^3.5.1, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chokidar@^4.0.0: - version "4.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" - integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== - dependencies: - readdirp "^4.0.1" - ci-info@^3.7.1: version "3.9.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== clean-css@~5.3.2: version "5.3.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + resolved "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz" integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== dependencies: source-map "~0.6.0" cli-cursor@^3.1.0: version "3.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.5.0: version "2.9.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-width@^3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^8.0.1: version "8.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -1247,7 +1238,7 @@ cliui@^8.0.1: clone-deep@^4.0.1: version "4.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + resolved "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" @@ -1256,63 +1247,63 @@ clone-deep@^4.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== color-convert@^1.9.0: version "1.9.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + combined-stream@^1.0.8: version "1.0.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^10.0.0: version "10.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + resolved "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^2.20.0: version "2.20.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^8.0.0: version "8.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== commist@^3.2.0: version "3.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/commist/-/commist-3.2.0.tgz#da9c8e5f245ac21510badc4b10c46b5bcc9b56cd" + resolved "https://registry.npmmirror.com/commist/-/commist-3.2.0.tgz" integrity sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw== compress-commons@^4.1.2: version "4.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/compress-commons/-/compress-commons-4.1.2.tgz#6542e59cb63e1f46a8b21b0e06f9a32e4c8b06df" + resolved "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.2.tgz" integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg== dependencies: buffer-crc32 "^0.2.13" @@ -1322,14 +1313,14 @@ compress-commons@^4.1.2: compressible@~2.0.16: version "2.0.18" - resolved "https://mirrors.huaweicloud.com/repository/npm/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + resolved "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -1342,17 +1333,17 @@ compression@^1.7.4: computeds@^0.0.1: version "0.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" + resolved "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz" integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== concat-map@0.0.1: version "0.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== dependencies: buffer-from "^1.0.0" @@ -1362,39 +1353,39 @@ concat-stream@^2.0.0: content-disposition@0.5.4: version "0.5.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie-signature@1.0.6: version "1.0.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.6.0: version "0.6.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + resolved "https://registry.npmmirror.com/cookie/-/cookie-0.6.0.tgz" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== core-util-is@~1.0.0: version "1.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== crc-32@^1.2.0: version "1.2.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== crc32-stream@^4.0.2: version "4.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/crc32-stream/-/crc32-stream-4.0.3.tgz#85dd677eb78fa7cad1ba17cc506a597d41fc6f33" + resolved "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-4.0.3.tgz" integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw== dependencies: crc-32 "^1.2.0" @@ -1402,7 +1393,7 @@ crc32-stream@^4.0.2: cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1411,48 +1402,48 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: cssesc@^3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== csstype@^3.1.3: version "3.1.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== de-indent@^1.0.2: version "1.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@2.6.9: - version "2.6.9" - resolved "https://mirrors.huaweicloud.com/repository/npm/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + deep-is@^0.1.3: version "0.1.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defaults@^1.0.3: version "1.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" define-data-property@^1.1.4: version "1.1.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -1461,41 +1452,41 @@ define-data-property@^1.1.4: define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== delayed-stream@~1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== destroy@1.2.0: version "1.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== dir-glob@^3.0.1: version "3.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dot-case@^3.0.4: version "3.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" @@ -1503,280 +1494,85 @@ dot-case@^3.0.4: dot-prop@6.0.1: version "6.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-6.0.1.tgz" integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== dependencies: is-obj "^2.0.0" dotenv@^16.4.5: version "16.4.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + resolved "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.5.tgz" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== earcut@^2.2.4: version "2.2.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" + resolved "https://registry.npmmirror.com/earcut/-/earcut-2.2.4.tgz" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== ee-first@1.1.1: version "1.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.5.4: - version "1.5.27" - resolved "https://mirrors.huaweicloud.com/repository/npm/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz#5203ce5d6054857d84ba84d3681cbe59132ade78" - integrity sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw== + version "1.5.20" + resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.20.tgz" + integrity sha512-74mdl6Fs1HHzK9SUX4CKFxAtAe3nUns48y79TskHNAG6fGOlLfyKA4j855x+0b5u8rWJIrlaG9tcTPstMlwjIw== elementtree@0.1.7: version "0.1.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/elementtree/-/elementtree-0.1.7.tgz#9ac91be6e52fb6e6244c4e54a4ac3ed8ae8e29c0" + resolved "https://registry.npmmirror.com/elementtree/-/elementtree-0.1.7.tgz" integrity sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg== dependencies: sax "1.1.4" emoji-regex@^8.0.0: version "8.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== encodeurl@~1.0.2: version "1.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encodeurl@~2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== end-of-stream@^1.4.1: version "1.4.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" entities@^4.4.0, entities@^4.5.0: version "4.5.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== es-define-property@^1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz" integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== dependencies: get-intrinsic "^1.2.4" es-errors@^1.3.0: version "1.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -esbuild-android-64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" - integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== - -esbuild-android-64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" - integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== - -esbuild-android-arm64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" - integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== - -esbuild-android-arm64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" - integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== - -esbuild-darwin-64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" - integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== - -esbuild-darwin-64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" - integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== - -esbuild-darwin-arm64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" - integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== - -esbuild-darwin-arm64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" - integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== - -esbuild-freebsd-64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" - integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== - -esbuild-freebsd-64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" - integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== - -esbuild-freebsd-arm64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" - integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== - -esbuild-freebsd-arm64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" - integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== - -esbuild-linux-32@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" - integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== - -esbuild-linux-32@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" - integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== - -esbuild-linux-64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" - integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== - -esbuild-linux-64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" - integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== - -esbuild-linux-arm64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" - integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== - -esbuild-linux-arm64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" - integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== - -esbuild-linux-arm@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" - integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== - -esbuild-linux-arm@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" - integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== - -esbuild-linux-mips64le@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" - integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== - -esbuild-linux-mips64le@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" - integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== - -esbuild-linux-ppc64le@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" - integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== - -esbuild-linux-ppc64le@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" - integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== - -esbuild-linux-riscv64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" - integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== - -esbuild-linux-riscv64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" - integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== - -esbuild-linux-s390x@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" - integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== - -esbuild-linux-s390x@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" - integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== - -esbuild-netbsd-64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" - integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== - -esbuild-netbsd-64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" - integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== - -esbuild-openbsd-64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" - integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== - -esbuild-openbsd-64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" - integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== - -esbuild-sunos-64@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" - integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== - -esbuild-sunos-64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" - integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== - -esbuild-windows-32@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" - integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== - -esbuild-windows-32@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" - integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== - esbuild-windows-64@0.14.51: version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz#7d3c09c8652d222925625637bdc7e6c223e0085d" + resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz" integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== -esbuild-windows-64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" - integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== - -esbuild-windows-arm64@0.14.51: +esbuild@^0.14.27, esbuild@0.14.51: version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" - integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== - -esbuild-windows-arm64@0.14.54: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" - integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== - -esbuild@0.14.51: - version "0.14.51" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild/-/esbuild-0.14.51.tgz#1c8ecbc8db3710da03776211dc3ee3448f7aa51e" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.51.tgz" integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== optionalDependencies: esbuild-android-64 "0.14.51" @@ -1800,61 +1596,34 @@ esbuild@0.14.51: esbuild-windows-64 "0.14.51" esbuild-windows-arm64 "0.14.51" -esbuild@^0.14.27: - version "0.14.54" - resolved "https://mirrors.huaweicloud.com/repository/npm/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" - integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== - optionalDependencies: - "@esbuild/linux-loong64" "0.14.54" - esbuild-android-64 "0.14.54" - esbuild-android-arm64 "0.14.54" - esbuild-darwin-64 "0.14.54" - esbuild-darwin-arm64 "0.14.54" - esbuild-freebsd-64 "0.14.54" - esbuild-freebsd-arm64 "0.14.54" - esbuild-linux-32 "0.14.54" - esbuild-linux-64 "0.14.54" - esbuild-linux-arm "0.14.54" - esbuild-linux-arm64 "0.14.54" - esbuild-linux-mips64le "0.14.54" - esbuild-linux-ppc64le "0.14.54" - esbuild-linux-riscv64 "0.14.54" - esbuild-linux-s390x "0.14.54" - esbuild-netbsd-64 "0.14.54" - esbuild-openbsd-64 "0.14.54" - esbuild-sunos-64 "0.14.54" - esbuild-windows-32 "0.14.54" - esbuild-windows-64 "0.14.54" - esbuild-windows-arm64 "0.14.54" - escalade@^3.1.1, escalade@^3.1.2: version "3.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + resolved "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-prettier@^8.1.0: version "8.10.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + resolved "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz" integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-plugin-vue@^9.0.0: version "9.28.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz#e4412f0c1024bafd15ffeaa6f76f4c99152e2765" + resolved "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz" integrity sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g== dependencies: "@eslint-community/eslint-utils" "^4.4.0" @@ -1868,7 +1637,7 @@ eslint-plugin-vue@^9.0.0: eslint-scope@^7.1.1, eslint-scope@^7.2.2: version "7.2.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" @@ -1876,19 +1645,19 @@ eslint-scope@^7.1.1, eslint-scope@^7.2.2: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.57.0: - version "8.57.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" - integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", eslint@^8.11.0, eslint@^8.56.0, eslint@^8.57.0, eslint@>=6.0.0, eslint@>=7, eslint@>=7.0.0: + version "8.57.0" + resolved "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.1" - "@humanwhocodes/config-array" "^0.13.0" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -1925,7 +1694,7 @@ eslint@^8.57.0: espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: version "9.6.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + resolved "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" @@ -1934,56 +1703,56 @@ espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: esquery@^1.4.0, esquery@^1.4.2: version "1.6.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + resolved "https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz" integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== esutils@^2.0.2: version "2.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== eventemitter3@^4.0.0: version "4.0.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.3.0: version "3.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== express@^4.17.3: version "4.21.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/express/-/express-4.21.0.tgz#d57cb706d49623d4ac27833f1cbc466b668eb915" + resolved "https://registry.npmmirror.com/express/-/express-4.21.0.tgz" integrity sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng== dependencies: accepts "~1.3.8" @@ -2020,7 +1789,7 @@ express@^4.17.3: external-editor@^3.0.3: version "3.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -2029,12 +1798,12 @@ external-editor@^3.0.3: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@3.2.12: +fast-glob@^3.2.7, fast-glob@^3.2.9, fast-glob@3.2.12: version "3.2.12" - resolved "https://mirrors.huaweicloud.com/repository/npm/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2043,30 +1812,19 @@ fast-glob@3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.3.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-unique-numbers@^8.0.13: version "8.0.13" - resolved "https://mirrors.huaweicloud.com/repository/npm/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz#3c87232061ff5f408a216e1f0121232f76f695d7" + resolved "https://registry.npmmirror.com/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz" integrity sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g== dependencies: "@babel/runtime" "^7.23.8" @@ -2074,40 +1832,40 @@ fast-unique-numbers@^8.0.13: fast-uri@^3.0.1: version "3.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + resolved "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.1.tgz" integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== fastq@^1.6.0: version "1.17.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz" integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" figures@^3.0.0: version "3.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" fill-range@^7.1.1: version "7.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" finalhandler@1.3.1: version "1.3.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz" integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" @@ -2120,7 +1878,7 @@ finalhandler@1.3.1: find-up@^5.0.0: version "5.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2128,7 +1886,7 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz" integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" @@ -2137,22 +1895,22 @@ flat-cache@^3.0.4: flat@^5.0.2: version "5.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: version "3.3.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + resolved "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== follow-redirects@^1.15.6: version "1.15.9" - resolved "https://mirrors.huaweicloud.com/repository/npm/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== form-data@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -2161,27 +1919,27 @@ form-data@^4.0.0: forwarded@0.2.0: version "0.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fraction.js@^4.3.7: version "4.3.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fresh@0.5.2: version "0.5.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@^11.1.0: version "11.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz" integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" @@ -2190,27 +1948,22 @@ fs-extra@^11.1.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: - version "2.3.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: version "1.2.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: es-errors "^1.3.0" @@ -2221,21 +1974,21 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: version "7.2.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -2247,14 +2000,14 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: globals@^13.19.0, globals@^13.24.0: version "13.24.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" globby@^11.1.0: version "11.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -2266,73 +2019,73 @@ globby@^11.1.0: google-protobuf@^3.21.4: version "3.21.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9" + resolved "https://registry.npmmirror.com/google-protobuf/-/google-protobuf-3.21.4.tgz" integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ== gopd@^1.0.1: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" - resolved "https://mirrors.huaweicloud.com/repository/npm/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-flag@^3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.3.tgz" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.3: version "1.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== hasown@^2.0.0, hasown@^2.0.2: version "2.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" he@^1.2.0: version "1.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== help-me@^5.0.0: version "5.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/help-me/-/help-me-5.0.0.tgz#b1ebe63b967b74060027c2ac61f9be12d354a6f6" + resolved "https://registry.npmmirror.com/help-me/-/help-me-5.0.0.tgz" integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== html-minifier-terser@^7.2.0: version "7.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" + resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz" integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== dependencies: camel-case "^4.1.2" @@ -2345,7 +2098,7 @@ html-minifier-terser@^7.2.0: http-errors@2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -2354,31 +2107,31 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@^0.4.24, iconv-lite@0.4.24: version "0.4.24" - resolved "https://mirrors.huaweicloud.com/repository/npm/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immutable@^4.0.0: version "4.3.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz" integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== import-fresh@^3.2.1: version "3.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -2386,25 +2139,25 @@ import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inquirer@^8.2.1: version "8.2.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + resolved "https://registry.npmmirror.com/inquirer/-/inquirer-8.2.6.tgz" integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== dependencies: ansi-escapes "^4.2.1" @@ -2425,107 +2178,107 @@ inquirer@^8.2.1: ipaddr.js@1.9.1: version "1.9.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-core-module@^2.13.0: version "2.15.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.15.1.tgz" integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: hasown "^2.0.2" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-interactive@^1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-number@^7.0.0: version "7.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + resolved "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-object@^2.0.4: version "2.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-wsl@^2.2.0: version "2.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@~1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isbinaryfile@^5.0.0: version "5.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/isbinaryfile/-/isbinaryfile-5.0.2.tgz#fe6e4dfe2e34e947ffa240c113444876ba393ae0" + resolved "https://registry.npmmirror.com/isbinaryfile/-/isbinaryfile-5.0.2.tgz" integrity sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg== isexe@^2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== ismobilejs@^1.1.0: version "1.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/ismobilejs/-/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e" + resolved "https://registry.npmmirror.com/ismobilejs/-/ismobilejs-1.1.1.tgz" integrity sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw== isobject@^3.0.1: version "3.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== "jl-graphic@git+https://gitea.joylink.club/joylink/graphic-pixi.git#v0.1.19": @@ -2541,49 +2294,49 @@ isobject@^3.0.1: js-base64@^3.7.5: version "3.7.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + resolved "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.7.tgz" integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== js-sdsl@4.3.0: version "4.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + resolved "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.3.0.tgz" integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== js-tokens@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-buffer@3.0.1: version "3.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== jsonfile@^6.0.1: version "6.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -2592,31 +2345,31 @@ jsonfile@^6.0.1: keyv@^4.5.3: version "4.5.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" kind-of@^6.0.2: version "6.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kolorist@^1.5.1: version "1.8.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" + resolved "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz" integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== lazystream@^1.0.0: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + resolved "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz" integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== dependencies: readable-stream "^2.0.5" levn@^0.4.1: version "0.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -2624,54 +2377,54 @@ levn@^0.4.1: locate-path@^6.0.0: version "6.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.defaults@^4.2.0: version "4.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + resolved "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz" integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.difference@^4.5.0: version "4.5.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + resolved "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz" integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== lodash.flatten@^4.4.0: version "4.4.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + resolved "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz" integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + resolved "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.truncate@^4.4.2: version "4.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash.union@^4.6.0: version "4.6.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + resolved "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz" integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== lodash@^4.17.21: version "4.17.21" - resolved "https://mirrors.huaweicloud.com/repository/npm/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -2679,107 +2432,128 @@ log-symbols@^4.1.0: lower-case@^2.0.2: version "2.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lru-cache@^10.0.1: version "10.4.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== magic-string@^0.30.11: version "0.30.11" - resolved "https://mirrors.huaweicloud.com/repository/npm/magic-string/-/magic-string-0.30.11.tgz#301a6f93b3e8c2cb13ac1a7a673492c0dfd12954" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.11.tgz" integrity sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" media-typer@0.3.0: version "0.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== merge-descriptors@1.0.3: version "1.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz" integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^4.0.4: version "4.0.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - "mime-db@>= 1.43.0 < 2": version "1.53.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.53.0.tgz" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://mirrors.huaweicloud.com/repository/npm/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4: version "3.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.5: + version "3.1.2" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.1.0: version "5.1.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimatch@^9.0.3, minimatch@^9.0.4: version "9.0.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mqtt-packet@^9.0.0: version "9.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/mqtt-packet/-/mqtt-packet-9.0.0.tgz#fd841854d8c0f1f5211b00de388c4ced45b59216" + resolved "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-9.0.0.tgz" integrity sha512-8v+HkX+fwbodsWAZIZTI074XIoxVBOmPeggQuDFCGg1SqNcC+uoRMWu7J6QlJPqIUIJXmjNYYHxBBLr1Y/Df4w== dependencies: bl "^6.0.8" @@ -2788,7 +2562,7 @@ mqtt-packet@^9.0.0: mqtt@^5.2.1: version "5.10.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/mqtt/-/mqtt-5.10.1.tgz#d4f45ffdd825bad331c18f08796a744dabbe16de" + resolved "https://registry.npmmirror.com/mqtt/-/mqtt-5.10.1.tgz" integrity sha512-hXCOki8sANoQ7w+2OzJzg6qMBxTtrH9RlnVNV8panLZgnl+Gh0J/t4k6r8Az8+C7y3KAcyXtn0mmLixyUom8Sw== dependencies: "@types/readable-stream" "^4.0.5" @@ -2808,44 +2582,44 @@ mqtt@^5.2.1: worker-timers "^7.1.4" ws "^8.17.1" +ms@^2.1.3, ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.3, ms@^2.1.3: - version "2.1.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - muggle-string@^0.4.1: version "0.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" + resolved "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz" integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== mute-stream@0.0.8: version "0.0.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nanoid@^3.3.7: version "3.3.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== no-case@^3.0.4: version "3.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" @@ -2853,36 +2627,36 @@ no-case@^3.0.4: node-releases@^2.0.18: version "2.0.18" - resolved "https://mirrors.huaweicloud.com/repository/npm/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" nth-check@^2.1.1: version "2.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" number-allocator@^1.0.14: version "1.0.14" - resolved "https://mirrors.huaweicloud.com/repository/npm/number-allocator/-/number-allocator-1.0.14.tgz#1f2e32855498a7740dcc8c78bed54592d930ee4d" + resolved "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz" integrity sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA== dependencies: debug "^4.3.1" @@ -2890,47 +2664,47 @@ number-allocator@^1.0.14: object-inspect@^1.13.1: version "1.13.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.2.tgz" integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== on-finished@2.4.1: version "2.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.4.0: version "1.4.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0: version "5.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" open@^8.4.0: version "8.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + resolved "https://registry.npmmirror.com/open/-/open-8.4.2.tgz" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" is-wsl "^2.2.0" -optionator@^0.9.3: +optionator@^0.9.1, optionator@^0.9.3: version "0.9.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" @@ -2942,7 +2716,7 @@ optionator@^0.9.3: ora@^5.4.1: version "5.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -2957,26 +2731,26 @@ ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-limit@^3.0.2: version "3.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" param-case@^3.0.4: version "3.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -2984,19 +2758,19 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parseurl@~1.3.3: version "1.3.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.2: version "3.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" @@ -3004,52 +2778,52 @@ pascal-case@^3.1.2: path-browserify@^1.0.1: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + resolved "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== path-exists@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.10: version "0.1.10" - resolved "https://mirrors.huaweicloud.com/repository/npm/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" + resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz" integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== path-type@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: +picocolors@^1.0.0, picocolors@^1.0.1: version "1.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.0.tgz" integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pinia@^2.0.11: +pinia@^2.0.0, pinia@^2.0.11: version "2.2.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/pinia/-/pinia-2.2.2.tgz#dcf576c9a778187d1542c5e6a9f8b8cd5b6aea14" + resolved "https://registry.npmmirror.com/pinia/-/pinia-2.2.2.tgz" integrity sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA== dependencies: "@vue/devtools-api" "^6.6.3" @@ -3057,12 +2831,12 @@ pinia@^2.0.11: pixi-viewport@^5.0.1: version "5.0.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/pixi-viewport/-/pixi-viewport-5.0.3.tgz#75708195f5913f3df2acf36a88da8dd323aa607a" + resolved "https://registry.npmmirror.com/pixi-viewport/-/pixi-viewport-5.0.3.tgz" integrity sha512-DGG7cg2vUltAiL2fanzYPLR+L6qBeoskPfbUXxN6CYKW+fkni5cF9J1t2WBTmyBnC3kVq3ATFE2KDi7zy2FY8A== pixi.js@^7.3.2: version "7.4.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/pixi.js/-/pixi.js-7.4.2.tgz#d0378706f3db6df9e3f8917e22be04a99559995c" + resolved "https://registry.npmmirror.com/pixi.js/-/pixi.js-7.4.2.tgz" integrity sha512-TifqgHGNofO7UCEbdZJOpUu7dUnpu4YZ0o76kfCqxDa4RS8ITc9zjECCbtalmuNXkVhSEZmBKQvE7qhHMqw/xg== dependencies: "@pixi/accessibility" "7.4.2" @@ -3098,7 +2872,7 @@ pixi.js@^7.3.2: postcss-selector-parser@^6.0.15: version "6.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" @@ -3106,41 +2880,41 @@ postcss-selector-parser@^6.0.15: postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.13, postcss@^8.4.47: - version "8.4.47" - resolved "https://mirrors.huaweicloud.com/repository/npm/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== +postcss@^8.1.0, postcss@^8.4.13, postcss@^8.4.44: + version "8.4.45" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.45.tgz" + integrity sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q== dependencies: nanoid "^3.3.7" - picocolors "^1.1.0" - source-map-js "^1.2.1" + picocolors "^1.0.1" + source-map-js "^1.2.0" prelude-ls@^1.2.1: version "1.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@^2.5.1: version "2.8.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== process-nextick-args@^2.0.1, process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@^0.11.10: version "0.11.10" - resolved "https://mirrors.huaweicloud.com/repository/npm/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.npmmirror.com/process/-/process-0.11.10.tgz" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== proxy-addr@~2.0.7: version "2.0.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -3148,51 +2922,51 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== punycode@^1.4.1: version "1.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + resolved "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: version "2.3.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@6.13.0, qs@^6.12.3: +qs@^6.12.3, qs@6.13.0: version "6.13.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + resolved "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" quasar@^2.16.0: - version "2.17.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/quasar/-/quasar-2.17.0.tgz#af92f90e8d6571479745eeb6bed20b1e0a40e789" - integrity sha512-xFWwCt4FGuaC0M4/MA5drjBiCP7kj/5BsUPv2+dDIlyQG9YGvKIewCnWYYt02r4ijRqJSzPb7TsH89Gzkno1Mg== + version "2.16.11" + resolved "https://registry.npmmirror.com/quasar/-/quasar-2.16.11.tgz" + integrity sha512-64C03WzZTRlJFvn0xNG3xmq/4R97lqbZAbzNE19ObNeYSUbJzQ8xi4ft5YQDRfTTIJ7RxB3pNye/dOSb11qoxQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== randombytes@^2.1.0: version "2.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@~1.2.1: version "1.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2: version "2.5.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -3200,9 +2974,22 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.5: +readable-stream@^2.0.0: version "2.3.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^2.0.5: + version "2.3.8" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -3215,16 +3002,27 @@ readable-stream@^2.0.0, readable-stream@^2.0.5: readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^4.2.0, readable-stream@^4.4.2: +readable-stream@^4.2.0: version "4.5.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.5.2.tgz" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readable-stream@^4.4.2: + version "4.5.2" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.5.2.tgz" integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== dependencies: abort-controller "^3.0.0" @@ -3235,61 +3033,56 @@ readable-stream@^4.2.0, readable-stream@^4.4.2: readdir-glob@^1.1.2: version "1.1.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + resolved "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz" integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== dependencies: minimatch "^5.1.0" -readdirp@^4.0.1: - version "4.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/readdirp/-/readdirp-4.0.1.tgz#b2fe35f8dca63183cd3b86883ecc8f720ea96ae6" - integrity sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw== - readdirp@~3.6.0: version "3.6.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" regenerator-runtime@^0.14.0: version "0.14.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== register-service-worker@^1.7.2: version "1.7.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/register-service-worker/-/register-service-worker-1.7.2.tgz#6516983e1ef790a98c4225af1216bc80941a4bd2" + resolved "https://registry.npmmirror.com/register-service-worker/-/register-service-worker-1.7.2.tgz" integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A== reinterval@^1.1.0: version "1.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7" + resolved "https://registry.npmmirror.com/reinterval/-/reinterval-1.1.0.tgz" integrity sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ== relateurl@^0.2.7: version "0.2.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== require-directory@^2.1.1: version "2.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-from@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.22.0: version "1.22.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" @@ -3298,7 +3091,7 @@ resolve@^1.22.0: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -3306,24 +3099,24 @@ restore-cursor@^3.1.0: reusify@^1.0.4: version "1.0.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: version "1.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz" integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rimraf@^3.0.2: version "3.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rollup-plugin-visualizer@^5.5.4: version "5.12.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302" + resolved "https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz" integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ== dependencies: open "^8.4.0" @@ -3333,67 +3126,97 @@ rollup-plugin-visualizer@^5.5.4: "rollup@>=2.59.0 <2.78.0": version "2.77.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12" + resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.3.tgz" integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== optionalDependencies: fsevents "~2.3.2" +"rollup@2.x || 3.x || 4.x": + version "4.21.2" + resolved "https://registry.npmmirror.com/rollup/-/rollup-4.21.2.tgz" + integrity sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.21.2" + "@rollup/rollup-android-arm64" "4.21.2" + "@rollup/rollup-darwin-arm64" "4.21.2" + "@rollup/rollup-darwin-x64" "4.21.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.21.2" + "@rollup/rollup-linux-arm-musleabihf" "4.21.2" + "@rollup/rollup-linux-arm64-gnu" "4.21.2" + "@rollup/rollup-linux-arm64-musl" "4.21.2" + "@rollup/rollup-linux-powerpc64le-gnu" "4.21.2" + "@rollup/rollup-linux-riscv64-gnu" "4.21.2" + "@rollup/rollup-linux-s390x-gnu" "4.21.2" + "@rollup/rollup-linux-x64-gnu" "4.21.2" + "@rollup/rollup-linux-x64-musl" "4.21.2" + "@rollup/rollup-win32-arm64-msvc" "4.21.2" + "@rollup/rollup-win32-ia32-msvc" "4.21.2" + "@rollup/rollup-win32-x64-msvc" "4.21.2" + fsevents "~2.3.2" + run-async@^2.4.0: version "2.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^7.5.5: version "7.8.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: version "5.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@~5.2.0: version "5.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@^1.79.1: - version "1.79.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/sass/-/sass-1.79.3.tgz#7811b000eb68195fe51dea89177e73e7ef7f546f" - integrity sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA== +sass@*, sass@^1.33.0: + version "1.78.0" + resolved "https://registry.npmmirror.com/sass/-/sass-1.78.0.tgz" + integrity sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ== dependencies: - chokidar "^4.0.0" + chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" sax@1.1.4: version "1.1.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/sax/-/sax-1.1.4.tgz#74b6d33c9ae1e001510f179a91168588f1aedaa9" + resolved "https://registry.npmmirror.com/sax/-/sax-1.1.4.tgz" integrity sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg== semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: version "7.6.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + resolved "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== send@0.19.0: version "0.19.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + resolved "https://registry.npmmirror.com/send/-/send-0.19.0.tgz" integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" @@ -3412,14 +3235,14 @@ send@0.19.0: serialize-javascript@^6.0.0: version "6.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" serve-static@1.16.2: version "1.16.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz" integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: encodeurl "~2.0.0" @@ -3429,7 +3252,7 @@ serve-static@1.16.2: set-function-length@^1.2.1: version "1.2.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -3441,31 +3264,31 @@ set-function-length@^1.2.1: setprototypeof@1.2.0: version "1.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + resolved "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shebang-command@^2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.6: version "1.0.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: call-bind "^1.0.7" @@ -3475,31 +3298,31 @@ side-channel@^1.0.6: signal-exit@^3.0.2: version "3.0.7" - resolved "https://mirrors.huaweicloud.com/repository/npm/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== slash@^3.0.0: version "3.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0, source-map-js@^1.2.1: +source-map-js@^1.2.0, "source-map-js@>=0.6.2 <2.0.0": version "1.2.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-support@~0.5.20: version "0.5.21" - resolved "https://mirrors.huaweicloud.com/repository/npm/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -3507,86 +3330,86 @@ source-map-support@~0.5.20: source-map@^0.6.0, source-map@~0.6.0: version "0.6.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.4: version "0.7.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== split2@^4.2.0: version "4.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + resolved "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== stack-trace@^1.0.0-pre2: version "1.0.0-pre2" - resolved "https://mirrors.huaweicloud.com/repository/npm/stack-trace/-/stack-trace-1.0.0-pre2.tgz#46a83a79f1b287807e9aaafc6a5dd8bcde626f9c" + resolved "https://registry.npmmirror.com/stack-trace/-/stack-trace-1.0.0-pre2.tgz" integrity sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A== statuses@2.0.1: version "2.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^5.3.0: version "5.5.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== table@^6.8.0: version "6.8.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + resolved "https://registry.npmmirror.com/table/-/table-6.8.2.tgz" integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== dependencies: ajv "^8.0.1" @@ -3597,7 +3420,7 @@ table@^6.8.0: tar-stream@^2.2.0: version "2.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -3607,9 +3430,9 @@ tar-stream@^2.2.0: readable-stream "^3.1.1" terser@^5.15.1: - version "5.33.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/terser/-/terser-5.33.0.tgz#8f9149538c7468ffcb1246cfec603c16720d2db1" - integrity sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g== + version "5.32.0" + resolved "https://registry.npmmirror.com/terser/-/terser-5.32.0.tgz" + integrity sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -3618,73 +3441,78 @@ terser@^5.15.1: text-table@^0.2.0: version "0.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through@^2.3.6: version "2.3.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tiny-invariant@^1.1.0: version "1.3.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + resolved "https://registry.npmmirror.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== tmp@^0.0.33: version "0.0.33" - resolved "https://mirrors.huaweicloud.com/repository/npm/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== ts-api-utils@^1.3.0: version "1.3.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +ts-md5@^1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/ts-md5/-/ts-md5-1.3.1.tgz" + integrity sha512-DiwiXfwvcTeZ5wCE0z+2A9EseZsztaiZtGrtSaY5JOD7ekPnR/GoIVD5gXZAlK9Na9Kvpo9Waz5rW64WKAWApg== + tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.2: version "2.7.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.7.0.tgz" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-is@~1.6.18: version "1.6.18" - resolved "https://mirrors.huaweicloud.com/repository/npm/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -3692,32 +3520,27 @@ type-is@~1.6.18: typedarray@^0.0.6: version "0.0.6" - resolved "https://mirrors.huaweicloud.com/repository/npm/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + resolved "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@~5.5.4: +typescript@*, typescript@>=4.2.0, typescript@>=4.4.4, typescript@>=5.0.0, typescript@~5.5.4: version "5.5.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + resolved "https://registry.npmmirror.com/typescript/-/typescript-5.5.4.tgz" integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== -undici-types@~6.19.2: - version "6.19.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - universalify@^2.0.0: version "2.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== update-browserslist-db@^1.1.0: version "1.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz" integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: escalade "^3.1.2" @@ -3725,14 +3548,14 @@ update-browserslist-db@^1.1.0: uri-js@^4.2.2: version "4.4.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url@^0.11.0: version "0.11.4" - resolved "https://mirrors.huaweicloud.com/repository/npm/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" + resolved "https://registry.npmmirror.com/url/-/url-0.11.4.tgz" integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== dependencies: punycode "^1.4.1" @@ -3740,22 +3563,22 @@ url@^0.11.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== vary@~1.1.2: version "1.1.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vite-plugin-checker@^0.7.2: version "0.7.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/vite-plugin-checker/-/vite-plugin-checker-0.7.2.tgz#093ffdf9ccf51b2c9eab7101480bd0217ae99536" + resolved "https://registry.npmmirror.com/vite-plugin-checker/-/vite-plugin-checker-0.7.2.tgz" integrity sha512-xeYeJbG0gaCaT0QcUC4B2Zo4y5NR8ZhYenc5gPbttrZvraRFwkEADCYwq+BfEHl9zYz7yf85TxsiGoYwyyIjhw== dependencies: "@babel/code-frame" "^7.12.13" @@ -3773,9 +3596,9 @@ vite-plugin-checker@^0.7.2: vscode-languageserver-textdocument "^1.0.1" vscode-uri "^3.0.2" -vite@^2.9.13: +"vite@^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", vite@^2.5.10, vite@^2.9.13, vite@>=2.0.0: version "2.9.18" - resolved "https://mirrors.huaweicloud.com/repository/npm/vite/-/vite-2.9.18.tgz#74e2a83b29da81e602dac4c293312cc575f091c7" + resolved "https://registry.npmmirror.com/vite/-/vite-2.9.18.tgz" integrity sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ== dependencies: esbuild "^0.14.27" @@ -3787,12 +3610,12 @@ vite@^2.9.13: vscode-jsonrpc@6.0.0: version "6.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" + resolved "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz" integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== vscode-languageclient@^7.0.0: version "7.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2" + resolved "https://registry.npmmirror.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz" integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg== dependencies: minimatch "^3.0.4" @@ -3801,7 +3624,7 @@ vscode-languageclient@^7.0.0: vscode-languageserver-protocol@3.16.0: version "3.16.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" + resolved "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz" integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== dependencies: vscode-jsonrpc "6.0.0" @@ -3809,34 +3632,34 @@ vscode-languageserver-protocol@3.16.0: vscode-languageserver-textdocument@^1.0.1: version "1.0.12" - resolved "https://mirrors.huaweicloud.com/repository/npm/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz#457ee04271ab38998a093c68c2342f53f6e4a631" + resolved "https://registry.npmmirror.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz" integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA== vscode-languageserver-types@3.16.0: version "3.16.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + resolved "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz" integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== vscode-languageserver@^7.0.0: version "7.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" + resolved "https://registry.npmmirror.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz" integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== dependencies: vscode-languageserver-protocol "3.16.0" vscode-uri@^3.0.2, vscode-uri@^3.0.8: version "3.0.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" + resolved "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.8.tgz" integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== vue-demi@^0.14.10: version "0.14.10" - resolved "https://mirrors.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.10.tgz#afc78de3d6f9e11bf78c55e8510ee12814522f04" + resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz" integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg== vue-eslint-parser@^9.4.3: version "9.4.3" - resolved "https://mirrors.huaweicloud.com/repository/npm/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz#9b04b22c71401f1e8bca9be7c3e3416a4bde76a8" + resolved "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz" integrity sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg== dependencies: debug "^4.3.4" @@ -3848,42 +3671,42 @@ vue-eslint-parser@^9.4.3: semver "^7.3.6" vue-router@^4.0.12: - version "4.4.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/vue-router/-/vue-router-4.4.5.tgz#bdf535e4cf32414ebdea6b4b403593efdb541388" - integrity sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q== + version "4.4.4" + resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.4.4.tgz" + integrity sha512-3MlnDqwRwZwCQVbtVfpsU+nrNymNjnXSsQtXName5925NVC1+326VVfYH9vSrA0N13teGEo8z5x7gbRnGjCDiQ== dependencies: "@vue/devtools-api" "^6.6.4" -vue-tsc@2.0.29: +vue-tsc@>=2.0.0, vue-tsc@2.0.29: version "2.0.29" - resolved "https://mirrors.huaweicloud.com/repository/npm/vue-tsc/-/vue-tsc-2.0.29.tgz#bf7e9605af9fadec7fd6037d242217f5c6ad2c3b" + resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.0.29.tgz" integrity sha512-MHhsfyxO3mYShZCGYNziSbc63x7cQ5g9kvijV7dRe1TTXBRLxXyL0FnXWpUF1xII2mJ86mwYpYsUmMwkmerq7Q== dependencies: "@volar/typescript" "~2.4.0-alpha.18" "@vue/language-core" "2.0.29" semver "^7.5.4" -vue@^3.4.18: - version "3.5.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/vue/-/vue-3.5.8.tgz#7d2fa98ea85228dcb90f897ef5df74df1d5825a1" - integrity sha512-hvuvuCy51nP/1fSRvrrIqTLSvrSyz2Pq+KQ8S8SXCxTWVE0nMaOnSDnSOxV1eYmGfvK7mqiwvd1C59CEEz7dAQ== +"vue@^2.6.14 || ^3.3.0", vue@^3.0.0, "vue@^3.0.0-0 || ^2.6.0", vue@^3.2.0, vue@^3.2.25, vue@^3.2.29, vue@^3.4.18, vue@3.5.4: + version "3.5.4" + resolved "https://registry.npmmirror.com/vue/-/vue-3.5.4.tgz" + integrity sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg== dependencies: - "@vue/compiler-dom" "3.5.8" - "@vue/compiler-sfc" "3.5.8" - "@vue/runtime-dom" "3.5.8" - "@vue/server-renderer" "3.5.8" - "@vue/shared" "3.5.8" + "@vue/compiler-dom" "3.5.4" + "@vue/compiler-sfc" "3.5.4" + "@vue/runtime-dom" "3.5.4" + "@vue/server-renderer" "3.5.4" + "@vue/shared" "3.5.4" wcwidth@^1.0.1: version "1.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webpack-merge@^5.8.0: version "5.10.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + resolved "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz" integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: clone-deep "^4.0.1" @@ -3892,24 +3715,24 @@ webpack-merge@^5.8.0: which@^2.0.1: version "2.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wildcard@^2.0.0: version "2.0.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + resolved "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== word-wrap@^1.2.5: version "1.2.5" - resolved "https://mirrors.huaweicloud.com/repository/npm/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== worker-timers-broker@^6.1.8: version "6.1.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz#08f64e5931b77fadc55f0c7388c077a7dd17e4c7" + resolved "https://registry.npmmirror.com/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz" integrity sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ== dependencies: "@babel/runtime" "^7.24.5" @@ -3919,7 +3742,7 @@ worker-timers-broker@^6.1.8: worker-timers-worker@^7.0.71: version "7.0.71" - resolved "https://mirrors.huaweicloud.com/repository/npm/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz#f96138bafbcfaabea116603ce23956e05e76db6a" + resolved "https://registry.npmmirror.com/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz" integrity sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ== dependencies: "@babel/runtime" "^7.24.5" @@ -3927,7 +3750,7 @@ worker-timers-worker@^7.0.71: worker-timers@^7.1.4: version "7.1.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/worker-timers/-/worker-timers-7.1.8.tgz#f53072c396ac4264fd3027914f4ab793c92d90be" + resolved "https://registry.npmmirror.com/worker-timers/-/worker-timers-7.1.8.tgz" integrity sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw== dependencies: "@babel/runtime" "^7.24.5" @@ -3937,7 +3760,7 @@ worker-timers@^7.1.4: wrap-ansi@^6.0.1: version "6.2.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -3946,7 +3769,7 @@ wrap-ansi@^6.0.1: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -3955,32 +3778,32 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^8.17.1: version "8.18.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + resolved "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== xml-name-validator@^4.0.0: version "4.0.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== y18n@^5.0.5: version "5.0.8" - resolved "https://mirrors.huaweicloud.com/repository/npm/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.5.1: version "17.7.2" - resolved "https://mirrors.huaweicloud.com/repository/npm/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -3993,12 +3816,12 @@ yargs@^17.5.1: yocto-queue@^0.1.0: version "0.1.0" - resolved "https://mirrors.huaweicloud.com/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zip-stream@^4.1.0: version "4.1.1" - resolved "https://mirrors.huaweicloud.com/repository/npm/zip-stream/-/zip-stream-4.1.1.tgz#1337fe974dbaffd2fa9a1ba09662a66932bd7135" + resolved "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz" integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ== dependencies: archiver-utils "^3.0.4"