From f6bdecd877704ab438c9381b9df896e174265c9b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 20 Aug 2025 17:02:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81kpi=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E6=8E=A7=E5=88=B6=E5=90=AF=E7=94=A8=E5=85=B3?= =?UTF-8?q?=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/perfManage/goldTarget.ts | 91 +--- src/router/index.ts | 3 + src/store/modules/ne_list.ts | 123 ++++++ src/views/perfManage/kpi-title/index.vue | 510 +++++++++++++++++++++++ 4 files changed, 656 insertions(+), 71 deletions(-) create mode 100644 src/store/modules/ne_list.ts create mode 100644 src/views/perfManage/kpi-title/index.vue diff --git a/src/api/perfManage/goldTarget.ts b/src/api/perfManage/goldTarget.ts index 3ecf5af9..7a4d4339 100644 --- a/src/api/perfManage/goldTarget.ts +++ b/src/api/perfManage/goldTarget.ts @@ -110,78 +110,27 @@ export async function getKPITitle(neType: string) { } /** - * Todo 废弃 - * 查询UPF上下行速率数据 - * @param query 查询参数 + * 查询黄金指标数据kpi.id转换title + * @param neType 网元类型 * @returns object */ -export async function listUPFData(timeArr: any) { - const initTime: Date = new Date(); - const twentyFourHoursAgo: Date = new Date( - initTime.getTime() - 10 * 60 * 1000 - ); - - return await Promise.allSettled([ - // 获取参数规则 - request({ - url: `/api/rest/databaseManagement/v1/select/omc_db/gold_kpi`, - method: 'get', - params: { - SQL: `SELECT gold_kpi.*,kpi_title.en_title FROM gold_kpi LEFT JOIN kpi_title on gold_kpi.kpi_id=kpi_title.kpi_id where 1=1 and gold_kpi.kpi_id ='UPF.03' AND timestamp BETWEEN DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND NOW()`, - }, - timeout: 60_000, - }), - // 获取对应信息 - request({ - url: `/api/rest/databaseManagement/v1/select/omc_db/gold_kpi`, - method: 'get', - params: { - SQL: `SELECT gold_kpi.*,kpi_title.en_title FROM gold_kpi LEFT JOIN kpi_title on gold_kpi.kpi_id=kpi_title.kpi_id where 1=1 and gold_kpi.kpi_id ='UPF.06' AND timestamp BETWEEN DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND NOW()`, - }, - timeout: 60_000, - }), - ]).then(resArr => { - let upData: any = []; - let downData: any = []; - - // 规则数据 - if (resArr[0].status === 'fulfilled') { - const itemV: any = resArr[0].value; - // 解析数据 - if ( - itemV.code === RESULT_CODE_SUCCESS && - Array.isArray(itemV.data?.data) - ) { - let itemData = itemV.data.data; - let data = itemData[0]['gold_kpi']; - if (Array.isArray(data)) { - try { - upData = data.map(v => parseObjLineToHump(v)); - } catch (error) { - console.error(error); - } - } - } - } - - if (resArr[1].status === 'fulfilled') { - const itemV = resArr[1].value; - // 解析数据 - if ( - itemV.code === RESULT_CODE_SUCCESS && - Array.isArray(itemV.data?.data) - ) { - let itemData = itemV.data.data; - const data = itemData[0]['gold_kpi']; - if (Array.isArray(data)) { - try { - downData = data.map(v => parseObjLineToHump(v)); - } catch (error) { - console.error(error); - } - } - } - } - return { upData, downData }; +export async function getKPITitleList(query: Record) { + return request({ + url: '/neData/kpi/title/list', + method: 'get', + params: query, + }); +} + +/** + * 修改指标标题 + * @param data 指标标题对象 + * @returns object + */ +export function updateKPITitle(data: Record) { + return request({ + url: '/neData/kpi/title', + method: 'put', + data: data, }); } diff --git a/src/router/index.ts b/src/router/index.ts index 4b958499..60a5f405 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -14,6 +14,7 @@ import useUserStore from '@/store/modules/user'; import useAppStore from '@/store/modules/app'; import useRouterStore from '@/store/modules/router'; import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; // NProgress Configuration NProgress.configure({ showSpinner: false }); @@ -220,6 +221,8 @@ router.beforeEach(async (to, from, next) => { if (user.roles && user.roles.length === 0) { try { useNeInfoStore().fnRefreshNelist(); + useNeListStore().fnNelistRefresh(); + // 获取用户信息 await user.fnGetInfo(); // 获取路由信息 diff --git a/src/store/modules/ne_list.ts b/src/store/modules/ne_list.ts new file mode 100644 index 00000000..7e15b49f --- /dev/null +++ b/src/store/modules/ne_list.ts @@ -0,0 +1,123 @@ +import { defineStore } from 'pinia'; +import { + RESULT_CODE_SUCCESS, + RESULT_MSG_SUCCESS, +} from '@/constants/result-constants'; +import { listAllNeInfo } from '@/api/ne/neInfo'; +import { parseDataToOptions } from '@/utils/parse-tree-utils'; + +/**网元列表信息类型 */ +type NeList = { + /**网元列表 */ + neList: Record[]; + /**级联options树结构 */ + neCascaderOptions: Record[]; + /**选择器单级父类型 */ + neSelectOtions: Record[]; +}; + +const useNeListStore = defineStore('ne_list', { + state: (): NeList => ({ + neList: [], + neCascaderOptions: [], + neSelectOtions: [], + }), + getters: { + /** + * 网元列表 + * @param state 内部属性不用传入 + * @returns 级联options + */ + getNeList(state) { + return state.neList; + }, + /** + * 获取级联options树结构 + * @param state 内部属性不用传入 + * @returns 级联options + */ + getNeCascaderOptions(state) { + return state.neCascaderOptions; + }, + /** + * 选择器单级父类型 + * @param state 内部属性不用传入 + * @returns 选择options + */ + getNeSelectOtions(state) { + return state.neSelectOtions; + }, + }, + actions: { + // 刷新网元列表 + async fnNelistRefresh() { + this.neList = []; + return await this.fnNelist(); + }, + // 获取网元列表 + async fnNelist() { + // 有数据不请求 + if (this.neList.length > 0) { + return { + code: RESULT_CODE_SUCCESS, + msg: RESULT_MSG_SUCCESS['en_US'], + data: this.neList, + }; + } + const res = await listAllNeInfo({ + bandStatus: false, + bandHost: false, + }); + if (res.code === RESULT_CODE_SUCCESS) { + // 原始列表 + this.neList = JSON.parse(JSON.stringify(res.data)); + + // 转级联数据 + const options = parseDataToOptions( + res.data, + 'neType', + 'neName', + 'neId' + ); + this.neCascaderOptions = options; + + // 转选择器单级父类型 + this.neSelectOtions = options.map(item => { + return { + label: item.label, + value: item.value, + }; + }); + } + return res; + }, + /** + * 含有网元 + * @param metaNeType ['udm', 'ims', 'udm+ims', 'SGWC'] 支持大小写 + * @returns boolean + */ + fnHasNe(metaNeType: string[]) { + if (this.neList.length > 0) { + const neTypes = this.neSelectOtions.map(item => item.value); + let match = false; // 匹配 + for (const netype of metaNeType) { + if (netype.indexOf('+') > -1) { + metaNeType = netype.split('+'); + match = true; + break; + } + } + + if (match) { + // 同时匹配 + return metaNeType.every(item => neTypes.includes(item.toUpperCase())); + } + // 有一种 + return metaNeType.some(item => neTypes.includes(item.toUpperCase())); + } + return false; + }, + }, +}); + +export default useNeListStore; diff --git a/src/views/perfManage/kpi-title/index.vue b/src/views/perfManage/kpi-title/index.vue new file mode 100644 index 00000000..e1b7014b --- /dev/null +++ b/src/views/perfManage/kpi-title/index.vue @@ -0,0 +1,510 @@ + + + + +