Files
mp-10579/src/views/credit/creditUser/components/credit-user-import.vue
赵忠林 0e489ec35f feat(credit): 添加赊账客户导入功能
- 新增 importCreditUsers API 接口用于导入赊账客户数据
- 在信用用户管理页面增加导入按钮和导入弹窗组件
- 实现拖拽上传和文件校验逻辑
- 添加导入模板下载链接
- 支持 Excel 文件格式(.xls/.xlsx)导入
- 实现批量导入数据处理和错误提示
- 更新搜索组件支持关键词搜索功能
- 优化表格数据加载逻辑,支持搜索参数传递
- 移除冗余的查询相关代码和状态变量
- 完善导入弹窗的 loading 状态管理和关闭逻辑
2025-12-15 14:43:49 +08:00

94 lines
2.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 赊账客户导入弹窗 -->
<template>
<ele-modal
:width="520"
:footer="null"
title="赊账客户批量导入"
:visible="visible"
@update:visible="updateVisible"
>
<a-spin :spinning="loading">
<a-upload-dragger
accept=".xls,.xlsx"
:show-upload-list="false"
:customRequest="doUpload"
style="padding: 24px 0; margin-bottom: 16px"
>
<p class="ant-upload-drag-icon">
<cloud-upload-outlined />
</p>
<p class="ant-upload-hint">将文件拖到此处或点击上传</p>
</a-upload-dragger>
</a-spin>
<div class="ele-text-center">
<span>只能上传xlsxlsx文件</span>
<a :href="templateUrl" download="赊账客户导入模板.xlsx">
下载导入模板
</a>
</div>
</ele-modal>
</template>
<script lang="ts" setup>
import { computed, ref } from 'vue';
import { message } from 'ant-design-vue/es';
import { CloudUploadOutlined } from '@ant-design/icons-vue';
import { importCreditUsers } from '@/api/credit/creditUser';
import { API_BASE_URL } from '@/config/setting';
const emit = defineEmits<{
(e: 'done'): void;
(e: 'update:visible', visible: boolean): void;
}>();
defineProps<{
// 是否打开弹窗
visible: boolean;
}>();
// 导入请求状态
const loading = ref(false);
// 模板下载地址,保持与当前接口域名一致
const templateUrl = computed(() => {
const base =
(localStorage.getItem('ApiUrl') || API_BASE_URL || '').replace(/\/$/, '');
return `${base}/credit/credit-user/import/template`;
});
/* 上传 */
const doUpload = ({ file }) => {
if (
![
'application/vnd.ms-excel',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
].includes(file.type)
) {
message.error('只能选择 excel 文件');
return false;
}
if (file.size / 1024 / 1024 > 10) {
message.error('大小不能超过 10MB');
return false;
}
loading.value = true;
importCreditUsers(file)
.then((msg) => {
loading.value = false;
message.success(msg);
updateVisible(false);
emit('done');
})
.catch((e) => {
loading.value = false;
message.error(e.message);
});
return false;
};
/* 更新 visible */
const updateVisible = (value: boolean) => {
emit('update:visible', value);
};
</script>