From a945e4dc5f4a6016d2ea8ee89d9596775a40ec06 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 10 Jun 2025 18:55:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E4=BF=A1=E4=BB=A4?= =?UTF-8?q?=E8=B7=9F=E8=B8=AA=E4=BB=A3=E7=A0=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/locales/en-US.ts | 1 + src/i18n/locales/zh-CN.ts | 1 + src/views/traceManage/task/analyze.vue | 5 +- .../task/components/TaskInfoIcon.vue | 107 +++++++++++ src/views/traceManage/task/data.vue | 5 +- src/views/traceManage/task/index.vue | 180 ++++++++++-------- 6 files changed, 221 insertions(+), 78 deletions(-) create mode 100644 src/views/traceManage/task/components/TaskInfoIcon.vue diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index e1343e85..30397ea9 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -1087,6 +1087,7 @@ export default { }, task: { traceId: 'Tracing No', + title: 'Tracing Title', trackType: 'Tracing Type', trackTypePlease: 'Please select a tracing type', creater: 'Created by', diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index a5850a7c..9e0a5350 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -1087,6 +1087,7 @@ export default { }, task: { traceId: '跟踪编号', + title: '跟踪标题', trackType: '跟踪类型', trackTypePlease: '请选择跟踪类型', creater: '创建人', diff --git a/src/views/traceManage/task/analyze.vue b/src/views/traceManage/task/analyze.vue index 16aae17c..2e426606 100644 --- a/src/views/traceManage/task/analyze.vue +++ b/src/views/traceManage/task/analyze.vue @@ -7,6 +7,7 @@ import { SizeType } from 'ant-design-vue/es/config-provider'; import { ColumnsType } from 'ant-design-vue/es/table'; import DissectionTree from '../tshark/components/DissectionTree.vue'; import DissectionDump from '../tshark/components/DissectionDump.vue'; +import TaskInfoIcon from './components/TaskInfoIcon.vue'; import { RESULT_CODE_ERROR, RESULT_CODE_SUCCESS, @@ -586,6 +587,8 @@ onBeforeUnmount(() => { {{ t('views.traceManage.task.traceId') }}:  {{ traceId }} + + @@ -615,7 +618,7 @@ onBeforeUnmount(() => { return record.msgDirect === 0 ? 'table-striped-recv' : 'table-striped-send'; }" :customRow=" - record => { + (record:any) => { return { onClick: () => fnVisible(record), }; diff --git a/src/views/traceManage/task/components/TaskInfoIcon.vue b/src/views/traceManage/task/components/TaskInfoIcon.vue new file mode 100644 index 00000000..093be150 --- /dev/null +++ b/src/views/traceManage/task/components/TaskInfoIcon.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/views/traceManage/task/data.vue b/src/views/traceManage/task/data.vue index f812ae34..ff7d0ddf 100644 --- a/src/views/traceManage/task/data.vue +++ b/src/views/traceManage/task/data.vue @@ -10,6 +10,7 @@ import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import useDictStore from '@/store/modules/dict'; import useTabsStore from '@/store/modules/tabs'; import { type Dayjs } from 'dayjs'; +import TaskInfoIcon from './components/TaskInfoIcon.vue'; import useI18n from '@/hooks/useI18n'; import { getTraceData, listTraceData } from '@/api/trace/task'; import { decode } from 'js-base64'; @@ -215,7 +216,7 @@ function fnTableChange(pagination: any, filters: any, sorter: any, extra: any) { fnGetList(1); } -/**查询备份信息列表, pageNum初始页数 */ +/**查询数据信息列表, pageNum初始页数 */ function fnGetList(pageNum?: number) { if (tableState.loading) return; tableState.loading = true; @@ -429,6 +430,8 @@ onMounted(() => { {{ t('views.traceManage.task.traceId') }}:  {{ traceId }} + + diff --git a/src/views/traceManage/task/index.vue b/src/views/traceManage/task/index.vue index 43ae3eda..f4fec982 100644 --- a/src/views/traceManage/task/index.vue +++ b/src/views/traceManage/task/index.vue @@ -40,6 +40,9 @@ let dict: { traceInterfaces: [], }); +/**开始结束时间 */ +let queryRangePicker = ref<[Dayjs, Dayjs] | undefined>(undefined); + /**网元类型_多neId */ let neCascaderOptions = ref[]>([]); @@ -47,9 +50,12 @@ let neCascaderOptions = ref[]>([]); let queryParams = reactive({ /**网元类型 */ neType: '', - /**记录时间 */ - startTime: '', - endTime: '', + /**开始时间 */ + startTime: undefined as undefined | number, + /**结束时间 */ + endTime: undefined as undefined | number, + /**标题 */ + title: '', /**排序字段 */ sortField: 'start_time', /**排序方式 */ @@ -64,13 +70,15 @@ let queryParams = reactive({ function fnQueryReset() { queryParams = Object.assign(queryParams, { neType: '', - startTime: '', - endTime: '', + startTime: undefined, + endTime: undefined, + title: '', sortField: 'start_time', sortOrder: 'asc', pageNum: 1, pageSize: 20, }); + queryRangePicker.value = undefined; tablePagination.current = 1; tablePagination.pageSize = 20; fnGetList(); @@ -107,6 +115,13 @@ let tableColumns: ColumnsType = [ align: 'left', width: 150, }, + { + title: t('views.traceManage.task.title'), + dataIndex: 'title', + align: 'left', + width: 200, + ellipsis: true, + }, { title: t('views.traceManage.task.trackType'), dataIndex: 'traceType', @@ -237,6 +252,19 @@ function fnGetList(pageNum?: number) { if (pageNum) { queryParams.pageNum = pageNum; } + + // 时间范围 + if ( + Array.isArray(queryRangePicker.value) && + queryRangePicker.value.length > 0 + ) { + queryParams.startTime = queryRangePicker.value[0].valueOf(); + queryParams.endTime = queryRangePicker.value[1].valueOf(); + } else { + queryParams.startTime = undefined; + queryParams.endTime = undefined; + } + listTraceTask(toRaw(queryParams)).then(res => { if (res.code === RESULT_CODE_SUCCESS) { // 取消勾选 @@ -275,11 +303,12 @@ type ModalStateType = { from: { id?: string; neList: string; // 网元列表 neType_neId 例如 UDM_001,AMF_001 - /**1-Interface,2-Device,3-User */ - traceType: string; startTime?: number; endTime?: number; + title: string; remark?: string; + /**1-Interface,2-Device,3-User */ + traceType: string; /**1接口跟踪 */ interfaces?: string; /**2设备跟踪 */ @@ -306,10 +335,11 @@ let modalState: ModalStateType = reactive({ id: undefined, neList: '', traceId: undefined, - traceType: '3', startTime: undefined, endTime: undefined, + title: '', remark: '', + traceType: '3', /**1接口跟踪 */ interfaces: '', /**2设备跟踪 */ @@ -345,6 +375,12 @@ const modalStateFrom = Form.useForm( message: t('views.traceManage.task.rangePickerPlease'), }, ], + title: [ + { + required: true, + message: t('common.inputPlease'), + }, + ], // 用户跟踪 imsi: [ { @@ -499,7 +535,7 @@ function fnModalOpenByEdit(id?: string) { */ function fnModalOk() { const from = toRaw(modalState.from); - let valids = ['traceType', 'neList', 'endTime']; + let valids = ['title', 'traceType', 'neList', 'endTime']; if (from.traceType === '1') { valids = valids.concat(['interfaces']); } @@ -577,36 +613,20 @@ onMounted(() => { ); // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - // 过滤不可用的网元 - neCascaderOptions.value = neInfoStore.getNeSelectOtions.filter( - (item: any) => { - return ['AMF', 'AUSF', 'SMF', 'UDM', 'PCF'].includes(item.value); - } - ); - if (neCascaderOptions.value.length === 0) { - message.warning({ - content: t('common.noData'), - duration: 3, - }); - return; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 3, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neCascaderOptions.value = neInfoStore.getNeCascaderOptions.filter( + (item: any) => { + return ['AMF', 'AUSF', 'SMF', 'UDM', 'PCF', 'UPF'].includes(item.value); // 过滤不可用的网元 + } + ); + if (neCascaderOptions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 3, }); + return; + } + // 获取列表数据 + fnGetList(); }); @@ -632,32 +652,15 @@ onMounted(() => { - - - - - - + + @@ -674,6 +677,22 @@ onMounted(() => { + + + + + + @@ -842,6 +861,28 @@ onMounted(() => { :label-wrap="true" :disabled="!!modalState.from.id" > + + + + + + + + { format="YYYY-MM-DD HH:mm:ss" style="width: 100%" :disabled-date="fnRangePickerDisabledDate" - :placeholder="[ - t('views.traceManage.task.startTime'), - t('views.traceManage.task.endTime'), - ]" > - - -