UNPKG

@farris/ui-vue

Version:

Farris Vue, a Farris Design based Vue3 component library.

956 lines (955 loc) 26.4 kB
import { ref as m, watch as L, createVNode as u, computed as g, defineComponent as Q, watchEffect as re, Fragment as R, createTextVNode as x, inject as ce, onMounted as pe } from "vue"; import { isPlainObject as J, cloneDeep as X } from "lodash-es"; import { withInstall as fe } from "../common/index.esm.js"; const Y = {}, Z = {}; function I(a) { const { properties: e, title: c, ignore: s } = a, n = s && Array.isArray(s), r = Object.keys(e).reduce((t, o) => ((!n || !s.find((p) => p === o)) && (t[o] = e[o].type === "object" && e[o].properties ? I(e[o]) : X(e[o].default)), t), {}); if (c && (!n || !s.find((t) => t === "id"))) { const t = c.toLowerCase().replace(/-/g, "_"); r.id = `${t}_${Math.random().toString().slice(2, 6)}`; } return r; } function de(a) { const { properties: e, title: c, required: s } = a; if (s && Array.isArray(s)) { const n = s.reduce((r, t) => (r[t] = e[t].type === "object" && e[t].properties ? I(e[t]) : X(e[t].default), r), {}); if (c && s.find((r) => r === "id")) { const r = c.toLowerCase().replace(/-/g, "_"); n.id = `${r}_${Math.random().toString().slice(2, 6)}`; } return n; } return { type: c }; } function K(a, e = {}, c) { const s = Y[a]; if (s) { let n = de(s); const r = Z[a]; return n = r ? r({ getSchemaByType: K }, n, e, c) : n, n; } return null; } function ve(a, e) { const c = I(e); return Object.keys(c).reduce((s, n) => (Object.prototype.hasOwnProperty.call(a, n) && (s[n] && J(s[n]) && J(a[n] || !a[n]) ? Object.assign(s[n], a[n] || {}) : s[n] = a[n]), s), c), c; } function ee(a, e) { return Object.keys(a).filter((s) => a[s] != null).reduce((s, n) => { if (e.has(n)) { const r = e.get(n); if (typeof r == "string") s[r] = a[n]; else { const t = r(n, a[n], a); Object.assign(s, t); } } else s[n] = a[n]; return s; }, {}); } function ge(a, e, c = /* @__PURE__ */ new Map()) { const s = ve(a, e); return ee(s, c); } function me(a = {}) { function e(l, i, f, v) { if (typeof f == "number") return v[l].length === f; if (typeof f == "object") { const y = Object.keys(f)[0], b = f[y]; if (y === "not") return Number(v[l].length) !== Number(b); if (y === "moreThan") return Number(v[l].length) >= Number(b); if (y === "lessThan") return Number(v[l].length) <= Number(b); } return !1; } function c(l, i, f, v) { return v[l] && v[l].propertyValue && String(v[l].propertyValue.value) === String(f); } const s = /* @__PURE__ */ new Map([ ["length", e], ["getProperty", c] ]); Object.keys(a).reduce((l, i) => (l.set(i, a[i]), l), s); function n(l, i) { const f = l; return typeof i == "number" ? [{ target: f, operator: "length", param: null, value: Number(i) }] : typeof i == "boolean" ? [{ target: f, operator: "getProperty", param: l, value: !!i }] : typeof i == "object" ? Object.keys(i).map((v) => { if (v === "length") return { target: f, operator: "length", param: null, value: i[v] }; const y = v, b = i[v]; return { target: f, operator: "getProperty", param: y, value: b }; }) : []; } function r(l) { return Object.keys(l).reduce((f, v) => { const y = n(v, l[v]); return f.push(...y), f; }, []); } function t(l, i) { if (s.has(l.operator)) { const f = s.get(l.operator); return f && f(l.target, l.param, l.value, i) || !1; } return !1; } function o(l, i) { return r(l).reduce((y, b) => y && t(b, i), !0); } function p(l, i) { const f = Object.keys(l), v = f.includes("allOf"), y = f.includes("anyOf"), b = v || y, k = (b ? l[b ? v ? "allOf" : "anyOf" : "allOf"] : [l]).map((T) => o(T, i)); return v ? !k.includes(!1) : k.includes(!0); } return { parseValueSchema: p }; } const he = {}, ye = {}; me(); function be(a, e, c = /* @__PURE__ */ new Map(), s = (t, o, p, l) => o, n = {}, r = (t) => t) { return Y[e.title] = e, Z[e.title] = s, he[e.title] = n, ye[e.title] = r, (t = {}, o = !0) => { if (!o) return ee(t, c); const p = ge(t, e, c), l = Object.keys(a).reduce((i, f) => (i[f] = a[f].default, i), {}); return Object.assign(l, p); }; } function we(a, e) { return { customClass: e.class, customStyle: e.style }; } const Pe = /* @__PURE__ */ new Map([ ["appearance", we] ]), Se = "https://json-schema.org/draft/2020-12/schema", je = "https://farris-design.gitee.io/pagination.schema.json", ke = "pagination", Ne = "A Farris Component", Oe = "object", Me = { id: { description: "The unique identifier for a pagination", type: "string" }, type: { description: "The type string of pagination component", type: "string", default: "pagination" }, appearance: { description: "", type: "object", properties: { class: { type: "string" }, style: { type: "string" } }, default: {} }, binding: { description: "", type: "object", default: {} }, editable: { description: "", type: "boolean", default: !0 }, enableLinkLabel: { description: "", type: "boolean", default: !1 }, label: { description: "", type: "string", default: "" }, lableWidth: { description: "", type: "number" }, placeholder: { description: "", type: "string", default: "" }, readonly: { description: "", type: "boolean", default: !1 }, required: { description: "", type: "boolean", default: !1 }, tabindex: { description: "", type: "number", default: -1 }, textAlign: { description: "", type: "string", enum: [ "left", "middle", "right" ], default: "left" }, visible: { description: "", type: "boolean", default: !0 }, onBlur: { description: "", type: "string", default: "" }, onClickLinkLabel: { description: "", type: "sting", default: "" } }, Be = [ "id", "type" ], Le = { $schema: Se, $id: je, title: ke, description: Ne, type: Oe, properties: Me, required: Be }, Te = "pagination", ze = "A Farris Component", Ee = "object", $e = { basic: { description: "Basic Infomation", title: "基本信息", properties: { id: { description: "组件标识", title: "标识", type: "string", readonly: !0 }, type: { description: "组件类型", title: "控件类型", type: "select", editor: { type: "waiting for modification", enum: [] } } } }, behavior: { description: "Basic Infomation", title: "行为", properties: { editable: { description: "", title: "允许编辑", type: "boolean" }, readonly: { description: "", title: "只读", type: "string" }, required: { description: "", title: "必填", type: "boolean" }, visible: { description: "", title: "可见", type: "boolean" }, placeholder: { description: "", title: "提示文本", type: "string" }, tabindex: { description: "", title: "tab索引", type: "number" }, textAlign: { description: "", title: "对齐方式", type: "enum", editor: { type: "combo-list", textField: "name", valueField: "value", data: [ { value: "left", name: "左对齐" }, { value: "center", name: "居中" }, { value: "right", name: "右对齐" } ] } } } } }, De = { title: Te, description: ze, type: Ee, categories: $e }; function Ae(a, e, c) { return e; } const U = { /** * 当前页码 */ currentPage: { type: Number, default: 1 }, /** * 禁止点击分页组件 */ disabled: { type: Boolean, default: !1 }, /** * 分页模式 */ mode: { type: String, default: "default" }, /** * 每页数量 */ pageSize: { type: Number, default: 20 }, /** * 总数量 */ totalItems: { type: Number, default: 0 }, /** * 是否显示跳转按钮 */ showGoButton: { type: Boolean, default: !1 }, /** * 是否展示每个数量下拉 */ showPageList: { type: Boolean, default: !0 }, /** * 是否展示页码 */ showPageNumbers: { type: Boolean, default: !0 }, /** * 是否展示跳转到哪一页 */ showRedirection: { type: Boolean, default: !0 }, /** * 自定义每页数量 */ pageList: { type: Array, default: [20, 50, 100] } }, ae = be(U, Le, Pe, Ae, De); function te(a, e, c, s) { const n = m("跳转至"), r = m(""), t = m(a.value); L(t, (i, f) => { i >= 1 && i <= e.value ? a.value = i : t.value = f; }), L(a, (i) => { t.value !== i && (t.value = i); }); function o(i) { t.value = i.target.valueAsNumber, s.emit("update:currentPage", t.value), s.emit("changed", { pageIndex: t.value, pageSize: c.value }), s.emit("pageIndexChanged", { pageIndex: t.value, pageSize: c.value }); } function p(i) { i.key === "Enter" && (t.value = i.target.valueAsNumber, s.emit("update:currentPage", t.value), s.emit("changed", { pageIndex: t.value, pageSize: c.value }), s.emit("pageIndexChanged", { pageIndex: t.value, pageSize: c.value })); } function l() { return u("li", { class: "page-goto-input d-flex flex-row", style: "padding-left: 10px; white-space: nowrap;" }, [u("span", { class: "pagination-message" }, [n.value]), u("input", { title: "page-index-spinner", type: "number", class: "form-control farris-gotopagenumber", value: t.value, min: 1, max: e.value, style: "display: inline-block;margin-left:3px;", onBlur: (i) => o(i), onKeyup: (i) => p(i) }, null), r.value]); } return { renderGotoButton: l }; } function ne(a, e, c, s, n) { const r = g(() => ({ "page-item": !0, disabled: e.value })); function t(i) { a.value = a.value < c.value ? a.value + 1 : c.value, n.emit("update:currentPage", a.value), n.emit("changed", { pageIndex: a.value, pageSize: s.value }), n.emit("pageIndexChanged", { pageIndex: a.value, pageSize: s.value }); } function o(i) { a.value = c.value, n.emit("update:currentPage", a.value), n.emit("changed", { pageIndex: a.value, pageSize: s.value }), n.emit("pageIndexChanged", { pageIndex: a.value, pageSize: s.value }); } function p() { return u("li", { class: r.value }, [!e.value && u("a", { class: "page-link", tabindex: "0", onClick: (i) => t() }, [u("span", { class: "f-icon f-page-next" }, null)]), e.value && u("span", { class: "page-link" }, [u("span", { class: "f-icon f-page-next" }, null)])]); } function l() { return u("li", { class: r.value }, [!e.value && u("a", { class: "page-link", tabindex: "0", onClick: (i) => o() }, [u("span", { class: "f-icon f-page-last" }, null)]), e.value && u("span", { class: "page-link" }, [u("span", { class: "f-icon f-page-last" }, null)])]); } return { renderLastPage: l, renderNextPage: p }; } function le(a, e) { const c = m("共"), s = m("条"), n = g(() => ({ "pagination-message": !0, "text-truncate": !0, "d-flex": !0, "ml-auto": a.value === "right", "flex-fill": a.value === "right" })); function r() { return u("li", { class: n.value }, [u("div", { class: "text-truncate", style: "line-height: 26px" }, [u("span", { class: "pg-message-text" }, [c.value]), u("b", { class: "pg-message-total" }, [e.value]), u("span", { class: "pg-message-text" }, [s.value])])]); } return { renderPageInfo: r }; } function se(a, e, c, s, n) { const r = m(!1), t = m("显示"), o = m("条"), p = g(() => ({ dropup: !0, "dropdown-right": !0, "pg-pagelist": !0, "pagelist-disabled": s.value === 0, show: r.value })), l = g(() => ({ "dropdown-menu": !0, show: r.value })), i = (h) => ({ "w-100": !0, "dropdown-item": !0, active: e.value === h }); function f(h) { r.value = !0; } function v(h) { r.value = !1; } function y(h, k, B) { const z = h * k - k + 1; return Math.ceil(z / B); } function b(h, k) { const B = a.value; a.value = y(a.value, e.value, k), B !== a.value && n.emit("update:currentPage", a.value), e.value = k, r.value = !1, n.emit("update:pageSize", e.value), n.emit("changed", { pageIndex: a.value, pageSize: e.value }), n.emit("pageSizeChanged", { pageIndex: a.value, pageSize: e.value }); } function j() { return u("li", { class: "pagination-pagelist" }, [u("div", { class: p.value, onMouseenter: (h) => f(), onMouseleave: (h) => v() }, [u("div", { class: "pg-pagelist-info" }, [u("span", { class: "pagelist-text" }, [t.value]), u("b", { class: "cur-pagesize" }, [e.value]), u("span", { class: "pagelist-text" }, [o.value]), u("i", { class: "f-icon f-icon-dropdown" }, null)]), u("div", { class: l.value, style: "margin-bottom: -1px;" }, [c.value.map((h) => u("li", { class: i(h), onClick: (k) => b(k, h) }, [u("span", null, [h])]))])])]); } return { renderPageList: j }; } function ie(a, e, c, s, n) { const r = (l) => ({ "page-item": !0, current: e.value === l.value, ellipsis: l.label === "...", disabled: a.disabled }), t = (l) => ({ "f-icon": !0, "f-icon-arrow-seek-left": l.value < e.value, "f-icon-arrow-seek-right": l.value > e.value }); function o(l, i) { e.value = i, n.emit("update:currentPage", e.value), n.emit("changed", { pageIndex: e.value, pageSize: s.value }), n.emit("pageIndexChanged", { pageIndex: e.value, pageSize: s.value }); } function p() { return c.value.map((l) => u("li", { class: r(l) }, [e.value !== l.value && u("a", { class: "page-link", tabindex: "0", onClick: (i) => o(i, l.value) }, [u("span", { class: "page-link-label" }, [l.label]), l.label === "..." && u("i", { class: t(l) }, null)]), e.value === l.value && u("span", { class: "page-link" }, [l.label])])); } return { renderPageNumbers: p }; } function oe(a, e, c, s, n) { const r = g(() => ({ "page-item": !0, disabled: e.value })); function t(i) { a.value = 1, n.emit("update:currentPage", a.value), n.emit("changed", { pageIndex: a.value, pageSize: s.value }), n.emit("pageIndexChanged", { pageIndex: a.value, pageSize: s.value }); } function o(i) { a.value = a.value > 2 ? a.value - 1 : 1, n.emit("update:currentPage", a.value), n.emit("changed", { pageIndex: a.value, pageSize: s.value }), n.emit("pageIndexChanged", { pageIndex: a.value, pageSize: s.value }); } function p() { return u("li", { class: r.value }, [c.value && u("a", { tabindex: "0", class: "page-link", onClick: (i) => t() }, [u("span", { class: "f-icon f-page-first" }, null)]), e.value && u("span", { class: "page-link" }, [u("span", { class: "f-icon f-page-first" }, null)])]); } function l() { return u("li", { class: r.value }, [c.value && u("a", { tabindex: "0", class: "page-link", onClick: (i) => o() }, [u("span", { class: "f-icon f-page-pre" }, null)]), e.value && u("span", { class: "page-link" }, [u("span", { class: "f-icon f-page-pre" }, null)])]); } return { renderFirstPage: p, renderPreviousPage: l }; } function ue(a) { const e = m([]); function c(n, r, t, o) { const p = Math.ceil(t / 2); return n === t ? o : n === 1 ? n : t < o ? o - p < r ? o - t + n : p < r ? r - p + n : n : n; } function s(n, r, t, o) { const p = [], l = Math.ceil(t / r), i = Math.ceil(o / 2), f = n <= i, v = l - i < n, y = !f && !v, b = o < l; let j = 1; for (; j <= l && j <= o; ) { const h = c(j, n, o, l), k = j === 2 && (y || v), B = j === o - 1 && (y || f), T = b && (k || B) ? "..." : "" + h; p.push({ label: T, value: h }), j++; } e.value = p; } return { pages: e, updatePages: s }; } const C = /* @__PURE__ */ Q({ name: "FPagination", props: U, emits: ["changed", "pageIndexChanged", "pageSizeChanged", "update:currentPage", "update:pageSize"], setup(a, e) { const c = m(!1), s = m(a.mode), n = m(""), r = m(!1), t = m(a.pageSize), o = m(a.currentPage), p = m(a.totalItems), { pages: l, updatePages: i } = ue(), f = { position: "relative" }, v = { position: "absolute", right: "0", zIndex: 1, background: "rgba(250,250,252,.6)", width: "100%", height: "100%" }, y = g(() => !p.value || o.value === 1), b = g(() => a.pageList), j = g(() => Math.ceil(p.value / t.value)), h = g(() => !p.value || o.value === j.value), k = g(() => a.showGoButton), B = g(() => o.value > 1), T = g(() => !(r.value && l.value.length <= 1)), z = g(() => !0), E = g(() => a.showPageList), D = g(() => a.showPageNumbers), M = g(() => !0), { renderFirstPage: d, renderPreviousPage: P } = oe(o, y, B, t, e), { renderLastPage: w, renderNextPage: S } = ne(o, h, j, t, e), { renderPageInfo: O } = le(n, p), { renderPageList: $ } = se(o, t, b, p, e), { renderPageNumbers: q } = ie(a, o, l, t, e), { renderGotoButton: F } = te(o, j, t, e); i(o.value, t.value, p.value, 7), L(() => a.totalItems, (N) => { p.value = N; }), L([o, t, p], () => { i(o.value, t.value, p.value, 7); }), L(o, (N, A) => { }), L(t, (N, A) => { }), L(() => a.totalItems, (N) => { p.value = N, i(o.value, t.value, p.value, 7); }), L(() => a.currentPage, (N, A) => { N !== A && (o.value = N); }), L(() => a.pageSize, (N, A) => { N !== A && (t.value = N); }), re(() => { if (!b.value || !b.value.length) return; const N = b.value.includes(t.value); t.value = N ? t.value : b.value[0], N || e.emit("update:pageSize", t.value); })(); const G = g(() => ({ "d-flex": !0, "flex-wrap": !0, "justify-content-end": !0, "w-100": !0, "ngx-pagination": !0, pagination: !0, responsive: c.value, "pager-viewmode-default": s.value === "default", "pager-viewmode-simple": s.value === "simple" })), _ = g(() => ({ position: "relative", "justify-content": n.value === "center" ? "center" : "start" })); function W() { return u(R, null, [z.value && O(), E.value && $(), M.value && d(), M.value && P(), D.value && q(), M.value && S(), M.value && w(), k.value && F()]); } function H() { return u(R, null, [u("li", { class: "page-item d-flex flex-fill" }, null), M.value && d(), M.value && P(), F(), u("li", { class: "page-item page-separator", style: "margin-left: 10px" }, [u("span", { style: "font-size: 15px; font-weight: 200;" }, [x(" /")])]), u("li", { class: "page-item page-total", style: "margin-left: 5px" }, [u("span", { style: "font-size: 16px; font-weight: 600;" }, [x(" "), j.value])]), M.value && S(), M.value && w()]); } return () => u("div", { class: "pagination-container", style: f }, [a.disabled && u("div", { style: v }, null), T.value && u("ul", { role: "navigation", class: G.value, style: _.value }, [s.value === "default" ? W() : H()])]); } }); function Fe(a, e, c) { var M; const s = "", n = "", r = m(); function t() { return (e == null ? void 0 : e.schema.componentType) !== "frame"; } function o() { return !1; } function p() { return (e == null ? void 0 : e.schema.componentType) !== "frame"; } function l() { return (e == null ? void 0 : e.schema.componentType) === "frame"; } function i(d) { if (!d || !d.value) return null; if (d.value.schema && d.value.schema.type === "component") return d.value; const P = m(d == null ? void 0 : d.value.parent), w = i(P); return w || null; } function f(d = e) { var O; const { componentInstance: P, designerItemElementRef: w } = d; if (!P || !P.value) return null; const { getCustomButtons: S } = P.value; return P.value.canMove || S && ((O = S()) != null && O.length) ? w : f(d.parent); } function v(d) { return !!c; } function y() { return (e == null ? void 0 : e.schema.label) || (e == null ? void 0 : e.schema.title) || (e == null ? void 0 : e.schema.name); } function b() { } function j(d, P) { var w; !d || !P || (w = e == null ? void 0 : e.setupContext) == null || w.emit("dragEnd"); } function h(d, P) { const { componentType: w } = d; let S = K(w, d, P); const O = w.toLowerCase().replace(/-/g, "_"); return S && !S.id && S.type === w && (S.id = `${O}_${Math.random().toString().slice(2, 6)}`), S; } function k(d) { } function B(...d) { } function T(d) { if (!d) return; const P = e == null ? void 0 : e.schema, { formSchemaUtils: w } = d; if (P && w.getExpressions().length) { const S = w.getExpressions().findIndex((O) => O.target === P.id); S > -1 && w.getExpressions().splice(S, 1); } } function z(d) { T(d), e != null && e.schema.contents && e.schema.contents.map((P) => { let w = P.id; P.type === "component-ref" && (w = P.component); const S = a.value.querySelectorAll(`#${w}-design-item`); S != null && S.length && Array.from(S).map((O) => { var $; ($ = O == null ? void 0 : O.componentInstance) != null && $.value.onRemoveComponent && O.componentInstance.value.onRemoveComponent(d); }); }); } function E() { } function D(d) { } return r.value = { canMove: t(), canSelectParent: o(), canDelete: p(), canNested: !l(), contents: e == null ? void 0 : e.schema.contents, elementRef: a, parent: (M = e == null ? void 0 : e.parent) == null ? void 0 : M.componentInstance, schema: e == null ? void 0 : e.schema, styles: s, designerClass: n, canAccepts: v, getBelongedComponentInstance: i, getDraggableDesignItemElement: f, getDraggingDisplayText: y, getPropConfig: B, getDragScopeElement: b, onAcceptMovedChildElement: j, onChildElementMovedOut: k, addNewChildComponentSchema: h, triggerBelongedComponentToMoveWhenMoved: m(!1), triggerBelongedComponentToDeleteWhenDeleted: m(!1), onRemoveComponent: z, getCustomButtons: E, onPropertyChanged: D }, r; } const Re = /* @__PURE__ */ Q({ name: "FPagination", props: U, emits: ["pageIndexChanged", "pageSizeChanged"], setup(a, e) { const c = m(!1), s = m(a.mode), n = m(""), r = m(!1), t = m(a.pageSize), o = m(a.currentPage), p = m(a.totalItems), l = m(), i = ce("design-item-context"), f = Fe(l, i); pe(() => { l.value.componentInstance = f; }), e.expose(f.value); const { pages: v, updatePages: y } = ue(), b = g(() => o.value === 1), j = g(() => [20, 50, 100]), h = g(() => Math.ceil(p.value / t.value)), k = g(() => o.value === h.value), B = g(() => !0), T = g(() => o.value > 1), z = g(() => !(r.value && v.value.length <= 1)), E = g(() => !0), D = g(() => !0), M = g(() => !0), d = g(() => !0), { renderFirstPage: P, renderPreviousPage: w } = oe(o, b, T, t, e), { renderLastPage: S, renderNextPage: O } = ne(o, k, h, t, e), { renderPageInfo: $ } = le(n, p), { renderPageList: q } = se(o, t, j, p, e), { renderPageNumbers: F } = ie(a, o, v, t, e), { renderGotoButton: V } = te(o, h, t, e); y(o.value, t.value, p.value, 7), L([o, t], () => { y(o.value, t.value, p.value, 7); }), L(o, () => { e.emit("pageIndexChanged", o.value); }), L(t, () => { e.emit("pageSizeChanged", t.value); }); const G = g(() => ({ "ngx-pagination": !0, pagination: !0, responsive: c.value, "pager-viewmode-default": s.value === "default", "pager-viewmode-simple": s.value === "simple" })), _ = g(() => ({ position: "relative", "justify-content": n.value === "center" ? "center" : "start" })); function W() { return u(R, null, [E.value && $(), D.value && q(), d.value && P(), d.value && w(), M.value && F(), d.value && O(), d.value && S(), B.value && V()]); } function H() { return u(R, null, [u("li", { class: "page-item d-flex flex-fill" }, null), d.value && P(), d.value && w(), V(), u("li", { class: "page-item page-separator", style: "margin-left: 10px" }, [u("span", { style: "font-size: 15px; font-weight: 200;" }, [x(" /")])]), u("li", { class: "page-item page-total", style: "margin-left: 5px" }, [u("span", { style: "font-size: 16px; font-weight: 600;" }, [x(" "), h.value])]), d.value && O(), d.value && S()]); } return () => u("div", { ref: l, class: "pagination-container" }, [z.value && u("ul", { role: "navigation", class: G.value, style: _.value }, [s.value === "default" ? W() : H()])]); } }); C.register = (a, e, c) => { a.pagination = C, e.pagination = ae; }; C.registerDesigner = (a, e, c) => { a.pagination = Re, e.pagination = ae; }; const Ve = fe(C); export { C as FPagination, Ve as default, U as paginationProps, ae as propsResolver };