| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 | var __create = Object.create;var __defProp = Object.defineProperty;var __getOwnPropDesc = Object.getOwnPropertyDescriptor;var __getOwnPropNames = Object.getOwnPropertyNames;var __getProtoOf = Object.getPrototypeOf;var __hasOwnProp = Object.prototype.hasOwnProperty;var __export = (target, all) => {  for (var name2 in all)    __defProp(target, name2, { get: all[name2], 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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,  mod));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_vue2 = require("vue");var import_utils = require("../utils");var import_utils2 = require("./utils");var import_use = require("@vant/use");var import_use_expose = require("../composables/use-expose");var import_icon = require("../icon");var import_image_preview = require("../image-preview");var import_UploaderPreviewItem = __toESM(require("./UploaderPreviewItem"));const uploaderProps = {  name: (0, import_utils.makeNumericProp)(""),  accept: (0, import_utils.makeStringProp)("image/*"),  capture: String,  multiple: Boolean,  disabled: Boolean,  readonly: Boolean,  lazyLoad: Boolean,  maxCount: (0, import_utils.makeNumericProp)(Infinity),  imageFit: (0, import_utils.makeStringProp)("cover"),  resultType: (0, import_utils.makeStringProp)("dataUrl"),  uploadIcon: (0, import_utils.makeStringProp)("photograph"),  uploadText: String,  deletable: import_utils.truthProp,  afterRead: Function,  showUpload: import_utils.truthProp,  modelValue: (0, import_utils.makeArrayProp)(),  beforeRead: Function,  beforeDelete: Function,  previewSize: [Number, String, Array],  previewImage: import_utils.truthProp,  previewOptions: Object,  previewFullImage: import_utils.truthProp,  maxSize: {    type: [Number, String, Function],    default: Infinity  }};var stdin_default = (0, import_vue2.defineComponent)({  name: import_utils2.name,  props: uploaderProps,  emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "update:modelValue"],  setup(props, {    emit,    slots  }) {    const inputRef = (0, import_vue2.ref)();    const urls = [];    const getDetail = (index = props.modelValue.length) => ({      name: props.name,      index    });    const resetInput = () => {      if (inputRef.value) {        inputRef.value.value = "";      }    };    const onAfterRead = (items) => {      resetInput();      if ((0, import_utils2.isOversize)(items, props.maxSize)) {        if (Array.isArray(items)) {          const result = (0, import_utils2.filterFiles)(items, props.maxSize);          items = result.valid;          emit("oversize", result.invalid, getDetail());          if (!items.length) {            return;          }        } else {          emit("oversize", items, getDetail());          return;        }      }      items = (0, import_vue2.reactive)(items);      emit("update:modelValue", [...props.modelValue, ...(0, import_utils.toArray)(items)]);      if (props.afterRead) {        props.afterRead(items, getDetail());      }    };    const readFile = (files) => {      const {        maxCount,        modelValue,        resultType      } = props;      if (Array.isArray(files)) {        const remainCount = +maxCount - modelValue.length;        if (files.length > remainCount) {          files = files.slice(0, remainCount);        }        Promise.all(files.map((file) => (0, import_utils2.readFileContent)(file, resultType))).then((contents) => {          const fileList = files.map((file, index) => {            const result = {              file,              status: "",              message: ""            };            if (contents[index]) {              result.content = contents[index];            }            return result;          });          onAfterRead(fileList);        });      } else {        (0, import_utils2.readFileContent)(files, resultType).then((content) => {          const result = {            file: files,            status: "",            message: ""          };          if (content) {            result.content = content;          }          onAfterRead(result);        });      }    };    const onChange = (event) => {      const {        files      } = event.target;      if (props.disabled || !files || !files.length) {        return;      }      const file = files.length === 1 ? files[0] : [].slice.call(files);      if (props.beforeRead) {        const response = props.beforeRead(file, getDetail());        if (!response) {          resetInput();          return;        }        if ((0, import_utils.isPromise)(response)) {          response.then((data) => {            if (data) {              readFile(data);            } else {              readFile(file);            }          }).catch(resetInput);          return;        }      }      readFile(file);    };    let imagePreview;    const onClosePreview = () => emit("close-preview");    const previewImage = (item) => {      if (props.previewFullImage) {        const imageFiles = props.modelValue.filter(import_utils2.isImageFile);        const images = imageFiles.map((item2) => {          if (item2.file && !item2.url && item2.status !== "failed") {            item2.url = URL.createObjectURL(item2.file);            urls.push(item2.url);          }          return item2.url;        }).filter(Boolean);        imagePreview = (0, import_image_preview.ImagePreview)((0, import_utils.extend)({          images,          startPosition: imageFiles.indexOf(item),          onClose: onClosePreview        }, props.previewOptions));      }    };    const closeImagePreview = () => {      if (imagePreview) {        imagePreview.close();      }    };    const deleteFile = (item, index) => {      const fileList = props.modelValue.slice(0);      fileList.splice(index, 1);      emit("update:modelValue", fileList);      emit("delete", item, getDetail(index));    };    const renderPreviewItem = (item, index) => {      const needPickData = ["imageFit", "deletable", "previewSize", "beforeDelete"];      const previewData = (0, import_utils.extend)((0, import_utils.pick)(props, needPickData), (0, import_utils.pick)(item, needPickData, true));      return (0, import_vue.createVNode)(import_UploaderPreviewItem.default, (0, import_vue.mergeProps)({        "item": item,        "index": index,        "onClick": () => emit("click-preview", item, getDetail(index)),        "onDelete": () => deleteFile(item, index),        "onPreview": () => previewImage(item)      }, (0, import_utils.pick)(props, ["name", "lazyLoad"]), previewData), (0, import_utils.pick)(slots, ["preview-cover", "preview-delete"]));    };    const renderPreviewList = () => {      if (props.previewImage) {        return props.modelValue.map(renderPreviewItem);      }    };    const onClickUpload = (event) => emit("click-upload", event);    const renderUpload = () => {      if (props.modelValue.length >= props.maxCount || !props.showUpload) {        return;      }      const Input = props.readonly ? null : (0, import_vue.createVNode)("input", {        "ref": inputRef,        "type": "file",        "class": (0, import_utils2.bem)("input"),        "accept": props.accept,        "capture": props.capture,        "multiple": props.multiple,        "disabled": props.disabled,        "onChange": onChange      }, null);      if (slots.default) {        return (0, import_vue.createVNode)("div", {          "class": (0, import_utils2.bem)("input-wrapper"),          "onClick": onClickUpload        }, [slots.default(), Input]);      }      return (0, import_vue.createVNode)("div", {        "class": (0, import_utils2.bem)("upload", {          readonly: props.readonly        }),        "style": (0, import_utils.getSizeStyle)(props.previewSize),        "onClick": onClickUpload      }, [(0, import_vue.createVNode)(import_icon.Icon, {        "name": props.uploadIcon,        "class": (0, import_utils2.bem)("upload-icon")      }, null), props.uploadText && (0, import_vue.createVNode)("span", {        "class": (0, import_utils2.bem)("upload-text")      }, [props.uploadText]), Input]);    };    const chooseFile = () => {      if (inputRef.value && !props.disabled) {        inputRef.value.click();      }    };    (0, import_vue2.onBeforeUnmount)(() => {      urls.forEach((url) => URL.revokeObjectURL(url));    });    (0, import_use_expose.useExpose)({      chooseFile,      closeImagePreview    });    (0, import_use.useCustomFieldValue)(() => props.modelValue);    return () => (0, import_vue.createVNode)("div", {      "class": (0, import_utils2.bem)()    }, [(0, import_vue.createVNode)("div", {      "class": (0, import_utils2.bem)("wrapper", {        disabled: props.disabled      })    }, [renderPreviewList(), renderUpload()])]);  }});
 |