diff --git a/resources/service/plugins/gateway.exe b/resources/service/plugins/gateway.exe index 36df104..0778a3a 100644 Binary files a/resources/service/plugins/gateway.exe and b/resources/service/plugins/gateway.exe differ diff --git a/src/main/index.js b/src/main/index.js index d14ac1a..8327b65 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -34,7 +34,7 @@ function createWindow() { // 禁用同源策略,允许跨域请求 webSecurity: false, contextIsolation: false, - csp: "default-src 'self'; connect-src 'self' http://127.0.0.1:8000 http://192.168.1.17:8000 ws://192.168.1.17:8000 ws://127.0.0.1:8000", + csp: "default-src 'self'; connect-src 'self' *", // 禁止build环境使用DevTool // devTools: is.dev ? true : false devTools: true diff --git a/src/renderer/index.html b/src/renderer/index.html index eccdfaf..72be020 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -2,11 +2,12 @@ - Electron + 谷云工具 + diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index 489e9a6..bfec0de 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -1,12 +1,18 @@ - diff --git a/src/renderer/src/assets/iconfont/iconfont.css b/src/renderer/src/assets/iconfont/iconfont.css new file mode 100644 index 0000000..93643a2 --- /dev/null +++ b/src/renderer/src/assets/iconfont/iconfont.css @@ -0,0 +1,83 @@ +@font-face { + font-family: "iconfont"; /* Project id 4622943 */ + src: url('iconfont.woff2?t=1721353754291') format('woff2'), + url('iconfont.woff?t=1721353754291') format('woff'), + url('iconfont.ttf?t=1721353754291') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-shousuoshangjiantou:before { + content: "\e9b6"; +} + +.icon-up-arrow:before { + content: "\e9c1"; +} + +.icon-unlock:before { + content: "\e882"; +} + +.icon-gexinghuabobao:before { + content: "\e66d"; +} + +.icon-icon_suoding:before { + content: "\e76c"; +} + +.icon-icon_shanchu:before { + content: "\e76d"; +} + +.icon-icon_shanghang:before { + content: "\e76e"; +} + +.icon-icon_xiahang:before { + content: "\e76f"; +} + +.icon-icon_shezhi:before { + content: "\e770"; +} + +.icon-icon_xitong:before { + content: "\e771"; +} + +.icon-icon_jiankong:before { + content: "\e772"; +} + +.icon-icon_caid:before { + content: "\e75f"; +} + +.icon-icon_chajian:before { + content: "\e767"; +} + +.icon-icon_xiaoxi:before { + content: "\e768"; +} + +.icon-icon_gengxin:before { + content: "\e769"; +} + +.icon-icon_fuzhi:before { + content: "\e76a"; +} + +.icon-icon_duanluqi:before { + content: "\e76b"; +} + diff --git a/src/renderer/src/assets/iconfont/iconfont.ttf b/src/renderer/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000..895a7cc Binary files /dev/null and b/src/renderer/src/assets/iconfont/iconfont.ttf differ diff --git a/src/renderer/src/assets/iconfont/iconfont.woff b/src/renderer/src/assets/iconfont/iconfont.woff new file mode 100644 index 0000000..24c7448 Binary files /dev/null and b/src/renderer/src/assets/iconfont/iconfont.woff differ diff --git a/src/renderer/src/assets/iconfont/iconfont.woff2 b/src/renderer/src/assets/iconfont/iconfont.woff2 new file mode 100644 index 0000000..47eb9ff Binary files /dev/null and b/src/renderer/src/assets/iconfont/iconfont.woff2 differ diff --git a/src/renderer/src/assets/image/avatar.png b/src/renderer/src/assets/image/avatar.png new file mode 100644 index 0000000..d749193 Binary files /dev/null and b/src/renderer/src/assets/image/avatar.png differ diff --git a/src/renderer/src/assets/image/logo.png b/src/renderer/src/assets/image/logo.png new file mode 100644 index 0000000..3704a8d Binary files /dev/null and b/src/renderer/src/assets/image/logo.png differ diff --git a/src/renderer/src/layout/Aside.vue b/src/renderer/src/layout/Aside.vue new file mode 100644 index 0000000..d457b5c --- /dev/null +++ b/src/renderer/src/layout/Aside.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/renderer/src/layout/Header.vue b/src/renderer/src/layout/Header.vue new file mode 100644 index 0000000..2dd262a --- /dev/null +++ b/src/renderer/src/layout/Header.vue @@ -0,0 +1,170 @@ + + + + + + + diff --git a/src/renderer/src/layout/index.vue b/src/renderer/src/layout/index.vue new file mode 100644 index 0000000..269fd1f --- /dev/null +++ b/src/renderer/src/layout/index.vue @@ -0,0 +1,41 @@ + + + + + + diff --git a/src/renderer/src/router/index.js b/src/renderer/src/router/index.js index 3dfd0da..eba0455 100644 --- a/src/renderer/src/router/index.js +++ b/src/renderer/src/router/index.js @@ -1,13 +1,13 @@ import { createRouter, createWebHistory } from 'vue-router' -import HomeView from '@renderer/views/HomeView.vue' +import Layout from '@renderer/layout/index.vue' const router = createRouter({ history: createWebHistory(), routes: [ { - path: '/', - name: 'home', - component: HomeView, + path: '/system', + name: 'system', + component: Layout, redirect: {name: 'switch'}, children:[ { @@ -37,8 +37,13 @@ const router = createRouter({ keepAlive: true, } }, + ] }, + { + path: '/', // 这个是根路由,现在我们让它重定向到 /system + redirect: '/system', + }, { path: '/:pathMatch(.*)', redirect: '/' }, ] }) diff --git a/src/renderer/src/stores/logWebSocket.js b/src/renderer/src/stores/logWebSocket.js new file mode 100644 index 0000000..d738c9e --- /dev/null +++ b/src/renderer/src/stores/logWebSocket.js @@ -0,0 +1,96 @@ +import { defineStore } from 'pinia' +import config from '@renderer/util/config.js' + +// 定义一个名为logWebSocketStore的store,用于管理WebSocket连接的状态和操作 +export const logWebSocketStore = defineStore('websocket', { + state: () => ({ + websocket: null, // WebSocket实例 + connectURL: config.wsUrl + '/ws/log', // WebSocket连接的URL + socket_open: false, // 标记WebSocket是否连接 + hearbeat_timer: null, // 心跳检测的定时器 + hearbeat_interval: 2 * 1000, // 心跳检测的间隔时间 + is_reonnect: true, // 是否尝试重新连接 + reconnect_count: 3, // 最大重连次数 + reconnect_current: 1, // 当前重连次数 + reconnect_timer: null, // 重连定时器 + reconnect_interval: 5 * 1000, // 重连间隔时间 + }), + + actions: { + // 初始化WebSocket连接 + init(overrideReceiveMessage) { + let receiveMessage = overrideReceiveMessage || (() => {}) + // 检查浏览器是否支持WebSocket + if (!('WebSocket' in window)) { + this.$router.push({ name: 'ErrorPage', params: { error: '浏览器不支持WebSocket' } }) + return null + } + // 创建WebSocket实例并设置事件处理函数 + this.websocket = new WebSocket(this.connectURL) + this.websocket.onmessage = (e) => { + receiveMessage(e) + } + this.websocket.onclose = () => { + console.log('socket连接关闭----------------------') + this.socket_open = false + // 尝试重新连接 + if (this.is_reonnect) { + this.reconnect_timer = setTimeout(() => { + if (this.reconnect_current > this.reconnect_count) { + clearTimeout(this.reconnect_timer) + this.is_reonnect = false + return + } + console.log('socket重连次数:' + this.reconnect_current) + this.reconnect_current++ + this.reconnect() + }, this.reconnect_interval) + } + } + this.websocket.onopen = () => { + this.socket_open = true + this.is_reonnect = true + // this.heartbeat() + } + this.websocket.onerror = () => {} + }, + + // 发送心跳包 + heartbeat() { + this.hearbeat_timer && clearInterval(this.hearbeat_timer) + this.hearbeat_timer = setInterval(() => { + let data = {} + this.send(data) + }, this.hearbeat_interval) + }, + + // 发送数据 + send(data, callback = null) { + // 如果WebSocket连接已建立,则发送数据 + if (this.websocket.readyState === this.websocket.OPEN) { + this.websocket.send(JSON.stringify(data)) + callback && callback() + } else { + // 如果WebSocket连接断开,则跳转到错误页面 + clearInterval(this.hearbeat_timer) + this.$router.push({ name: 'ErrorPage', params: { error: 'socket链接已断开' } }) + } + }, + + // 关闭WebSocket连接 + close() { + this.is_reonnect = false + this.websocket.close() + }, + + // 重新连接WebSocket + reconnect() { + // 如果已存在WebSocket实例且不尝试重新连接,则关闭连接 + if (this.websocket && !this.is_reonnect) { + this.close() + } + // 初始化WebSocket连接 + this.init() + }, + }, +}) diff --git a/src/renderer/src/util/config.js b/src/renderer/src/util/config.js index ad9e57a..131727c 100644 --- a/src/renderer/src/util/config.js +++ b/src/renderer/src/util/config.js @@ -1,7 +1,8 @@ -// // 手动配置的地址 +// // // 手动配置的地址 // window.config = { // url: 'http://192.168.1.17:8000', // wsUrl: 'ws://192.168.1.17:8000', +// ws1Url: 'ws://192.168.1.17:8001', // } // 手动配置的地址 @@ -10,7 +11,21 @@ // wsUrl: 'ws://127.0.0.1:8000', // } +// export default { +// url: 'http://127.0.0.1:8000', +// wsUrl: 'ws://127.0.0.1:8000' +// } + export default { url: 'http://127.0.0.1:8000', - wsUrl: 'ws://127.0.0.1:8000' + wsUrl: 'ws://127.0.0.1:8000', + swichWsUrl: 'ws://127.0.0.1:8001', } + + + // 手动配置的地址 +// export default { +// url: 'http://192.168.1.17:8000', +// wsUrl: 'ws://192.168.1.17:8000', +// swichWsUrl: 'ws://192.168.1.17:8001', +// } diff --git a/src/renderer/src/util/socket.js b/src/renderer/src/util/socket.js index 73fd936..5c1c864 100644 --- a/src/renderer/src/util/socket.js +++ b/src/renderer/src/util/socket.js @@ -5,7 +5,7 @@ let receiveMessage = null import { reactive } from 'vue' const socket = reactive({ websocket: null, - connectURL: config.wsUrl + '/ws/log', + connectURL: config.swichWsUrl + '/ws/log', // 开启标识 socket_open: false, // 心跳timer diff --git a/src/renderer/src/views/switch/index.vue b/src/renderer/src/views/switch/index.vue index bef4c52..ff0c751 100644 --- a/src/renderer/src/views/switch/index.vue +++ b/src/renderer/src/views/switch/index.vue @@ -1,6 +1,6 @@