Commit b6ae1a92d530daa15ee7bb68a27c37ea13a1d612
1 parent
47f32d5c
新增上传文件组件
Showing
4 changed files
with
83 additions
and
3 deletions
src/components/FileUpload/index.vue
0 → 100644
| 1 | +<script setup lang="ts"> | ||
| 2 | +import { ref, reactive } from "vue"; | ||
| 3 | +import { ElMessage } from "element-plus"; | ||
| 4 | +import * as store from "@/pinia/index"; | ||
| 5 | +const upload = ref(); | ||
| 6 | +/** | ||
| 7 | + * @description 组件属性 | ||
| 8 | + * @prop {string | null} url 上传地址 | ||
| 9 | + * @prop { string | null } method 上传请求方法 | ||
| 10 | + * | ||
| 11 | + */ | ||
| 12 | +interface Props { | ||
| 13 | + url: string; | ||
| 14 | + method: string; | ||
| 15 | +} | ||
| 16 | +const props = withDefaults(defineProps<Props>(), {}); | ||
| 17 | +const emit = defineEmits<{ | ||
| 18 | + (e: "success"): void; | ||
| 19 | +}>(); | ||
| 20 | +/** | ||
| 21 | + * @description 上传配置 | ||
| 22 | + */ | ||
| 23 | +const setting = reactive({ | ||
| 24 | + url: `${import.meta.env.VITE_BASE_URL}${props.url}`, | ||
| 25 | + headers: { | ||
| 26 | + "X-Token": store.family.loginStore().token, | ||
| 27 | + }, | ||
| 28 | + loading: false, | ||
| 29 | +}); | ||
| 30 | +/** | ||
| 31 | + * 上传文件成功回调 | ||
| 32 | + * @param { ElUploadProgressEvent } 回调返回对象 | ||
| 33 | + */ | ||
| 34 | +const handleSuccess = (res: ElUploadProgressEvent) => { | ||
| 35 | + setting.loading = false; | ||
| 36 | + if (res.errorCode == 0) { | ||
| 37 | + ElMessage.success("操作成功"); | ||
| 38 | + emit('success'); | ||
| 39 | + } else { | ||
| 40 | + ElMessage.error(res.errorMessage??'操作失败'); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | +}; | ||
| 44 | + | ||
| 45 | +/** | ||
| 46 | + * 上传文件失败回调 | ||
| 47 | + * @param { ElUploadProgressEvent } 回调返回对象 | ||
| 48 | + */ | ||
| 49 | +const handlError = (err: ElUploadProgressEvent) => { | ||
| 50 | + console.log(err); | ||
| 51 | +}; | ||
| 52 | +/** | ||
| 53 | + * 文件上传中回调 | ||
| 54 | + * | ||
| 55 | + */ | ||
| 56 | +const handleProgress = () => { | ||
| 57 | + setting.loading = true; | ||
| 58 | +}; | ||
| 59 | +</script> | ||
| 60 | +<template> | ||
| 61 | + <el-upload | ||
| 62 | + ref="upload" | ||
| 63 | + :action="setting.url" | ||
| 64 | + :headers="setting.headers" | ||
| 65 | + :method="props.method" | ||
| 66 | + accept=".xlsx,.xls" | ||
| 67 | + name="multipartFile" | ||
| 68 | + :with-credentials="true" | ||
| 69 | + :show-file-list="false" | ||
| 70 | + :on-success="handleSuccess" | ||
| 71 | + :on-error="handlError" | ||
| 72 | + :on-progress="handleProgress" | ||
| 73 | + > | ||
| 74 | + <el-button type="primary" :loading="setting.loading">导入</el-button> | ||
| 75 | + </el-upload> | ||
| 76 | +</template> |
src/views/community/housekeeper/houseDetail.vue
| @@ -124,7 +124,7 @@ let submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => { | @@ -124,7 +124,7 @@ let submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => { | ||
| 124 | addOrUpdate(props.formObj) | 124 | addOrUpdate(props.formObj) |
| 125 | .then((res) => { | 125 | .then((res) => { |
| 126 | loading.value = false; | 126 | loading.value = false; |
| 127 | - emit("success"); | 127 | + emit('success') |
| 128 | }) | 128 | }) |
| 129 | .catch((err) => { | 129 | .catch((err) => { |
| 130 | console.log(err); | 130 | console.log(err); |
src/views/community/houses/index.vue
| @@ -5,6 +5,7 @@ import { parseTime } from "@/utils/tool.ts"; | @@ -5,6 +5,7 @@ import { parseTime } from "@/utils/tool.ts"; | ||
| 5 | import Detail from "./detail.vue"; | 5 | import Detail from "./detail.vue"; |
| 6 | import BuildOwner from "./buildOwner.vue"; | 6 | import BuildOwner from "./buildOwner.vue"; |
| 7 | import Relieve from "./relieve.vue"; | 7 | import Relieve from "./relieve.vue"; |
| 8 | +import File from "@/components/FileUpload/index.vue" | ||
| 8 | import Pagination from "@/components/Pagination/index.vue"; | 9 | import Pagination from "@/components/Pagination/index.vue"; |
| 9 | import { useRoute } from "vue-router"; | 10 | import { useRoute } from "vue-router"; |
| 10 | 11 | ||
| @@ -134,8 +135,9 @@ watchEffect(() => { | @@ -134,8 +135,9 @@ watchEffect(() => { | ||
| 134 | > | 135 | > |
| 135 | <el-row> | 136 | <el-row> |
| 136 | <el-form-item> | 137 | <el-form-item> |
| 137 | - <el-button type="primary">导入</el-button> | ||
| 138 | - <el-button type="primary">导出</el-button> | 138 | + <!-- <el-button type="primary">导入</el-button> |
| 139 | + <el-button type="primary">导出</el-button> --> | ||
| 140 | + <File url="house/importExcel" method="put" @success="search"></File> | ||
| 139 | </el-form-item> | 141 | </el-form-item> |
| 140 | </el-row> | 142 | </el-row> |
| 141 | </el-form> | 143 | </el-form> |
src/views/ownerManagement/owner/index.vue
| @@ -8,6 +8,7 @@ import { | @@ -8,6 +8,7 @@ import { | ||
| 8 | } from "@/api/ownerManagement/owner.ts"; | 8 | } from "@/api/ownerManagement/owner.ts"; |
| 9 | import { parseTime } from "@/utils/tool.ts"; | 9 | import { parseTime } from "@/utils/tool.ts"; |
| 10 | import Detail from "./detail.vue"; | 10 | import Detail from "./detail.vue"; |
| 11 | +import File from "@/components/FileUpload/index.vue" | ||
| 11 | import Pagination from "@/components/Pagination/index.vue"; | 12 | import Pagination from "@/components/Pagination/index.vue"; |
| 12 | import { useRoute } from "vue-router"; | 13 | import { useRoute } from "vue-router"; |
| 13 | 14 | ||
| @@ -196,6 +197,7 @@ watchEffect(() => { | @@ -196,6 +197,7 @@ watchEffect(() => { | ||
| 196 | <el-button type="primary" @click="data.dialogVisible = true" | 197 | <el-button type="primary" @click="data.dialogVisible = true" |
| 197 | >新增</el-button | 198 | >新增</el-button |
| 198 | > --> | 199 | > --> |
| 200 | + <File url="resident/poiInsert" method="post" @success="search"></File> | ||
| 199 | </el-form-item> | 201 | </el-form-item> |
| 200 | </el-row> | 202 | </el-row> |
| 201 | </el-form> | 203 | </el-form> |