|
@@ -4,7 +4,7 @@
|
|
|
<el-card class="pop-card">
|
|
<el-card class="pop-card">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div style="font-size: 16px; font-weight: 600">批量导入</div>
|
|
<div style="font-size: 16px; font-weight: 600">批量导入</div>
|
|
|
- <el-icon :size="18" @click="handleClose" style="cursor: pointer">
|
|
|
|
|
|
|
+ <el-icon :size="18" @click="handleMainClose" style="cursor: pointer">
|
|
|
<Close />
|
|
<Close />
|
|
|
</el-icon>
|
|
</el-icon>
|
|
|
</template>
|
|
</template>
|
|
@@ -50,7 +50,7 @@
|
|
|
<WarnTriangleFilled />
|
|
<WarnTriangleFilled />
|
|
|
</el-icon>
|
|
</el-icon>
|
|
|
<div class="header-text">导入提示</div>
|
|
<div class="header-text">导入提示</div>
|
|
|
- <el-icon class="close-icon" :size="18" @click="handleClose"><Close /></el-icon>
|
|
|
|
|
|
|
+ <el-icon class="close-icon" :size="18" @click="handleErrorDialogClose"><Close /></el-icon>
|
|
|
</template>
|
|
</template>
|
|
|
<!-- 简单模式或 ImportResponseDataPerson 类型:显示字符串消息 -->
|
|
<!-- 简单模式或 ImportResponseDataPerson 类型:显示字符串消息 -->
|
|
|
<div v-if="props.responseType === 'simple' || isPersonResponseType" class="simple-message">
|
|
<div v-if="props.responseType === 'simple' || isPersonResponseType" class="simple-message">
|
|
@@ -216,8 +216,10 @@
|
|
|
simpleMessage.value = message;
|
|
simpleMessage.value = message;
|
|
|
lastResponseData.value = message;
|
|
lastResponseData.value = message;
|
|
|
}
|
|
}
|
|
|
- // 显示dialog
|
|
|
|
|
|
|
+ // 显示错误弹窗
|
|
|
dialogVisibleErr.value = true;
|
|
dialogVisibleErr.value = true;
|
|
|
|
|
+ // 通知父组件更新数据(但不关闭主弹窗)
|
|
|
|
|
+ emit('update', lastResponseData.value);
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
ElMessage({
|
|
ElMessage({
|
|
|
message: '导入失败',
|
|
message: '导入失败',
|
|
@@ -243,10 +245,10 @@
|
|
|
simpleMessage.value = detailedData.message || '导入完成';
|
|
simpleMessage.value = detailedData.message || '导入完成';
|
|
|
// 保存返回值
|
|
// 保存返回值
|
|
|
lastResponseData.value = detailedData;
|
|
lastResponseData.value = detailedData;
|
|
|
- // 立即触发 emit,传递完整数据(包括 successMembers)给父组件
|
|
|
|
|
- emit('update', detailedData);
|
|
|
|
|
- // 显示 dialog
|
|
|
|
|
|
|
+ // 显示错误弹窗
|
|
|
dialogVisibleErr.value = true;
|
|
dialogVisibleErr.value = true;
|
|
|
|
|
+ // 触发 update 事件,通知父组件更新数据(但不关闭主弹窗)
|
|
|
|
|
+ emit('update', detailedData);
|
|
|
return;
|
|
return;
|
|
|
} else {
|
|
} else {
|
|
|
// 否则是 ImportResponseData 类型(有 successCount, failCount, failInfoList)
|
|
// 否则是 ImportResponseData 类型(有 successCount, failCount, failInfoList)
|
|
@@ -276,6 +278,7 @@
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
if (sucCount.value != 0 && errCount.value === 0 && errDetail.value.length === 0) {
|
|
if (sucCount.value != 0 && errCount.value === 0 && errDetail.value.length === 0) {
|
|
|
|
|
+ // 完全成功:通知父组件更新数据,然后关闭弹窗
|
|
|
ElMessage({
|
|
ElMessage({
|
|
|
message: `导入成功!共导入${sucCount.value}条记录`,
|
|
message: `导入成功!共导入${sucCount.value}条记录`,
|
|
|
type: 'success',
|
|
type: 'success',
|
|
@@ -283,8 +286,11 @@
|
|
|
emit('update', detailedData);
|
|
emit('update', detailedData);
|
|
|
emit('close');
|
|
emit('close');
|
|
|
} else {
|
|
} else {
|
|
|
- dialogVisibleErr.value = true; // 显示错误dialog
|
|
|
|
|
|
|
+ // 有错误:显示错误弹窗,通知父组件更新数据(可选)
|
|
|
|
|
+ dialogVisibleErr.value = true;
|
|
|
errDetail.value = mergeFailReasons(errDetail.value);
|
|
errDetail.value = mergeFailReasons(errDetail.value);
|
|
|
|
|
+ // 可选:如果父组件需要知道有错误,可以触发 update
|
|
|
|
|
+ // emit('update', detailedData);
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
ElMessage({
|
|
ElMessage({
|
|
@@ -316,8 +322,15 @@
|
|
|
isImportDisable.value = true;
|
|
isImportDisable.value = true;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- const handleClose = () => {
|
|
|
|
|
- emit('update', lastResponseData.value);
|
|
|
|
|
|
|
+ // 主弹窗关闭:直接关闭,不触发 update(因为可能没有数据更新)
|
|
|
|
|
+ const handleMainClose = () => {
|
|
|
|
|
+ emit('close');
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ // 错误弹窗关闭:关闭错误弹窗,并关闭主弹窗
|
|
|
|
|
+ const handleErrorDialogClose = () => {
|
|
|
|
|
+ dialogVisibleErr.value = false;
|
|
|
|
|
+ emit('close');
|
|
|
};
|
|
};
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|