209 lines
5.9 KiB
TypeScript
209 lines
5.9 KiB
TypeScript
import { addNeConfigData, editNeConfigData } from '@/api/ne/neConfig';
|
|
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
|
|
import { readSheet } from '@/utils/execl-utils';
|
|
import { message } from 'ant-design-vue';
|
|
import { reactive } from 'vue';
|
|
import saveAs from 'file-saver';
|
|
|
|
/**
|
|
* 导入文件加array
|
|
* @param param 父级传入 { t, neTypeSelect, arrayState, fnActiveConfigNode }
|
|
* @returns
|
|
*/
|
|
export default function useArrayImport({
|
|
t,
|
|
neTypeSelect,
|
|
arrayState,
|
|
fnActiveConfigNode,
|
|
}: any) {
|
|
/**网元导入模板解析 */
|
|
const m: Record<string, any> = {
|
|
AMF: {
|
|
imeiWhitelist: {
|
|
filename: 'import_amf_imeiWhitelist_template',
|
|
fileetx: '.xlsx',
|
|
itemKey: 'index',
|
|
item: (row: Record<string, any>) => {
|
|
const index = row['Index'] || 0;
|
|
return {
|
|
imeiPrefixValue: `${row['IMEI Prefix']}`,
|
|
index: parseInt(index),
|
|
};
|
|
},
|
|
},
|
|
whitelist: {
|
|
filename: 'import_amf_whitelist_template',
|
|
fileetx: '.xlsx',
|
|
itemKey: 'index',
|
|
item: (row: Record<string, any>) => {
|
|
const index = row['Index'] || 0;
|
|
return {
|
|
imsiValue: `${row['IMSI Value']}`,
|
|
imeiValue: `${row['IMEI Value/Prefix']}`,
|
|
index: parseInt(index),
|
|
};
|
|
},
|
|
},
|
|
},
|
|
MME: {
|
|
white_list: {
|
|
filename: 'import_mme_imeiWhitelist_template',
|
|
fileetx: '.xlsx',
|
|
itemKey: 'index',
|
|
item: (row: Record<string, any>) => {
|
|
const index = row['Index'] || 0;
|
|
return {
|
|
imei: `${row['IMEI']}`,
|
|
index: parseInt(index),
|
|
};
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
/**状态属性 */
|
|
const importState = reactive({
|
|
open: false,
|
|
msgArr: [] as string[],
|
|
loading: false, //开始导入
|
|
itemKey: '', // 解析item的key
|
|
item: null as any, // 解析item方法
|
|
paramName: '',
|
|
filename: '',
|
|
fileetx: '',
|
|
});
|
|
|
|
/**对话框表格信息导入弹出窗口 */
|
|
function modalImportOpen(neType: string, paramName: string) {
|
|
const tmpM = m[neType][paramName];
|
|
importState.itemKey = tmpM.itemKey;
|
|
importState.item = tmpM.item;
|
|
importState.paramName = paramName;
|
|
importState.filename = tmpM.filename;
|
|
importState.fileetx = tmpM.fileetx;
|
|
importState.open = true;
|
|
}
|
|
function modalImportClose() {
|
|
if (importState.loading) {
|
|
message.error({
|
|
content: 'Import is in progress, please wait for it to complete',
|
|
duration: 3,
|
|
});
|
|
return;
|
|
}
|
|
importState.open = false;
|
|
importState.msgArr = [];
|
|
importState.loading = false;
|
|
fnActiveConfigNode('#');
|
|
}
|
|
|
|
/**对话框表格信息导入上传 */
|
|
async function modalImportUpload(file: File) {
|
|
const hide = message.loading(t('common.loading'), 0);
|
|
const [neType, neId] = neTypeSelect.value;
|
|
importState.msgArr = [];
|
|
|
|
// 获取最大index
|
|
let index = 0;
|
|
if (arrayState.columnsData.length <= 0) {
|
|
index = 0;
|
|
} else {
|
|
const last = arrayState.columnsData[arrayState.columnsData.length - 1];
|
|
index = last.index.value + 1;
|
|
}
|
|
|
|
const reader = new FileReader();
|
|
reader.onload = function (e: any) {
|
|
const arrayBuffer = e.target.result;
|
|
readSheet(arrayBuffer).then(async rows => {
|
|
if (rows.length <= 0) {
|
|
hide();
|
|
message.error({
|
|
content: t('views.neData.baseStation.importDataEmpty'),
|
|
duration: 3,
|
|
});
|
|
return;
|
|
}
|
|
// 开始导入
|
|
importState.loading = true;
|
|
for (const row of rows) {
|
|
const rowItem = importState.item(row);
|
|
const rowKey = rowItem[importState.itemKey] || -1;
|
|
let result: any = null;
|
|
// 检查index是否定义
|
|
const has = arrayState.columnsData.find(
|
|
(item: any) => item[importState.itemKey].value === rowKey
|
|
);
|
|
if (has) {
|
|
// 已定义则更新
|
|
rowItem.index = has.index.value;
|
|
result = await editNeConfigData({
|
|
neType: neType,
|
|
neId: neId,
|
|
paramName: importState.paramName,
|
|
paramData: rowItem,
|
|
loc: `${rowItem.index}`,
|
|
});
|
|
let msg = `index:${rowItem.index} update fail`;
|
|
if (result.code === RESULT_CODE_SUCCESS) {
|
|
msg = `index:${rowItem.index} update success`;
|
|
}
|
|
importState.msgArr.push(msg);
|
|
} else {
|
|
// 未定义则新增
|
|
result = await addNeConfigData({
|
|
neType: neType,
|
|
neId: neId,
|
|
paramName: importState.paramName,
|
|
paramData: Object.assign(rowItem, { index }),
|
|
loc: `${index}`,
|
|
});
|
|
let msg = `index:${index} add fail`;
|
|
if (result.code === RESULT_CODE_SUCCESS) {
|
|
msg = `index:${index} add success`;
|
|
index += 1;
|
|
}
|
|
importState.msgArr.push(msg);
|
|
}
|
|
}
|
|
|
|
hide();
|
|
importState.loading = false;
|
|
});
|
|
};
|
|
reader.onerror = function (e) {
|
|
hide();
|
|
console.error('reader file error:', e);
|
|
};
|
|
reader.readAsArrayBuffer(file);
|
|
}
|
|
|
|
/**对话框表格信息导入模板 */
|
|
function modalImportTemplate() {
|
|
const hide = message.loading(t('common.loading'), 0);
|
|
|
|
const baseUrl = import.meta.env.VITE_HISTORY_BASE_URL;
|
|
const templateUrl = `${
|
|
baseUrl.length === 1 && baseUrl.indexOf('/') === 0
|
|
? ''
|
|
: baseUrl.indexOf('/') === -1
|
|
? '/' + baseUrl
|
|
: baseUrl
|
|
}/neDataImput`;
|
|
saveAs(
|
|
`${templateUrl}/${importState.filename}${importState.fileetx}`,
|
|
`${importState.filename}_${Date.now()}${importState.fileetx}`
|
|
);
|
|
|
|
hide();
|
|
}
|
|
|
|
return {
|
|
importState,
|
|
modalImportOpen,
|
|
modalImportClose,
|
|
modalImportUpload,
|
|
modalImportTemplate,
|
|
};
|
|
}
|