@@ -218,21 +214,54 @@ export default {
});
this.form[fieldName] = fileList;
},
- uploadJumpUrlSuccess(response, file, fileList) {
- window.$_uploading = false;
- fileList.forEach((item) => {
- if (item.response?.data && !item.response?.code) {
- item.response = item.response.data;
- }
- });
- this.jumpUrlFileList = fileList;
- const uploaded = fileList[0]?.response;
- this.form.jump_url = uploaded?.url || "";
+ parseUploadResponse(payload) {
+ if (!payload) return null;
+ if (payload.url) return payload;
+ if (payload.data?.url) return payload.data;
+ return null;
+ },
+ handleJumpUrlUpload({ file, onSuccess, onError }) {
+ const formData = new FormData();
+ formData.append("file", file);
+ window.$_uploading = true;
+ axios
+ .post(this.action, formData, {
+ headers: {
+ Authorization: `Bearer ${getToken()}`,
+ },
+ })
+ .then((response) => {
+ window.$_uploading = false;
+ const data = this.parseUploadResponse(response.data);
+ if (response.status === 200 && data?.url) {
+ this.form.jump_url = data.url;
+ this.jumpUrlFileList = [
+ {
+ name: data.original_name || file.name,
+ url: data.url,
+ status: "success",
+ response: data,
+ },
+ ];
+ onSuccess(data);
+ return;
+ }
+ this.$message.error("上传失败");
+ onError(new Error("upload failed"));
+ })
+ .catch((err) => {
+ window.$_uploading = false;
+ onError(err);
+ });
},
uploadJumpUrlRemove() {
this.jumpUrlFileList = [];
this.form.jump_url = "";
},
+ uploadJumpUrlError() {
+ window.$_uploading = false;
+ this.$message.error("上传失败");
+ },
uploadRemove(file, fileList, fieldName) {
this.form[fieldName] = fileList;
},
@@ -328,4 +357,16 @@ export default {
display: flex;
}
}
+
+::v-deep .jump-url-uploader {
+ .el-upload-list--picture-card .el-upload-list__item,
+ .el-upload--picture-card {
+ width: 80px;
+ height: 80px;
+ }
+
+ .el-upload--picture-card {
+ line-height: 80px;
+ }
+}
diff --git a/src/views/Banners/components/ShowBanners.vue b/src/views/Banners/components/ShowBanners.vue
index 8bec472..8a1cb8e 100644
--- a/src/views/Banners/components/ShowBanners.vue
+++ b/src/views/Banners/components/ShowBanners.vue
@@ -32,7 +32,7 @@
v-if="form['jump_url']"
:src="form['jump_url']"
fit="cover"
- style="width: 120px; height: 120px"
+ style="width: 80px; height: 80px; border-radius: 4px"
:preview-src-list="[form['jump_url']]"
/>
-