feat:neInfo修改新增和编辑

This commit is contained in:
zhongzm
2025-09-09 19:13:30 +08:00
parent d1a20296d9
commit d85889b376
2 changed files with 80 additions and 86 deletions

View File

@@ -21,6 +21,10 @@ const props = defineProps({
type: String,
default: '',
},
neListData: {
type: Array,
default: () => [],
},
});
/**字典数据 */
@@ -37,6 +41,52 @@ let dict: {
neHostAuthMode: [],
});
/**
* 自动分配下一个可用的 NE ID
* @param neType 网元类型
* @returns 下一个可用的 NE ID
*/
function generateNextNeId(neType: string): string {
const neListData = props.neListData as any[];
// 找到对应网元类型的分组
const targetGroup = neListData.find(group => group.neType === neType);
if (!targetGroup || !targetGroup.childrenData) {
return '001'; // 如果没有找到该类型的网元返回001
}
// 获取该类型下所有网元的ID
const existingIds = targetGroup.childrenData
.map((item: any) => item.neId)
.filter((id: string) => /^\d+$/.test(id)) // 只保留纯数字ID
.map((id: string) => parseInt(id, 10))
.sort((a: number, b: number) => a - b);
// 找到下一个可用ID
let nextId = 1;
for (const id of existingIds) {
if (id === nextId) {
nextId++;
} else {
break;
}
}
// 格式化为三位数字符串
return nextId.toString().padStart(3, '0');
}
/**
* 生成 Resource Unique ID
* @param neType 网元类型
* @param neId 网元ID
* @returns Resource Unique ID
*/
function generateResourceUniqueId(neType: string, neId: string): string {
return `4400HX${neType}${neId}`;
}
/**
* 测试主机连接
*/
@@ -158,18 +208,6 @@ const modalStateFrom = Form.useForm(
message: t('views.ne.common.neTypePlease'),
},
],
neId: [
{
required: true,
message: t('views.ne.common.neIdPlease'),
},
],
rmUid: [
{
required: true,
message: t('views.ne.common.rmUidPlease'),
},
],
ip: [
{
required: true,
@@ -215,6 +253,13 @@ function fnModalVisibleByEdit(editId: string) {
if (!editId) {
modalStateFrom.resetFields();
modalState.title = t('views.ne.neInfo.addTitle');
// 新增时自动分配 neId 和 rmUid
const defaultNeType = modalState.from.neType;
const newNeId = generateNextNeId(defaultNeType);
modalState.from.neId = newNeId;
modalState.from.rmUid = generateResourceUniqueId(defaultNeType, newNeId);
modalState.openByEdit = true;
} else {
if (modalState.confirmLoading) return;
@@ -321,15 +366,14 @@ function fnNeTypeChange(v: any) {
});
}
modalState.from.rmUid = `4400HX${v}${modalState.from.neId}`; // 4400HX1AMF001
// 如果是新增模式,自动分配 neId 和 rmUid
if (!modalState.from.id) {
const newNeId = generateNextNeId(v);
modalState.from.neId = newNeId;
modalState.from.rmUid = generateResourceUniqueId(v, newNeId);
}
}
/**表单修改网元neId */
function fnNeIdChange(e: any) {
const v = e.target.value;
if (v.length < 1) return;
modalState.from.rmUid = `4400HX${modalState.from.neType}${v}`; // 4400HX1AMF001
}
/**表单修改网元IP */
function fnNeIPChange(e: any) {
@@ -439,48 +483,22 @@ onMounted(() => {
</a-col>
</a-row>
<a-row>
<a-col :lg="12" :md="12" :xs="24">
<a-form-item
:label="t('views.ne.common.neId')"
name="neId"
v-bind="modalStateFrom.validateInfos.neId"
>
<a-input
v-model:value="modalState.from.neId"
allow-clear
:placeholder="t('common.inputPlease')"
:maxlength="32"
@change="fnNeIdChange"
:disabled="!!modalState.from.id"
>
<template #prefix>
<a-tooltip placement="topLeft">
<template #title>
{{ t('views.ne.common.neIdTip') }}
</template>
<InfoCircleOutlined style="opacity: 0.45; color: inherit" />
</a-tooltip>
</template>
</a-input>
</a-form-item>
</a-col>
<a-col :lg="12" :md="12" :xs="24">
<a-form-item
:label="t('views.ne.common.neName')"
name="neName"
v-bind="modalStateFrom.validateInfos.neName"
>
<a-input
v-model:value="modalState.from.neName"
allow-clear
:placeholder="t('common.inputPlease')"
:maxlength="64"
>
</a-input>
</a-form-item>
</a-col>
</a-row>
<!-- NE Name 占满整行 -->
<a-form-item
:label="t('views.ne.common.neName')"
name="neName"
v-bind="modalStateFrom.validateInfos.neName"
:label-col="{ span: 3 }"
:labelWrap="true"
>
<a-input
v-model:value="modalState.from.neName"
allow-clear
:placeholder="t('common.inputPlease')"
:maxlength="64"
>
</a-input>
</a-form-item>
<a-row>
<a-col :lg="12" :md="12" :xs="24">
@@ -536,31 +554,6 @@ onMounted(() => {
</a-col>
</a-row>
<a-form-item
:label="t('views.ne.common.rmUid')"
name="rmUid"
v-bind="modalStateFrom.validateInfos.rmUid"
:label-col="{ span: 3 }"
:labelWrap="true"
>
<a-input
v-model:value="modalState.from.rmUid"
allow-clear
:placeholder="t('common.inputPlease')"
:maxlength="40"
>
<template #prefix>
<a-tooltip placement="topLeft">
<template #title>
<div>
{{ t('views.ne.common.rmUidTip') }}
</div>
</template>
<InfoCircleOutlined style="opacity: 0.45; color: inherit" />
</a-tooltip>
</template>
</a-input>
</a-form-item>
<a-row>
<a-col :lg="12" :md="12" :xs="24">

View File

@@ -908,6 +908,7 @@ onMounted(() => {
<EditModal
v-model:open="modalState.openByEdit"
:edit-id="modalState.editId"
:ne-list-data="tableState.data"
@ok="fnModalEditOk"
@cancel="fnModalEditCancel"
></EditModal>