Merge branch 'dev' into dev-dictionary
This commit is contained in:
commit
22ee69d1db
|
@ -88,13 +88,12 @@ const subscribeNotice = () => {
|
||||||
const read = (type: string, data: any) => {
|
const read = (type: string, data: any) => {
|
||||||
changeStatus_api('_read', [data.payload.id]).then((resp: any) => {
|
changeStatus_api('_read', [data.payload.id]).then((resp: any) => {
|
||||||
if (resp.status !== 200) return;
|
if (resp.status !== 200) return;
|
||||||
|
|
||||||
notification.close(data.payload.id);
|
notification.close(data.payload.id);
|
||||||
getList();
|
getList();
|
||||||
if (type !== '_read') {
|
if (type !== '_read') {
|
||||||
menuStory.routerPush('account/center', {
|
menuStory.routerPush('account/center', {
|
||||||
tabKey: 'StationMessage',
|
tabKey: 'StationMessage',
|
||||||
row: data.payload.detail,
|
row: data.payload,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -86,6 +86,7 @@ const activeKey = ref<DataType>(props.tabs?.[0]?.key || 'alarm');
|
||||||
const menuStory = useMenuStore();
|
const menuStory = useMenuStore();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|
||||||
|
const type = ref();
|
||||||
const userInfo = useUserInfo();
|
const userInfo = useUserInfo();
|
||||||
|
|
||||||
const getData = (type: string[]) => {
|
const getData = (type: string[]) => {
|
||||||
|
@ -107,6 +108,12 @@ const getData = (type: string[]) => {
|
||||||
termType: 'in',
|
termType: 'in',
|
||||||
column: 'topicProvider',
|
column: 'topicProvider',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: 'and',
|
||||||
|
value: 'unread',
|
||||||
|
termType: 'eq',
|
||||||
|
column: 'state',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -114,16 +121,14 @@ const getData = (type: string[]) => {
|
||||||
getList_api(params)
|
getList_api(params)
|
||||||
.then((resp: any) => {
|
.then((resp: any) => {
|
||||||
total.value = resp.result.total;
|
total.value = resp.result.total;
|
||||||
list.value = resp.result?.data?.filter((item:any)=>{
|
list.value = resp.result?.data || [];
|
||||||
return item?.state?.value === "unread"
|
|
||||||
}) || [];
|
|
||||||
})
|
})
|
||||||
.finally(() => (loading.value = false));
|
.finally(() => (loading.value = false));
|
||||||
};
|
};
|
||||||
|
|
||||||
const onChange = (_key: string) => {
|
const onChange = (_key: string) => {
|
||||||
const type = props.tabs.find((item: any) => item.key === _key)?.type || [];
|
type.value = props.tabs.find((item: any) => item.key === _key)?.type || [];
|
||||||
getData(type);
|
getData(type.value);
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
@ -136,7 +141,7 @@ const onRefresh = (id: string,index:number) => {
|
||||||
...refreshObj.value,
|
...refreshObj.value,
|
||||||
[id]: !flag,
|
[id]: !flag,
|
||||||
};
|
};
|
||||||
list.value.splice(index,1);
|
getData(type.value)
|
||||||
};
|
};
|
||||||
|
|
||||||
const onMore = (key: string) => {
|
const onMore = (key: string) => {
|
||||||
|
|
|
@ -15,4 +15,10 @@ export const CronRegEx = new RegExp(
|
||||||
'^\\s*($|#|\\w+\\s*=|(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?(?:,(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?)*)\\s+(\\?|\\*|(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?(?:,(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?)*)\\s+(\\?|\\*|(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?)*|\\?|\\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\\s+(\\?|\\*|(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?(?:,(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?)*|\\?|\\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\\s)+(\\?|\\*|(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?(?:,(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?)*))$',
|
'^\\s*($|#|\\w+\\s*=|(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?(?:,(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?)*)\\s+(\\?|\\*|(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?(?:,(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?)*)\\s+(\\?|\\*|(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?)*|\\?|\\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\\s+(\\?|\\*|(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?(?:,(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?)*|\\?|\\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\\s)+(\\?|\\*|(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?(?:,(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?)*))$',
|
||||||
);
|
);
|
||||||
|
|
||||||
export const isCron = (value: string) => CronRegEx.test(value)
|
export const isCron = (value: string) => CronRegEx.test(value)
|
||||||
|
|
||||||
|
//ipv6
|
||||||
|
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*$/);
|
||||||
|
|
||||||
|
//ipv4
|
||||||
|
export const regIpv4 = 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])$/);
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { regIPv6,regIpv4 } from './regular'
|
||||||
/**
|
/**
|
||||||
* 座机号+手机号校验
|
* 座机号+手机号校验
|
||||||
* @param value
|
* @param value
|
||||||
|
@ -24,4 +25,10 @@ export const testIP = (value: string) => {
|
||||||
const ip =
|
const ip =
|
||||||
/^([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])$/;
|
/^([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])$/;
|
||||||
return ip.test(value);
|
return ip.test(value);
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* 判断是否为Ipv4和Ipv6的地址
|
||||||
|
*/
|
||||||
|
export const testIpv4_6 = (value:string) => {
|
||||||
|
return regIpv4.test(value) || regIPv6.test(value)
|
||||||
|
}
|
|
@ -272,6 +272,10 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n
|
||||||
title: '说明',
|
title: '说明',
|
||||||
dataIndex: 'description',
|
dataIndex: 'description',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
|
form: {
|
||||||
|
rules: [
|
||||||
|
{ max: 20, message: '最多可输入20个字符' },
|
||||||
|
]},
|
||||||
doubleClick(record) {
|
doubleClick(record) {
|
||||||
if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) {
|
if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) {
|
||||||
return false
|
return false
|
||||||
|
@ -370,6 +374,10 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n
|
||||||
title: '说明',
|
title: '说明',
|
||||||
dataIndex: 'description',
|
dataIndex: 'description',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
|
form: {
|
||||||
|
rules: [
|
||||||
|
{ max: 20, message: '最多可输入20个字符' },
|
||||||
|
]},
|
||||||
doubleClick(record) {
|
doubleClick(record) {
|
||||||
if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) {
|
if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) {
|
||||||
return false
|
return false
|
||||||
|
@ -573,6 +581,10 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n
|
||||||
title: '说明',
|
title: '说明',
|
||||||
dataIndex: 'description',
|
dataIndex: 'description',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
|
form: {
|
||||||
|
rules: [
|
||||||
|
{ max: 20, message: '最多可输入20个字符' },
|
||||||
|
]},
|
||||||
doubleClick(record) {
|
doubleClick(record) {
|
||||||
if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) {
|
if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) {
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -107,6 +107,7 @@
|
||||||
v-model:value="modalForm.publicPort"
|
v-model:value="modalForm.publicPort"
|
||||||
placeholder="请输入公网端口"
|
placeholder="请输入公网端口"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
:precision="0"
|
||||||
/>
|
/>
|
||||||
</j-form-item>
|
</j-form-item>
|
||||||
</j-col>
|
</j-col>
|
||||||
|
@ -131,6 +132,7 @@ import {
|
||||||
} from '@/api/initHome';
|
} from '@/api/initHome';
|
||||||
import { modalState } from '../data/interface';
|
import { modalState } from '../data/interface';
|
||||||
import type { Rule } from 'ant-design-vue/es/form';
|
import type { Rule } from 'ant-design-vue/es/form';
|
||||||
|
import { testIpv4_6 } from '@/utils/validate';
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
/**
|
/**
|
||||||
* 初始化数据状态
|
* 初始化数据状态
|
||||||
|
@ -143,6 +145,7 @@ const visible = ref<boolean>(false);
|
||||||
const modalForm = reactive<modalState>({
|
const modalForm = reactive<modalState>({
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验官网地址
|
* 校验官网地址
|
||||||
*/
|
*/
|
||||||
|
@ -150,10 +153,7 @@ const validateUrl = async (_rule: Rule, value: string) => {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
return Promise.reject('请输入公网地址');
|
return Promise.reject('请输入公网地址');
|
||||||
} else {
|
} else {
|
||||||
var reg = new RegExp(
|
if (!testIpv4_6(value)) {
|
||||||
/^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$/,
|
|
||||||
);
|
|
||||||
if (!reg.test(value)) {
|
|
||||||
return Promise.reject('请输入正确的公网地址');
|
return Promise.reject('请输入正确的公网地址');
|
||||||
}
|
}
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
|
|
|
@ -16,7 +16,9 @@ import BaseMenu, { USER_CENTER_MENU_DATA } from '../data/baseMenu'
|
||||||
import { getSystemPermission, updateMenus } from '@/api/initHome';
|
import { getSystemPermission, updateMenus } from '@/api/initHome';
|
||||||
import { protocolList } from '@/utils/consts';
|
import { protocolList } from '@/utils/consts';
|
||||||
import { getProviders } from '@/api/data-collect/channel';
|
import { getProviders } from '@/api/data-collect/channel';
|
||||||
import { isNoCommunity } from '@/utils/utils';
|
import {
|
||||||
|
systemVersion,
|
||||||
|
} from '@/api/login'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取菜单数据
|
* 获取菜单数据
|
||||||
|
@ -30,7 +32,12 @@ const menuDatas = reactive({
|
||||||
* 查询支持的协议
|
* 查询支持的协议
|
||||||
*/
|
*/
|
||||||
const getProvidersFn = async () => {
|
const getProvidersFn = async () => {
|
||||||
if (!isNoCommunity) {
|
let version = ''
|
||||||
|
const req:any =await systemVersion()
|
||||||
|
if(req.success && req.result){
|
||||||
|
version = req.result.edition
|
||||||
|
}
|
||||||
|
if (version ==='community') {
|
||||||
return undefined
|
return undefined
|
||||||
} else {
|
} else {
|
||||||
const res: any = await getProviders();
|
const res: any = await getProviders();
|
||||||
|
|
|
@ -147,9 +147,8 @@
|
||||||
message: '请输入IP地址',
|
message: '请输入IP地址',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pattern:
|
validator:validateUrl,
|
||||||
/^([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])$/,
|
trigger: 'change',
|
||||||
message: '请输入正确的IP地址',
|
|
||||||
},
|
},
|
||||||
|
|
||||||
]"
|
]"
|
||||||
|
@ -341,10 +340,8 @@
|
||||||
'请输入公网 Host',
|
'请输入公网 Host',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pattern:
|
validator:validateUrl,
|
||||||
/^([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])$/,
|
trigger: 'change',
|
||||||
message:
|
|
||||||
'请输入正确的IP地址',
|
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
|
@ -514,7 +511,8 @@ import { getResourcesCurrent, getClusters } from '@/api/link/accessConfig';
|
||||||
import { update, save } from '@/api/link/accessConfig';
|
import { update, save } from '@/api/link/accessConfig';
|
||||||
import { onlyMessage } from '@/utils/comm';
|
import { onlyMessage } from '@/utils/comm';
|
||||||
import { isNumber } from 'lodash-es';
|
import { isNumber } from 'lodash-es';
|
||||||
|
import type { Rule } from 'ant-design-vue/es/form';
|
||||||
|
import { testIpv4_6 } from '@/utils/validate';
|
||||||
interface Form2 {
|
interface Form2 {
|
||||||
clusterNodeId: string | undefined;
|
clusterNodeId: string | undefined;
|
||||||
port: string | undefined;
|
port: string | undefined;
|
||||||
|
@ -598,6 +596,16 @@ const rules = {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const validateUrl=async (_rule: Rule, value: string) => {
|
||||||
|
if (!value) {
|
||||||
|
return Promise.reject('请输入IP地址');
|
||||||
|
} else {
|
||||||
|
if (!testIpv4_6(value)) {
|
||||||
|
return Promise.reject('请输入正确的IP地址');
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
}
|
||||||
const removeCluster = (item: Form2) => {
|
const removeCluster = (item: Form2) => {
|
||||||
let index = dynamicValidateForm.cluster.indexOf(item);
|
let index = dynamicValidateForm.cluster.indexOf(item);
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
|
|
|
@ -108,7 +108,7 @@ export const Validator = {
|
||||||
regIpv4: new RegExp(
|
regIpv4: new RegExp(
|
||||||
/^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
|
/^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
|
||||||
),
|
),
|
||||||
regIPv6: new RegExp(/^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/),
|
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*$/),
|
||||||
regDomain: new RegExp(
|
regDomain: new RegExp(
|
||||||
// /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i,
|
// /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i,
|
||||||
/^[a-zA-Z0-9]+([\-\.]{1}[a-zA-Z0-9]+)*\.[a-zA-Z]{2,}$/
|
/^[a-zA-Z0-9]+([\-\.]{1}[a-zA-Z0-9]+)*\.[a-zA-Z]{2,}$/
|
||||||
|
|
|
@ -570,7 +570,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getImage, onlyMessage } from '@/utils/comm';
|
import { getImage, onlyMessage } from '@/utils/comm';
|
||||||
import CascadeApi from '@/api/media/cascade';
|
import CascadeApi from '@/api/media/cascade';
|
||||||
|
import { regIPv6 } from '@/utils/regular'
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|
||||||
|
@ -674,6 +674,8 @@ onMounted(() => {
|
||||||
|
|
||||||
const regDomain = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.|$)){4}$/
|
const regDomain = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.|$)){4}$/
|
||||||
// /[j-zA-Z0-9][-j-zA-Z0-9]{0,62}(\.[j-zA-Z0-9][-j-zA-Z0-9]{0,62})+\.?/;
|
// /[j-zA-Z0-9][-j-zA-Z0-9]{0,62}(\.[j-zA-Z0-9][-j-zA-Z0-9]{0,62})+\.?/;
|
||||||
|
|
||||||
|
const ipv6 = 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*$/)
|
||||||
/**
|
/**
|
||||||
* 上级SIP地址 字段验证
|
* 上级SIP地址 字段验证
|
||||||
* @param _
|
* @param _
|
||||||
|
@ -701,8 +703,8 @@ const checkHost = (host: string, port: string | number | undefined) => {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
} else if (!host) {
|
} else if (!host) {
|
||||||
return Promise.reject(new Error('请输入IP 地址'));
|
return Promise.reject(new Error('请输入IP 地址'));
|
||||||
} else if (host && !regDomain.test(host)) {
|
} else if (host && !regDomain.test(host) && !regIPv6.test(host)) {
|
||||||
return Promise.reject(new Error('请输入0.0.0.0~255.255.255.255的IP地址'));
|
return Promise.reject(new Error('请输入正确的IP地址'));
|
||||||
} else if (!port) {
|
} else if (!port) {
|
||||||
return Promise.reject(new Error('请输入端口'));
|
return Promise.reject(new Error('请输入端口'));
|
||||||
} else if ((port && Number(port) < 1) || Number(port) > 65535) {
|
} else if ((port && Number(port) < 1) || Number(port) > 65535) {
|
||||||
|
|
|
@ -288,7 +288,7 @@ import { queryProviders, queryDetail, save, update } from '@/api/media/stream';
|
||||||
import type { FormInstance } from 'ant-design-vue';
|
import type { FormInstance } from 'ant-design-vue';
|
||||||
|
|
||||||
import { FormDataType } from '../type';
|
import { FormDataType } from '../type';
|
||||||
|
import { testIpv4_6 } from '@/utils/validate';
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const view = route.query.view as string;
|
const view = route.query.view as string;
|
||||||
|
@ -301,10 +301,6 @@ const options = ref([]);
|
||||||
const checked = ref(false);
|
const checked = ref(false);
|
||||||
|
|
||||||
const Validator = {
|
const Validator = {
|
||||||
regIpv4: new RegExp(
|
|
||||||
/^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
|
|
||||||
),
|
|
||||||
regIPv6: new RegExp(/^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/),
|
|
||||||
regDomain: new RegExp(
|
regDomain: new RegExp(
|
||||||
/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i,
|
/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i,
|
||||||
),
|
),
|
||||||
|
@ -314,8 +310,7 @@ const Validator = {
|
||||||
const validateAddress = (_rule: any, value: string): Promise<any> =>
|
const validateAddress = (_rule: any, value: string): Promise<any> =>
|
||||||
new Promise(async (resolve, reject) => {
|
new Promise(async (resolve, reject) => {
|
||||||
if (
|
if (
|
||||||
Validator.regIpv4.test(value) ||
|
testIpv4_6(value) ||
|
||||||
Validator.regIPv6.test(value) ||
|
|
||||||
Validator.regDomain.test(value)
|
Validator.regDomain.test(value)
|
||||||
) {
|
) {
|
||||||
return resolve('');
|
return resolve('');
|
||||||
|
|
|
@ -86,7 +86,8 @@ import { getImage, onlyMessage } from '@/utils/comm';
|
||||||
import { queryLevel, saveLevel } from '@/api/rule-engine/config';
|
import { queryLevel, saveLevel } from '@/api/rule-engine/config';
|
||||||
import { LevelItem } from './typing';
|
import { LevelItem } from './typing';
|
||||||
import Io from './Io/index.vue';
|
import Io from './Io/index.vue';
|
||||||
const list = ref([
|
import { isNoCommunity } from '@/utils/utils';
|
||||||
|
const list = isNoCommunity ?[
|
||||||
{
|
{
|
||||||
key: 'config',
|
key: 'config',
|
||||||
tab: '告警级别',
|
tab: '告警级别',
|
||||||
|
@ -95,7 +96,12 @@ const list = ref([
|
||||||
key: 'io',
|
key: 'io',
|
||||||
tab: '数据流转',
|
tab: '数据流转',
|
||||||
},
|
},
|
||||||
]);
|
] : [
|
||||||
|
{
|
||||||
|
key: 'config',
|
||||||
|
tab: '告警级别',
|
||||||
|
}
|
||||||
|
]
|
||||||
let levels = ref<LevelItem[]>([]);
|
let levels = ref<LevelItem[]>([]);
|
||||||
let tab = ref<'io' | 'config' | string>('config');
|
let tab = ref<'io' | 'config' | string>('config');
|
||||||
const getAlarmLevel = () => {
|
const getAlarmLevel = () => {
|
||||||
|
|
|
@ -83,7 +83,7 @@ import {
|
||||||
} from '@/utils/consts';
|
} from '@/utils/consts';
|
||||||
import { protocolList } from '@/utils/consts';
|
import { protocolList } from '@/utils/consts';
|
||||||
import { getProviders } from '@/api/data-collect/channel';
|
import { getProviders } from '@/api/data-collect/channel';
|
||||||
|
import { isNoCommunity } from '@/utils/utils';
|
||||||
const selectedKeys: any = ref([]);
|
const selectedKeys: any = ref([]);
|
||||||
const treeData = ref<any>([]);
|
const treeData = ref<any>([]);
|
||||||
const systemMenu: any = ref([]);
|
const systemMenu: any = ref([]);
|
||||||
|
@ -118,10 +118,14 @@ const params = {
|
||||||
*/
|
*/
|
||||||
let filterProtocolList: any[] = [];
|
let filterProtocolList: any[] = [];
|
||||||
const getProvidersFn = async () => {
|
const getProvidersFn = async () => {
|
||||||
const res: any = await getProviders();
|
if(!isNoCommunity){
|
||||||
filterProtocolList = protocolList.filter((item) => {
|
return
|
||||||
|
}else{
|
||||||
|
const res: any = await getProviders();
|
||||||
|
filterProtocolList = protocolList.filter((item) => {
|
||||||
return res.result?.find((val: any) => item.alias == val.id);
|
return res.result?.find((val: any) => item.alias == val.id);
|
||||||
})
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
getProvidersFn();
|
getProvidersFn();
|
||||||
function filterTree(nodes: Array<any>, selectedKeys: Array<any>) {
|
function filterTree(nodes: Array<any>, selectedKeys: Array<any>) {
|
||||||
|
|
|
@ -97,6 +97,7 @@ export default defineConfig(({ mode}) => {
|
||||||
// target: 'http://192.168.32.163:8844', //张季本地
|
// target: 'http://192.168.32.163:8844', //张季本地
|
||||||
// target: 'http://120.77.179.54:8844', // 120测试
|
// target: 'http://120.77.179.54:8844', // 120测试
|
||||||
target: 'http://192.168.33.46:8844', // 本地开发环境
|
target: 'http://192.168.33.46:8844', // 本地开发环境
|
||||||
|
// target: 'http://192.168.32.5:8848', // 刘本地
|
||||||
ws: 'ws://192.168.33.46:8844',
|
ws: 'ws://192.168.33.46:8844',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: (path) => path.replace(/^\/api/, '')
|
rewrite: (path) => path.replace(/^\/api/, '')
|
||||||
|
|
Loading…
Reference in New Issue