Compare commits
3 Commits
5508cc1f64
...
42cfdefb74
| Author | SHA1 | Date |
|---|---|---|
|
|
42cfdefb74 | |
|
|
6b1e37d9cd | |
|
|
9e706091d8 |
|
|
@ -8,6 +8,44 @@ export {}
|
||||||
declare module '@vue/runtime-core' {
|
declare module '@vue/runtime-core' {
|
||||||
export interface GlobalComponents {
|
export interface GlobalComponents {
|
||||||
Countup: typeof import('./src/components/countup.vue')['default']
|
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']
|
Header: typeof import('./src/components/header.vue')['default']
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
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']
|
Upload_file2: typeof import('./src/components/upload_file2.vue')['default']
|
||||||
UploadFile: typeof import('./src/components/upload-file.vue')['default']
|
UploadFile: typeof import('./src/components/upload-file.vue')['default']
|
||||||
}
|
}
|
||||||
|
export interface ComponentCustomProperties {
|
||||||
|
vLoading: typeof import('element-plus/es')['ElLoadingDirective']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,4 +103,59 @@ export const LocalClientDisConnectHandler = (Data) => {
|
||||||
//获取本地客户端连接状态
|
//获取本地客户端连接状态
|
||||||
export const LocalClientStatusHandler = () => {
|
export const LocalClientStatusHandler = () => {
|
||||||
return local_request.get('/vpn/get_status')
|
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)
|
||||||
}
|
}
|
||||||
|
|
@ -102,7 +102,13 @@ export const menuData: Menus[] = [
|
||||||
pid: '75',
|
pid: '75',
|
||||||
index: '/vpn-online-user',
|
index: '/vpn-online-user',
|
||||||
title: '在线用户',
|
title: '在线用户',
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
id: '756',
|
||||||
|
pid: '75',
|
||||||
|
index: '/vpn-policy',
|
||||||
|
title: 'VPN策略',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -173,6 +173,15 @@ const routes: RouteRecordRaw[] = [
|
||||||
},
|
},
|
||||||
component: () => import(/* webpackChunkName: "system-user" */ '../views/system/vpn-server-online-user.vue'),
|
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',
|
path: '/callback',
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ export const usePermissStore = defineStore("permiss", {
|
||||||
"753", //VPN隧道管理
|
"753", //VPN隧道管理
|
||||||
"754", //VPN客户端UI
|
"754", //VPN客户端UI
|
||||||
"755", //VPN在线用户连接
|
"755", //VPN在线用户连接
|
||||||
|
"756", //VPN策略
|
||||||
],
|
],
|
||||||
user: ["0", "8", "7", "9", "51" ,"53","55" ,"56", "57", "58", "59", "61", "71", "754"],
|
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
|
|
@ -103,11 +103,10 @@
|
||||||
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="IP类型">
|
<el-form-item label="策略匹配失败">
|
||||||
<el-select v-model="selectedServer.ip_type" placeholder="请选择IP类型">
|
<el-select v-model="selectedServer.no_policy_action" placeholder="请选择策略匹配失败动作">
|
||||||
<el-option label="IPv4" :value="4" />
|
<el-option label="拒绝" :value="0" />
|
||||||
<el-option label="IPv6" :value="6" />
|
<el-option label="允许" :value="1" />
|
||||||
<el-option label="IPv4/IPv6" :value="46" />
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
@ -360,6 +359,7 @@ interface ServerConfig {
|
||||||
allow_user_id: UserID[];
|
allow_user_id: UserID[];
|
||||||
encryption: string;
|
encryption: string;
|
||||||
hash: string;
|
hash: string;
|
||||||
|
no_policy_action:number;
|
||||||
user_max_device: number;
|
user_max_device: number;
|
||||||
duration_time: number;
|
duration_time: number;
|
||||||
ipv4_router: VPNRouter[];
|
ipv4_router: VPNRouter[];
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@ interface ServerConfig {
|
||||||
allow_user_id: any[];
|
allow_user_id: any[];
|
||||||
encryption: string;
|
encryption: string;
|
||||||
hash: string;
|
hash: string;
|
||||||
|
no_policy_action:number;
|
||||||
user_max_device: number;
|
user_max_device: number;
|
||||||
duration_time: number;
|
duration_time: number;
|
||||||
ipv4_router: any[];
|
ipv4_router: any[];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue