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/regular.ts b/src/utils/regular.ts index c98f5d64..cee953c2 100644 --- a/src/utils/regular.ts +++ b/src/utils/regular.ts @@ -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}))?)*))$', ); -export const isCron = (value: string) => CronRegEx.test(value) \ No newline at end of file +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])$/); \ No newline at end of file diff --git a/src/utils/validate.ts b/src/utils/validate.ts index 85542cb4..01a4658d 100644 --- a/src/utils/validate.ts +++ b/src/utils/validate.ts @@ -1,3 +1,4 @@ +import { regIPv6,regIpv4 } from './regular' /** * 座机号+手机号校验 * @param value @@ -24,4 +25,10 @@ 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) => { + return regIpv4.test(value) || regIPv6.test(value) +} \ No newline at end of file diff --git a/src/views/device/components/Metadata/Base/columns.tsx b/src/views/device/components/Metadata/Base/columns.tsx index 595431c2..36412237 100644 --- a/src/views/device/components/Metadata/Base/columns.tsx +++ b/src/views/device/components/Metadata/Base/columns.tsx @@ -272,6 +272,10 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n title: '说明', dataIndex: 'description', type: 'text', + form: { + rules: [ + { max: 20, message: '最多可输入20个字符' }, + ]}, doubleClick(record) { if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) { return false @@ -370,6 +374,10 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n title: '说明', dataIndex: 'description', type: 'text', + form: { + rules: [ + { max: 20, message: '最多可输入20个字符' }, + ]}, doubleClick(record) { if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) { return false @@ -573,6 +581,10 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n title: '说明', dataIndex: 'description', type: 'text', + form: { + rules: [ + { max: 20, message: '最多可输入20个字符' }, + ]}, doubleClick(record) { if (isExtendsProduct(record.id, productNoEdit?.value, 'description')) { return false 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/init-home/Menu/index.vue b/src/views/init-home/Menu/index.vue index 8247af86..d4270dde 100644 --- a/src/views/init-home/Menu/index.vue +++ b/src/views/init-home/Menu/index.vue @@ -16,7 +16,9 @@ import BaseMenu, { USER_CENTER_MENU_DATA } from '../data/baseMenu' import { getSystemPermission, updateMenus } from '@/api/initHome'; import { protocolList } from '@/utils/consts'; 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 () => { - if (!isNoCommunity) { + let version = '' + const req:any =await systemVersion() + if(req.success && req.result){ + version = req.result.edition + } + if (version ==='community') { return undefined } else { const res: any = await getProviders(); 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..1ecbfa22 100644 --- a/src/views/media/Cascade/Save/index.vue +++ b/src/views/media/Cascade/Save/index.vue @@ -570,7 +570,7 @@