diff --git a/src/api/configManage/configParam.ts b/src/api/configManage/configParam.ts index 29dd00cd..54101596 100644 --- a/src/api/configManage/configParam.ts +++ b/src/api/configManage/configParam.ts @@ -38,13 +38,13 @@ export async function getParamConfigTopTab(neType: string) { } /** - * 查询配置参数标签栏对应信息 + * 查询配置参数标签栏对应信息和规则 * @param neType 网元类型 * @param topTag * @param neId * @returns object { wrRule, dataArr } */ -async function getParamConfigInfo( +async function getParamConfigInfoAndRule( neType: string, topTag: string, neId: string @@ -57,7 +57,6 @@ async function getParamConfigInfo( params: { SQL: `SELECT param_json FROM param_config WHERE ne_type = '${neType}' AND top_tag='${topTag}'`, }, - timeout: 1_000, }), // 获取对应信息 request({ @@ -66,7 +65,6 @@ async function getParamConfigInfo( params: { ne_id: neId, }, - timeout: 1_000, }), ]).then(resArr => { let wrRule: Record = {}; @@ -120,7 +118,11 @@ export async function getParamConfigInfoForm( topTag: string, neId: string ) { - const { wrRule, dataArr } = await getParamConfigInfo(neType, topTag, neId); + const { wrRule, dataArr } = await getParamConfigInfoAndRule( + neType, + topTag, + neId + ); // 拼装数据 const result = { @@ -187,6 +189,35 @@ export async function getParamConfigInfoForm( return result; } +/** + * 查询配置参数标签栏对应信息 + * @param neType 网元类型 + * @param topTag + * @param neId + * @returns object + */ +export async function getParamConfigInfo( + neType: string, + topTag: string, + neId: string +) { + // 发起请求 + const result = await request({ + url: `/api/rest/systemManagement/v1/elementType/${neType.toLowerCase()}/objectType/config/${topTag}`, + method: 'get', + params: { + ne_id: neId, + }, + }); + // 解析数据 + if (result.code === RESULT_CODE_SUCCESS && Array.isArray(result.data.data)) { + return Object.assign(result, { + data: parseObjLineToHump(result.data.data), + }); + } + return result; +} + /** * 查询配置参数标签栏对应信息子节点 * @param neType 网元类型 diff --git a/src/api/faultManage/actAlarm.ts b/src/api/faultManage/actAlarm.ts index 7d96ac81..d668a4b5 100644 --- a/src/api/faultManage/actAlarm.ts +++ b/src/api/faultManage/actAlarm.ts @@ -294,7 +294,7 @@ export async function exportAll(query: Record) { * @returns bolb */ export async function origGet() { - let totalSQL = `select count(*) as value,orig_severity as name from alarm WHERE alarm_status='1' group by orig_severity`; + let totalSQL = `select count(*) as value,orig_severity as name from alarm WHERE alarm_status='1' and orig_severity!='Event' group by orig_severity`; // 发起请求 const result = await request({ @@ -332,7 +332,7 @@ export async function top3Sel(filterFlag?: string) { let filter = ` WHERE alarm_status='1'and orig_severity='${filterFlag}'`; if (!filterFlag) filter = "WHERE alarm_status='1'"; - let top3SQL = `select count(*) as value,ne_type as name from alarm ${filter} group by ne_type ORDER BY value desc limit 0,3 `; + let top3SQL = `select count(*) as value,ne_type as name from alarm ${filter} and orig_severity!='Event' group by ne_type ORDER BY value desc limit 0,3 `; // 发起请求 const result = await request({ diff --git a/src/api/faultManage/eventAlarm.ts b/src/api/faultManage/eventAlarm.ts new file mode 100644 index 00000000..20cf5cd0 --- /dev/null +++ b/src/api/faultManage/eventAlarm.ts @@ -0,0 +1,139 @@ +import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; +import { request } from '@/plugins/http-fetch'; +import { parseObjLineToHump } from '@/utils/parse-utils'; +import { parseDateToStr } from '@/utils/date-utils'; +import useUserStore from '@/store/modules/user'; + + + +/** + * 查询列表 + * @param query 查询参数 + * @returns object + */ +export async function listAct(query: Record) { + let totalSQL = `select count(*) as total from alarm_event where 1=1 `; + let rowsSQL = `select * from alarm_event where 1=1 `; + // 查询 + let querySQL = ''; + if (query.alarmCode) { + querySQL += ` and alarm_code = '${query.alarmCode}' `; + } + + if (query.alarmType) { + querySQL += ` and alarm_type = '${query.alarmType}' `; + } + + if (query.pvFlag) { + querySQL += ` and pv_flag = '${query.pvFlag}' `; + } + + + + if (query.neId) { + querySQL += ` and ne_id like '%${query.neId}%' `; + } + + if (query.neName) { + querySQL += ` and ne_name like '%${query.neName}%' `; + } + + if (query.neType) { + querySQL += ` and ne_type like '%${query.neType}%' `; + } + + if (query.beginTime && query.endTime) { + querySQL += ` and event_time BETWEEN '${query.beginTime}' and ' ${query.endTime}'`; + } + + // 分页 + const pageNum = (query.pageNum - 1) * query.pageSize; + const limtSql = ` order by event_time desc limit ${pageNum},${query.pageSize} `; + + // 发起请求 + const result = await request({ + url: `/api/rest/databaseManagement/v1/select/omc_db/alarm_event`, + method: 'get', + params: { + SQL: totalSQL + querySQL, + rowsSQL: rowsSQL + querySQL + limtSql, + }, + }); + + // 解析数据 + if (result.code === RESULT_CODE_SUCCESS) { + const data: DataList = { + total: 0, + rows: [], + code: result.code, + msg: result.msg, + }; + result.data.data.forEach((item: any) => { + console.log(item) + const itemData = item['alarm_event']; + if (Array.isArray(itemData)) { + if (itemData.length === 1 && itemData[0]['total'] >= 0) { + data.total = itemData[0]['total']; + } else { + data.rows = itemData.map(v => parseObjLineToHump(v)); + } + } + }); + return data; + } + return result; +} + + + + + + + +/** + * 事件告警导出 + * @param query 查询参数 + * @returns bolb + */ +export async function exportAll(query: Record) { + let rowsSQL = `select * from alarm_event where 1=1`; + // 查询 + let querySQL = ''; + querySQL += query.alarm_code + ? ` and alarm_code = '${query.alarm_code}' ` + : ''; + querySQL += query.alarm_type + ? ` and alarm_type = '${query.alarm_type}' ` + : ''; + querySQL += query.pv_flag ? ` and pv_flag = '${query.pv_flag}' ` : ''; + querySQL += query.orig_severity + ? ` and orig_severity in('${query.orig_severity}' )` + : ''; + querySQL += query.ne_id ? ` and ne_id like '%${query.ne_id}%' ` : ''; + querySQL += query.ne_name ? ` and ne_name like '%${query.ne_name}%' ` : ''; + querySQL += query.ne_type ? ` and ne_type like '%${query.ne_type}%' ` : ''; + querySQL += + query.beginTime && query.endTime + ? ` and event_time BETWEEN '${query.beginTime}' and ' ${query.endTime}'` + : ''; + + // 发起请求 + const result = await request({ + url: `/api/rest/databaseManagement/v1/select/omc_db/alarm_event`, + method: 'get', + params: { + rowsSQL: rowsSQL + querySQL, + }, + }); + + if (result.code === RESULT_CODE_SUCCESS) { + let v = result.data.data[0]; + const vArr = parseObjLineToHump(v['alarm_event']); + result.data = vArr == null ? [] : vArr; + } + return result; +} + + + + diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 5e1019f5..9c3a2491 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -481,21 +481,21 @@ export default { neType: 'NE Type', neTypePleace: "Please select the network element type", noConfigData: "No data on configuration items", - updateValue: "The value of the {num} attribute was modified successfully.", + updateValue: "[ {num} ] parameter value modified successfully.", updateValueErr: "Attribute value modification failure", updateItem: "Modify Index to {num}.", updateItemErr: "Record modification failure", delItemOk: "Deleting Index as {num} succeeded", addItemOk: "Add Index as {num} Record Succeeded", addItemErr: "Record addition failure", - requireUn: "{display} input value is of unknown type", - requireString: "The {display} parameter value is invalid.", - requireInt: "{display} Parameter value not in reasonable range {filter}", - requireIpv4: "{display} not a legitimate IPV4 address", - requireIpv6: "{display} Not a legitimate IPV6 address.", - requireEnum: "{display} is not a reasonable enumeration value.", - requireBool: "{display} is not a reasonable boolean value.", - editOkTip: "Confirm updating the value of this {num} attribute?", + requireUn: "[ {display} ] input value is of unknown type", + requireString: "[ {display} ] parameter value is invalid.", + requireInt: "[ {display} ] parameter value not in reasonable range {filter}", + requireIpv4: "[ {display} ] not a legitimate IPV4 address", + requireIpv6: "[ {display} ] not a legitimate IPV6 address.", + requireEnum: "[ {display} ] is not a reasonable enumeration value.", + requireBool: "[ {display} ] is not a reasonable boolean value.", + editOkTip: "Confirm updating the value of this [ {num} ] attribute?", updateItemTip: "Confirm updating the data item with Index [{num}]?", delItemTip: "Confirm deleting the data item with Index [{num}]?", arrayMore: "Expand", @@ -1147,6 +1147,7 @@ export default { showSet:'Show filter settings', exportSure:'Confirm whether to export all active alarm information', viewIdInfo:'View {alarmId} record information', + closeModal:'Close', }, historyAlarm:{ exportSure:'Confirm whether to export all historical alarm information', @@ -1159,6 +1160,9 @@ export default { noChange:'There is no change in the alarm forwarding settings.', forwardSet:'Alarm Forwarding Setting', }, + eventAlarm:{ + exportSure:'Confirm whether to export all event alarm information', + } }, logManage:{ alarm:{ @@ -1955,14 +1959,14 @@ export default { cmdOpTip: "Select the item to be operated in the left command navigation!", cmdNoTip: "{num} no optional command operation", require: "Mandatory parameter: {num}", - requireUn: "{display} input value is of unknown type", - requireString: "The {display} parameter value is invalid.", - requireInt: "{display} Parameter value not in reasonable range {filter}", - requireIpv4: "{display} not a legitimate IPV4 address", - requireIpv6: "{display} Not a legitimate IPV6 address.", - requireEnum: "{display} is not a reasonable enumeration value.", - requireBool: "{display} is not a reasonable boolean value.", - requireFile: "{display} is not a value that matches the parameter file type.", + requireUn: "[ {display} ] input value is of unknown type", + requireString: "[ {display} ] parameter value is invalid.", + requireInt: "[ {display} ] parameter value not in reasonable range {filter}", + requireIpv4: "[ {display} ] not a legitimate IPV4 address", + requireIpv6: "[ {display} ] not a legitimate IPV6 address.", + requireEnum: "[ {display} ] is not a reasonable enumeration value.", + requireBool: "[ {display} ] is not a reasonable boolean value.", + requireFile: "[ {display} ] is not a value that matches the parameter file type.", cmdQuickEntry: "Command Quick Entry", cmdQuickEntryHelp: "Line feed (Shift + Enter), Execute (Enter)", cmdParamPanel: "Parameter Panel", diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 634eedd6..f8f0ab80 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -481,21 +481,21 @@ export default { neType: "网元类型", neTypePleace: "请选择网元类型", noConfigData: "暂无配置项数据", - updateValue: "{num} 属性值修改成功", + updateValue: "【 {num} 】 属性值修改成功", updateValueErr: "属性值修改失败", updateItem: "修改 Index 为 {num} 记录成功", updateItemErr: "记录修改失败", delItemOk: "删除 Index 为 {num} 记录成功", addItemOk: "新增 Index 为 {num} 记录成功", addItemErr: "记录新增失败", - requireUn: "{display} 输入值是未知类型", - requireString: "{display} 参数值不合理", - requireInt: "{display} 参数值不在合理范围 {filter}", - requireIpv4: "{display} 不是合法的IPV4地址", - requireIpv6: "{display} 不是合法的IPV6地址", - requireEnum: "{display} 不是合理的枚举值", - requireBool: "{display} 不是合理的布尔类型的值", - editOkTip: "确认更新该{num}属性值吗?", + requireUn: "【 {display} 】输入值是未知类型", + requireString: "【 {display} 】参数值不合理", + requireInt: "【 {display} 】参数值不在合理范围 {filter}", + requireIpv4: "【 {display} 】不是合法的IPV4地址", + requireIpv6: "【 {display} 】不是合法的IPV6地址", + requireEnum: "【 {display} 】不是合理的枚举值", + requireBool: "【 {display} 】不是合理的布尔类型的值", + editOkTip: "确认更新该【 {num} 】属性值吗?", updateItemTip: "确认更新Index为 【{num}】 的数据项?", delItemTip: "确认删除Index为 【{num}】 的数据项?", arrayMore: "展开", @@ -1147,6 +1147,7 @@ export default { showSet:'显示过滤设置', exportSure:'确认是否导出全部活动告警信息', viewIdInfo:'查看{alarmId} 记录信息', + closeModal:'关闭', }, historyAlarm:{ exportSure:'确认是否导出全部历史告警信息?', @@ -1158,6 +1159,9 @@ export default { save:'保存设置', noChange:'告警前转接口设置无变更', forwardSet:'告警前转接口设置', + }, + eventAlarm:{ + exportSure:'确认是否导出全部事件告警信息?', } }, logManage:{ @@ -1955,14 +1959,14 @@ export default { cmdOpTip: "左侧命令导航中选择要操作项!", cmdNoTip: "{num} 无可选命令操作", require: "必填参数:{num}", - requireUn: "{display} 输入值是未知类型", - requireString: "{display} 参数值不合理", - requireInt: "{display} 参数值不在合理范围 {filter}", - requireIpv4: "{display} 不是合法的IPV4地址", - requireIpv6: "{display} 不是合法的IPV6地址", - requireEnum: "{display} 不是合理的枚举值", - requireBool: "{display} 不是合理的布尔类型的值", - requireFile: "{display} 不是符合参数文件类型的值", + requireUn: "【 {display} 】输入值是未知类型", + requireString: "【 {display} 】参数值不合理", + requireInt: "【 {display} 】参数值不在合理范围 {filter}", + requireIpv4: "【 {display} 】不是合法的IPV4地址", + requireIpv6: "【 {display} 】不是合法的IPV6地址", + requireEnum: "【 {display} 】不是合理的枚举值", + requireBool: "【 {display} 】不是合理的布尔类型的值", + requireFile: "【 {display} 】不是符合参数文件类型的值", cmdQuickEntry: "命令快速输入", cmdQuickEntryHelp: "换行(Shift + Enter) 执行发送(Enter)", cmdParamPanel: "参数面板", diff --git a/src/utils/regular-utils.ts b/src/utils/regular-utils.ts index fff43163..65a9fd52 100644 --- a/src/utils/regular-utils.ts +++ b/src/utils/regular-utils.ts @@ -84,13 +84,14 @@ export function validURL(str: string) { // http:// is appended so url.Parse will succeed, strTemp used so it does not impact rxURL.MatchString strTemp = 'http://' + str; } - debugger; + + let u = { host: '', pathname: '' }; try { new URL(strTemp); } catch (error) { return false; } - const u = new URL(strTemp); + if (u.host.startsWith('.')) { return false; } 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/hooks/useSMFOptions.ts b/src/views/configManage/configParamTreeTable/hooks/useSMFOptions.ts new file mode 100644 index 00000000..2a020cfe --- /dev/null +++ b/src/views/configManage/configParamTreeTable/hooks/useSMFOptions.ts @@ -0,0 +1,22 @@ +import { getParamConfigInfo } from '@/api/configManage/configParam'; +import { ref } from 'vue'; + +export default function useSMFOptions() { + /**upfId可选择 */ + const optionsUPFIds = ref<{ value: string; label: string }[]>([]); + + /**初始加载upfId */ + function initUPFIds() { + getParamConfigInfo('smf', 'upfConfig', '001').then(res => { + optionsUPFIds.value = []; + for (const s of res.data) { + optionsUPFIds.value.push({ + value: s.id, + label: s.id, + }); + } + }); + } + + return { initUPFIds, optionsUPFIds }; +} diff --git a/src/views/configManage/configParamTreeTable/index.vue b/src/views/configManage/configParamTreeTable/index.vue index 2f77656f..edd63c2a 100644 --- a/src/views/configManage/configParamTreeTable/index.vue +++ b/src/views/configManage/configParamTreeTable/index.vue @@ -1,5 +1,5 @@ + + + + + +