import { ref as c, watch as j, onMounted as z, resolveComponent as w, openBlock as s, createElementBlock as u, withModifiers as L, toDisplayString as r, createCommentVNode as p, createVNode as o, withCtx as C, createTextVNode as D, createElementVNode as m } from "vue";
import { l as E, W as I, U as M } from "./index2.js";
import { a as H, d as V, p as G } from "./upload.js";
import { _ as K } from "./index16.js";
const W = { class: "s-file-upload-common" }, X = {
  key: 0,
  class: "head"
}, J = {
  key: 0,
  class: "head"
}, Q = { key: 1 }, Y = { class: "preview-content" }, Z = ["src"], _ = {
  __name: "SFileUpload",
  props: {
    /**
     * 文件列表
     * @list
     */
    list: {
      type: Array,
      default: () => []
    },
    /**
     * 标题
     * @label
     */
    label: {
      type: String,
      default: ""
    },
    /**
     * 只读
     * @readonly
     */
    readonly: {
      type: Boolean,
      default: !1
    },
    /**
     * 是否显示删除
     * @delete
     */
    showRemoveIcon: {
      type: Boolean,
      default: !1
    },
    /**
     * 是否显示新增
     * @isAdd
     */
    isAdd: {
      type: Boolean,
      default: !0
    },
    /**
     * 文件类型
     * @accept
     */
    accept: {
      type: String,
      default: ""
    },
    // 展示类型 picture | picture-card 注：规范内不设定text上传类型
    listType: {
      type: String,
      default: "picture"
    },
    maxFileCount: {
      type: Number,
      default: 3
    },
    sizeLimit: {
      type: Number,
      default: 50
    },
    businessTableName: {
      type: String,
      default: "sapit-ui-plus-components-upload"
    },
    businessKey: {
      type: String,
      default: void 0
    },
    showUploadList: {
      type: Boolean,
      default: !0
    }
  },
  emits: ["handChange"],
  setup(l, { emit: U }) {
    const k = U, v = l, n = c([]), f = c(!1), y = c(""), h = c(""), a = c(0);
    j(
      () => v.list,
      (e) => {
        e && e.length && (n.value = e);
      },
      { immediate: !0 }
    );
    const T = (e) => {
      const t = e.size / 1024 / 1024 < v.sizeLimit;
      return t || I.warn({
        key: "only-you",
        message: window.$l("提醒"),
        description: `${window.$l("文件不能大于")}${v.sizeLimit}MB！`
      }), t;
    }, $ = (e) => {
      n.value = e.fileList, k("handChange", n.value);
    }, R = ({ onSuccess: e, onError: t, file: i }) => {
      H(i, v.businessTableName, i.uid).then((d) => {
        e(d);
      }).catch(() => {
        n.value.splice(n.value.length - 1, 1), t();
      });
    }, B = (e) => {
      const t = document.createElement("a");
      t.href = V(e.uid), t.download = "test", t.click();
    }, F = (e) => {
      a.value = n.value.findIndex((t) => t.uid === e.uid), f.value = !0, h.value = e.name || window.$l("预览"), y.value = e.url || e.thumbUrl;
    }, N = () => {
      f.value = !1;
    }, x = (e) => {
      var t;
      a.value = a.value + e < 0 ? 0 : a.value + e > n.value.length - 1 ? n.value.length - 1 : a.value + e, (t = n.value[a.value]) != null && t.thumbUrl ? (h.value = n.value[a.value].name || window.$l("预览"), y.value = n.value[a.value].thumbUrl) : O(n.value[a.value]);
    }, O = (e) => {
      if (e.type.includes("office")) {
        const t = window.open("", "");
        t.location = G(e.uid + "/" + e.name);
      } else if (e.type.includes("text"))
        S(e.url);
      else if (e.type.includes("pdf") || e.type.includes("png") || e.type.includes("gif") || e.type.includes("jpeg") || e.type.includes("bmp") || e.type.includes("ico") || e.type.includes("webp")) {
        const t = window.open("", "");
        t.location = e.url;
      } else
        this.$notification.warning({
          message: window.$l("不支持此文件类型")
        });
    }, S = (e) => {
      const t = new XMLHttpRequest();
      t.open("GET", e, !0), t.responseType = "blob", t.setRequestHeader("Content-Type", "application/json"), t.onload = function() {
        const i = new Blob([t.response], { type: "application/json;charset=utf-8" }), d = window.URL.createObjectURL(i), b = window.open("", "");
        b.location = d;
      }, t.send();
    };
    return z(() => {
    }), (e, t) => {
      const i = w("PlusOutlined"), d = M, b = K, A = w("LeftOutlined"), q = w("RightOutlined"), P = w("s-modal");
      return s(), u("div", W, [
        l.isAdd && l.listType === "picture-card" && n.value.length <= l.maxFileCount ? (s(), u("div", X, [
          l.label ? (s(), u("div", {
            key: 0,
            class: "label",
            onClick: t[0] || (t[0] = L(() => {
            }, ["stop"]))
          }, r(l.label), 1)) : p("", !0)
        ])) : p("", !0),
        o(b, {
          accept: l.accept,
          "list-type": l.listType,
          "file-list": n.value,
          disabled: l.readonly,
          maxCount: l.maxFileCount,
          multiple: l.maxFileCount > 1,
          "before-upload": T,
          "custom-request": R,
          onChange: $,
          onPreview: F,
          onDownload: B,
          showUploadList: l.showUploadList
        }, {
          default: C(() => [
            l.isAdd && l.listType === "picture" && n.value.length <= l.maxFileCount ? (s(), u("div", J, [
              l.label ? (s(), u("div", {
                key: 0,
                class: "label",
                onClick: t[1] || (t[1] = L(() => {
                }, ["stop"]))
              }, r(l.label), 1)) : p("", !0),
              o(d, null, {
                default: C(() => [
                  o(i),
                  D(" " + r(e.$l("点击上传")), 1)
                ]),
                _: 1
              })
            ])) : p("", !0),
            l.isAdd && l.listType === "picture-card" && n.value.length <= l.maxFileCount ? (s(), u("span", Q, [
              o(i),
              m("div", null, r(e.$l("点击上传")), 1)
            ])) : p("", !0)
          ]),
          _: 1
        }, 8, ["accept", "list-type", "file-list", "disabled", "maxCount", "multiple", "showUploadList"]),
        o(P, {
          value: f.value,
          "onUpdate:value": t[4] || (t[4] = (g) => f.value = g),
          title: h.value,
          onHandCancel: N,
          width: "800px"
        }, {
          default: C(() => [
            m("div", Y, [
              m("div", {
                class: "prev",
                onClick: t[2] || (t[2] = (g) => x(-1))
              }, [
                o(A)
              ]),
              m("img", {
                alt: "example",
                class: "view",
                src: y.value
              }, null, 8, Z),
              m("div", {
                class: "next",
                onClick: t[3] || (t[3] = (g) => x(1))
              }, [
                o(q)
              ])
            ])
          ]),
          _: 1
        }, 8, ["value", "title"])
      ]);
    };
  }
}, ae = /* @__PURE__ */ E(_, [["__scopeId", "data-v-bc90ac97"]]);
export {
  ae as default
};
