Merge remote-tracking branch 'origin/main' into lichang

This commit is contained in:
TsMask
2024-04-30 20:25:27 +08:00
11 changed files with 388 additions and 188 deletions

View File

@@ -11,7 +11,7 @@ VITE_APP_NAME = "Core Network EMS"
VITE_APP_CODE = "CN EMS" VITE_APP_CODE = "CN EMS"
# 应用版本 # 应用版本
VITE_APP_VERSION = "2.240418.1" VITE_APP_VERSION = "2.240425.1"
# 接口基础URL地址-不带/后缀 # 接口基础URL地址-不带/后缀
VITE_API_BASE_URL = "/omc-api" VITE_API_BASE_URL = "/omc-api"

View File

@@ -11,7 +11,7 @@ VITE_APP_NAME = "Core Network EMS"
VITE_APP_CODE = "CN EMS" VITE_APP_CODE = "CN EMS"
# 应用版本 # 应用版本
VITE_APP_VERSION = "2.240418.1" VITE_APP_VERSION = "2.240425.1"
# 接口基础URL地址-不带/后缀 # 接口基础URL地址-不带/后缀
VITE_API_BASE_URL = "/omc-api" VITE_API_BASE_URL = "/omc-api"

View File

@@ -462,3 +462,144 @@ export async function updateNeConfigReload(neType: string, neId: string) {
} }
return result; return result;
} }
/**
* 从参数配置PCF中获取对应信息提供给PCC用户策略输入框
* @param neType 网元类型
* @param topTag
* @param neId
* @returns object { wrRule, dataArr }
*/
export async function getPCCRule(neId: any) {
return await Promise.allSettled([
// 获取参数规则
request({
url: `/api/rest/systemManagement/v1/elementType/pcf/objectType/config/pccRules`,
method: 'get',
params: {
ne_id: neId,
},
timeout: 1_000,
}),
// 获取对应信息
request({
url: `/api/rest/systemManagement/v1/elementType/pcf/objectType/config/sessionRules`,
method: 'get',
params: {
ne_id: neId,
},
timeout: 1_000,
}),
request({
url: `/api/rest/systemManagement/v1/elementType/pcf/objectType/config/qosTemplate`,
method: 'get',
params: {
ne_id: neId,
},
timeout: 1_000,
}),
request({
url: `/api/rest/systemManagement/v1/elementType/pcf/objectType/config/headerEnrichTemplate`,
method: 'get',
params: {
ne_id: neId,
},
timeout: 1_000,
}),
request({
url: `/api/rest/systemManagement/v1/elementType/pcf/objectType/config/serviceAreaRestriction`,
method: 'get',
params: {
ne_id: neId,
},
timeout: 1_000,
}),
]).then(resArr => {
let pccJson: any = new Map();
let sessJson: any = new Map();
let qosJson: any = new Map();
let headerJson: any = new Map();
let sarJson: any = new Map();
// 规则数据
if (resArr[0].status === 'fulfilled') {
const itemV = resArr[0].value;
// 解析数据
if (
itemV.code === RESULT_CODE_SUCCESS &&
Array.isArray(itemV.data?.data)
) {
let itemData = itemV.data.data;
itemData.forEach((item: any) => {
pccJson.set(item.ruleId,{ value: item.ruleId, label: item.ruleId });
});
}
}
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;
itemData.forEach((item: any) => {
sessJson.set(item.ruleId,{ value: item.ruleId, label: item.ruleId });
});
}
}
if (resArr[2].status === 'fulfilled') {
const itemV = resArr[2].value;
// 解析数据
if (
itemV.code === RESULT_CODE_SUCCESS &&
Array.isArray(itemV.data?.data)
) {
let itemData = itemV.data.data;
itemData.forEach((item: any) => {
qosJson.set(item.qosId,{ value: item.qosId, label: item.qosId });
});
}
}
if (resArr[3].status === 'fulfilled') {
const itemV = resArr[3].value;
// 解析数据
if (
itemV.code === RESULT_CODE_SUCCESS &&
Array.isArray(itemV.data?.data)
) {
let itemData = itemV.data.data;
itemData.forEach((item: any) => {
headerJson.set(item.templateName,{
value: item.templateName,
label: item.templateName,
});
});
}
}
if (resArr[4].status === 'fulfilled') {
const itemV = resArr[4].value;
// 解析数据
if (
itemV.code === RESULT_CODE_SUCCESS &&
Array.isArray(itemV.data?.data)
) {
let itemData = itemV.data.data;
itemData.forEach((item: any) => {
sarJson.set(item.name,{ value: item.name, label: item.name });
});
}
}
pccJson = Array.from(pccJson.values());
sessJson = Array.from(sessJson.values());
qosJson = Array.from(qosJson.values());
headerJson = Array.from(headerJson.values());
sarJson = Array.from(sarJson.values());
return { pccJson, sessJson, qosJson, headerJson, sarJson };
});
}

View File

@@ -241,6 +241,7 @@ export async function uploadFileToNE(
neType, neType,
neId, neId,
}, },
timeout: 30_000,
}); });
return transferToNeFileRes; return transferToNeFileRes;
} }

View File

@@ -1012,11 +1012,12 @@ export default {
neId:'NE UID', neId:'NE UID',
alarmId:'Alarm ID', alarmId:'Alarm ID',
alarmSeq:'Sequence Number', alarmSeq:'Sequence Number',
alarmObj:'Object', alarmObj:'Forward Users',
alarmInter:'Forward Interface',
alarmTitle:'Alarm Title', alarmTitle:'Alarm Title',
alarmInfo:'Alarm Content', alarmInfo:'Operation Results',
eventTime:'Generation Time', eventTime:'Event Time',
logTime:'Record Time' logTime:'Log Time'
}, },
neFile: { neFile: {
neType:'NE Type', neType:'NE Type',

View File

@@ -1013,8 +1013,9 @@ export default {
alarmId:'告警唯一标识', alarmId:'告警唯一标识',
alarmSeq:'告警流水号', alarmSeq:'告警流水号',
alarmObj:'告警前转对象', alarmObj:'告警前转对象',
alarmInter:'告警前转接口',
alarmTitle:'告警标题', alarmTitle:'告警标题',
alarmInfo:'告警内容', alarmInfo:'操作结果',
eventTime:'告警产生时间', eventTime:'告警产生时间',
logTime:'记录时间' logTime:'记录时间'
}, },

View File

@@ -80,6 +80,24 @@ let tableColumns: ColumnsType = [
align: 'center', align: 'center',
width: 3, width: 3,
}, },
{
title: t('views.logManage.forwarding.alarmInter'),
dataIndex: 'interface',
align: 'center',
width: 5,
},
{
title: t('views.logManage.forwarding.alarmObj'),
dataIndex: 'toUser',
align: 'center',
width: 5,
},
{
title: t('views.logManage.forwarding.alarmInfo'),
dataIndex: 'operResult',
align: 'center',
width: 6,
},
{ {
title: t('views.logManage.forwarding.type'), title: t('views.logManage.forwarding.type'),
dataIndex: 'neType', dataIndex: 'neType',
@@ -104,24 +122,12 @@ let tableColumns: ColumnsType = [
align: 'center', align: 'center',
width: 4, width: 4,
}, },
{
title: t('views.logManage.forwarding.alarmObj'),
dataIndex: 'toUser',
align: 'center',
width: 5,
},
{ {
title: t('views.logManage.forwarding.alarmTitle'), title: t('views.logManage.forwarding.alarmTitle'),
dataIndex: 'alarmTitle', dataIndex: 'alarmTitle',
align: 'left', align: 'center',
width: 5, width: 5,
}, },
{
title: t('views.logManage.forwarding.alarmInfo'),
dataIndex: 'operResult',
align: 'left',
width: 6,
},
{ {
title: t('views.logManage.forwarding.eventTime'), title: t('views.logManage.forwarding.eventTime'),
dataIndex: 'eventTime', dataIndex: 'eventTime',

View File

@@ -17,6 +17,7 @@ import {
batchDelRule, batchDelRule,
batchUpdateRule, batchUpdateRule,
} from '@/api/neUser/pcf'; } from '@/api/neUser/pcf';
import { getPCCRule } from '@/api/configManage/configParam';
import useNeInfoStore from '@/store/modules/neinfo'; import useNeInfoStore from '@/store/modules/neinfo';
import useI18n from '@/hooks/useI18n'; import useI18n from '@/hooks/useI18n';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
@@ -27,6 +28,15 @@ const { t } = useI18n();
/**网元参数 */ /**网元参数 */
let neOtions = ref<Record<string, any>[]>([]); let neOtions = ref<Record<string, any>[]>([]);
/**表单中多选的OPTION */
const pcfRuleOption = reactive({
pccOpt: [],
sessOpt: [],
qosOpt: [],
headerOpt: [],
sarOpt: [],
});
/**查询参数 */ /**查询参数 */
let queryParams = reactive({ let queryParams = reactive({
/**网元ID */ /**网元ID */
@@ -102,13 +112,13 @@ let tableColumns = ref<TableColumnsType>([
width: 50, width: 50,
}, },
{ {
title: 'QOS Video', title: 'QoS Video',
dataIndex: 'qosVideo', dataIndex: 'qosVideo',
align: 'left', align: 'left',
width: 100, width: 100,
}, },
{ {
title: 'QOS Audio', title: 'QoS Audio',
dataIndex: 'qosAudio', dataIndex: 'qosAudio',
align: 'left', align: 'left',
resizable: true, resizable: true,
@@ -214,10 +224,10 @@ let modalState: ModalStateType = reactive({
imsi: '', imsi: '',
msisdn: '', msisdn: '',
qosAudio: '', qosAudio: '',
pccRules: 'internet|ims_sig', pccRules: undefined,
rfsp: 0, rfsp: 0,
uePolicy: '', uePolicy: '',
sessRules: 'internet|ims_sig', sessRules: undefined,
sar: '', sar: '',
hdrEnrich: '', hdrEnrich: '',
qosVideo: '', qosVideo: '',
@@ -247,35 +257,66 @@ const modalStateFrom = Form.useForm(
* @param noticeId 网元id, 不传为新增 * @param noticeId 网元id, 不传为新增
*/ */
function fnModalVisibleByEdit(row?: Record<string, any>) { function fnModalVisibleByEdit(row?: Record<string, any>) {
modalState.isBatch = false; getPCCRule(queryParams.neId)
if (!row) { .then((res: any) => {
modalStateFrom.resetFields(); //重置表单 pcfRuleOption.pccOpt = res.pccJson;
modalState.title = t('views.neUser.pcf.addTitle'); pcfRuleOption.sessOpt = res.sessJson;
modalState.visibleByEdit = true; pcfRuleOption.qosOpt = res.qosJson;
modalState.type = 'add'; pcfRuleOption.headerOpt = res.headerJson;
} else { pcfRuleOption.sarOpt = res.sarJson;
if (modalState.confirmLoading) return; })
const hide = message.loading(t('common.loading'), 0); .finally(() => {
modalState.confirmLoading = true; modalState.isBatch = false;
const neID = queryParams.neId || '-'; if (!row) {
getRule(neID, row.imsi) modalStateFrom.resetFields(); //重置表单
.then(res => { modalState.title = t('views.neUser.pcf.addTitle');
if (res.code === RESULT_CODE_SUCCESS) { modalState.visibleByEdit = true;
modalState.from = Object.assign(modalState.from, res.data); modalState.type = 'add';
modalState.title = t('views.neUser.pcf.updateTitle', { } else {
imsi: row.imsi, if (modalState.confirmLoading) return;
const hide = message.loading(t('common.loading'), 0);
modalState.confirmLoading = true;
const neID = queryParams.neId || '-';
getRule(neID, row.imsi)
.then(res => {
if (res.code === RESULT_CODE_SUCCESS) {
Object.assign(modalState.from, res.data);
let pccRules = res.data.pccRules;
if (!pccRules) {
pccRules = [];
} else if (pccRules.includes('|')) {
pccRules = pccRules.split('|');
} else {
pccRules = [pccRules];
}
modalState.from.pccRules = pccRules;
let sessRules = res.data.sessRules;
if (!sessRules) {
sessRules = [];
} else if (sessRules.includes('|')) {
sessRules = sessRules.split('|');
} else {
sessRules = [sessRules];
}
modalState.from.sessRules = sessRules;
console.log(modalState.from);
modalState.title = t('views.neUser.pcf.updateTitle', {
imsi: row.imsi,
});
modalState.visibleByEdit = true;
modalState.type = 'update';
} else {
message.error(t('common.getInfoFail'), 2);
}
})
.finally(() => {
hide();
modalState.confirmLoading = false;
}); });
modalState.visibleByEdit = true; }
modalState.type = 'update'; });
} else {
message.error(t('common.getInfoFail'), 2);
}
})
.finally(() => {
hide();
modalState.confirmLoading = false;
});
}
} }
/** /**
@@ -283,9 +324,25 @@ function fnModalVisibleByEdit(row?: Record<string, any>) {
* 进行表达规则校验 * 进行表达规则校验
*/ */
function fnModalOk() { function fnModalOk() {
const from = toRaw(modalState.from); const from = JSON.parse(JSON.stringify(modalState.from));
from.neId = queryParams.neId || '-'; from.neId = queryParams.neId || '-';
from.rfsp = Number(from.rfsp) || 0; from.rfsp = Number(from.rfsp) || 0;
console.log(from);
let pccRules = modalState.from.pccRules;
if (Array.isArray(pccRules)) {
pccRules = pccRules.join('|');
} else {
pccRules = '';
}
from.pccRules = pccRules;
let sessRules = modalState.from.sessRules;
if (Array.isArray(sessRules)) {
sessRules = sessRules.join('|');
} else {
sessRules = '';
}
from.sessRules = sessRules;
let validateArr = ['imsi', 'msisdn']; let validateArr = ['imsi', 'msisdn'];
if (modalState.isBatch) { if (modalState.isBatch) {
@@ -382,21 +439,31 @@ function fnModalCancel() {
* @param type 类型 * @param type 类型
*/ */
function fnModalVisibleByBatch(type: 'delete' | 'add' | 'update') { function fnModalVisibleByBatch(type: 'delete' | 'add' | 'update') {
modalStateFrom.resetFields(); //重置表单 getPCCRule(queryParams.neId)
modalState.isBatch = true; .then((res: any) => {
modalState.type = type; pcfRuleOption.pccOpt = res.pccJson;
if (type === 'add') { pcfRuleOption.sessOpt = res.sessJson;
modalState.title = t('views.neUser.pcf.batchAddText'); pcfRuleOption.qosOpt = res.qosJson;
modalState.visibleByEdit = true; pcfRuleOption.headerOpt = res.headerJson;
} pcfRuleOption.sarOpt = res.sarJson;
if (type === 'update') { })
modalState.title = t('views.neUser.pcf.batchUpdateText'); .finally(() => {
modalState.visibleByEdit = true; modalStateFrom.resetFields(); //重置表单
} modalState.isBatch = true;
if (type === 'delete') { modalState.type = type;
modalState.title = t('views.neUser.pcf.batchDelText'); if (type === 'add') {
modalState.visibleByEdit = true; modalState.title = t('views.neUser.pcf.batchAddText');
} modalState.visibleByEdit = true;
}
if (type === 'update') {
modalState.title = t('views.neUser.pcf.batchUpdateText');
modalState.visibleByEdit = true;
}
if (type === 'delete') {
modalState.title = t('views.neUser.pcf.batchDelText');
modalState.visibleByEdit = true;
}
});
} }
/** /**
@@ -551,6 +618,11 @@ function fnModalUploadImportUpload(file: File) {
}); });
} }
/**使其忽略大小写 */
function filterOption(value: any, option: any) {
return option.value.toUpperCase().indexOf(value.toUpperCase()) >= 0;
}
onMounted(() => { onMounted(() => {
// 获取网元网元列表 // 获取网元网元列表
useNeInfoStore() useNeInfoStore()
@@ -664,7 +736,7 @@ onMounted(() => {
{{ t('views.neUser.pcf.checkDel') }} {{ t('views.neUser.pcf.checkDel') }}
</a-button> </a-button>
<a-dropdown> <a-dropdown trigger="click">
<a-button> <a-button>
{{ t('views.neUser.pcf.batchOper') }} {{ t('views.neUser.pcf.batchOper') }}
<DownOutlined /> <DownOutlined />
@@ -945,77 +1017,47 @@ onMounted(() => {
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
<a-form-item label="PCC Rules" name="pccRules"> <a-form-item label="PCC Rules" name="pccRules">
<a-input <a-select
v-model:value="modalState.from.pccRules" v-model:value="modalState.from.pccRules"
allow-clear allow-clear
:maxlength="64" mode="tags"
> :options="pcfRuleOption.pccOpt"
<template #prefix> :title="t('views.neUser.pcf.pccRuleTip')"
<a-tooltip placement="topLeft"> />
<template #title>
{{ t('views.neUser.pcf.pccRuleTip') }}
</template>
<InfoCircleOutlined style="color: rgba(0, 0, 0, 0.45)" />
</a-tooltip>
</template>
</a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
<a-form-item label="SESS Rules" name="sessRules"> <a-form-item label="SESS Rules" name="sessRules">
<a-input <a-select
v-model:value="modalState.from.sessRules" v-model:value="modalState.from.sessRules"
allow-clear allow-clear
:maxlength="64" mode="tags"
> :options="pcfRuleOption.sessOpt"
<template #prefix> :title="t('views.neUser.pcf.sessRuleTip')"
<a-tooltip placement="topLeft"> />
<template #title>
{{ t('views.neUser.pcf.sessRuleTip') }}
</template>
<InfoCircleOutlined style="color: rgba(0, 0, 0, 0.45)" />
</a-tooltip>
</template>
</a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
<a-form-item label="QOS Audio" name="qosAudio"> <a-form-item label="QoS Audio" name="qosAudio">
<a-input <a-auto-complete
v-model:value="modalState.from.qosAudio" v-model:value="modalState.from.qosAudio"
allow-clear allow-clear
:maxlength="64" :options="pcfRuleOption.qosOpt"
> :filter-option="filterOption"
<template #prefix> />
<a-tooltip placement="topLeft">
<template #title>
{{ t('views.neUser.pcf.qosAudioTip') }}
</template>
<InfoCircleOutlined style="color: rgba(0, 0, 0, 0.45)" />
</a-tooltip>
</template>
</a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
<a-form-item label="QOS Video" name="qosVideo"> <a-form-item label="QoS Video" name="qosVideo">
<a-input <a-auto-complete
v-model:value="modalState.from.qosVideo" v-model:value="modalState.from.qosVideo"
allow-clear allow-clear
:maxlength="64" :options="pcfRuleOption.qosOpt"
> :filter-option="filterOption"
<template #prefix> />
<a-tooltip placement="topLeft">
<template #title>
{{ t('views.neUser.pcf.qosVideoTip') }}
</template>
<InfoCircleOutlined style="color: rgba(0, 0, 0, 0.45)" />
</a-tooltip>
</template>
</a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -1023,20 +1065,12 @@ onMounted(() => {
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
<a-form-item label="HDR Enrich" name="hdrEnrich"> <a-form-item label="HDR Enrich" name="hdrEnrich">
<a-input <a-auto-complete
v-model:value="modalState.from.hdrEnrich" v-model:value="modalState.from.hdrEnrich"
allow-clear allow-clear
:maxlength="64" :options="pcfRuleOption.headerOpt"
> :filter-option="filterOption"
<template #prefix> />
<a-tooltip placement="topLeft">
<template #title>
{{ t('views.neUser.pcf.hdrTip') }}
</template>
<InfoCircleOutlined style="color: rgba(0, 0, 0, 0.45)" />
</a-tooltip>
</template>
</a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
@@ -1061,22 +1095,13 @@ onMounted(() => {
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
<a-form-item label="Sar" name="sar"> <a-form-item label="SAR" name="sar">
<a-input <a-auto-complete
v-model:value="modalState.from.sar" v-model:value="modalState.from.sar"
allow-clear allow-clear
:maxlength="64" :options="pcfRuleOption.sarOpt"
> :filter-option="filterOption"
<template #prefix> />
<a-tooltip placement="topLeft">
<template #title>
{{ t('views.neUser.pcf.sarTip1') }}<br />
{{ t('views.neUser.pcf.sarTip2') }}<br />
</template>
<InfoCircleOutlined style="color: rgba(0, 0, 0, 0.45)" />
</a-tooltip>
</template>
</a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">

View File

@@ -493,10 +493,7 @@ const modalStateFrom = Form.useForm(
*/ */
function transformData(data: any) { function transformData(data: any) {
let transformedData = data.map((item: any) => { let transformedData = data.map((item: any) => {
if ( if (!item.sst || !item.smallRows.every((smallRow: any) => smallRow.dnn)) {
!item.sst ||
!item.smallRows.every((smallRow: any) => smallRow.dnn)
) {
message.error({ message.error({
content: `${t('views.neUser.sub.smDataArrTip')}`, content: `${t('views.neUser.sub.smDataArrTip')}`,
duration: 3, duration: 3,
@@ -504,7 +501,9 @@ function transformData(data: any) {
throw new Error('sst, sd, and all dnn are required fields'); throw new Error('sst, sd, and all dnn are required fields');
} }
let sstSd = item.sd?item.sst + '-' + item.sd:item.sst; let sstSd = item.sd
? item.sst + '-' + item.sd.padStart(6, '0')
: item.sst + '-';
let smallRowData = item.smallRows let smallRowData = item.smallRows
.map((smallRow: any) => { .map((smallRow: any) => {
let parts = [smallRow.dnn]; let parts = [smallRow.dnn];
@@ -536,7 +535,9 @@ function transformFormData(data: any) {
let json: any = { let json: any = {
id: bigIDFlag++, id: bigIDFlag++,
sst: item.split('&')[0].split('-')[0], sst: item.split('&')[0].split('-')[0],
sd: item.split('&')[0].split('-')[1]?item.split('&')[0].split('-')[1]:'', sd: item.split('&')[0].split('-')[1]
? item.split('&')[0].split('-')[1]
: '',
smallRows: [], smallRows: [],
}; };
item item
@@ -1543,17 +1544,21 @@ onMounted(() => {
name="row.sst" name="row.sst"
:label-col="{ span: 5 }" :label-col="{ span: 5 }"
> >
<a-input-group> <div>
<a-row :gutter="8"> <a-input-number
<a-col :span="10"> v-model:value="row.sst"
<a-input v-model:value="row.sst" /> :min="1"
</a-col> :max="3"
<span style="margin-top: 5px">-</span> :step="1"
<a-col :span="12"> style="width: 30%"
<a-input v-model:value="row.sd" /> />
</a-col> <span style="padding: 0 8px">-</span>
</a-row> <a-input
</a-input-group> v-model:value="row.sd"
:maxlength="6"
style="width: 60%"
/>
</div>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
@@ -2068,17 +2073,21 @@ onMounted(() => {
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">
<a-form-item label="SST-SD" name="row.sst"> <a-form-item label="SST-SD" name="row.sst">
<a-input-group> <div>
<a-row :gutter="8"> <a-input-number
<a-col :span="10"> v-model:value="row.sst"
<a-input v-model:value="row.sst" /> :min="1"
</a-col> :max="3"
<span style="margin-top: 5px">-</span> :step="1"
<a-col :span="12"> style="width: 30%"
<a-input v-model:value="row.sd" /> />
</a-col> <span style="padding: 0 8px">-</span>
</a-row> <a-input
</a-input-group> v-model:value="row.sd"
:maxlength="6"
style="width: 60%"
/>
</div>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="12" :md="12" :xs="24"> <a-col :lg="12" :md="12" :xs="24">

View File

@@ -59,7 +59,7 @@ type TabeStateType = {
let tableState: TabeStateType = reactive({ let tableState: TabeStateType = reactive({
loading: false, loading: false,
size: 'middle', size: 'middle',
seached: true, seached: false,
data: [], data: [],
selectedRowKeys: [], selectedRowKeys: [],
}); });
@@ -290,7 +290,7 @@ onMounted(() => {
<!-- 表格搜索栏 --> <!-- 表格搜索栏 -->
<a-form :model="queryParams" name="queryParams" layout="horizontal"> <a-form :model="queryParams" name="queryParams" layout="horizontal">
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :lg="6" :md="12" :xs="24"> <a-col :lg="8" :md="12" :xs="24">
<a-form-item :label="t('views.neUser.ue.neType')" name="neId "> <a-form-item :label="t('views.neUser.ue.neType')" name="neId ">
<a-select <a-select
v-model:value="queryParams.neId" v-model:value="queryParams.neId"
@@ -299,17 +299,18 @@ onMounted(() => {
/> />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="6" :md="12" :xs="24"> <a-col :lg="8" :md="12" :xs="24">
<a-form-item label="IMSI" name="imsi"> <a-form-item label="IMSI" name="imsi">
<a-input v-model:value="queryParams.imsi" allow-clear></a-input> <a-input v-model:value="queryParams.imsi" allow-clear></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="6" :md="12" :xs="24"> <a-col :lg="8" :md="12" :xs="24">
<a-form-item label="MSISDN" name="msisdn"> <a-form-item label="MSISDN" name="msisdn">
<a-input v-model:value="queryParams.msisdn" allow-clear></a-input> <a-input v-model:value="queryParams.msisdn" allow-clear></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="6" :md="12" :xs="24">
<a-col :lg="8" :md="12" :xs="24">
<a-form-item> <a-form-item>
<a-space :size="8"> <a-space :size="8">
<a-button type="primary" @click.prevent="fnGetList(1)"> <a-button type="primary" @click.prevent="fnGetList(1)">
@@ -440,24 +441,27 @@ onMounted(() => {
v-for="v in modalState.from.pduSessionInfo" v-for="v in modalState.from.pduSessionInfo"
:key="v.dnn" :key="v.dnn"
> >
<a-descriptions-item label="PDU Session ID">
{{ v.pduSessionID }}
</a-descriptions-item>
<a-descriptions-item label="User Plane State">
{{ v.upState }}
</a-descriptions-item>
<a-descriptions-item label="IPV4">{{ v.ipv4 }}</a-descriptions-item> <a-descriptions-item label="IPV4">{{ v.ipv4 }}</a-descriptions-item>
<a-descriptions-item label="IPV6">{{ v.ipv6 }}</a-descriptions-item> <a-descriptions-item label="IPV6">{{ v.ipv6 }}</a-descriptions-item>
<a-descriptions-item label="TAI">{{ v.tai }}</a-descriptions-item> <a-descriptions-item label="TAI">{{ v.tai }}</a-descriptions-item>
<a-descriptions-item label="SST_SD"> <a-descriptions-item label="SST-SD">
{{ v.sstSD }}</a-descriptions-item {{ v.sstSD }}</a-descriptions-item
> >
<a-descriptions-item label="UPF_N3_IP"> <a-descriptions-item label="UPF N3 IP">
{{ v.upfN3IP }} {{ v.upfN3IP }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="RAN_N3_IP"> <a-descriptions-item label="RAN N3 IP">
{{ v.ranN3IP }} {{ v.ranN3IP }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="ActiveTime"> <a-descriptions-item label="Create Time">
{{ v.activeTime }} {{ v.activeTime }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="pduSessionId">
{{ v.pduSessionID }}
</a-descriptions-item>
</a-descriptions> </a-descriptions>
</a-form> </a-form>
</DraggableModal> </DraggableModal>

View File

@@ -32,7 +32,20 @@ const { t } = useI18n();
const { getDict } = useDictStore(); const { getDict } = useDictStore();
/**字体图标可选择数据 */ /**字体图标可选择数据 */
let icons = reactive(iconFonts.map(item => ({ value: item, label: item }))); let icons = reactive(
iconFonts.map((item, i) => {
if (i === 0) {
return {
value: item,
label: item,
};
}
return {
value: item,
label: 'icon-' + `${i}`.padStart(3, '0'),
};
})
);
/**字典数据 */ /**字典数据 */
let dict: { let dict: {
@@ -1173,5 +1186,4 @@ onMounted(() => {
</PageContainer> </PageContainer>
</template> </template>
<style lang="less" scoped> <style lang="less" scoped></style>
</style>