@jdlinker/linker
Version:
jdLinker 系统模块
207 lines (198 loc) • 5.78 kB
text/typescript
import { validateField } from '../../../api/data-collect/channel';
import { FormDataType } from './type';
import type { Rule } from 'ant-design-vue/lib/form';
export const FormState: FormDataType = {
name: '',
provider: undefined,
configuration: {
host: '',
port: '502',
endpoint: '',
securityPolicy: 'None',
securityMode: undefined,
certId: undefined,
authType: 'anonymous',
username: '',
password: '',
deviceId: undefined,
deviceName: undefined
},
description: ''
};
export const StatusColorEnum = {
running: 'success',
disabled: 'error',
partialError: 'processing',
failed: 'warning',
stopped: 'default'
};
export const updateStatus = {
disabled: {
state: 'enabled',
runningState: 'running'
},
enabled: {
state: 'disabled',
runningState: 'stopped'
}
};
export const regOnlyNumber = new RegExp(/^\d+$/);
export const regIP = new RegExp(
/^([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/
);
export const regIPv6 = new RegExp(
/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/
);
export const regDomain = new RegExp(/([0-9a-z-]{2,}\.[0-9a-z-]{2,3}\.[0-9a-z-]{2,3}|[0-9a-z-]{2,}\.[0-9a-z-]{2,3})$/i);
export const checkEndpoint = (_rule: Rule, value: string): Promise<any> =>
new Promise(async (resolve, reject) => {
if (!value) return resolve('');
const res: any = await validateField(value);
return res.result.passed ? resolve('') : reject(res.result.reason);
});
export const checkHost = (_rule: Rule, value: string): Promise<any> =>
new Promise(async (resolve, reject) => {
if (!value) return resolve('');
if (!(regIP.test(value) || regIPv6.test(value) || regDomain.test(value))) {
return reject('请输入正确格式的Modbus主机IP地址');
}
return resolve('');
});
export const FormValidate = {
name: [
{ required: true, message: '请输入名称', trigger: 'blur' },
{ max: 64, message: '最多可输入64个字符' }
],
// provider: [{ required: true, message: '请选择通讯协议' }],
host: [
{
required: true,
message: '请输入Modbus主机IP'
},
{
validator: checkHost,
trigger: 'blur'
// message: '请输入正确格式的Modbus主机IP地址',
}
],
port: [
{
required: true,
message: '请输入端口'
},
{
pattern: regOnlyNumber,
message: '请输入0-65535之间的正整数'
}
],
endpoint: [
{
required: true,
message: '请输入端点url'
},
{
validator: checkEndpoint,
trigger: 'blur'
}
],
securityPolicy: [
{
required: true,
message: '请选择安全策略'
}
],
securityMode: [
{
required: true,
message: '请选择安全模式'
}
],
certId: [
{
required: true,
message: '请选择证书'
}
],
authType: [
{
required: true,
message: '请选择权限认证'
}
],
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ max: 64, message: '最多可输入64个字符' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ max: 64, message: '最多可输入64个字符' }
],
description: [{ max: 200, message: '最多可输入200个字符' }]
};
export const columns = [
{
title: '通道名称',
dataIndex: 'name',
key: 'name',
ellipsis: true,
fixed: 'left',
search: {
type: 'string'
}
},
{
title: '通讯协议',
dataIndex: 'provider',
key: 'provider',
ellipsis: true,
search: {
type: 'select',
options: [
{ label: 'OPC_UA', value: 'OPC_UA' },
{ label: 'MODBUS_TCP', value: 'MODBUS_TCP' }
]
}
},
{
title: '状态',
dataIndex: 'state',
key: 'state',
ellipsis: true,
scopedSlots: true,
search: {
type: 'select',
options: [
{ label: '正常', value: 'enabled' },
{ label: '禁用', value: 'disabled' }
]
}
},
{
title: '运行状态',
dataIndex: 'runningState',
key: 'runningState',
ellipsis: true,
scopedSlots: true,
search: {
type: 'select',
options: [
{ label: '运行中', value: 'running' },
{ label: '部分错误', value: 'partialError' },
{ label: '错误', value: 'failed' }
]
}
},
{
title: '说明',
dataIndex: 'description',
key: 'description',
ellipsis: true
},
{
title: '操作',
key: 'action',
fixed: 'right',
width: 200,
scopedSlots: true
}
];