Files
SaaS-lib/nervui-noenetwork/src/view/Noeacl/config.ts
xuziqiang d0155dbe3c push
2024-05-15 17:29:42 +08:00

421 lines
10 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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',
},
],
},
},
],
},
],
};