feat: UDM用户数据导入输出失败记录,UDM2.2502.58

This commit is contained in:
TsMask
2025-02-07 16:00:52 +08:00
parent fbc1535015
commit fd82d710b6
4 changed files with 579 additions and 146 deletions

View File

@@ -737,6 +737,7 @@ export default {
checkExport : 'Check Export', checkExport : 'Check Export',
checkExportConfirm: 'Confirm exporting the checked authenticated user data?', checkExportConfirm: 'Confirm exporting the checked authenticated user data?',
import: 'Import', import: 'Import',
importFail: 'Failure Record',
loadDataConfirm: 'Are you sure you want to reload the data?', loadDataConfirm: 'Are you sure you want to reload the data?',
loadData: 'Load Data', loadData: 'Load Data',
loadDataTip: 'Successfully fetched loaded data: {num} items, the system is internally updating the data, it will take about {timer} seconds, please wait!!!!!.', loadDataTip: 'Successfully fetched loaded data: {num} items, the system is internally updating the data, it will take about {timer} seconds, please wait!!!!!.',
@@ -765,6 +766,7 @@ export default {
checkExport : 'Check Export', checkExport : 'Check Export',
checkExportConfirm: 'Are you sure to export the data of the checked subscribers?', checkExportConfirm: 'Are you sure to export the data of the checked subscribers?',
import: 'Import', import: 'Import',
importFail: 'Failure Record',
loadDataConfirm: 'Are you sure you want to reload the data?', loadDataConfirm: 'Are you sure you want to reload the data?',
loadData: 'Load Data', loadData: 'Load Data',
loadDataTip: 'Successfully fetched loaded data: {num} items, the system is internally updating the data, it will take about {timer} seconds, please wait!!!!!.', loadDataTip: 'Successfully fetched loaded data: {num} items, the system is internally updating the data, it will take about {timer} seconds, please wait!!!!!.',

View File

@@ -737,6 +737,7 @@ export default {
checkExport : '勾选导出', checkExport : '勾选导出',
checkExportConfirm: '确认导出已勾选的鉴权用户数据吗?', checkExportConfirm: '确认导出已勾选的鉴权用户数据吗?',
import: '导入', import: '导入',
importFail: '失败记录',
loadDataConfirm: '确认要重新加载数据吗?', loadDataConfirm: '确认要重新加载数据吗?',
loadData: '加载数据', loadData: '加载数据',
loadDataTip: '成功获取加载数据:{num}条,系统内部正在进行数据更新,大约需要{timer}秒,请稍候!!!', loadDataTip: '成功获取加载数据:{num}条,系统内部正在进行数据更新,大约需要{timer}秒,请稍候!!!',
@@ -765,6 +766,7 @@ export default {
checkExport : '勾选导出', checkExport : '勾选导出',
checkExportConfirm: '确认导出已勾选的签约用户数据吗?', checkExportConfirm: '确认导出已勾选的签约用户数据吗?',
import: '导入', import: '导入',
importFail: '失败记录',
loadDataConfirm: '确认要重新加载数据吗?', loadDataConfirm: '确认要重新加载数据吗?',
loadData: '加载数据', loadData: '加载数据',
loadDataTip: '成功获取加载数据:{num}条,系统内部正在进行数据更新,大约需要{timer}秒,请稍候!!!', loadDataTip: '成功获取加载数据:{num}条,系统内部正在进行数据更新,大约需要{timer}秒,请稍候!!!',

View File

@@ -25,6 +25,7 @@ import {
listUDMAuth, listUDMAuth,
} from '@/api/neData/udm_auth'; } from '@/api/neData/udm_auth';
import { uploadFile } from '@/api/tool/file'; import { uploadFile } from '@/api/tool/file';
import { getNeViewFile } from '@/api/tool/neFile';
const { t } = useI18n(); const { t } = useI18n();
/**网元参数 */ /**网元参数 */
@@ -98,12 +99,6 @@ let tableColumns = ref<ColumnsType>([
align: 'center', align: 'center',
width: 80, width: 80,
}, },
{
title: 'Status',
dataIndex: 'status',
align: 'center',
width: 80,
},
// { // {
// title: 'KI', // title: 'KI',
// dataIndex: 'ki', // dataIndex: 'ki',
@@ -598,6 +593,8 @@ type ModalUploadImportStateType = {
loading: boolean; loading: boolean;
/**上传结果信息 */ /**上传结果信息 */
msg: string; msg: string;
/**含失败信息 */
hasFail: boolean;
/**导入类型 */ /**导入类型 */
typeOptions: { label: string; value: string }[]; typeOptions: { label: string; value: string }[];
/**表单 */ /**表单 */
@@ -610,6 +607,7 @@ let uploadImportState: ModalUploadImportStateType = reactive({
title: t('components.UploadModal.uploadTitle'), title: t('components.UploadModal.uploadTitle'),
loading: false, loading: false,
msg: '', msg: '',
hasFail: false,
typeOptions: [ typeOptions: [
{ label: 'Default', value: 'default' }, { label: 'Default', value: 'default' },
{ label: 'K4', value: 'k4' }, { label: 'K4', value: 'k4' },
@@ -626,9 +624,37 @@ function fnModalUploadImportTypeChange() {
uploadImportState.msg = ''; uploadImportState.msg = '';
} }
/**对话框表格信息导入失败原因 */
function fnModalUploadImportFailReason() {
const neId = queryParams.neId;
if (!neId) return;
const hide = message.loading(t('common.loading'), 0);
getNeViewFile({
neType: 'UDM',
neId: neId,
path: '/tmp',
fileName: 'import_authdata_err_records.txt',
})
.then(res => {
if (res.code === RESULT_CODE_SUCCESS) {
message.success(t('common.operateOk'), 3);
const blob = new Blob([res.data], {
type: 'text/plain',
});
saveAs(blob, `import_authdata_err_records_${Date.now()}.txt`);
} else {
message.error(`${res.msg}`, 3);
}
})
.finally(() => {
hide();
});
}
/**对话框表格信息导入弹出窗口 */ /**对话框表格信息导入弹出窗口 */
function fnModalUploadImportOpen() { function fnModalUploadImportOpen() {
uploadImportState.msg = ''; uploadImportState.msg = '';
uploadImportState.hasFail = false;
uploadImportState.from.typeVal = 'default'; uploadImportState.from.typeVal = 'default';
uploadImportState.from.typeData = undefined; uploadImportState.from.typeData = undefined;
uploadImportState.loading = false; uploadImportState.loading = false;
@@ -675,6 +701,14 @@ function fnModalUploadImportUpload(file: File) {
.then(res => { .then(res => {
if (!res) return; if (!res) return;
uploadImportState.msg = res.msg; uploadImportState.msg = res.msg;
const regex = /fail num: (\d+)/;
const match = res.msg.match(regex);
if (match) {
const failNum = Number(match[1]);
uploadImportState.hasFail = failNum > 0;
} else {
uploadImportState.hasFail = false;
}
}) })
.finally(() => { .finally(() => {
hide(); hide();
@@ -1018,14 +1052,6 @@ onMounted(() => {
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="12" :md="12" :xs="24">
<a-form-item label="Status" name="status">
<a-select value="1">
<a-select-option value="1">Active</a-select-option>
<a-select-option value="0">Inactive</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row> </a-row>
<a-row> <a-row>
@@ -1210,13 +1236,23 @@ onMounted(() => {
v-model:value="uploadImportState.from.typeData" v-model:value="uploadImportState.from.typeData"
:placeholder="t('common.inputPlease')" :placeholder="t('common.inputPlease')"
/> />
<a-textarea <a-alert
:disabled="true" :message="uploadImportState.msg"
:hidden="!uploadImportState.msg" :type="uploadImportState.hasFail ? 'warning' : 'info'"
:value="uploadImportState.msg" v-show="uploadImportState.msg.length > 0"
:auto-size="{ minRows: 2, maxRows: 8 }" >
style="background-color: transparent; color: rgba(0, 0, 0, 0.85)" <template #action>
/> <a-button
size="small"
type="link"
danger
@click="fnModalUploadImportFailReason"
v-if="uploadImportState.hasFail"
>
{{ t('views.neUser.auth.importFail') }}
</a-button>
</template>
</a-alert>
</template> </template>
</UploadModal> </UploadModal>
</PageContainer> </PageContainer>

File diff suppressed because it is too large Load Diff