Compare commits

...

3 Commits

Author SHA1 Message Date
lijun 42cfdefb74 添加策略匹配 2026-01-28 21:48:13 +08:00
lijun 6b1e37d9cd 添加策略匹配 2026-01-28 21:33:40 +08:00
lijun 9e706091d8 添加策略匹配 2026-01-28 20:22:00 +08:00
8 changed files with 1461 additions and 6 deletions

41
components.d.ts vendored
View File

@ -8,6 +8,44 @@ export {}
declare module '@vue/runtime-core' {
export interface GlobalComponents {
Countup: typeof import('./src/components/countup.vue')['default']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElButton: typeof import('element-plus/es')['ElButton']
ElCard: typeof import('element-plus/es')['ElCard']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCol: typeof import('element-plus/es')['ElCol']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDivider: typeof import('element-plus/es')['ElDivider']
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']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
Header: typeof import('./src/components/header.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
@ -20,4 +58,7 @@ declare module '@vue/runtime-core' {
Upload_file2: typeof import('./src/components/upload_file2.vue')['default']
UploadFile: typeof import('./src/components/upload-file.vue')['default']
}
export interface ComponentCustomProperties {
vLoading: typeof import('element-plus/es')['ElLoadingDirective']
}
}

View File

@ -103,4 +103,59 @@ export const LocalClientDisConnectHandler = (Data) => {
//获取本地客户端连接状态
export const LocalClientStatusHandler = () => {
return local_request.get('/vpn/get_status')
}
// VPN Policy Management APIs
// myVPNPolicyGroup := router.Group("/vpn_policy")
// myVPNPolicyGroup.GET("/get", GetMyVPNPolicyHandler)
// myVPNPolicyGroup.POST("/create", CreateMyVPNPolicyHandler)
// myVPNPolicyGroup.POST("/update", UpdateMyVPNPolicyHandler)
// myVPNPolicyGroup.DELETE("/delete", DeleteMyVPNPolicyHandler)
/**
* VPN策略列表
* @param {Object} params server_id等
* @returns {Promise} VPN策略列表的Promise对象
*/
export const GetMyVPNPolicyHandler = (params) => {
return request.get('/vpn_policy/get', { params })
}
/**
* VPN策略
* @param {Object} data VPN策略数据
* @returns {Promise} Promise对象
*/
export const CreateMyVPNPolicyHandler = (data) => {
return request.post('/vpn_policy/create', data)
}
/**
* VPN策略
* @param {Object} data VPN策略更新数据id
* @returns {Promise} Promise对象
*/
export const UpdateMyVPNPolicyHandler = (data) => {
return request.post('/vpn_policy/update', data)
}
/**
* VPN策略
* @param {Object} data id和server_id
* @returns {Promise} Promise对象
*/
export const DeleteMyVPNPolicyHandler = (data) => {
let url = '/vpn_policy/delete';
if (data.id){
url += "?id="+data.id
}
if (data.server_id){
url += "&server_id=" + data.server_id
}
return request.delete(url)
}
export const MatchVPNPolicyHandler = (data) => {
return request.post('/vpn_policy/match', data)
}

View File

@ -102,7 +102,13 @@ export const menuData: Menus[] = [
pid: '75',
index: '/vpn-online-user',
title: '在线用户',
}
},
{
id: '756',
pid: '75',
index: '/vpn-policy',
title: 'VPN策略',
},
],
},
{

View File

@ -173,6 +173,15 @@ const routes: RouteRecordRaw[] = [
},
component: () => import(/* webpackChunkName: "system-user" */ '../views/system/vpn-server-online-user.vue'),
},
{
path: '/vpn-policy',
name: 'vpn-policy',
meta: {
title: 'VPN策略',
permiss: '755',
},
component: () => import(/* webpackChunkName: "system-user" */ '../views/system/vpn-policy.vue'),
},
{
path: '/callback',

View File

@ -66,6 +66,7 @@ export const usePermissStore = defineStore("permiss", {
"753", //VPN隧道管理
"754", //VPN客户端UI
"755", //VPN在线用户连接
"756", //VPN策略
],
user: ["0", "8", "7", "9", "51" ,"53","55" ,"56", "57", "58", "59", "61", "71", "754"],
},

File diff suppressed because it is too large Load Diff

View File

@ -103,11 +103,10 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="IP类型">
<el-select v-model="selectedServer.ip_type" placeholder="请选择IP类型">
<el-option label="IPv4" :value="4" />
<el-option label="IPv6" :value="6" />
<el-option label="IPv4/IPv6" :value="46" />
<el-form-item label="策略匹配失败">
<el-select v-model="selectedServer.no_policy_action" placeholder="请选择策略匹配失败动作">
<el-option label="拒绝" :value="0" />
<el-option label="允许" :value="1" />
</el-select>
</el-form-item>
</el-col>
@ -360,6 +359,7 @@ interface ServerConfig {
allow_user_id: UserID[];
encryption: string;
hash: string;
no_policy_action:number;
user_max_device: number;
duration_time: number;
ipv4_router: VPNRouter[];

View File

@ -106,6 +106,7 @@ interface ServerConfig {
allow_user_id: any[];
encryption: string;
hash: string;
no_policy_action:number;
user_max_device: number;
duration_time: number;
ipv4_router: any[];