UNPKG

el-plus-crud

Version:

采用Vue3 + TS,封装的element-plus数据驱动表单、列表组件

1,136 lines 272 kB
import { nextTick as Le, defineComponent as R, inject as ae, ref as p, onBeforeMount as pe, useAttrs as re, onMounted as at, resolveComponent as C, openBlock as g, createBlock as O, mergeProps as $, toHandlers as Ne, createCommentVNode as V, useSlots as Fe, createSlots as Ke, withCtx as x, renderSlot as De, renderList as Me, computed as X, watch as oe, createElementBlock as T, Fragment as q, createVNode as K, createTextVNode as ye, toDisplayString as fe, createElementVNode as ee, unref as he, pushScopeId as Xt, popScopeId as el, normalizeStyle as Pe, getCurrentInstance as En, reactive as Ee, isRef as nt, normalizeClass as dt, onUnmounted as Cn, withModifiers as Bt, resolveDynamicComponent as Pt, normalizeProps as xn, provide as On, resolveDirective as Sn, withDirectives as kn } from "vue"; import { ElMessageBox as tl, ElMessage as Ge } from "element-plus"; const ge = async (e, t) => { var a, r, i, n, s, c; const l = Object.assign({}, t, (a = e.desc) == null ? void 0 : a._attrs, e.desc, (r = e.desc) == null ? void 0 : r.attrs, Bn(e.desc)); return e.desc.multiple && (l.multiple = !0, l.showCheckbox = !0, ["select"].indexOf(e.desc.type) >= 0 && (l.collapseTags = ((i = e.desc.attrs) == null ? void 0 : i.collapseTags) ?? ((n = e.desc) == null ? void 0 : n.collapseTags) ?? !1, l.collapseTagsTooltip = ((s = e.desc.attrs) == null ? void 0 : s.collapseTagsTooltip) ?? ((c = e.desc) == null ? void 0 : c.collapseTagsTooltip) ?? !1)), e.desc.elType && (typeof e.desc.elType == "function" ? l.type = e.desc.elType(e.formData) : l.type = e.desc.elType), ["input", "switch", "number", "nbinput"].indexOf(e.desc.type) >= 0 && delete l.label, l; }, ve = (e) => { var l; const t = {}; return (l = e.desc) != null && l.on && Object.keys(e.desc.on).map((a) => { t[a] = (r) => { Le(() => { e.desc.on[a](e.formData, e.rowIndex, r); }); }; }), t; }; function Bn(e) { if (e != null && e.placeholder) return { placeholder: e == null ? void 0 : e.placeholder }; if (!e || !e.type) return ""; switch (e.type) { case "input": case "nbinput": case "password": case "number": case "validCode": case "tag": case "textarea": case "percentinput": return { placeholder: (e == null ? void 0 : e.placeholder) || "请输入" + ((e == null ? void 0 : e._label) || "") }; case "switch": return {}; case "area": case "select": case "category": case "cascader": return { placeholder: (e == null ? void 0 : e.placeholder) || "请选择" + (e.remote ? "(可输入进行搜索)" : (e == null ? void 0 : e._label) || "") }; case "data": case "datetime": case "datas": case "date": return { placeholder: "请选择日期" }; case "daterange": case "datetimerange": case "timerange": case "monthrange": return { startPlaceholder: "开始日期", endPlaceholder: "结束日期" }; case "dates": return { placeholder: "请选择一个或多个日期" }; case "month": return { placeholder: "请选择月" }; case "time": case "timsPicker": return { placeholder: "请选择时间" }; case "week": return { placeholder: "请选择周" }; case "year": return { placeholder: "请选择年" }; case "upimg": return { placeholder: "请上传" }; case "upfile": return { placeholder: "点击上传" }; } } const Vn = { name: "ElPlusFormArea", inheritAttrs: !1, typeName: "area", customOptions: {} }, Pn = /* @__PURE__ */ R({ ...Vn, props: { modelValue: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = ae("globalData"), a = e, r = t, i = p([]), n = p({}), s = p(!1), c = p(ve(a)), o = p(a.modelValue); return r("update:modelValue", o), pe(async () => { n.value = await ge(a, { props: { value: "id", label: "name", children: "childs", checkStrictly: !!a.desc.checkStrictly }, clearable: !0, filterable: !0, ...re() }), s.value = !0; }), at(async () => { i.value = l.areaList || []; }), (u, M) => { const N = C("el-cascader"); return s.value ? (g(), O(N, $({ key: 0, class: "ElPlusFormArea-panel" }, n.value, { disabled: u.disabled }, Ne(c.value), { modelValue: o.value, "onUpdate:modelValue": M[0] || (M[0] = (m) => o.value = m), options: i.value }), null, 16, ["disabled", "modelValue", "options"])) : V("", !0); }; } }); const Ie = (e, t) => { const l = e.__vccOpts || e; for (const [a, r] of t) l[a] = r; return l; }, oa = /* @__PURE__ */ Ie(Pn, [["__scopeId", "data-v-b7a1a3c7"]]), Qn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: oa }, Symbol.toStringTag, { value: "Module" })), Un = { name: "ElPlusFormAutocomplete", inheritAttrs: !1, typeName: "autocomplete", customOptions: {} }, Fn = /* @__PURE__ */ R({ ...Un, props: { modelValue: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = e, a = t, r = p(l.modelValue); a("update:modelValue", r); const i = p(Object.assign({}, Fe(), l.desc.slots)), n = p({}), s = p(ve(l)); return pe(async () => { n.value = await ge(l, { autocomplete: "new-password", ...re() }); }), (c, o) => { const u = C("el-autocomplete"); return g(), O(u, $({ class: "ElPlusFormAutocomplete-panel" }, n.value, { disabled: c.disabled }, Ne(s.value), { modelValue: r.value, "onUpdate:modelValue": o[0] || (o[0] = (M) => r.value = M) }), Ke({ default: x((M) => [ De(c.$slots, "default", { data: M }, void 0, !0) ]), _: 2 }, [ Me(i.value, (M, N, m) => ({ name: N, fn: x((w) => [ De(c.$slots, N, { data: w }, void 0, !0) ]) })) ]), 1040, ["disabled", "modelValue"]); }; } }); const sa = /* @__PURE__ */ Ie(Fn, [["__scopeId", "data-v-77717260"]]), $n = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: sa }, Symbol.toStringTag, { value: "Module" })), Rn = { name: "ElPlusFormBtn", inheritAttrs: !1, typeName: "btn", customOptions: {} }, tt = /* @__PURE__ */ R({ ...Rn, props: { field: {}, rowIndex: {}, loading: { type: Boolean }, desc: {}, formData: {} }, setup(e) { const t = ae("lodash"), l = ae("defaultConf"), a = e, r = p(a.loading ?? !1), i = X(() => { var o; if ((o = a.desc) != null && o.auth) if (!l.auth) console.warn("使用auth属性,请在crud注册时传入auth校验方法~"); else return l.auth(a.desc.auth); return !0; }), n = X(() => { var u; const o = Object.assign({}, re(), a.desc, (u = a.desc) == null ? void 0 : u._attrs); return o.btnType && (o.type = o.btnType), o; }), s = X(() => { const o = {}; if (a.desc && a.desc.on) for (const u in a.desc.on) u === "click" && a.desc.mask ? o[u] = function() { var M; r.value = !0, (M = a.desc) == null || M.on[u]({ row: a.formData || {}, callBack: (N) => { setTimeout(() => r.value = !1, N || 50); }, field: a.field, rowIndex: a.rowIndex }); } : o[u] = function() { var M; (M = a.desc) == null || M.on[u]({ row: t.cloneDeep(a.formData || {}), field: a.field, rowIndex: a.rowIndex }); }; return o; }), c = X(() => { var o, u; return (o = a.desc) != null && o.btnLabel ? typeof a.desc.btnLabel == "function" ? a.desc.btnLabel(a.formData || {}) : a.desc.btnLabel : (u = a.desc) != null && u.label ? typeof a.desc.label == "function" ? a.desc.label(a.formData || {}) : a.desc.label : ""; }); return oe( () => a.loading, (o) => { r.value = o; } ), (o, u) => { var m, w, S, _, d; const M = C("el-button"), N = C("el-popconfirm"); return i.value ? (g(), T(q, { key: 0 }, [ (m = a.desc) != null && m.confirm ? (g(), O(N, { key: 0, onConfirm: s.value.click, title: (w = a.desc) == null ? void 0 : w.confirm }, { reference: x(() => { var A; return [ K(M, $({ loading: r.value, size: ((A = a.desc) == null ? void 0 : A.size) || "default" }, n.value), { default: x(() => [ De(o.$slots, "default", {}, () => { var v; return [ (v = a.desc) != null && v.label ? (g(), T(q, { key: 0 }, [ ye(fe(c.value), 1) ], 64)) : V("", !0) ]; }) ]), _: 3 }, 16, ["loading", "size"]) ]; }), _: 3 }, 8, ["onConfirm", "title"])) : (g(), O(M, $({ key: 1, loading: r.value, size: ((S = a.desc) == null ? void 0 : S.size) || "default" }, n.value, Ne(s.value), { style: { pointerEvents: (_ = o.desc) != null && _.isTag ? "none" : "all" }, class: { "no-label": !((d = a.desc) != null && d.label) } }), { default: x(() => [ De(o.$slots, "default", {}, () => { var A; return [ (A = a.desc) != null && A.label ? (g(), T(q, { key: 0 }, [ ye(fe(c.value), 1) ], 64)) : V("", !0) ]; }) ]), _: 3 }, 16, ["loading", "size", "style", "class"])) ], 64)) : V("", !0); }; } }); const Gn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: tt }, Symbol.toStringTag, { value: "Module" })); /*! Element Plus Icons Vue v2.3.1 */ var Zn = /* @__PURE__ */ R({ name: "Loading", __name: "loading", setup(e) { return (t, l) => (g(), T("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ ee("path", { fill: "currentColor", d: "M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z" }) ])); } }), Wn = Zn, Kn = /* @__PURE__ */ R({ name: "Plus", __name: "plus", setup(e) { return (t, l) => (g(), T("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ ee("path", { fill: "currentColor", d: "M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z" }) ])); } }), Hn = Kn, qn = /* @__PURE__ */ R({ name: "Share", __name: "share", setup(e) { return (t, l) => (g(), T("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ ee("path", { fill: "currentColor", d: "m679.872 348.8-301.76 188.608a127.808 127.808 0 0 1 5.12 52.16l279.936 104.96a128 128 0 1 1-22.464 59.904l-279.872-104.96a128 128 0 1 1-16.64-166.272l301.696-188.608a128 128 0 1 1 33.92 54.272z" }) ])); } }), Dl = qn, Jn = /* @__PURE__ */ R({ name: "Upload", __name: "upload", setup(e) { return (t, l) => (g(), T("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ ee("path", { fill: "currentColor", d: "M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-578.304V704h-64V247.296L237.248 490.048 192 444.8 508.8 128l316.8 316.8-45.312 45.248z" }) ])); } }), Xn = Jn, eo = /* @__PURE__ */ R({ name: "UserFilled", __name: "user-filled", setup(e) { return (t, l) => (g(), T("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ ee("path", { fill: "currentColor", d: "M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0m544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z" }) ])); } }), vl = eo, to = /* @__PURE__ */ R({ name: "WarningFilled", __name: "warning-filled", setup(e) { return (t, l) => (g(), T("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ ee("path", { fill: "currentColor", d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4" }) ])); } }), lo = to; const ao = (e) => (Xt("data-v-730c5737"), e = e(), el(), e), no = { class: "el-button el-plus-form-up-btn" }, oo = /* @__PURE__ */ ao(() => /* @__PURE__ */ ee("div", null, null, -1)), so = { name: "ElPlusFormUpbtn", inheritAttrs: !1, typeName: "upbtn", customOptions: {} }, uo = /* @__PURE__ */ R({ ...so, props: { field: {}, rowIndex: {}, loading: { type: Boolean }, desc: {}, formData: {}, disabled: { type: Boolean } }, setup(e) { const t = e, l = p(!!t.loading), a = p([]), r = p({}), i = p(!1), n = { name: "file", showFileList: !1, listType: "text", accept: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel", beforeUpload: async (o) => { var M, N; l.value = !0; let u = ((M = t.desc) == null ? void 0 : M.confirm) || ""; return u && typeof ((N = t.desc) == null ? void 0 : N.confirm) == "function" && (u = t.desc.confirm()), u ? new Promise((m) => { tl.confirm(u, "提示", { type: "warning", confirmButtonText: "确定", cancelButtonText: "取消" }).then(() => m(!0)).catch(() => { m(!1), l.value = !1; }); }) : await c(o); }, onError: () => { Ge.error("文件上传出错,请检查文件格式及内容是否正确!"), l.value = !1; } }, s = X(() => t.desc.btnLabel ? typeof t.desc.btnLabel == "function" ? t.desc.btnLabel(t.formData || {}) : t.desc.btnLabel : t.desc.label ? typeof t.desc.label == "function" ? t.desc.label(t.formData || {}) : t.desc.label : ""); function c(o) { return new Promise((u, M) => { l.value = !0; const N = o.name.substring(o.name.lastIndexOf(".")), m = t.desc.accept || t.desc.attrs.accept || [".xlsx", ".xls"]; if (m.indexOf(N) < 0) return Ge.warning(`请上传后缀为${m.join(",")}格式的文件!`), l.value = !1, M(!1), !1; if (o.size > 20 * 1024 * 1024) return Ge.warning("超出文件大小限制(最大为20M)!"), l.value = !1, M(!1), !1; u(!0); }); } return oe( () => t.loading, (o) => { l.value = o; }, { immediate: !0 } ), pe(async () => { r.value = await ge(t, { ...n, ...re() }), r.value.action || console.warn("上传组件未填写action..."), r.value.onSuccess = (o) => { var u, M; (M = (u = t.desc) == null ? void 0 : u.on) != null && M.success && t.desc.on.success({ row: o, callBack: () => { setTimeout(() => l.value = !1, 500); }, field: t.field, rowIndex: t.rowIndex }); }, i.value = !0; }), (o, u) => { const M = C("el-button"), N = C("el-upload"); return g(), T("div", no, [ K(N, $({ class: "upload-demo", style: { display: "flex" } }, r.value, { disabled: l.value || r.value.disabled, modelValue: a.value, "onUpdate:modelValue": u[0] || (u[0] = (m) => a.value = m) }), { file: x(() => [ oo ]), default: x(() => [ K(M, { type: "primary", icon: he(Xn), loading: l.value }, { default: x(() => [ ye(fe(s.value), 1) ]), _: 1 }, 8, ["icon", "loading"]) ]), _: 1 }, 16, ["disabled", "modelValue"]) ]); }; } }); const Ct = /* @__PURE__ */ Ie(uo, [["__scopeId", "data-v-730c5737"]]), ro = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: Ct }, Symbol.toStringTag, { value: "Module" })), io = /* @__PURE__ */ ee("i", { class: "ele-ArrowDown el-icon--right" }, null, -1), co = { name: "ElPlusFormBtns", inheritAttrs: !1, typeName: "btns", customOptions: {} }, ua = /* @__PURE__ */ R({ ...co, props: { field: {}, rowIndex: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, setup(e) { const t = ae("defaultConf"), l = e, a = p([]), r = p([]), i = X(() => { switch (l.desc.align) { case "right": return "flex-end"; case "center": return "center"; case void 0: case "left": return "flex-start"; default: return "flex-start"; } }), n = X(() => (u) => { const M = {}; if (u && u.on) for (const N in u.on) N === "click" && u.confirm ? M[N] = function() { tl.confirm(u.confirm, "提示", { type: "warning", confirmButtonText: "确定", cancelButtonText: "取消" }).then(() => { u.on[N]({ row: l.formData || {}, field: l.field, rowIndex: l.rowIndex }); }); } : M[N] = function() { u.on[N]({ row: l.formData || {}, field: l.field, rowIndex: l.rowIndex }); }; return M; }), s = () => { const u = []; r.value = [], l.desc.btns.length > 0 && l.desc.btns.map((N) => { c(N) && u.push(N); }), a.value = u; const M = l.desc.limit || 3; a.value.length > M && (r.value = a.value.splice(M - 1)); }, c = (u) => { let M = !0; return typeof u.vif == "function" ? M = !!o(u.vif) : typeof u.vif == "boolean" && (M = u.vif), M && u != null && u.auth && (t.auth ? M = t.auth(u.auth) : console.warn("使用auth属性,请在crud注册时传入auth校验方法~")), M; }, o = (u) => u(l.formData || {}); return oe( () => l.desc, () => s() ), oe( () => l.formData, () => s() ), at(() => { s(); }), (u, M) => { const N = C("el-button"), m = C("el-dropdown-item"), w = C("el-dropdown-menu"), S = C("el-dropdown"); return g(), T("div", { class: "el-plus-form-btn-group", style: Pe({ "justify-content": i.value }) }, [ (g(!0), T(q, null, Me(a.value, (_, d) => (g(), T(q, { key: d + (_.label || _.title || "") }, [ _.elType === "upload" ? (g(), O(Ct, { key: 0, type: "primary", field: u.field, desc: _ || {}, formData: u.formData, plain: (_ && _.plain) ?? u.desc.plain ?? !0, disabled: u.disabled || u.desc.disabled, text: u.desc.text, rowIndex: u.rowIndex }, null, 8, ["field", "desc", "formData", "plain", "disabled", "text", "rowIndex"])) : (g(), O(tt, { key: 1, type: "primary", field: u.field, desc: _ || {}, formData: u.formData, plain: (_ && _.plain) ?? u.desc.plain ?? !0, disabled: u.disabled || u.desc.disabled, text: u.desc.text, rowIndex: u.rowIndex }, null, 8, ["field", "desc", "formData", "plain", "disabled", "text", "rowIndex"])) ], 64))), 128)), r.value && r.value.length > 0 ? (g(), O(S, { key: 0, class: "group-menu-btn", size: u.desc.size || "default", disabled: u.disabled || u.desc.disabled }, { dropdown: x(() => [ K(w, null, { default: x(() => [ (g(!0), T(q, null, Me(r.value, (_, d) => (g(), O(m, $({ key: d + (_.label || _.title) }, Ne(n.value(_))), { default: x(() => [ ye(fe(_.label || _.title), 1) ]), _: 2 }, 1040))), 128)) ]), _: 1 }) ]), default: x(() => [ K(N, { type: "primary", size: u.desc.size || "default", plain: u.desc.plain ?? !0 }, { default: x(() => [ ye(" 更多"), io ]), _: 1 }, 8, ["size", "plain"]) ]), _: 1 }, 8, ["size", "disabled"])) : V("", !0) ], 4); }; } }); const Mo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: ua }, Symbol.toStringTag, { value: "Module" })), fo = (e = "", t, l = !1) => e ? (l ? go(e) : e.length) > t ? e.substring(0, t - 2) + "..." + e.substring(t - 2, t) : e : ""; function po(e) { return Array.isArray(e) ? e : e == null || e === "" ? [] : e.split(","); } function No(e, t) { const l = { "M+": e.getMonth() + 1, // 月份 "d+|D+": e.getDate(), // 日 "h+": e.getHours() % 12 === 0 ? 12 : e.getHours() % 12, // 小时 "H+": e.getHours(), // 小时 "m+|M+": e.getMinutes(), // 分 "s+|S+": e.getSeconds(), // 秒 "q+": Math.floor((e.getMonth() + 3) / 3), // 季度 S: e.getMilliseconds(), // 毫秒 a: e.getHours() < 12 ? "上午" : "下午", // 上午/下午 A: e.getHours() < 12 ? "AM" : "PM" // AM/PM }; /(y+|Y+)/.test(t) && (t = t.replace(RegExp.$1, (e.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let a in l) new RegExp("(" + a + ")").test(t) && (t = t.replace(RegExp.$1, RegExp.$1.length === 1 ? l[a] : ("00" + l[a]).substr(("" + l[a]).length))); return t; } const go = (e) => { if (!e) return 0; let t = 0; const l = e.length; let a = -1; for (let r = 0; r < l; r++) a = e.charCodeAt(r), a >= 0 && a <= 128 ? t += 1 : t += 2; return t; }; function ut(e, t) { if (!t || !e || e.length <= 0) return null; if (Array.isArray(e)) { let l = JSON.parse(JSON.stringify(t)); for (let a = 0; a < e.length; a++) { if (l = l[Array.isArray(l) ? parseInt(e[a]) : e[a]], l == null) return null; if (l === "") return ""; } return l; } else return t[e] || null; } function jo(e) { switch (e.type) { case void 0: e.type = "primary"; break; case "add": e.type = "primary", e.title = e.title || "新增", e.icon = "ele-Plus"; break; case "edit": e.type = "primary", e.title = e.title || "编辑", e.icon = "ele-EditPen"; break; case "delete": case "del": e.type = "danger", e.title = e.title || "删除", e.icon = "ele-Delete"; break; } return e; } function ra(e, t, l, a, r) { const i = [], n = (/* @__PURE__ */ new Date()).getTime(); return e && e.length > 0 && e.map((s, c) => { switch (s.children ? (s.headerAlign = s.headerAlign || "center", s.children = ra(s.children, t, l, "center", r)) : s.headerAlign = s.headerAlign || a || "left", s.type || (s.type = "text"), s.type) { case "image": s.width = s.width || "110px", s.align = s.align || "left", s.headerAlign = s.headerAlign || a || "left"; break; case "btns": if (!s.minWidth && s.btns && s.btns.length >= 2) { let o = 0; for (let u = 0; u < s.btns.length && u < (s.limit || 3); u++) s.btns[u] && typeof s.btns[u].label == "string" ? o += s.btns[u].label.length : o += 4; s.width = s.width || o * 24 + "px"; } s.align = s.align || "left", s.headerAlign = s.headerAlign || a || "left", s.text = !0; break; } s.minWidth = s.minWidth || (s.label !== "操作" ? r : "auto"), s.showOverflowTooltip = s.label !== "操作", yo(s, t, l), s.__id = `${n + c}`, i.push(s); }), i; } function yo(e, t, l) { e.vif !== void 0 && e.vif !== null ? typeof e.vif == "function" ? e._vif = e.vif(e) : e._vif = !!e.vif : e._vif = !0, e.auth && (t.auth ? e._vif = t.auth(e.auth) : console.warn("使用auth属性,请在crud注册时传入auth校验方法~")), e.__vif = l ? e.scShow && e._vif : e._vif, e.children && e.children.every((a) => !a.__vif) && (e.__vif = !1); } function ia() { return !!navigator.userAgent.match(/('phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone')/i); } function He(e, t) { return JSON.stringify(e) === JSON.stringify(t); } function lt(e) { return e instanceof Promise || typeof (e == null ? void 0 : e.then) == "function"; } const zo = (e, t) => { let l = ""; for (const a in e) t && Array.isArray(t) && t.length > 0 && t.indexOf(a) >= 0 || e[a] !== void 0 && e[a] !== null && e[a] !== "" && (l !== "" && (l += "&"), l += a + "=" + e[a]); return l; }, zt = (e, t) => { if (e === "" || e === null || e === void 0) return ""; let l = "YYYY-MM-DD HH:mm:ss"; return t && (typeof t == "string" ? l = t : l = t(e)), No(new Date(e), l); }; var Yl; const mo = typeof window < "u", Do = (e) => typeof e < "u", vo = (e) => typeof e == "function"; mo && ((Yl = window == null ? void 0 : window.navigator) != null && Yl.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent); function Yo(e) { return e; } function Io(e) { return JSON.parse(JSON.stringify(e)); } const Il = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, _l = "__vueuse_ssr_handlers__"; Il[_l] = Il[_l] || {}; var Al; (function(e) { e.UP = "UP", e.RIGHT = "RIGHT", e.DOWN = "DOWN", e.LEFT = "LEFT", e.NONE = "NONE"; })(Al || (Al = {})); var _o = Object.defineProperty, wl = Object.getOwnPropertySymbols, Ao = Object.prototype.hasOwnProperty, wo = Object.prototype.propertyIsEnumerable, Tl = (e, t, l) => t in e ? _o(e, t, { enumerable: !0, configurable: !0, writable: !0, value: l }) : e[t] = l, To = (e, t) => { for (var l in t || (t = {})) Ao.call(t, l) && Tl(e, l, t[l]); if (wl) for (var l of wl(t)) wo.call(t, l) && Tl(e, l, t[l]); return e; }; const bo = { easeInSine: [0.12, 0, 0.39, 0], easeOutSine: [0.61, 1, 0.88, 1], easeInOutSine: [0.37, 0, 0.63, 1], easeInQuad: [0.11, 0, 0.5, 0], easeOutQuad: [0.5, 1, 0.89, 1], easeInOutQuad: [0.45, 0, 0.55, 1], easeInCubic: [0.32, 0, 0.67, 0], easeOutCubic: [0.33, 1, 0.68, 1], easeInOutCubic: [0.65, 0, 0.35, 1], easeInQuart: [0.5, 0, 0.75, 0], easeOutQuart: [0.25, 1, 0.5, 1], easeInOutQuart: [0.76, 0, 0.24, 1], easeInQuint: [0.64, 0, 0.78, 0], easeOutQuint: [0.22, 1, 0.36, 1], easeInOutQuint: [0.83, 0, 0.17, 1], easeInExpo: [0.7, 0, 0.84, 0], easeOutExpo: [0.16, 1, 0.3, 1], easeInOutExpo: [0.87, 0, 0.13, 1], easeInCirc: [0.55, 0, 1, 0.45], easeOutCirc: [0, 0.55, 0.45, 1], easeInOutCirc: [0.85, 0, 0.15, 1], easeInBack: [0.36, 0, 0.66, -0.56], easeOutBack: [0.34, 1.56, 0.64, 1], easeInOutBack: [0.68, -0.6, 0.32, 1.6] }; To({ linear: Yo }, bo); function Xe(e, t, l, a = {}) { var r, i, n; const { clone: s = !1, passive: c = !1, eventName: o, deep: u = !1, defaultValue: M } = a, N = En(), m = l || (N == null ? void 0 : N.emit) || ((r = N == null ? void 0 : N.$emit) == null ? void 0 : r.bind(N)) || ((n = (i = N == null ? void 0 : N.proxy) == null ? void 0 : i.$emit) == null ? void 0 : n.bind(N == null ? void 0 : N.proxy)); let w = o; t || (t = "modelValue"), w = o || w || `update:${t.toString()}`; const S = (d) => s ? vo(s) ? s(d) : Io(d) : d, _ = () => Do(e[t]) ? S(e[t]) : M; if (c) { const d = _(), A = p(d); return oe(() => e[t], (v) => A.value = S(v)), oe(A, (v) => { (v !== e[t] || u) && m(w, v); }, { deep: u }), A; } else return X({ get() { return _(); }, set(d) { m(w, d); } }); } const ho = { name: "ElPlusFormCascader", inheritAttrs: !1, typeName: "cascader", customOptions: {} }, Lo = /* @__PURE__ */ R({ ...ho, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = ae("globalData"), a = e, i = Xe(a, "modelValue", t), n = p(!1), s = p({}), c = p(ve(a)), o = Ee([]); return pe(async () => { s.value = await ge(a, { clearable: !0, props: { value: "value", label: "label", children: "children", checkStrictly: !!a.desc.checkStrictly }, ...re() }), n.value = !0; }), oe( () => a.desc.options, async (u) => { typeof u == "string" ? o.splice(0, o.length, ...l[u] || []) : typeof u == "function" ? o.splice(0, o.length, ...await u(a.formData || {})) : Array.isArray(u) ? u && o && !He(u, o) && o.splice(0, o.length, ...u) : o.splice(0, o.length); }, { immediate: !0 } ), (u, M) => { const N = C("el-cascader"); return n.value ? (g(), O(N, $({ key: 0, class: "ElPlusFormCascader-panel" }, s.value, { disabled: u.disabled }, Ne(c.value), { options: o, modelValue: he(i), "onUpdate:modelValue": M[0] || (M[0] = (m) => nt(i) ? i.value = m : null) }), null, 16, ["disabled", "options", "modelValue"])) : V("", !0); }; } }); const ca = /* @__PURE__ */ Ie(Lo, [["__scopeId", "data-v-030a7b69"]]), Eo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: ca }, Symbol.toStringTag, { value: "Module" })), Co = { name: "ElPlusFormCascaderPanel", inheritAttrs: !1, typeName: "cascaderPanel", customOptions: {} }, xo = /* @__PURE__ */ R({ ...Co, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = ae("globalData"), a = e, r = t, i = p(Array.isArray(a.modelValue) ? a.modelValue : [a.modelValue]); r("update:modelValue", i); const n = p({}), s = p(!1), c = p(ve(a)), o = Ee([]); return pe(async () => { n.value = await ge(a, { props: { value: "value", label: "label", children: "children" }, fetchSuggestions(u, M) { M([]); }, ...re() }), s.value = !0; }), oe( () => a.desc.options, async (u) => { typeof u == "string" ? o.splice(0, o.length, ...l[u] || []) : typeof u == "function" ? o.splice(0, o.length, ...await u(a.formData || {})) : Array.isArray(u) ? u && o && !He(u, o) && o.splice(0, o.length, ...u) : o.splice(0, o.length); }, { immediate: !0 } ), (u, M) => { const N = C("el-cascader-panel"); return s.value ? (g(), O(N, $({ key: 0, class: "ElPlusFormCascaderPanel-panel" }, n.value, { disabled: u.disabled }, Ne(c.value), { options: o, modelValue: i.value, "onUpdate:modelValue": M[0] || (M[0] = (m) => i.value = m) }), null, 16, ["disabled", "options", "modelValue"])) : V("", !0); }; } }); const Ma = /* @__PURE__ */ Ie(xo, [["__scopeId", "data-v-22454ba3"]]), Oo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: Ma }, Symbol.toStringTag, { value: "Module" })), So = { key: 1, class: "null-tip" }, ko = { name: "ElPlusFormCheckbox", inheritAttrs: !1, typeName: "checkbox", customOptions: {} }, Bo = /* @__PURE__ */ R({ ...ko, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = ae("globalData"), a = e, i = Xe(a, "modelValue", t), n = Ee([]), s = p(!1), c = p({}), o = p(ve(a)); return pe(async () => { c.value = await ge(a, { ...re() }), s.value = !0; }), oe( () => a.desc.options, async (u) => { typeof u == "string" ? n.splice(0, n.length, ...l[u] || []) : typeof u == "function" ? n.splice(0, n.length, ...await u(a.formData || {})) : Array.isArray(u) ? u && n && !He(u, n) && n.splice(0, n.length, ...u) : n.splice(0, n.length); }, { immediate: !0 } ), oe( () => a.modelValue, (u) => { u ? i.value = Array.isArray(u) ? u : [u] : i.value = []; }, { immediate: !0 } ), (u, M) => { const N = C("el-checkbox"), m = C("el-checkbox-group"); return s.value ? (g(), T(q, { key: 0 }, [ n != null && n.length ? (g(), O(m, $({ key: 0, class: "ElPlusFormCheckbox-panel" }, c.value, { disabled: u.disabled }, Ne(o.value), { modelValue: he(i), "onUpdate:modelValue": M[0] || (M[0] = (w) => nt(i) ? i.value = w : null) }), { default: x(() => [ (g(!0), T(q, null, Me(n, (w) => (g(), O(N, $({ key: w.value, label: w.value, ref_for: !0 }, w.attrs), { default: x(() => [ ye(fe(w.text || w.label), 1) ]), _: 2 }, 1040, ["label"]))), 128)) ]), _: 1 }, 16, ["disabled", "modelValue"])) : (g(), T("div", So, "暂无选项")) ], 64)) : V("", !0); }; } }); const da = /* @__PURE__ */ Ie(Bo, [["__scopeId", "data-v-d5ecbd1d"]]), Vo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: da }, Symbol.toStringTag, { value: "Module" })), Po = { name: "ElPlusFormCheckboxButton", inheritAttrs: !1, typeName: "checkboxButton", customOptions: {} }, Qo = /* @__PURE__ */ R({ ...Po, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = e, a = t, r = p(l.modelValue); a("update:modelValue", r); const i = p({}), n = p(!1), s = p(ve(l)); return pe(async () => { i.value = await ge(l, { ...re() }), n.value = !0; }), (c, o) => { const u = C("el-checkbox-button"), M = C("el-checkbox-group"); return n.value ? (g(), O(M, $({ key: 0, class: "ElPlusFormCheckboxButton-panel" }, i.value, { disabled: c.disabled }, Ne(s.value), { modelValue: r.value, "onUpdate:modelValue": o[0] || (o[0] = (N) => r.value = N) }), { default: x(() => [ (g(!0), T(q, null, Me(c.desc.options, (N) => (g(), O(u, $({ key: N.value, label: N.value, ref_for: !0 }, N.attrs), { default: x(() => [ ye(fe(N.text), 1) ]), _: 2 }, 1040, ["label"]))), 128)) ]), _: 1 }, 16, ["disabled", "modelValue"])) : V("", !0); }; } }); const fa = /* @__PURE__ */ Ie(Qo, [["__scopeId", "data-v-51a8d752"]]), Uo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: fa }, Symbol.toStringTag, { value: "Module" })), Fo = { name: "ElPlusFormColor", inheritAttrs: !1, typeName: "color", customOptions: {} }, $o = /* @__PURE__ */ R({ ...Fo, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = e, a = t, r = p(l.modelValue), i = p({}), n = p(ve(l)); return a("update:modelValue", r), pe(async () => { i.value = await ge(l, { ...re() }); }), (s, c) => { const o = C("el-color-picker"); return g(), O(o, $({ class: "ElPlusFormColor-panel" }, i.value, { disabled: s.disabled }, Ne(n.value), { modelValue: r.value, "onUpdate:modelValue": c[0] || (c[0] = (u) => r.value = u) }), null, 16, ["disabled", "modelValue"]); }; } }); const pa = /* @__PURE__ */ Ie($o, [["__scopeId", "data-v-f1a9c235"]]), Ro = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: pa }, Symbol.toStringTag, { value: "Module" })), Go = { name: "ElPlusFormDate", inheritAttrs: !1, typeName: "date", customOptions: {} }, Zo = /* @__PURE__ */ R({ ...Go, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = e, a = t, r = p(!1), i = p({}), n = p(ve(l)), s = Xe(l, "modelValue", a); return pe(async () => { i.value = await ge(l, { valueFormat: "YYYY-MM-DD HH:mm:ss", editable: !1, ...re() }), r.value = !0; }), (c, o) => { const u = C("el-date-picker"); return r.value ? (g(), O(u, $({ key: 0, class: "ElPlusFormDate-panel" }, i.value, { disabled: c.disabled }, Ne(n.value), { modelValue: he(s), "onUpdate:modelValue": o[0] || (o[0] = (M) => nt(s) ? s.value = M : null) }), null, 16, ["disabled", "modelValue"])) : V("", !0); }; } }); const Na = /* @__PURE__ */ Ie(Zo, [["__scopeId", "data-v-9e53a749"]]), Wo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: Na }, Symbol.toStringTag, { value: "Module" })), Ko = { name: "ElPlusFormDaterange", inheritAttrs: !1, typeName: "daterange", customOptions: {} }, Ho = /* @__PURE__ */ R({ ...Ko, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = e, a = t, r = p(l.modelValue), i = p(Object.assign({}, Fe(), l.desc.slots)), n = p(!1), s = p({}), c = p(ve(l)); return a("update:modelValue", r), pe(async () => { s.value = await ge(l, { type: "daterange", format: "YYYY-MM-DD", valueFormat: "x", editable: !1, ...re() }), n.value = !0; }), (o, u) => { const M = C("el-date-picker"); return n.value ? (g(), O(M, $({ key: 0, class: "el-plusF-form-daterange-panel" }, s.value, { disabled: o.disabled }, Ne(c.value), { modelValue: r.value, "onUpdate:modelValue": u[0] || (u[0] = (N) => r.value = N) }), Ke({ _: 2 }, [ Me(i.value, (N, m, w) => ({ name: m, fn: x((S) => [ De(o.$slots, m, { data: S }, void 0, !0) ]) })) ]), 1040, ["disabled", "modelValue"])) : V("", !0); }; } }); const ga = /* @__PURE__ */ Ie(Ho, [["__scopeId", "data-v-45408465"]]), qo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: ga }, Symbol.toStringTag, { value: "Module" })), Jo = { name: "ElPlusFormDatetime", inheritAttrs: !1, typeName: "datetime", customOptions: {} }, Xo = /* @__PURE__ */ R({ ...Jo, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = e, a = t, r = p(l.modelValue), i = p({}), n = p(!1), s = p(ve(l)); return a("update:modelValue", r), pe(async () => { i.value = await ge(l, { valueFormat: "YYYY-MM-DD HH:mm:ss", ...re() }), n.value = !0; }), (c, o) => { const u = C("el-date-picker"); return n.value ? (g(), O(u, $({ key: 0, class: "ElPlusFormDatetime-panel" }, i.value, { disabled: c.disabled }, Ne(s.value), { type: "datetime", modelValue: r.value, "onUpdate:modelValue": o[0] || (o[0] = (M) => r.value = M) }), null, 16, ["disabled", "modelValue"])) : V("", !0); }; } }); const ja = /* @__PURE__ */ Ie(Xo, [["__scopeId", "data-v-9e22537f"]]), es = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: ja }, Symbol.toStringTag, { value: "Module" })), ts = { name: "ElPlusFormDatetimerange", inheritAttrs: !1, typeName: "datetimerange", customOptions: {} }, ls = /* @__PURE__ */ R({ ...ts, props: { modelValue: {}, field: {}, desc: {}, formData: {}, disabled: { type: Boolean } }, emits: ["update:modelValue"], setup(e, { emit: t }) { const l = e, a = t, r = p(l.modelValue), i = p(Object.assign({}, Fe(), l.desc.slots)), n = p({}), s = p(!1), c = p(ve(l)); return a("update:modelValue", r), pe(async () => { n.value = await ge(l, { type: "datetimerange", format: "YYYY-MM-DD HH:mm:ss", valueFormat: "x", editable: !1, ...re() }), s.value = !0; }), (o, u) => { const M = C("el-date-picker"); return s.value ? (g(), O(M, $({ key: 0, class: "el-plusF-form-datetimerange-panel" }, n.value, { disabled: o.disabled }, Ne(c.value), { modelValue: r.value, "onUpdate:modelValue": u[0] || (u[0] = (N) => r.value = N) }), Ke({ _: 2 }, [ Me(i.value, (N, m, w) => ({ name: m, fn: x((S) => [ De(o.$slots, m, { data: S }, void 0, !0) ]) })) ]), 1040, ["disabled", "modelValue"])) : V("", !0); }; } }); const ya = /* @__PURE__ */ Ie(ls, [["__scopeId", "data-v-880db21d"]]), as = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: ya }, Symbol.toStringTag, { value: "Module" })), bl = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8dGl0bGU+RE9D5Zu+5qCHPC90aXRsZT4KICAgIDxnIGlkPSLkvpvlupTllYbnrqHnkIYiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSLkvpvlupTllYbnrqHnkIYt5L6b5bqU5ZWG5YiX6KGo6K+m5oOFLTIw5p2h6ZmE5Lu2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzgzLjAwMDAwMCwgLTEwNTEuMDAwMDAwKSIgZmlsbD0iIzM4NzhERSIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgPGcgaWQ9Iue8lue7hC0yMeWkh+S7vS05IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNzUuMDAwMDAwLCAxMDQ1LjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9IkRPQ+WbvuaghyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOC4wMDAwMDAsIDYuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTMsNiBMMTMsNiBDMTMuMTc2ODExLDYgMTMuMzQ2MzgwMyw2LjA3MDIzNzg5IDEzLjQ3MTQwNDUsNi4xOTUyNjIxNSBDMTMuNTk2NDI4OCw2LjMyMDI4NjQgMTMuNjY2NjY2Nyw2LjQ4OTg1NTY4IDEzLjY2NjY2NjcsNi42NjY2NjY2NyBMMTMuNjY2NjY2NywxMi4zMzMzMzMzIEMxMy42NjY2NjY3LDEyLjcwMTUyMzIgMTMuMzY4MTg5OCwxMyAxMywxMyBMMywxMyBMMywxNC42NjY2NjY3IEMzLDE0Ljc1NTA3MjIgMy4wMzUxMTg5NSwxNC44Mzk4NTY4IDMuMDk3NjMxMDcsMTQuOTAyMzY4OSBDMy4xNjAxNDMyLDE0Ljk2NDg4MTEgMy4yNDQ5Mjc4MywxNSAzLjMzMzMzMzMzLDE1IEwxNC42NjY2NjY3LDE1IEMxNC44NTA3NjE2LDE1IDE1LDE0Ljg1MDc2MTYgMTUsMTQuNjY2NjY2NyBMMTUsNC44MjUzMzMzMyBMMTQuODQyMzMzMyw0LjY2NjY2NjY3IEwxMi44NjUzMzMzLDQuNjY2NjY2NjcgQzEyLjAxOTIzMzEsNC42NjY2NjY2NyAxMS4zMzMzMzMzLDMuOTgwNzY2OTEgMTEuMzMzMzMzMywzLjEzNDY2NjY3IEwxMS4zMzMzMzMzLDEuMTM1MzMzMzMgTDExLjE5ODY2NjcsMSBMMy4zMzMzMzMzMywxIEMzLjI0NDkyNzgzLDEgMy4xNjAxNDMyLDEuMDM1MTE4OTUgMy4wOTc2MzEwNywxLjA5NzYzMTA3IEMzLjAzNTExODk1LDEuMTYwMTQzMiAzLDEuMjQ0OTI3ODMgMywxLjMzMzMzMzMzIEwzLDYgWiBNMiwxMyBMMC42NjY2NjY2NzIsMTMgQzAuMjk4NDc2ODM2LDEzIDAsMTIuNzAxNTIzMiAwLDEyLjMzMzMzMzMgTDAsNi42NjY2NjY2NyBDMCw2LjQ4OTg1NTY4IDAuMDcwMjM3ODk0MSw2LjMyMDI4NjQgMC4xOTUyNjIxNDcsNi4xOTUyNjIxNSBDMC4zMjAyODY0MDEsNi4wNzAyMzc4OSAwLjQ4OTg1NTY3Nyw2IDAuNjY2NjY2NjcyLDYgTDIsNiBMMiwxLjMzMzMzMzMzIEMyLDAuNTk2OTUzNjY1IDIuNTk2OTUzNjYsMCAzLjMzMzMzMzMzLDAgTDExLjYxNSwwIEwxNiw0LjQxMzMzMzMzIEwxNiwxNC42NjY2NjY3IEMxNiwxNS40MDMwNDYzIDE1LjQwMzA0NjMsMTYgMTQuNjY2NjY2NywxNiBMMy4zMzMzMzMzMywxNiBDMi41OTY5NTM2NiwxNiAyLDE1LjQwMzA0NjMgMiwxNC42NjY2NjY3IEwyLDEzIEwyLDEzIFogTTEuMDMsNy4zODI2NjY2NyBMMS4wMywxMS42NjY2NjY3IEwyLjQ1NzMzMzMzLDExLjY2NjY2NjcgQzMuMDkxNjY2NjYsMTEuNjY2NjY2NyAzLjU2NzMzMzMzLDExLjQ3NDY2NjcgMy44OTU2NjY2NywxMS4wOTA2NjY3IEM0LjIwNzMzMzM0LDEwLjcyNDY2NjcgNC4zNjYsMTAuMjAyNjY2NyA0LjM2Niw5LjUyNDY2NjY3IEM0LjM2Niw4Ljg0MDY2NjY3IDQuMjA3MzMzMzMsOC4zMTg2NjY2NyAzLjg5NTY2NjY3LDcuOTU4NjY2NjcgQzMuNTY3NjY2NjcsNy41NzQ2NjY2NyAzLjA5MTY2NjY3LDcuMzgyNjY2NjcgMi40NTczMzMzMyw3LjM4MjY2NjY3IEwxLjAzLDcuMzgyNjY2NjcgWiBNMS42Nyw3Ljk4MjY2NjY3IEwyLjMzNjY2NjY3LDcuOTgyNjY2NjcgQzIuODIzMzMzMzQsNy45ODI2NjY2NyAzLjE3OSw4LjEwMjY2NjY3IDMuNDAzMzMzMzMsOC4zNDg2NjY2NyBDMy42MjIsOC41ODg2NjY2NyAzLjczMTMzMzMzLDguOTg0NjY2NjcgMy43MzEzMzMzMyw5LjUyNDY2NjY3IEMzLjczMTMzMzMzLDEwLjA1MjY2NjcgMy42MjIsMTAuNDQyNjY2NyAzLjQwMywxMC42OTQ2NjY3IEMzLjE3OSwxMC45NDA2NjY3IDIuODIzMzMzMzMsMTEuMDY2NjY2NyAyLjMzNjY2NjY3LDExLjA2NjY2NjcgTDEuNjcsMTEuMDY2NjY2NyBMMS42Nyw3Ljk4MjY2NjY3IEwxLjY3LDcuOTgyNjY2NjcgWiBNNi43MDEzMzMzMyw3LjI5ODY2NjY3IEM2LjA5OTY2NjY2LDcuMjk4NjY2NjcgNS42MjkzMzMzMyw3LjUwODY2NjY3IDUuMjkwMzMzMzMsNy45NDA2NjY2NyBDNC45NjIsOC4zNDg2NjY2NyA0LjgwMzY2NjY3LDguODc2NjY2NjcgNC44MDM2NjY2Nyw5LjUzMDY2NjY3IEM0LjgwMzY2NjY3LDEwLjE3ODY2NjcgNC45NjIsMTAuNzA2NjY2NyA1LjI5MDMzMzMzLDExLjExNDY2NjcgQzUuNjI5MzMzMzMsMTEuNTM0NjY2NyA2LjA5OTY2NjY2LDExLjc1MDY2NjcgNi43MDEzMzMzMywxMS43NTA2NjY3IEM3LjI5NzMzMzMzLDExLjc1MDY2NjcgNy43Njc2NjY2NiwxMS41NDA2NjY3IDguMTEyMzMzMzMsMTEuMTIwNjY2NyBDOC40NDAzMzMzMywxMC43MTg2NjY3IDguNjA0MzMzMzMsMTAuMTkwNjY2NyA4LjYwNDMzMzMzLDkuNTMwNjY2NjcgQzguNjA0MzMzMzMsOC44NzA2NjY2NyA4LjQ0MDMzMzMzLDguMzM2NjY2NjcgOC4xMTIzMzMzMyw3LjkzNDY2NjY3IEM3Ljc2NzY2NjY2LDcuNTA4NjY2NjcgNy4yOTczMzMzMyw3LjI5ODY2NjY3IDYuNzAxMzMzMzMsNy4yOTg2NjY2NyBMNi43MDEzMzMzMyw3LjI5ODY2NjY3IFogTTYuNzAxMzMzMzMsNy45MTY2NjY2NyBDNy4xMDYsNy45MTY2NjY2NyA3LjQxNzY2NjY2LDguMDU0NjY2NjcgNy42MzYzMzMzMyw4LjM0MjY2NjY3IEM3Ljg0OTY2NjY2LDguNjMwNjY2NjcgNy45NTksOS4wMjY2NjY2NyA3Ljk1OSw5LjUzMDY2NjY3IEM3Ljk1OSwxMC4wMzQ2NjY3IDcuODQ5NjY2NjcsMTAuNDI0NjY2NyA3LjYzNjMzMzMzLDEwLjcwNjY2NjcgQzcuNDE3NjY2NjYsMTAuOTg4NjY2NyA3LjEwNiwxMS4xMzI2NjY3IDYuNzAxMzMzMzMsMTEuMTMyNjY2NyBDNi4yOTY2NjY2NiwxMS4xMzI2NjY3IDUuOTc5MzMzMzMsMTAuOTgyNjY2NyA1Ljc2MDY2NjY3LDEwLjY4ODY2NjcgQzUuNTQ3MzMzMzQsMTAuNDAwNjY2NyA1LjQ0MzMzMzMzLDEwLjAxNjY2NjcgNS40NDMzMzMzMyw5LjUzMDY2NjY3IEM1LjQ0MzMzMzMzLDkuMDM4NjY2NjcgNS41NDczMzMzMyw4LjY1NDY2NjY3IDUuNzYwNjY2NjcsOC4zNjY2NjY2NyBDNS45ODQ2NjY2Nyw4LjA2NjY2NjY3IDYuMjk2NjY2NjcsNy45MTY2NjY2NyA2LjcwMTMzMzMzLDcuOTE2NjY2NjcgTDYuNzAxMzMzMzMsNy45MTY2NjY2NyBaIE0xMC45MDEzMzMzLDcuMjk4NjY2NjcgQzEwLjI3OCw3LjI5ODY2NjY3IDkuODAyLDcuNTIwNjY2NjcgOS40NzQsNy45NzY2NjY2NyBDOS4xODQsOC4zNzI2NjY2NyA5LjA0Miw4Ljg5NDY2NjY3IDkuMDQyLDkuNTMwNjY2NjcgQzkuMDQyLDEwLjE3ODY2NjcgOS4xNzg2NjY2NywxMC42OTQ2NjY3IDkuNDU3NjY2NjcsMTEuMDc4NjY2NyBDOS43NzQ2NjY2NywxMS41MjI2NjY3IDEwLjI2MTMzMzMsMTEuNzUwNjY2NyAxMC45MTIzMzMzLDExLjc1MDY2NjcgQzExLjMzMzMzMzMsMTEuNzUwNjY2NyAxMS42OTQzMzMzLDExLjYxODY2NjcgMTEuOTk1LDExLjM1NDY2NjcgQzEyLjMxNzY2NjcsMTEuMDcyNjY2NyAxMi41MiwxMC42ODI2NjY3IDEyLjYwNzY2NjcsMTAuMTc4NjY2NyBMMTEuOTg0MzMzMywxMC4xNzg2NjY3IEMxMS45MDc2NjY3LDEwLjUwMjY2NjcgMTEuNzc2MzMzMywxMC43NDg2NjY3IDExLjU5MDMzMzMsMTAuOTEwNjY2NyBDMTEuNDE1MzMzMywxMS4wNTQ2NjY3IDExLjE4NTY2NjcsMTEuMTMyNjY2NyAxMC45MDcsMTEuMTMyNjY2NyBDMTAuNDgwMzMzMywxMS4xMzI2NjY3IDEwLjE2MywxMC45ODI2NjY3IDkuOTYwNjY2NjcsMTAuNjk0NjY2NyBDOS43NzQ2NjY2NywxMC40MjQ2NjY3IDkuNjgxNjY2NjcsMTAuMDM0NjY2NyA5LjY4MTY2NjY3LDkuNTMwNjY2NjcgQzkuNjgxNjY2NjcsOS4wMzg2NjY2NyA5Ljc3NSw4LjY1NDY2NjY3IDkuOTY2MzMzMzMsOC4zNzg2NjY2NyBDMTAuMTc0LDguMDY2NjY2NjcgMTAuNDgwMzMzMyw3LjkxNjY2NjY3IDEwLjg5MDMzMzMsNy45MTY2NjY2NyBDMTEuMTYzNjY2Nyw3LjkxNjY2NjY3IDExLjM4OCw3Ljk3NjY2NjY3IDExLjU2Myw4LjEwODY2NjY3IEMxMS43NDM2NjY3LDguMjQwNjY2NjcgMTEuODY0LDguNDQ0NjY2NjcgMTEuOTI5NjY2Nyw4LjcyNjY2NjY3IEwxMi41NTMsOC43MjY2NjY2NyBDMTIuNDkzLDguMjk0NjY2NjcgMTIuMzIzLDcuOTQ2NjY2NjcgMTIuMDM5LDcuNjk0NjY2NjcgQzExLjc0MzY2NjcsNy40MzA2NjY2NyAxMS4zNjA2NjY3LDcuMjk4NjY2NjcgMTAuOTAxMzMzMyw3LjI5ODY2NjY3IEwxMC45MDEzMzMzLDcuMjk4NjY2NjcgWiIgaWQ9IuW9oueKtiI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=", ns = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8dGl0bGU+6YCa55So5paH5Lu2PC90aXRsZT4KICAgIDxnIGlkPSLkvpvlupTllYbnrqHnkIYiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSLkvpvlupTllYbnrqHnkIYt5L6b5bqU5ZWG5YiX6KGo6K+m5oOFLTIw5p2h6ZmE5Lu2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzgzLjAwMDAwMCwgLTEwOTEuMDAwMDAwKSIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgPGcgaWQ9Iue8lue7hC0yMeWkh+S7vS0xMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzc1LjAwMDAwMCwgMTA4NS4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxnIGlkPSLpgJrnlKjmlofku7YiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguMDAwMDAwLCA2LjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS42MTUsMCBMMTYsNC40MTMzMzMzMyBMMTYsMTQuNjY2NjY2NyBDMTYsMTUuNDAzMDQ2MyAxNS40MDMwNDYzLDE2IDE0LjY2NjY2NjcsMTYgTDMuMzMzMzMzMzMsMTYgQzIuNTk2OTUzNjYsMTYgMiwxNS40MDMwNDYzIDIsMTQuNjY2NjY2NyBMMiwxMyBMMC42NjY2NjY2NzIsMTMgQzAuMjk4NDc2ODM2LDEzIDAsMTIuNzAxNTIzMiAwLDEyLjMzMzMzMzMgTDAsNi42NjY2NjY2NyBDMCw2LjQ4OTg1NTY4IDAuMDcwMjM3ODk0MSw2LjMyMDI4NjQgMC4xOTUyNjIxNDcsNi4xOTUyNjIxNSBDMC4zMjAyODY0MDEsNi4wNzAyMzc4OSAwLjQ4OTg1NTY3Nyw2IDAuNjY2NjY2NjcyLDYgTDIsNiBMMiwxLjMzMzMzMzMzIEMyLDAuNTk2OTUzNjY1IDIuNTk2OTUzNjYsMCAzLjMzMzMzMzMzLDAgTDExLjYxNSwwIFogTTExLjE5ODY2NjcsMSBMMy4zMzMzMzMzMywxIEMzLjI0NDkyNzgzLDEgMy4xNjAxNDMyLDEuMDM1MTE4OTUgMy4wOTc2MzEwNywxLjA5NzYzMTA3IEMzLjAzNTExODk1LDEuMTYwMTQzMiAzLDEuMjQ0OTI3ODMgMywxLjMzMzMzMzMzIEwzLDYgTDEzLDYgQzEzLjE3NjgxMSw2IDEzLjM0NjM4MDMsNi4wNzAyMzc4OSAxMy40NzE0MDQ1LDYuMTk1MjYyMTUgQzEzLjU5NjQyODgsNi4zMjAyODY0IDEzLjY2NjY2NjcsNi40ODk4NTU2OCAxMy42NjY2NjY3LDYuNjY2NjY2NjcgTDEzLjY2NjY2NjcsMTIuMzMzMzMzMyBDMTMu