From e2e70e647c20f0a2fbb21a3f90a3932a69894be6 Mon Sep 17 00:00:00 2001
From: cshaptx4869 <994774638@qq.com>
Date: Mon, 17 Jun 2024 11:23:39 +0800
Subject: [PATCH] =?UTF-8?q?feat(PageContent):=20:sparkles:=20=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E5=90=8E=E7=AB=AF=E6=96=87=E4=BB=B6=E5=AF=BC=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/CURD/PageContent.vue | 52 ++++++++++++++++++++++-----
src/components/CURD/types.ts | 3 ++
src/views/demo/curd/config/content.ts | 10 +++---
src/views/demo/curd/index.vue | 4 +--
4 files changed, 53 insertions(+), 16 deletions(-)
diff --git a/src/components/CURD/PageContent.vue b/src/components/CURD/PageContent.vue
index 72482e7b..0d173cb6 100644
--- a/src/components/CURD/PageContent.vue
+++ b/src/components/CURD/PageContent.vue
@@ -29,11 +29,22 @@
删除
+
+
+
+ 导入
+
+
@@ -573,8 +584,8 @@ function handleSelectionChange(selection: any[]) {
}
// 刷新
-function handleRefresh() {
- fetchPageData(lastFormData);
+function handleRefresh(isRestart = false) {
+ fetchPageData(lastFormData, isRestart);
}
// 删除
@@ -593,7 +604,7 @@ function handleDelete(id?: number | string) {
if (props.contentConfig.deleteAction) {
props.contentConfig.deleteAction(ids).then(() => {
ElMessage.success("删除成功");
- fetchPageData({}, true);
+ handleRefresh(true);
});
} else {
ElMessage.error("未配置deleteAction");
@@ -693,6 +704,7 @@ function handleExports() {
}
// 导入表单
+let isFileImport = false;
const uploadRef = ref();
const importsModalVisible = ref(false);
const importsFormRef = ref();
@@ -705,8 +717,9 @@ const importsFormRules: FormRules = {
files: [{ required: true, message: "请选择文件" }],
};
// 打开导入弹窗
-function handleOpenImportsModal() {
+function handleOpenImportsModal(isFile: boolean = false) {
importsModalVisible.value = true;
+ isFileImport = isFile;
}
// 覆盖前一个文件
function handleFileExceed(files: File[]) {
@@ -735,7 +748,13 @@ function handleDownloadTemplate() {
// 导入确认
const handleImportsSubmit = useThrottleFn(() => {
importsFormRef.value?.validate((valid: boolean) => {
- valid && handleImports();
+ if (valid) {
+ if (isFileImport) {
+ handleImport();
+ } else {
+ handleImports();
+ }
+ }
});
}, 3000);
// 关闭导入弹窗
@@ -746,6 +765,19 @@ function handleCloseImportsModal() {
importsFormRef.value?.clearValidate();
});
}
+// 文件导入
+function handleImport() {
+ const importAction = props.contentConfig.importAction;
+ if (importAction === undefined) {
+ ElMessage.error("未配置importAction");
+ return;
+ }
+ importAction(importsFormData.files[0].raw as File).then(() => {
+ ElMessage.success("导入数据成功");
+ handleCloseImportsModal();
+ handleRefresh(true);
+ });
+}
// 导入
function handleImports() {
const importsAction = props.contentConfig.importsAction;
@@ -802,6 +834,7 @@ function handleImports() {
importsAction(data).then(() => {
ElMessage.success("导入数据成功");
handleCloseImportsModal();
+ handleRefresh(true);
});
})
.catch((error) => console.log(error));
@@ -832,6 +865,9 @@ function handleToolbar(name: string) {
case "delete":
handleDelete();
break;
+ case "import":
+ handleOpenImportsModal(true);
+ break;
case "export":
emit("exportClick");
break;
@@ -876,11 +912,11 @@ function handleModify(
// 分页切换
function handleSizeChange(value: number) {
pagination.pageSize = value;
- fetchPageData(lastFormData);
+ handleRefresh();
}
function handleCurrentChange(value: number) {
pagination.currentPage = value;
- fetchPageData(lastFormData);
+ handleRefresh();
}
// 远程数据筛选
diff --git a/src/components/CURD/types.ts b/src/components/CURD/types.ts
index 1cbdb561..c2082033 100644
--- a/src/components/CURD/types.ts
+++ b/src/components/CURD/types.ts
@@ -92,6 +92,8 @@ export interface IContentConfig {
exportAction?: (queryParams: T) => Promise;
// 前端全量导出的网络请求函数(需返回promise)
exportsAction?: (queryParams: T) => Promise;
+ // 后端导入的网络请求函数(需返回promise)
+ importAction?: (file: File) => Promise;
// 前端导入模板
importsTemplate?: string | (() => Promise);
// 前端导入的网络请求函数(需返回promise)
@@ -102,6 +104,7 @@ export interface IContentConfig {
toolbar?: Array<
| "add"
| "delete"
+ | "import"
| "export"
| {
auth: string;
diff --git a/src/views/demo/curd/config/content.ts b/src/views/demo/curd/config/content.ts
index 56a1a0b7..bda6a058 100644
--- a/src/views/demo/curd/config/content.ts
+++ b/src/views/demo/curd/config/content.ts
@@ -25,6 +25,9 @@ const contentConfig: IContentConfig = {
return UserAPI.getPage(params);
},
deleteAction: UserAPI.deleteByIds,
+ importAction(file) {
+ return UserAPI.import(1, file);
+ },
exportAction: UserAPI.export,
importsTemplate: UserAPI.downloadTemplate,
importsAction(data) {
@@ -42,13 +45,8 @@ const contentConfig: IContentConfig = {
toolbar: [
"add",
"delete",
+ "import",
"export",
- {
- name: "import",
- icon: "upload",
- text: "导入",
- auth: "import",
- },
{
name: "custom1",
icon: "plus",
diff --git a/src/views/demo/curd/index.vue b/src/views/demo/curd/index.vue
index 75f71086..9060c666 100644
--- a/src/views/demo/curd/index.vue
+++ b/src/views/demo/curd/index.vue
@@ -113,8 +113,8 @@ async function handleEditClick(row: IObject) {
// 其他工具栏
function handleToolbarClick(name: string) {
console.log(name);
- if (name === "import") {
- ElMessage.success("点击了导入按钮");
+ if (name === "custom1") {
+ ElMessage.success("点击了自定义1按钮");
}
}
// 其他操作列