push
This commit is contained in:
420
nervui-noenetwork/src/view/Noeacl/config.ts
Normal file
420
nervui-noenetwork/src/view/Noeacl/config.ts
Normal file
@@ -0,0 +1,420 @@
|
||||
import acl from '/@/api/acl';
|
||||
import { http } from '/nerv-lib/util/http';
|
||||
import { dateUtil } from '/nerv-lib/util/date-util';
|
||||
import { get } from 'lodash-es';
|
||||
import { useRouter } from 'vue-router';
|
||||
export const aclTableConfig = {
|
||||
api: acl.LIST,
|
||||
title: '防火墙',
|
||||
showAction: ['remove'],
|
||||
columns: [
|
||||
{
|
||||
title: '项目',
|
||||
name: 'viewInfo',
|
||||
textEllipsis: true,
|
||||
width: '15%',
|
||||
customRender: (text: any) => {
|
||||
return get(text.record, 'viewInfo.project[0]');
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '防火墙ID',
|
||||
textEllipsis: true,
|
||||
width: '20%',
|
||||
dataIndex: 'metadata',
|
||||
customRender: (text: any) => {
|
||||
return get(text.record, 'metadata.name');
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '名称',
|
||||
textEllipsis: true,
|
||||
width: '20%',
|
||||
dataIndex: 'spec',
|
||||
customRender: (text: any) => {
|
||||
return get(text.record, 'spec.display_name');
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '描述',
|
||||
textEllipsis: true,
|
||||
dataIndex: 'spec',
|
||||
customRender: (text: any) => {
|
||||
return get(text.record, 'spec.display_description');
|
||||
},
|
||||
width: '15%',
|
||||
},
|
||||
{
|
||||
title: '租户',
|
||||
textEllipsis: true,
|
||||
dataIndex: 'spec',
|
||||
width: '10%',
|
||||
customRender: (text: any) => {
|
||||
return get(text.record, 'spec.tenant');
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '创建时间',
|
||||
dataIndex: 'metadata',
|
||||
width: '20%',
|
||||
customRender: (text: any) => {
|
||||
return dateUtil(text.text?.creationTimestamp).format('YYYY-MM-DD HH:mm:ss');
|
||||
},
|
||||
},
|
||||
],
|
||||
actions: [
|
||||
{
|
||||
label: '查看',
|
||||
name: 'NoeaclDetail',
|
||||
openPermission: true,
|
||||
handle: (record, e, { router }) => {
|
||||
router.push({
|
||||
name: 'NoeaclDetail',
|
||||
params: {
|
||||
id: record.metadata?.name,
|
||||
},
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
label: '修改入站规则',
|
||||
name: 'NoeaclUpdateIngressRule',
|
||||
openPermission: true,
|
||||
handle: (record, e, { router }) => {
|
||||
router.push({
|
||||
name: 'NoeaclUpdateIngressRule',
|
||||
params: {
|
||||
id: record.metadata?.name,
|
||||
},
|
||||
});
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '修改出站规则',
|
||||
name: 'NoeaclUpdateEgressRule',
|
||||
openPermission: true,
|
||||
handle: (record, e, { router }) => {
|
||||
router.push({
|
||||
name: 'NoeaclUpdateEgressRule',
|
||||
params: {
|
||||
id: record.metadata?.name,
|
||||
},
|
||||
});
|
||||
},
|
||||
},
|
||||
],
|
||||
headerActions: [
|
||||
{
|
||||
label: '添加',
|
||||
name: 'NoeaclAdd',
|
||||
type: 'primary',
|
||||
handle: (record, e, { router }) => {
|
||||
router.push({ name: 'NoeaclAdd' });
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
};
|
||||
export const aclAddConfig = {
|
||||
title: '添加',
|
||||
formLayout: '修改',
|
||||
api: acl.ADD,
|
||||
schemas: [
|
||||
// {
|
||||
// label: '项目',
|
||||
// field: 'project_id',
|
||||
// component: 'NsSelectApi' /* todo 需要根据权限过滤 */,
|
||||
// componentProps: {
|
||||
// api: {
|
||||
// url: '/api/passport/passport/objs/Authorization/CheckAuthorization',
|
||||
// method: 'POST',
|
||||
// },
|
||||
// showSearch: true,
|
||||
// filterOption: (input: string, option: any) => {
|
||||
// return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
||||
// },
|
||||
// // filterData: (item) => {
|
||||
// // return authorizationService().checkPermission('vdisk', 'Volume', 'add', item.projectname);
|
||||
// // },
|
||||
// resultField: 'projects',
|
||||
// labelField: 'projectname',
|
||||
// valueField: 'projectid',
|
||||
// immediate: true,
|
||||
// placeholder: '请选择项目',
|
||||
// },
|
||||
// rules: [
|
||||
// {
|
||||
// type: 'number',
|
||||
// required: true,
|
||||
// message: '项目必填',
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
label: '租户',
|
||||
field: 'tenant',
|
||||
component: 'NsSelectApi' /* todo 需要根据权限过滤 */,
|
||||
componentProps: {
|
||||
api: {
|
||||
url: '/api/passport/passport/objs/Tenant?where=tenant_status=?&values=1',
|
||||
method: 'GET',
|
||||
},
|
||||
autoSelectFirst: true,
|
||||
showSearch: true,
|
||||
filterOption: (input: string, option: any) => {
|
||||
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
||||
},
|
||||
resultField: 'data',
|
||||
labelField: 'tenant',
|
||||
valueField: 'tenant',
|
||||
immediate: true,
|
||||
placeholder: '请选择租户',
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '租户必填',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '项目',
|
||||
field: 'project_id',
|
||||
component: 'NsSelectApi' /* todo 需要根据权限过滤 */,
|
||||
dynamicParams: {
|
||||
tenant: 'tenant',
|
||||
},
|
||||
componentProps: {
|
||||
api: {
|
||||
url: '/api/passport/passport/objs/Tenant/Projects',
|
||||
method: 'GET',
|
||||
},
|
||||
autoSelectFirst: true,
|
||||
showSearch: true,
|
||||
filterOption: (input: string, option: any) => {
|
||||
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
||||
},
|
||||
resultField: 'projects',
|
||||
labelField: 'projectName',
|
||||
valueField: 'projectID',
|
||||
immediate: true,
|
||||
placeholder: '请选择项目',
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
type: 'number',
|
||||
required: true,
|
||||
message: '项目必填',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'name',
|
||||
label: '防火墙名称',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入',
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '防火墙名称必填',
|
||||
trigger: 'blur',
|
||||
},
|
||||
{
|
||||
pattern: '^[a-zA-Z][a-zA-Z0-9_-]{5,31}$',
|
||||
message: '以字母开头输入6-32个字符,只能包含字母,数字,短横线(-)和下划线(_)',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '描述',
|
||||
field: 'description',
|
||||
component: 'NsTextarea',
|
||||
componentProps: {
|
||||
showCount: true,
|
||||
maxlength: 255,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
export const aclEditConfig = {
|
||||
title: '编辑',
|
||||
formLayout: '修改',
|
||||
getApi: () => {
|
||||
const router = useRouter();
|
||||
|
||||
return http.get(`${acl.DETAIL}/${router.currentRoute.value.params?.uid}`);
|
||||
},
|
||||
api: (record) => {
|
||||
return http.put(`${acl.EDIT}/${record.uuid}`, record);
|
||||
},
|
||||
schemas: [
|
||||
{
|
||||
field: 'uuid',
|
||||
component: 'NsInputText',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
field: 'name',
|
||||
label: '网络名称',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入',
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '网络名称必填',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '描述',
|
||||
field: 'description',
|
||||
component: 'NsTextarea',
|
||||
componentProps: {
|
||||
showCount: true,
|
||||
maxlength: 255,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
export const aclDetailConfig = {
|
||||
title: '详情',
|
||||
showBack: true,
|
||||
api: () => {
|
||||
const router = useRouter();
|
||||
return http.get(`${acl.DETAIL}/${router.currentRoute.value.params?.id}`);
|
||||
},
|
||||
dataHandle: (val) => {
|
||||
return val;
|
||||
},
|
||||
detail: [
|
||||
{
|
||||
title: '',
|
||||
items: [
|
||||
{
|
||||
label: '名称',
|
||||
name: 'name',
|
||||
},
|
||||
{
|
||||
label: '描述',
|
||||
name: 'description',
|
||||
},
|
||||
{
|
||||
label: '状态',
|
||||
name: 'status',
|
||||
},
|
||||
{
|
||||
label: '租户',
|
||||
name: 'tenant',
|
||||
},
|
||||
{
|
||||
label: '创建时间',
|
||||
name: 'created_at',
|
||||
format: (value) => {
|
||||
return dateUtil(value).format('YYYY-MM-DD HH:mm:ss');
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '修改时间',
|
||||
name: 'updated_at',
|
||||
format: (value) => {
|
||||
return dateUtil(value).format('YYYY-MM-DD HH:mm:ss');
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
items: [
|
||||
{
|
||||
label: '入站规则',
|
||||
name: 'ingress_rules',
|
||||
type: 'table',
|
||||
props: {
|
||||
listField: 'ingress_rules',
|
||||
columns: [
|
||||
{
|
||||
title: '协议',
|
||||
dataIndex: 'protocol',
|
||||
},
|
||||
{
|
||||
title: '名称',
|
||||
dataIndex: 'name',
|
||||
},
|
||||
{
|
||||
title: 'IP协议',
|
||||
dataIndex: 'ether_type',
|
||||
},
|
||||
{
|
||||
title: '端口范围',
|
||||
dataIndex: 'ether_type',
|
||||
customRender: (text: any) => {
|
||||
if (text.record['port_range_min'] && text.record['port_range_max']) {
|
||||
return `${text.record['port_range_min']}-${text.record['port_range_max']}`;
|
||||
} else {
|
||||
return 'any';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '远端IP前缀',
|
||||
dataIndex: 'remote_ip_prefix',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
items: [
|
||||
{
|
||||
label: '出站规则',
|
||||
name: 'egress_rules',
|
||||
type: 'table',
|
||||
props: {
|
||||
listField: 'egress_rules',
|
||||
columns: [
|
||||
{
|
||||
title: '协议',
|
||||
dataIndex: 'protocol',
|
||||
},
|
||||
{
|
||||
title: '名称',
|
||||
dataIndex: 'name',
|
||||
},
|
||||
{
|
||||
title: 'IP协议',
|
||||
dataIndex: 'ether_type',
|
||||
},
|
||||
{
|
||||
title: '端口范围',
|
||||
dataIndex: 'ether_type',
|
||||
customRender: (text: any) => {
|
||||
if (text.record['port_range_min'] && text.record['port_range_max']) {
|
||||
return `${text.record['port_range_min']}-${text.record['port_range_max']}`;
|
||||
} else {
|
||||
return 'any';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '远端IP前缀',
|
||||
dataIndex: 'remote_ip_prefix',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
Reference in New Issue
Block a user