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 }; }