ckgl/node_modules/vant/lib/uploader/UploaderPreviewItem.js
2024-12-21 13:52:42 +08:00

150 lines
5.1 KiB
JavaScript

var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var stdin_exports = {};
__export(stdin_exports, {
default: () => stdin_default
});
module.exports = __toCommonJS(stdin_exports);
var import_vue = require("vue");
var import_utils = require("./utils");
var import_utils2 = require("../utils");
var import_icon = require("../icon");
var import_image = require("../image");
var import_loading = require("../loading");
var stdin_default = (0, import_vue.defineComponent)({
props: {
name: import_utils2.numericProp,
item: (0, import_utils2.makeRequiredProp)(Object),
index: Number,
imageFit: String,
lazyLoad: Boolean,
deletable: Boolean,
reupload: Boolean,
previewSize: [Number, String, Array],
beforeDelete: Function
},
emits: ["delete", "preview", "reupload"],
setup(props, {
emit,
slots
}) {
const renderMask = () => {
const {
status,
message
} = props.item;
if (status === "uploading" || status === "failed") {
const MaskIcon = status === "failed" ? (0, import_vue.createVNode)(import_icon.Icon, {
"name": "close",
"class": (0, import_utils.bem)("mask-icon")
}, null) : (0, import_vue.createVNode)(import_loading.Loading, {
"class": (0, import_utils.bem)("loading")
}, null);
const showMessage = (0, import_utils2.isDef)(message) && message !== "";
return (0, import_vue.createVNode)("div", {
"class": (0, import_utils.bem)("mask")
}, [MaskIcon, showMessage && (0, import_vue.createVNode)("div", {
"class": (0, import_utils.bem)("mask-message")
}, [message])]);
}
};
const onDelete = (event) => {
const {
name,
item,
index,
beforeDelete
} = props;
event.stopPropagation();
(0, import_utils2.callInterceptor)(beforeDelete, {
args: [item, {
name,
index
}],
done: () => emit("delete")
});
};
const onPreview = () => emit("preview");
const onReupload = () => emit("reupload");
const renderDeleteIcon = () => {
if (props.deletable && props.item.status !== "uploading") {
const slot = slots["preview-delete"];
return (0, import_vue.createVNode)("div", {
"role": "button",
"class": (0, import_utils.bem)("preview-delete", {
shadow: !slot
}),
"tabindex": 0,
"aria-label": (0, import_utils.t)("delete"),
"onClick": onDelete
}, [slot ? slot() : (0, import_vue.createVNode)(import_icon.Icon, {
"name": "cross",
"class": (0, import_utils.bem)("preview-delete-icon")
}, null)]);
}
};
const renderCover = () => {
if (slots["preview-cover"]) {
const {
index,
item
} = props;
return (0, import_vue.createVNode)("div", {
"class": (0, import_utils.bem)("preview-cover")
}, [slots["preview-cover"]((0, import_utils2.extend)({
index
}, item))]);
}
};
const renderPreview = () => {
const {
item,
lazyLoad,
imageFit,
previewSize,
reupload
} = props;
if ((0, import_utils.isImageFile)(item)) {
return (0, import_vue.createVNode)(import_image.Image, {
"fit": imageFit,
"src": item.objectUrl || item.content || item.url,
"class": (0, import_utils.bem)("preview-image"),
"width": Array.isArray(previewSize) ? previewSize[0] : previewSize,
"height": Array.isArray(previewSize) ? previewSize[1] : previewSize,
"lazyLoad": lazyLoad,
"onClick": reupload ? onReupload : onPreview
}, {
default: renderCover
});
}
return (0, import_vue.createVNode)("div", {
"class": (0, import_utils.bem)("file"),
"style": (0, import_utils2.getSizeStyle)(props.previewSize)
}, [(0, import_vue.createVNode)(import_icon.Icon, {
"class": (0, import_utils.bem)("file-icon"),
"name": "description"
}, null), (0, import_vue.createVNode)("div", {
"class": [(0, import_utils.bem)("file-name"), "van-ellipsis"]
}, [item.file ? item.file.name : item.url]), renderCover()]);
};
return () => (0, import_vue.createVNode)("div", {
"class": (0, import_utils.bem)("preview")
}, [renderPreview(), renderMask(), renderDeleteIcon()]);
}
});