From c9a6e97795e3fc4e0915c570474d04cee47e7a85 Mon Sep 17 00:00:00 2001 From: qiaochuLei <124648559+qiaochuLei@users.noreply.github.com> Date: Thu, 31 Aug 2023 15:51:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20bug#17715=E3=80=8117705=E3=80=8117699?= =?UTF-8?q?=E3=80=8117696?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: bug#17696、17694、17693、17691、17676 * fix: bug#17715、17705、17699、17696 --- src/components/Layout/components/Notice.vue | 3 +-- .../Layout/components/NoticeInfo.vue | 17 ++++++++----- src/utils/validate.ts | 10 +++++++- src/views/init-home/InitData/index.vue | 8 +++---- .../AccessConfig/components/Media/GB28181.vue | 24 ++++++++++++------- src/views/link/Type/data.ts | 2 +- src/views/media/Cascade/Save/index.vue | 6 +++-- src/views/media/Stream/Detail/index.vue | 9 ++----- 8 files changed, 48 insertions(+), 31 deletions(-) diff --git a/src/components/Layout/components/Notice.vue b/src/components/Layout/components/Notice.vue index 5d8a2142..f5a78142 100644 --- a/src/components/Layout/components/Notice.vue +++ b/src/components/Layout/components/Notice.vue @@ -88,13 +88,12 @@ const subscribeNotice = () => { const read = (type: string, data: any) => { changeStatus_api('_read', [data.payload.id]).then((resp: any) => { if (resp.status !== 200) return; - notification.close(data.payload.id); getList(); if (type !== '_read') { menuStory.routerPush('account/center', { tabKey: 'StationMessage', - row: data.payload.detail, + row: data.payload, }); } }); diff --git a/src/components/Layout/components/NoticeInfo.vue b/src/components/Layout/components/NoticeInfo.vue index a954861c..758cb396 100644 --- a/src/components/Layout/components/NoticeInfo.vue +++ b/src/components/Layout/components/NoticeInfo.vue @@ -86,6 +86,7 @@ const activeKey = ref(props.tabs?.[0]?.key || 'alarm'); const menuStory = useMenuStore(); const route = useRoute(); +const type = ref(); const userInfo = useUserInfo(); const getData = (type: string[]) => { @@ -107,6 +108,12 @@ const getData = (type: string[]) => { termType: 'in', column: 'topicProvider', }, + { + type: 'and', + value: 'unread', + termType: 'eq', + column: 'state', + }, ], }, ], @@ -114,16 +121,14 @@ const getData = (type: string[]) => { getList_api(params) .then((resp: any) => { total.value = resp.result.total; - list.value = resp.result?.data?.filter((item:any)=>{ - return item?.state?.value === "unread" - }) || []; + list.value = resp.result?.data || []; }) .finally(() => (loading.value = false)); }; const onChange = (_key: string) => { - const type = props.tabs.find((item: any) => item.key === _key)?.type || []; - getData(type); + type.value = props.tabs.find((item: any) => item.key === _key)?.type || []; + getData(type.value); }; onMounted(async () => { @@ -136,7 +141,7 @@ const onRefresh = (id: string,index:number) => { ...refreshObj.value, [id]: !flag, }; - list.value.splice(index,1); + getData(type.value) }; const onMore = (key: string) => { diff --git a/src/utils/validate.ts b/src/utils/validate.ts index 85542cb4..350d7872 100644 --- a/src/utils/validate.ts +++ b/src/utils/validate.ts @@ -24,4 +24,12 @@ export const testIP = (value: string) => { 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])$/; return ip.test(value); -}; \ No newline at end of file +}; +/** + * 判断是否为Ipv4和Ipv6的地址 + */ +export const testIpv4_6 = (value:string) => { + 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])$/); + 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*$/); + return regIpv4.test(value) || regIPv6.test(value) +} \ No newline at end of file diff --git a/src/views/init-home/InitData/index.vue b/src/views/init-home/InitData/index.vue index 5980f8f2..b51dd938 100644 --- a/src/views/init-home/InitData/index.vue +++ b/src/views/init-home/InitData/index.vue @@ -107,6 +107,7 @@ v-model:value="modalForm.publicPort" placeholder="请输入公网端口" style="width: 100%" + :precision="0" /> @@ -131,6 +132,7 @@ import { } from '@/api/initHome'; import { modalState } from '../data/interface'; import type { Rule } from 'ant-design-vue/es/form'; +import { testIpv4_6 } from '@/utils/validate'; const formRef = ref(); /** * 初始化数据状态 @@ -143,6 +145,7 @@ const visible = ref(false); const modalForm = reactive({ host: '0.0.0.0', }); + /** * 校验官网地址 */ @@ -150,10 +153,7 @@ const validateUrl = async (_rule: Rule, value: string) => { if (!value) { return Promise.reject('请输入公网地址'); } else { - var reg = new RegExp( - /^(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)) { + if (!testIpv4_6(value)) { return Promise.reject('请输入正确的公网地址'); } return Promise.resolve(); diff --git a/src/views/link/AccessConfig/components/Media/GB28181.vue b/src/views/link/AccessConfig/components/Media/GB28181.vue index ee5e5d04..b8d70de7 100644 --- a/src/views/link/AccessConfig/components/Media/GB28181.vue +++ b/src/views/link/AccessConfig/components/Media/GB28181.vue @@ -147,9 +147,8 @@ message: '请输入IP地址', }, { - pattern: - /^([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])$/, - message: '请输入正确的IP地址', + validator:validateUrl, + trigger: 'change', }, ]" @@ -341,10 +340,8 @@ '请输入公网 Host', }, { - pattern: - /^([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])$/, - message: - '请输入正确的IP地址', + validator:validateUrl, + trigger: 'change', }, ]" > @@ -514,7 +511,8 @@ import { getResourcesCurrent, getClusters } from '@/api/link/accessConfig'; import { update, save } from '@/api/link/accessConfig'; import { onlyMessage } from '@/utils/comm'; import { isNumber } from 'lodash-es'; - +import type { Rule } from 'ant-design-vue/es/form'; +import { testIpv4_6 } from '@/utils/validate'; interface Form2 { clusterNodeId: 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) => { let index = dynamicValidateForm.cluster.indexOf(item); if (index !== -1) { diff --git a/src/views/link/Type/data.ts b/src/views/link/Type/data.ts index 162cd7f3..d2e89b52 100644 --- a/src/views/link/Type/data.ts +++ b/src/views/link/Type/data.ts @@ -108,7 +108,7 @@ export 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}$/), + 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( // /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i, /^[a-zA-Z0-9]+([\-\.]{1}[a-zA-Z0-9]+)*\.[a-zA-Z]{2,}$/ diff --git a/src/views/media/Cascade/Save/index.vue b/src/views/media/Cascade/Save/index.vue index 7ed46056..d4709cad 100644 --- a/src/views/media/Cascade/Save/index.vue +++ b/src/views/media/Cascade/Save/index.vue @@ -674,6 +674,8 @@ onMounted(() => { 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})+\.?/; + +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地址 字段验证 * @param _ @@ -701,8 +703,8 @@ const checkHost = (host: string, port: string | number | undefined) => { return Promise.resolve(); } else if (!host) { return Promise.reject(new Error('请输入IP 地址')); - } else if (host && !regDomain.test(host)) { - return Promise.reject(new Error('请输入0.0.0.0~255.255.255.255的IP地址')); + } else if (host && !regDomain.test(host) && !ipv6.test(host)) { + return Promise.reject(new Error('请输入正确的IP地址')); } else if (!port) { return Promise.reject(new Error('请输入端口')); } else if ((port && Number(port) < 1) || Number(port) > 65535) { diff --git a/src/views/media/Stream/Detail/index.vue b/src/views/media/Stream/Detail/index.vue index c52cc884..ba2e5517 100644 --- a/src/views/media/Stream/Detail/index.vue +++ b/src/views/media/Stream/Detail/index.vue @@ -288,7 +288,7 @@ import { queryProviders, queryDetail, save, update } from '@/api/media/stream'; import type { FormInstance } from 'ant-design-vue'; import { FormDataType } from '../type'; - +import { testIpv4_6 } from '@/utils/validate'; const router = useRouter(); const route = useRoute(); const view = route.query.view as string; @@ -301,10 +301,6 @@ const options = ref([]); const checked = ref(false); 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( /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i, ), @@ -314,8 +310,7 @@ const Validator = { const validateAddress = (_rule: any, value: string): Promise => new Promise(async (resolve, reject) => { if ( - Validator.regIpv4.test(value) || - Validator.regIPv6.test(value) || + testIpv4_6(value) || Validator.regDomain.test(value) ) { return resolve('');