|
@@ -1,66 +1,78 @@
|
|
|
<template>
|
|
|
- <div :class="prefixCls">
|
|
|
- <el-dialog
|
|
|
- class="modify-data"
|
|
|
- :visible.sync="modalIsShow"
|
|
|
- :title="title"
|
|
|
- top="10vh"
|
|
|
- width="500px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- :close-on-press-escape="false"
|
|
|
- append-to-body
|
|
|
- @open="visibleChange"
|
|
|
- >
|
|
|
- <div style="footer"></div>
|
|
|
- <div :class="[`${prefixCls}-footer`]" v-if="downloadUrl">
|
|
|
- 文件下载:
|
|
|
- <a :href="downloadUrl" :download="dfilename">{{ dfilename }}</a>
|
|
|
- </div>
|
|
|
- <div :class="[`${prefixCls}-footer`]" v-if="downloadHandle">
|
|
|
- 文件下载:
|
|
|
- <el-button type="text" @click="downloadHandle">{{
|
|
|
- dfilename
|
|
|
- }}</el-button>
|
|
|
- </div>
|
|
|
- <div :class="[`${prefixCls}-body`]">
|
|
|
- <el-upload
|
|
|
- drag
|
|
|
- :action="uploadUrl"
|
|
|
- :headers="headers"
|
|
|
- :max-size="maxSize"
|
|
|
- :format="format"
|
|
|
- :accept="accept"
|
|
|
- :data="uploadDataDict"
|
|
|
- :before-upload="handleBeforeUpload"
|
|
|
- :on-error="handleError"
|
|
|
- :on-success="handleSuccess"
|
|
|
- :http-request="upload"
|
|
|
- :disabled="disabled || loading"
|
|
|
- :show-file-list="false"
|
|
|
- ref="UploadComp"
|
|
|
+ <el-dialog
|
|
|
+ :class="prefixCls"
|
|
|
+ :visible.sync="modalIsShow"
|
|
|
+ :title="title"
|
|
|
+ top="10vh"
|
|
|
+ width="500px"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :close-on-press-escape="false"
|
|
|
+ append-to-body
|
|
|
+ @opened="visibleChange"
|
|
|
+ >
|
|
|
+ <div :class="[`${prefixCls}-footer`]" v-if="downloadUrl">
|
|
|
+ 文件下载:
|
|
|
+ <a :href="downloadUrl" :download="dfilename">{{ dfilename }}</a>
|
|
|
+ </div>
|
|
|
+ <div :class="[`${prefixCls}-footer`]" v-if="downloadHandle">
|
|
|
+ 文件下载:
|
|
|
+ <el-button type="text" @click="downloadHandle">{{ dfilename }}</el-button>
|
|
|
+ </div>
|
|
|
+ <div :class="[`${prefixCls}-body`]">
|
|
|
+ <el-upload
|
|
|
+ drag
|
|
|
+ :action="uploadUrl"
|
|
|
+ :headers="headers"
|
|
|
+ :max-size="maxSize"
|
|
|
+ :format="format"
|
|
|
+ :accept="accept"
|
|
|
+ :data="uploadDataDict"
|
|
|
+ :before-upload="handleBeforeUpload"
|
|
|
+ :on-error="handleError"
|
|
|
+ :on-success="handleSuccess"
|
|
|
+ :http-request="upload"
|
|
|
+ :disabled="disabled || loading"
|
|
|
+ :auto-upload="autoUpload"
|
|
|
+ :show-file-list="true"
|
|
|
+ :file-list="fileList"
|
|
|
+ :on-change="handleFileChange"
|
|
|
+ :on-remove="handleFileRemove"
|
|
|
+ ref="UploadComp"
|
|
|
+ >
|
|
|
+ <i class="el-icon-upload"></i><br />
|
|
|
+ <em class="el-upload__text">将文件拖到此处,或<em>点击上传</em></em>
|
|
|
+ <p
|
|
|
+ slot="tip"
|
|
|
+ :class="[
|
|
|
+ `${prefixCls}-tips`,
|
|
|
+ {
|
|
|
+ 'cc-tips-success': res.success,
|
|
|
+ 'cc-tips-error': !res.success
|
|
|
+ }
|
|
|
+ ]"
|
|
|
+ v-if="res.message"
|
|
|
>
|
|
|
- <i class="el-icon-upload"></i><br />
|
|
|
- <em class="el-upload__text">将文件拖到此处,或<em>点击上传</em></em>
|
|
|
- <p
|
|
|
- slot="tip"
|
|
|
- :class="[
|
|
|
- `${prefixCls}-tips`,
|
|
|
- {
|
|
|
- 'cc-tips-success': res.success,
|
|
|
- 'cc-tips-error': !res.success
|
|
|
- }
|
|
|
- ]"
|
|
|
- v-if="res.msg"
|
|
|
- >
|
|
|
- {{ res.msg }}
|
|
|
- </p>
|
|
|
- </el-upload>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
- </div>
|
|
|
+ {{ res.message }}
|
|
|
+ </p>
|
|
|
+ </el-upload>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="!autoUpload" slot="footer">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ :disabled="loading || !canUpload"
|
|
|
+ @click="startUpload"
|
|
|
+ >确认</el-button
|
|
|
+ >
|
|
|
+ <el-button @click="cancel">取消</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+/**
|
|
|
+ * auto-upload为false时,手动调用ElUpload.Submit时会触发before-upload-handle
|
|
|
+ */
|
|
|
import { fileMD5 } from "@/plugins/md5";
|
|
|
import { $post } from "@/plugins/axios";
|
|
|
|
|
@@ -105,6 +117,10 @@ export default {
|
|
|
type: String,
|
|
|
default: "filename"
|
|
|
},
|
|
|
+ autoUpload: {
|
|
|
+ type: Boolean,
|
|
|
+ default: true
|
|
|
+ },
|
|
|
disabled: { type: Boolean, default: false }
|
|
|
},
|
|
|
data() {
|
|
@@ -114,12 +130,14 @@ export default {
|
|
|
headers: {
|
|
|
md5: ""
|
|
|
},
|
|
|
+ selectFileName: "",
|
|
|
loading: false,
|
|
|
uploadDataDict: {},
|
|
|
res: {
|
|
|
success: true,
|
|
|
- msg: ""
|
|
|
- }
|
|
|
+ message: ""
|
|
|
+ },
|
|
|
+ fileList: []
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
@@ -128,27 +146,37 @@ export default {
|
|
|
},
|
|
|
accept() {
|
|
|
return this.format.map(el => `.${el}`).join();
|
|
|
+ },
|
|
|
+ canUpload() {
|
|
|
+ return this.fileList.length > 0;
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
visibleChange() {
|
|
|
this.res = {
|
|
|
success: true,
|
|
|
- msg: ""
|
|
|
+ message: ""
|
|
|
};
|
|
|
this.headers = { md5: "" };
|
|
|
this.loading = false;
|
|
|
this.uploadDataDict = {};
|
|
|
+ this.$refs.UploadComp.clearFiles();
|
|
|
},
|
|
|
checkFileFormat(fileType) {
|
|
|
const _file_format = fileType
|
|
|
.split(".")
|
|
|
.pop()
|
|
|
- .toLowerCase();
|
|
|
+ .toLocaleLowerCase();
|
|
|
return this.format.length
|
|
|
- ? this.format.some(item => item.toLowerCase() === _file_format)
|
|
|
+ ? this.format.some(item => item.toLocaleLowerCase() === _file_format)
|
|
|
: true;
|
|
|
},
|
|
|
+ handleFileChange(file) {
|
|
|
+ this.fileList = [file];
|
|
|
+ },
|
|
|
+ handleFileRemove(file, fileList) {
|
|
|
+ this.fileList = fileList;
|
|
|
+ },
|
|
|
async handleBeforeUpload(file) {
|
|
|
this.uploadDataDict = {
|
|
|
...this.uploadData
|
|
@@ -170,6 +198,9 @@ export default {
|
|
|
|
|
|
return true;
|
|
|
},
|
|
|
+ startUpload() {
|
|
|
+ this.$refs.UploadComp.submit();
|
|
|
+ },
|
|
|
upload(options) {
|
|
|
let formData = new FormData();
|
|
|
Object.entries(options.data).forEach(([k, v]) => {
|
|
@@ -184,7 +215,7 @@ export default {
|
|
|
this.loading = false;
|
|
|
this.res = {
|
|
|
success: false,
|
|
|
- msg: error.message
|
|
|
+ message: error.message
|
|
|
};
|
|
|
this.$emit("upload-error", error);
|
|
|
},
|
|
@@ -192,23 +223,30 @@ export default {
|
|
|
this.loading = false;
|
|
|
this.res = {
|
|
|
success: true,
|
|
|
- msg: "导入成功!"
|
|
|
+ message: "导入成功!"
|
|
|
};
|
|
|
this.cancel();
|
|
|
- this.$emit("upload-success", responseData);
|
|
|
+ this.$emit("upload-success", {
|
|
|
+ data: responseData,
|
|
|
+ filename: this.uploadDataDict[this.addFilenameParam]
|
|
|
+ });
|
|
|
},
|
|
|
handleFormatError() {
|
|
|
+ const content = "只支持文件格式为" + this.format.join("/");
|
|
|
this.res = {
|
|
|
success: false,
|
|
|
- msg: "只支持文件格式为" + this.format.join("/")
|
|
|
+ message: content
|
|
|
};
|
|
|
+ this.$emit("valid-error", this.res);
|
|
|
this.$refs.UploadComp.clearFiles();
|
|
|
},
|
|
|
handleExceededSize() {
|
|
|
this.res = {
|
|
|
success: false,
|
|
|
- msg: "文件大小不能超过" + Math.floor(this.maxSize / (1024 * 1024)) + "M"
|
|
|
+ message:
|
|
|
+ "文件大小不能超过" + Math.floor(this.maxSize / (1024 * 1024)) + "M"
|
|
|
};
|
|
|
+ this.$emit("valid-error", this.res);
|
|
|
this.$refs.UploadComp.clearFiles();
|
|
|
},
|
|
|
cancel() {
|