From 68362ba3e37ba91c46eb7581bf9580eda4e30686 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 30 May 2024 15:41:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=8F=AF=E6=94=B6=E8=B5=B7=E5=B7=A6=E4=BE=A7?= =?UTF-8?q?=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configParamTreeTable/hooks/useOptions.ts | 157 ++++++++++++++++ .../configParamTreeTable/index.vue | 177 +++--------------- 2 files changed, 182 insertions(+), 152 deletions(-) create mode 100644 src/views/configManage/configParamTreeTable/hooks/useOptions.ts diff --git a/src/views/configManage/configParamTreeTable/hooks/useOptions.ts b/src/views/configManage/configParamTreeTable/hooks/useOptions.ts new file mode 100644 index 00000000..5b2f00dc --- /dev/null +++ b/src/views/configManage/configParamTreeTable/hooks/useOptions.ts @@ -0,0 +1,157 @@ +import useI18n from '@/hooks/useI18n'; +import { regExpIPv4, regExpIPv6, validURL } from '@/utils/regular-utils'; + +export default function useOptions() { + const { t } = useI18n(); + + /**规则校验 */ + function ruleVerification(row: Record): (string | boolean)[] { + let result = [true, '']; + const type = row.type; + const value = row.value; + const filter = row.filter; + const display = row.display; + + // 子嵌套的不检查 + if (row.array) { + return result; + } + + // 可选的同时没有值不检查 + if (row.optional === 'true' && !value) { + return result; + } + switch (type) { + case 'int': + if (filter && filter.indexOf('~') !== -1) { + const filterArr = filter.split('~'); + const minInt = parseInt(filterArr[0]); + const maxInt = parseInt(filterArr[1]); + const valueInt = parseInt(value); + if (valueInt < minInt || valueInt > maxInt) { + return [ + false, + t('views.configManage.configParamForm.requireInt', { + display, + filter, + }), + ]; + } + } + break; + case 'ipv4': + if (!regExpIPv4.test(value)) { + return [ + false, + t('views.configManage.configParamForm.requireIpv4', { display }), + ]; + } + break; + case 'ipv6': + if (!regExpIPv6.test(value)) { + return [ + false, + t('views.configManage.configParamForm.requireIpv6', { display }), + ]; + } + break; + case 'enum': + if (filter && filter.indexOf('{') === 1) { + let filterJson: Record = {}; + try { + filterJson = JSON.parse(filter); //string---json + } catch (error) { + console.error(error); + } + + if (!Object.keys(filterJson).includes(`${value}`)) { + return [ + false, + t('views.configManage.configParamForm.requireEnum', { display }), + ]; + } + } + break; + case 'bool': + if (filter && filter.indexOf('{') === 1) { + let filterJson: Record = {}; + try { + filterJson = JSON.parse(filter); //string---json + } catch (error) { + console.error(error); + } + + if (!Object.values(filterJson).includes(`${value}`)) { + return [ + false, + t('views.configManage.configParamForm.requireBool', { display }), + ]; + } + } + break; + case 'string': + // 字符串长度判断 + if (filter && filter.indexOf('~') !== -1) { + try { + const filterArr = filter.split('~'); + let rule = new RegExp( + '^\\S{' + filterArr[0] + ',' + filterArr[1] + '}$' + ); + if (!rule.test(value)) { + return [ + false, + t('views.configManage.configParamForm.requireString', { + display, + }), + ]; + } + } catch (error) { + console.error(error); + } + } + // 字符串http判断 + if (value.startsWith('http')) { + try { + if (!validURL(value)) { + return [ + false, + t('views.configManage.configParamForm.requireString', { + display, + }), + ]; + } + } catch (error) { + console.error(error); + } + } + + break; + case 'regex': + if (filter) { + try { + let regex = new RegExp(filter); + if (!regex.test(value)) { + return [ + false, + t('views.configManage.configParamForm.requireString', { + display, + }), + ]; + } + } catch (error) { + console.error(error); + } + } + break; + + default: + return [ + false, + t('views.configManage.configParamForm.requireUn', { display }), + ]; + } + return result; + } + + return { ruleVerification }; +} diff --git a/src/views/configManage/configParamTreeTable/index.vue b/src/views/configManage/configParamTreeTable/index.vue index 2f77656f..95a807d8 100644 --- a/src/views/configManage/configParamTreeTable/index.vue +++ b/src/views/configManage/configParamTreeTable/index.vue @@ -13,11 +13,12 @@ import { addParamConfigInfo, } from '@/api/configManage/configParam'; import useNeInfoStore from '@/store/modules/neinfo'; -import { regExpIPv4, regExpIPv6, validURL } from '@/utils/regular-utils'; +import useOptions from './hooks/useOptions'; import { SizeType } from 'ant-design-vue/lib/config-provider'; import { DataNode } from 'ant-design-vue/lib/tree'; const neInfoStore = useNeInfoStore(); const { t } = useI18n(); +const { ruleVerification } = useOptions(); /**网元参数 */ let neCascaderOptions = ref[]>([]); @@ -25,6 +26,14 @@ let neCascaderOptions = ref[]>([]); /**网元类型选择 type,id */ let neTypeSelect = ref(['', '']); +/**左侧导航是否可收起 */ +let collapsible = ref(true); + +/**改变收起状态 */ +function changeCollapsible() { + collapsible.value = !collapsible.value; +} + /**对象信息状态类型 */ type TreeStateType = { /**网元 loading */ @@ -945,155 +954,6 @@ function arrayAddInit(data: any[], dataRule: any) { return ruleFrom; } -/**规则校验 */ -function ruleVerification(row: Record): (string | boolean)[] { - let result = [true, '']; - const type = row.type; - const value = row.value; - const filter = row.filter; - const display = row.display; - - // 子嵌套的不检查 - if (row.array) { - return result; - } - - // 可选的同时没有值不检查 - if (row.optional === 'true' && !value) { - return result; - } - switch (type) { - case 'int': - if (filter && filter.indexOf('~') !== -1) { - const filterArr = filter.split('~'); - const minInt = parseInt(filterArr[0]); - const maxInt = parseInt(filterArr[1]); - const valueInt = parseInt(value); - if (valueInt < minInt || valueInt > maxInt) { - return [ - false, - t('views.configManage.configParamForm.requireInt', { - display, - filter, - }), - ]; - } - } - break; - case 'ipv4': - if (!regExpIPv4.test(value)) { - return [ - false, - t('views.configManage.configParamForm.requireIpv4', { display }), - ]; - } - break; - case 'ipv6': - if (!regExpIPv6.test(value)) { - return [ - false, - t('views.configManage.configParamForm.requireIpv6', { display }), - ]; - } - break; - case 'enum': - if (filter && filter.indexOf('{') === 1) { - let filterJson: Record = {}; - try { - filterJson = JSON.parse(filter); //string---json - } catch (error) { - console.error(error); - } - - if (!Object.keys(filterJson).includes(`${value}`)) { - return [ - false, - t('views.configManage.configParamForm.requireEnum', { display }), - ]; - } - } - break; - case 'bool': - if (filter && filter.indexOf('{') === 1) { - let filterJson: Record = {}; - try { - filterJson = JSON.parse(filter); //string---json - } catch (error) { - console.error(error); - } - - if (!Object.values(filterJson).includes(`${value}`)) { - return [ - false, - t('views.configManage.configParamForm.requireBool', { display }), - ]; - } - } - break; - case 'string': - // 字符串长度判断 - if (filter && filter.indexOf('~') !== -1) { - try { - const filterArr = filter.split('~'); - let rule = new RegExp( - '^\\S{' + filterArr[0] + ',' + filterArr[1] + '}$' - ); - if (!rule.test(value)) { - return [ - false, - t('views.configManage.configParamForm.requireString', { - display, - }), - ]; - } - } catch (error) { - console.error(error); - } - } - // 字符串http判断 - if (value.startsWith('http')) { - try { - if (!validURL(value)) { - return [ - false, - t('views.configManage.configParamForm.requireString', { - display, - }), - ]; - } - } catch (error) { - console.error(error); - } - } - - break; - case 'regex': - if (filter) { - try { - let regex = new RegExp(filter); - if (!regex.test(value)) { - return [ - false, - t('views.configManage.configParamForm.requireString', { - display, - }), - ]; - } - } catch (error) { - console.error(error); - } - } - break; - - default: - return [ - false, - t('views.configManage.configParamForm.requireUn', { display }), - ]; - } - return result; -} - /**对话框对象信息状态类型 */ type ModalStateType = { /**添加框是否显示 */ @@ -1197,7 +1057,13 @@ onMounted(() => {