| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <template>
- <el-upload :action="'#'" :http-request="onFileUpload" :accept="fileTypes == null ? '' : fileTypes.join(',')"
- :show-file-list="false" :disabled="disabled" :before-upload="beforeUpload" :multiple="true">
- <slot></slot>
- </el-upload>
- </template>
- <script>
- export default {
- name: "fileUpload",
- data() {
- return {
- loading: null,
- uploadHeaders: {
- "accessToken": sessionStorage.getItem('accessToken')
- }
- }
- },
- props: {
- action: {
- type: String,
- required: false
- },
- fileTypes: {
- type: Array,
- default: null
- },
- maxSize: {
- type: Number,
- default: null
- },
- showLoading: {
- type: Boolean,
- default: false
- },
- isPermanent: {
- type: Boolean,
- default: false
- },
- disabled: {
- type: Boolean,
- default: false
- }
- },
- methods: {
- onFileUpload(file) {
- // 展示加载条
- if (this.showLoading) {
- this.loading = this.$loading({
- lock: true,
- text: '正在上传...',
- spinner: 'el-icon-loading',
- background: 'rgba(0, 0, 0, 0.7)'
- });
- }
- let formData = new FormData()
- formData.append('file', file.file)
- let url = this.action;
- url += this.action.includes("?") ? "&" : "?"
- url += 'isPermanent=' + this.isPermanent;
- this.$http({
- url: url,
- data: formData,
- method: 'post',
- headers: {
- 'Content-Type': 'multipart/form-data'
- }
- }).then((data) => {
- this.$emit("success", data, file.file);
- }).catch((e) => {
- this.$emit("fail", e, file.file);
- }).finally(() => {
- this.loading && this.loading.close();
- })
- },
- beforeUpload(file) {
- // 校验文件类型
- if (this.fileTypes && this.fileTypes.length > 0) {
- let fileType = file.type;
- let t = this.fileTypes.find((t) => t.toLowerCase() === fileType);
- if (t === undefined) {
- this.$message.error(`文件格式错误,请上传以下格式的文件:${this.fileTypes.join("、")}`);
- return false;
- }
- }
- // 校验大小
- if (this.maxSize && file.size > this.maxSize) {
- this.$message.error(`文件大小不能超过 ${this.fileSizeStr}!`);
- return false;
- }
- this.$emit("before", file);
- return true;
- }
- },
- computed: {
- fileSizeStr() {
- if (this.maxSize > 1024 * 1024) {
- return Math.round(this.maxSize / 1024 / 1024) + "M";
- }
- if (this.maxSize > 1024) {
- return Math.round(this.maxSize / 1024) + "KB";
- }
- return this.maxSize + "B";
- }
- }
- }
- </script>
- <style></style>
|