From 19acf4edb8523e696ae82160b8536db161956655 Mon Sep 17 00:00:00 2001 From: liaoboping <344114999@qq.com> Date: Wed, 17 Sep 2025 16:56:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=8E=A7=E5=88=B6=E5=AD=90?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 3 +- .env.production | 1 - public/config.js | 2 + src/assets/images/control/u155.png | Bin 0 -> 1547 bytes src/assets/images/control/u157.png | Bin 0 -> 944 bytes src/assets/images/control/u159.png | Bin 0 -> 914 bytes src/assets/images/control/u161.png | Bin 0 -> 1116 bytes src/assets/images/control/u163.png | Bin 0 -> 838 bytes .../Common/Layout/ModuleWrapper.vue | 2 +- src/components/Common/Websocket/index.js | 2 +- src/config/router.config.js | 48 ++- src/views/subsystem/control/index.vue | 382 ++++++++++++++++++ src/views/subsystem/index.vue | 26 ++ src/views/user/Welcome.vue | 37 +- 14 files changed, 481 insertions(+), 22 deletions(-) create mode 100644 src/assets/images/control/u155.png create mode 100644 src/assets/images/control/u157.png create mode 100644 src/assets/images/control/u159.png create mode 100644 src/assets/images/control/u161.png create mode 100644 src/assets/images/control/u163.png create mode 100644 src/views/subsystem/control/index.vue create mode 100644 src/views/subsystem/index.vue diff --git a/.env.development b/.env.development index e775b57..37cff62 100644 --- a/.env.development +++ b/.env.development @@ -2,5 +2,4 @@ NODE_ENV=development VUE_APP_PREVIEW=true VUE_APP_API_BASE_URL=/api VUE_APP_API_URL=http://192.168.0.189:8099 -VUE_APP_WEBSOCKET_URL=ws://192.168.0.96:9001 -VUE_APP_MAPVIEW_URL = ws://192.168.0.189:8099 \ No newline at end of file +VUE_APP_MAPVIEW_URL = ws://192.168.0.189:8099 diff --git a/.env.production b/.env.production index b55556a..faa5370 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,3 @@ NODE_ENV=production VUE_APP_PREVIEW=true VUE_APP_API_BASE_URL=/api VUE_APP_API_URL=http://192.168.0.189:8099 -VUE_APP_WEBSOCKET_URL=ws://192.168.0.96:9001 \ No newline at end of file diff --git a/public/config.js b/public/config.js index 746bf24..e81bcb4 100644 --- a/public/config.js +++ b/public/config.js @@ -1,3 +1,4 @@ +// @ts-ignore window._CONFIG = { ImageryProviderUrl: '/map/mapWX/{z}/{x}/{y}.jpg', RoadProviderUrl: '', @@ -6,5 +7,6 @@ window._CONFIG = { clientId: '0123456789', evaluationSrc: 'http://127.0.0.1:8000', VUE_APP_API_URL: 'http://192.168.0.189:8099', + VUE_APP_WEBSOCKET_URL: 'ws://192.168.0.189:8099', VUE_APP_MAPVIEW_URL:'ws://192.168.0.189:8099' } diff --git a/src/assets/images/control/u155.png b/src/assets/images/control/u155.png new file mode 100644 index 0000000000000000000000000000000000000000..e7df149945de70ca52151b15d0eae96dabb75acd GIT binary patch literal 1547 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 Q{Qv*}07*qoM6N<$f*YZBHvj+t literal 0 HcmV?d00001 diff --git a/src/components/Common/Layout/ModuleWrapper.vue b/src/components/Common/Layout/ModuleWrapper.vue index d770e42..abbb63b 100644 --- a/src/components/Common/Layout/ModuleWrapper.vue +++ b/src/components/Common/Layout/ModuleWrapper.vue @@ -47,7 +47,7 @@ export default { font-weight: bold; line-height: 26px; letter-spacing: 2px; - color: #00deff; + color: #00d5fe; padding: 0 8px; } } diff --git a/src/components/Common/Websocket/index.js b/src/components/Common/Websocket/index.js index 11767f9..5d18555 100644 --- a/src/components/Common/Websocket/index.js +++ b/src/components/Common/Websocket/index.js @@ -6,7 +6,7 @@ export default class MyWebSocket { */ constructor(path, messageCallback) { // 拼接完整 WebSocket 地址 - const baseUrl = process.env.VUE_APP_WEBSOCKET_URL + const baseUrl = window._CONFIG.VUE_APP_WEBSOCKET_URL this.url = new URL(path, baseUrl).href.replace(/^http/, 'ws') this.messageCallback = messageCallback this.reconnectAttempts = 0 diff --git a/src/config/router.config.js b/src/config/router.config.js index 20da6d4..59e6a42 100644 --- a/src/config/router.config.js +++ b/src/config/router.config.js @@ -82,12 +82,52 @@ export const constantRouterMap = [ }, ], }, + { + path: '/subsystem', + name: 'Subsystem', + component: () => import(/* webpackChunkName: "fail" */ '@/views/subsystem/index.vue'), + redirect: '/404', + children: [ + { + path: '/subsystem/control', + name: 'SubsystemControl', + component: () => import(/* webpackChunkName: "fail" */ '@/views/subsystem/control/index.vue'), + meta: { title: '系统控制子系统' }, + }, + // { + // path: '/subsystem/database', + // name: 'SimulationSceneDatabase', + // component: () => import(/* webpackChunkName: "fail" */ '@/views/subsystem/database/index.vue'), + // meta: { title: '数据库子系统' }, + // }, + // { + // path: '/subsystem/simulationModel', + // name: 'SimulationSceneSimulationModel', + // component: () => import(/* webpackChunkName: "fail" */ '@/views/subsystem/simulationModel/index.vue'), + // meta: { title: '仿真模型子系统' }, + // }, + // { + // path: '/subsystem/sceneEditing', + // name: 'SimulationSceneSceneEditing', + // component: () => import(/* webpackChunkName: "fail" */ '@/views/subsystem/sceneEditing/index.vue'), + // meta: { title: '场景编辑子系统' }, + // }, + // { + // path: '/subsystem/display', + // name: 'SimulationSceneDisplay', + // component: () => import(/* webpackChunkName: "fail" */ '@/views/subsystem/display/index.vue'), + // meta: { title: '显示子系统' }, + // }, + // { + // path: '/subsystem/evaluation', + // name: 'SimulationSceneEvaluation', + // component: () => import(/* webpackChunkName: "fail" */ '@/views/subsystem/evaluation/index.vue'), + // meta: { title: '评估子系统' }, + // }, + ], + }, { path: '/404', component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404'), }, - { - path: '*', - redirect: '/404', - }, ] diff --git a/src/views/subsystem/control/index.vue b/src/views/subsystem/control/index.vue new file mode 100644 index 0000000..6e9855c --- /dev/null +++ b/src/views/subsystem/control/index.vue @@ -0,0 +1,382 @@ + + + + + diff --git a/src/views/subsystem/index.vue b/src/views/subsystem/index.vue new file mode 100644 index 0000000..aa725b3 --- /dev/null +++ b/src/views/subsystem/index.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/views/user/Welcome.vue b/src/views/user/Welcome.vue index c1571c2..4ca7a5a 100644 --- a/src/views/user/Welcome.vue +++ b/src/views/user/Welcome.vue @@ -28,6 +28,7 @@ import { mapState } from 'vuex' export default { data() { return { + openChildren: [], systemPathMap: { db_system: '/simulationScene/database', simulation_system: '/simulationScene/simulationModel', @@ -40,7 +41,7 @@ export default { moduleCode: 'db_system', moduleName: '数据库子系统', icon: require('@/assets/images/simulation-scene/system-icon/database.png'), - modulePath: '/simulationScene/database', + modulePath: '/databaseSystem/zzllsjk', }, { moduleCode: 'simulation_system', @@ -64,13 +65,13 @@ export default { moduleCode: 'evaluation_system', moduleName: '评估子系统', icon: require('@/assets/images/simulation-scene/system-icon/evaluation.png'), - modulePath: '/simulationScene/evaluation', + modulePath: window._CONFIG.evaluationSrc, }, { moduleCode: 'control_system', moduleName: '系统控制子系统', icon: require('@/assets/images/simulation-scene/system-icon/database.png'), - modulePath: '/simulationScene/centralControl', + modulePath: '/subSystem/control', }, ], } @@ -80,16 +81,26 @@ export default { userInfo: (state) => state.user.info, }), }, + created() { + window.addEventListener('beforeunload', (e) => { + this.openChildren.forEach((childWindow) => { + childWindow && childWindow.close() + }) + return true // 必须设置 returnValue 才能显示确认框 + }) + }, methods: { handleClick(module) { - window.open( - window.location.origin + module.modulePath, - '_blank', - 'height=' + - window.screen.height + - ',width=' + - window.screen.width + - ',top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no' + this.openChildren.push( + window.open( + module.modulePath, + '_blank', + 'height=' + + window.screen.height + + ',width=' + + window.screen.width + + ',top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no' + ) ) }, }, @@ -101,7 +112,7 @@ export default { font-size: 20px; line-height: 50px; font-weight: bolder; - color: #00deff; + color: #00d5fe; letter-spacing: 2px; margin: 0 20px; } @@ -120,6 +131,6 @@ export default { } } .module-block:hover { - border-color: #00deff; + border-color: #00d5fe; }