el-plus-crud
Version:
采用Vue3 + TS,封装的element-plus数据驱动表单、列表组件
1,136 lines • 272 kB
JavaScript
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