fix: 网元授权许可证状态统一刷新功能

This commit is contained in:
TsMask
2025-05-22 09:56:28 +08:00
parent db26e9a054
commit f42b921a50
3 changed files with 55 additions and 74 deletions

View File

@@ -617,8 +617,8 @@ export default {
change: "Change License", change: "Change License",
reload: "Refresh Info", reload: "Refresh Info",
reloadTip: "Confirmed to refresh license information?", reloadTip: "Confirmed to refresh license information?",
reloadBatch: "Batch Refresh Info", reloadBatch: "Refresh License Status",
reloadBatchTip: "Do you do an information refresh on checked records?", reloadBatchTip: "Do you perform a license status information refresh for the current list of NE?",
updateTtile: "Update License", updateTtile: "Update License",
downCodeTop: "Confirmed to save the license activation code to a file?", downCodeTop: "Confirmed to save the license activation code to a file?",
activationRequestCode: "License Activation Code", activationRequestCode: "License Activation Code",

View File

@@ -617,8 +617,8 @@ export default {
change: "变更许可证", change: "变更许可证",
reload: "刷新信息", reload: "刷新信息",
reloadTip: "确认要刷新许可证信息吗?", reloadTip: "确认要刷新许可证信息吗?",
reloadBatch: "批量刷新信息", reloadBatch: "刷新许可证状态",
reloadBatchTip: "对勾选的记录进行信息刷新吗?", reloadBatchTip: "对当前列表网元进行许可证状态信息刷新吗?",
updateTtile: "更新许可证", updateTtile: "更新许可证",
downCodeTop: "确认要将许可激活码保存到文件吗?", downCodeTop: "确认要将许可激活码保存到文件吗?",
activationRequestCode: "许可激活码", activationRequestCode: "许可激活码",

View File

@@ -7,7 +7,6 @@ import { MenuInfo } from 'ant-design-vue/es/menu/src/interface';
import useNeInfoStore from '@/store/modules/neinfo'; import useNeInfoStore from '@/store/modules/neinfo';
import useI18n from '@/hooks/useI18n'; import useI18n from '@/hooks/useI18n';
import useDictStore from '@/store/modules/dict'; import useDictStore from '@/store/modules/dict';
import { NE_TYPE_LIST } from '@/constants/ne-constants';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import { listNeLicense, stateNeLicense } from '@/api/ne/neLicense'; import { listNeLicense, stateNeLicense } from '@/api/ne/neLicense';
import { parseDateToStr } from '@/utils/date-utils'; import { parseDateToStr } from '@/utils/date-utils';
@@ -20,9 +19,6 @@ const EditModal = defineAsyncComponent(
/**字典数据-状态 */ /**字典数据-状态 */
let dictStatus = ref<DictType[]>([]); let dictStatus = ref<DictType[]>([]);
/**网元参数 */
let neOtions = ref<Record<string, any>[]>([]);
/**查询参数 */ /**查询参数 */
let queryParams = reactive({ let queryParams = reactive({
/**网元类型 */ /**网元类型 */
@@ -57,21 +53,15 @@ type TabeStateType = {
loading: boolean; loading: boolean;
/**紧凑型 */ /**紧凑型 */
size: SizeType; size: SizeType;
/**搜索栏 */
seached: boolean;
/**记录数据 */ /**记录数据 */
data: any[]; data: any[];
/**勾选记录 */
selectedRowKeys: (string | number)[];
}; };
/**表格状态 */ /**表格状态 */
let tableState: TabeStateType = reactive({ let tableState: TabeStateType = reactive({
loading: false, loading: false,
size: 'middle', size: 'middle',
seached: false,
data: [], data: [],
selectedRowKeys: [],
}); });
/**表格字段列 */ /**表格字段列 */
@@ -113,6 +103,18 @@ let tableColumns = ref<TableColumnsType>([
align: 'left', align: 'left',
width: 120, width: 120,
}, },
{
title: t('views.ne.common.capability'),
dataIndex: 'capability',
align: 'left',
customRender(opt) {
if (['UDM', 'AMF', 'MME'].includes(opt.record.neType)) {
return opt.value;
}
return '-';
},
width: 100,
},
{ {
title: t('common.remark'), title: t('common.remark'),
dataIndex: 'remark', dataIndex: 'remark',
@@ -173,11 +175,6 @@ function fnTableSize({ key }: MenuInfo) {
tableState.size = key as SizeType; tableState.size = key as SizeType;
} }
/**表格多选 */
function fnTableSelectedRowKeys(keys: (string | number)[]) {
tableState.selectedRowKeys = keys;
}
/**查询列表, pageNum初始页数 */ /**查询列表, pageNum初始页数 */
function fnGetList(pageNum?: number) { function fnGetList(pageNum?: number) {
if (tableState.loading) return; if (tableState.loading) return;
@@ -186,9 +183,18 @@ function fnGetList(pageNum?: number) {
queryParams.pageNum = pageNum; queryParams.pageNum = pageNum;
} }
listNeLicense(toRaw(queryParams)).then(res => { listNeLicense(toRaw(queryParams)).then(res => {
if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.rows)) { if (res.code === RESULT_CODE_SUCCESS) {
tablePagination.total = res.total; const { total, rows } = res;
tableState.data = res.rows.filter(s => s.neType !== 'OMC'); let totalV = total;
let rowsV = rows.filter((s: any) => {
if (s.neType !== 'OMC') {
return true;
}
totalV -= 1;
return false;
});
tableState.data = rowsV;
tablePagination.total = totalV;
if ( if (
tablePagination.total <= tablePagination.total <=
(queryParams.pageNum - 1) * tablePagination.pageSize && (queryParams.pageNum - 1) * tablePagination.pageSize &&
@@ -235,9 +241,25 @@ function fnModalVisibleByEdit(licenseId: string) {
* 对话框弹出确认执行函数 * 对话框弹出确认执行函数
* 进行表达规则校验 * 进行表达规则校验
*/ */
function fnModalOk() { function fnModalOk(e: any) {
const next = () => {
// 刷新授权状态
stateNeLicense(e.neType, e.neId).then(res => {
const row = tableState.data.find(
(item: any) => e.neType === item.neType && e.neId === item.neId
);
if (res.code === RESULT_CODE_SUCCESS) {
row.status = '1';
row.serialNum = res.data.sn;
row.expiryDate = res.data.expire;
} else {
row.status = '0';
}
});
// 获取列表数据 // 获取列表数据
fnGetList(); fnGetList();
};
setTimeout(() => next(), 2_000);
} }
/** /**
@@ -284,8 +306,8 @@ function fnRecordState(row: Record<string, any>) {
}); });
} }
/**刷新网元授权状态 勾选 */ /**刷新网元授权状态 重载 */
function fnRecordStateBatch() { function fnRecordStateReload() {
if (modalState.confirmLoading) return; if (modalState.confirmLoading) return;
Modal.confirm({ Modal.confirm({
title: t('common.tipTitle'), title: t('common.tipTitle'),
@@ -293,12 +315,7 @@ function fnRecordStateBatch() {
onOk: async () => { onOk: async () => {
modalState.confirmLoading = true; modalState.confirmLoading = true;
const hide = message.loading(t('common.loading'), 0); const hide = message.loading(t('common.loading'), 0);
// 勾选的网元数据 for (const row of tableState.data) {
const selectRows = tableState.data.filter(item =>
tableState.selectedRowKeys.includes(item.id)
);
for (const row of selectRows) {
if (row.neType.toUpperCase() === 'OMC') { if (row.neType.toUpperCase() === 'OMC') {
continue; continue;
} }
@@ -310,7 +327,6 @@ function fnRecordStateBatch() {
} else { } else {
row.status = '0'; row.status = '0';
} }
tableState.selectedRowKeys = [];
} }
message.success(t('common.operateOk'), 3); message.success(t('common.operateOk'), 3);
hide(); hide();
@@ -321,21 +337,9 @@ function fnRecordStateBatch() {
onMounted(() => { onMounted(() => {
// 初始字典数据 // 初始字典数据
getDict('ne_license_status').then(res => { getDict('ne_license_status')
dictStatus.value = res;
});
// 获取网元网元列表
useNeInfoStore()
.fnNelist()
.then(res => { .then(res => {
if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.data)) { dictStatus.value = res;
neOtions.value = useNeInfoStore().getNeSelectOtions;
} else {
message.warning({
content: t('common.noData'),
duration: 2,
});
}
}) })
.finally(() => { .finally(() => {
// 获取列表数据 // 获取列表数据
@@ -347,7 +351,6 @@ onMounted(() => {
<template> <template>
<PageContainer> <PageContainer>
<a-card <a-card
v-show="tableState.seached"
:bordered="false" :bordered="false"
:body-style="{ marginBottom: '24px', paddingBottom: 0 }" :body-style="{ marginBottom: '24px', paddingBottom: 0 }"
> >
@@ -358,7 +361,7 @@ onMounted(() => {
<a-form-item :label="t('views.ne.common.neType')" name="neType "> <a-form-item :label="t('views.ne.common.neType')" name="neType ">
<a-auto-complete <a-auto-complete
v-model:value="queryParams.neType" v-model:value="queryParams.neType"
:options="NE_TYPE_LIST.map(v => ({ value: v }))" :options="useNeInfoStore().getNeSelectOtions"
:allow-clear="true" :allow-clear="true"
:placeholder="t('common.inputPlease')" :placeholder="t('common.inputPlease')"
/> />
@@ -409,9 +412,8 @@ onMounted(() => {
<a-space :size="8" align="center"> <a-space :size="8" align="center">
<a-button <a-button
type="default" type="default"
:disabled="tableState.selectedRowKeys.length <= 0"
:loading="modalState.confirmLoading" :loading="modalState.confirmLoading"
@click.prevent="fnRecordStateBatch()" @click.prevent="fnRecordStateReload()"
> >
<template #icon><SyncOutlined /></template> <template #icon><SyncOutlined /></template>
{{ t('views.ne.neLicense.reloadBatch') }} {{ t('views.ne.neLicense.reloadBatch') }}
@@ -422,21 +424,6 @@ onMounted(() => {
<!-- 插槽-卡片右侧 --> <!-- 插槽-卡片右侧 -->
<template #extra> <template #extra>
<a-space :size="8" align="center"> <a-space :size="8" align="center">
<a-tooltip>
<template #title>{{ t('common.searchBarText') }}</template>
<a-switch
v-model:checked="tableState.seached"
:checked-children="t('common.switch.show')"
:un-checked-children="t('common.switch.hide')"
size="small"
/>
</a-tooltip>
<a-tooltip>
<template #title>{{ t('common.reloadText') }}</template>
<a-button type="text" @click.prevent="fnGetList()">
<template #icon><ReloadOutlined /></template>
</a-button>
</a-tooltip>
<a-tooltip placement="topRight"> <a-tooltip placement="topRight">
<template #title>{{ t('common.sizeText') }}</template> <template #title>{{ t('common.sizeText') }}</template>
<a-dropdown placement="bottomRight" trigger="click"> <a-dropdown placement="bottomRight" trigger="click">
@@ -473,14 +460,8 @@ onMounted(() => {
:data-source="tableState.data" :data-source="tableState.data"
:size="tableState.size" :size="tableState.size"
:pagination="tablePagination" :pagination="tablePagination"
:scroll="{ x: tableColumns.length * 120 }" :scroll="{ x: tableColumns.length * 140 }"
@resizeColumn="(w:number, col:any) => (col.width = w)" @resizeColumn="(w:number, col:any) => (col.width = w)"
:row-selection="{
type: 'checkbox',
columnWidth: '48px',
selectedRowKeys: tableState.selectedRowKeys,
onChange: fnTableSelectedRowKeys,
}"
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'status'"> <template v-if="column.key === 'status'">