From 8092709950141101370e30679938fd9d8bc97991 Mon Sep 17 00:00:00 2001 From: lijun Date: Tue, 16 Dec 2025 20:58:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0VPN=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E9=85=8D=E7=BD=AE=E7=AE=A1=E7=90=86=EF=BC=8C=20?= =?UTF-8?q?=E6=9C=AA=E5=AE=8C=E5=96=84=E8=B7=AF=E7=94=B1=E7=AD=89=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 1 + src/api/vpn.ts | 70 ++++ src/components/menu.ts | 14 + src/router/index.ts | 10 + src/store/permiss.ts | 4 +- src/views/pages/login.vue | 1 + src/views/system/vpn-server-config.vue | 535 +++++++++++++++++++++++++ 7 files changed, 634 insertions(+), 1 deletion(-) create mode 100644 src/api/vpn.ts create mode 100644 src/views/system/vpn-server-config.vue diff --git a/components.d.ts b/components.d.ts index 32b63f0..38d81e3 100644 --- a/components.d.ts +++ b/components.d.ts @@ -30,6 +30,7 @@ declare module '@vue/runtime-core' { ElDropdown: typeof import('element-plus/es')['ElDropdown'] ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] + ElEmpty: typeof import('element-plus/es')['ElEmpty'] ElForm: typeof import('element-plus/es')['ElForm'] ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElIcon: typeof import('element-plus/es')['ElIcon'] diff --git a/src/api/vpn.ts b/src/api/vpn.ts new file mode 100644 index 0000000..f771ce4 --- /dev/null +++ b/src/api/vpn.ts @@ -0,0 +1,70 @@ +import request from '@/utils/user_center_request'; + + // myVPNGroup := router.Group("/vpn") + // myVPNGroup.POST("/server_register", ServerRegisterHandler) + // myVPNGroup.GET("/get_support_vpn_server", GetSupportVPNServerHandler) + // myVPNGroup.POST("/update_client_status", UpdateClientStatusHandler) + // myVPNGroup.POST("/update_server_status", UpdateServerStatusHandler) + // myVPNGroup.GET("/get_client_config", GetClientConfigHandler) //prepare online + // myVPNGroup.GET("/get_server_config", GetServerConfigHandler) + // myVPNGroup.PUT("/client_heartbeat", ClientHeartbeatHandler) + // myVPNGroup.GET("/get_vpn_user", GetVPNUserHandler) + // myVPNGroup.POST("/set_vpn_server_config", SetVPNServerConfigHandler) + // myVPNGroup.GET("/get_vpn_server_config", GetVPNServerConfigHandler) + // myVPNGroup.GET("/get_server_online", GetVPNServerOnlineListHandler) + // myVPNGroup.DELETE("/delete_vpn_server", DeleteVPNServerHandler) + // myVPNGroup.POST("/set_vpn_ip_pool", SetVPNPoolHandler) + // myVPNGroup.GET("/get_vpn_ip_pool", GetVPNAddressPoolHandler) + // myVPNGroup.DELETE("/delete_vpn_ip_pool", DeleteVPNPoolHandler) + // myVPNGroup.POST("/set_vpn_tunnel", SetVPNTunnelHandler) + // myVPNGroup.DELETE("/delete_vpn_tunnel", DeleteVPNTunnelHandler) + // myVPNGroup.GET("/get_vpn_tunnel_config", GetVPNTunnelConfigHandler) +export const GetSupportVPNServerHandler = () => { + return request.get('/vpn/get_support_vpn_server') +} + +export const GetVPNUserHandler = () => { + return request.get('/vpn/get_vpn_user') +} + +export const GetVPNAddressPoolHandler = () => { + return request.get('/vpn/get_vpn_ip_pool') +} + + +export const SetVPNAddressPoolHandler = (Data) => { + return request.post('/vpn/set_vpn_ip_pool', Data) +} + +/** + * 获取VPN隧道配置信息 + * @returns {Promise} 包含VPN隧道配置信息的Promise对象 + */ +export const GetVPNTunnelConfigHandler = () => { + + return request.get('/vpn/get_vpn_tunnel_config') + +} + +export const SetVPNTunnelHandler = (Data) => { + return request.post('/vpn/set_vpn_tunnel', Data) +} + +export const GetVPNServerOnlineListHandler = () => { + return request.get('/vpn/get_server_online') +} + +export const GetVPNServerConfigHandler = () => { + return request.get('/vpn/get_vpn_server_config') +} + + +export const SetVPNServerConfigHandler = (Data) => { + + return request.post('/vpn/set_vpn_server_config', Data) + +} + +export const DeleteVPNServerHandler = (Data) => { + return request.delete('/vpn/delete_vpn_server', { data: Data }) +} diff --git a/src/components/menu.ts b/src/components/menu.ts index 8b8d4d6..9858a0d 100644 --- a/src/components/menu.ts +++ b/src/components/menu.ts @@ -73,6 +73,20 @@ export const menuData: Menus[] = [ } ], }, + { + id: '75', + title: 'VPN服务器', + index: '75', + icon: 'Lock', + children: [ + { + id: '751', + pid: '75', + index: '/vpn-server-config', + title: 'VPN服务器配置', + } + ], + }, { id: '2', title: '组件', diff --git a/src/router/index.ts b/src/router/index.ts index 992c6b5..d0198fa 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -127,6 +127,16 @@ const routes: RouteRecordRaw[] = [ component: () => import(/* webpackChunkName: "system-user" */ '../views/system/manage-model-policy.vue'), }, + { + path: '/vpn-server-config', + name: 'vpn-server-config', + meta: { + title: 'VPN服务器配置', + permiss: '751', + + }, + component: () => import(/* webpackChunkName: "system-user" */ '../views/system/vpn-server-config.vue'), + }, { path: '/callback', name: 'callback', diff --git a/src/store/permiss.ts b/src/store/permiss.ts index 105168c..fb96208 100644 --- a/src/store/permiss.ts +++ b/src/store/permiss.ts @@ -60,8 +60,10 @@ export const usePermissStore = defineStore("permiss", { "72", //数据库管理工具 "73", //权限策略管理 "74", //模型策略管理 + "75", //VPN服务器配置管理 + "751", //VPN服务器配置管理 ], - user: ["0", "8", "7", "9", "51" ,"53","55" ,"56", "57", "58", "59", "61", "71"], + user: ["0", "8", "7", "9", "51" ,"53","55" ,"56", "57", "58", "59", "61", "71", "75"], }, }; }, diff --git a/src/views/pages/login.vue b/src/views/pages/login.vue index 25a1230..1b60a5a 100644 --- a/src/views/pages/login.vue +++ b/src/views/pages/login.vue @@ -307,6 +307,7 @@ onMounted(async () => { if (queryParams.code){ code.value = queryParams.code as string; } + console.log("query:", queryParams); const token = localStorage.getItem("token") || ""; if (token !== "") { diff --git a/src/views/system/vpn-server-config.vue b/src/views/system/vpn-server-config.vue new file mode 100644 index 0000000..ab8d14f --- /dev/null +++ b/src/views/system/vpn-server-config.vue @@ -0,0 +1,535 @@ + + + + + \ No newline at end of file