UNPKG

@farris/ui-vue

Version:

Farris Vue, a Farris Design based Vue3 component library.

687 lines (686 loc) 24.1 kB
import { ref as _, computed as ue, defineComponent as G, watch as le, createVNode as N, Fragment as W } from "vue"; import { cloneDeep as L, isPlainObject as z } from "lodash-es"; import { withInstall as fe } from "../common/index.esm.js"; function V(e, t) { let r; function a(i) { const { properties: s, title: d, ignore: n } = i, o = n && Array.isArray(n), c = Object.keys(s).reduce((p, m) => ((!o || !n.find((F) => F === m)) && (p[m] = s[m].type === "object" && s[m].properties ? a(s[m]) : L(s[m].default)), p), {}); if (d && (!o || !n.find((p) => p === "id"))) { const p = d.toLowerCase().replace(/-/g, "_"); c.id = `${p}_${Math.random().toString().slice(2, 6)}`; } return c; } function b(i) { const { properties: s, title: d, required: n } = i; if (n && Array.isArray(n)) { const o = n.reduce((c, p) => (c[p] = s[p].type === "object" && s[p].properties ? a(s[p]) : L(s[p].default), c), {}); if (d && n.find((c) => c === "id")) { const c = d.toLowerCase().replace(/-/g, "_"); o.id = `${c}_${Math.random().toString().slice(2, 6)}`; } return o; } return { type: d }; } function v(i, s = {}, d) { const n = e[i]; if (n) { let o = b(n); const c = t[i]; return o = c ? c({ getSchemaByType: v }, o, s, d) : o, r != null && r.appendIdentifyForNewControl && r.appendIdentifyForNewControl(o), o; } return null; } function y(i, s) { const d = a(s); return Object.keys(d).reduce((n, o) => (Object.prototype.hasOwnProperty.call(i, o) && (n[o] && z(n[o]) && z(i[o] || !i[o]) ? Object.assign(n[o], i[o] || {}) : n[o] = i[o]), n), d), d; } function S(i, s) { return Object.keys(i).filter((n) => i[n] != null).reduce((n, o) => { if (s.has(o)) { const c = s.get(o); if (typeof c == "string") n[c] = i[o]; else { const p = c(o, i[o], i); Object.assign(n, p); } } else n[o] = i[o]; return n; }, {}); } function x(i, s, d = /* @__PURE__ */ new Map()) { const n = y(i, s); return S(n, d); } function l(i) { var d; const s = i.type; if (s) { const n = e[s]; if (!n) return i; const o = y(i, n), c = ((d = i.editor) == null ? void 0 : d.type) || ""; if (c) { const p = e[c], m = y(i.editor, p); o.editor = m; } return o; } return i; } function f(i) { r = i; } return { getSchemaByType: v, resolveSchemaWithDefaultValue: l, resolveSchemaToProps: x, mappingSchemaToProps: S, setDesignerContext: f }; } const I = {}, J = {}, { getSchemaByType: at, resolveSchemaWithDefaultValue: de, resolveSchemaToProps: pe, mappingSchemaToProps: me, setDesignerContext: st } = V(I, J); function ve(e = {}) { function t(l, f, i, s) { if (typeof i == "number") return s[l].length === i; if (typeof i == "object") { const d = Object.keys(i)[0], n = i[d]; if (d === "not") return Number(s[l].length) !== Number(n); if (d === "moreThan") return Number(s[l].length) >= Number(n); if (d === "lessThan") return Number(s[l].length) <= Number(n); } return !1; } function r(l, f, i, s) { return s[l] && s[l].propertyValue && String(s[l].propertyValue.value) === String(i); } const a = /* @__PURE__ */ new Map([ ["length", t], ["getProperty", r] ]); Object.keys(e).reduce((l, f) => (l.set(f, e[f]), l), a); function b(l, f) { const i = l; return typeof f == "number" ? [{ target: i, operator: "length", param: null, value: Number(f) }] : typeof f == "boolean" ? [{ target: i, operator: "getProperty", param: l, value: !!f }] : typeof f == "object" ? Object.keys(f).map((s) => { if (s === "length") return { target: i, operator: "length", param: null, value: f[s] }; const d = s, n = f[s]; return { target: i, operator: "getProperty", param: d, value: n }; }) : []; } function v(l) { return Object.keys(l).reduce((i, s) => { const d = b(s, l[s]); return i.push(...d), i; }, []); } function y(l, f) { if (a.has(l.operator)) { const i = a.get(l.operator); return i && i(l.target, l.param, l.value, f) || !1; } return !1; } function S(l, f) { return v(l).reduce((d, n) => d && y(n, f), !0); } function x(l, f) { const i = Object.keys(l), s = i.includes("allOf"), d = i.includes("anyOf"), n = s || d, p = (n ? l[n ? s ? "allOf" : "anyOf" : "allOf"] : [l]).map((F) => S(F, f)); return s ? !p.includes(!1) : p.includes(!0); } return { parseValueSchema: x }; } const ge = { convertTo: (e, t, r, a) => { e.appearance || (e.appearance = {}), e.appearance[t] = r; }, convertFrom: (e, t, r) => e.appearance ? e.appearance[t] : e[t] }, be = { convertFrom: (e, t, r) => e.buttons && e.buttons.length ? `共 ${e.buttons.length} 项` : "无" }, ye = { convertTo: (e, t, r, a) => { e.editor && (e.editor[t] = r); }, convertFrom: (e, t, r) => e.editor && Object.prototype.hasOwnProperty.call(e.editor, t) ? e.editor[t] : e[t] }, Se = { button: { type: "button", name: "按钮" }, "response-toolbar": { type: "response-toolbar", name: "工具栏" }, "response-toolbar-item": { type: "response-toolbar-item", name: "按钮" }, "content-container": { type: "content-container", name: "容器" }, "input-group": { type: "input-group", name: "文本" }, textarea: { type: "textarea", name: "多行文本" }, lookup: { type: "lookup", name: "帮助" }, "number-spinner": { type: "number-spinner", name: "数值" }, "date-picker": { type: "date-picker", name: "日期" }, switch: { type: "switch", name: "开关" }, "radio-group": { type: "radio-group", name: "单选组" }, "check-box": { type: "check-box", name: "复选框" }, "check-group": { type: "check-group", name: "复选框组" }, "combo-list": { type: "combo-list", name: "下拉列表" }, "response-form": { type: "response-form", name: "卡片面板" }, "response-layout": { type: "response-layout", name: "布局容器", icon: "response-layout-3" }, "response-layout-item": { type: "response-layout-item", name: "布局", icon: "response-layout-1" }, "tree-grid": { type: "tree-grid", name: "树表格" }, "tree-grid-column": { type: "tree-grid-column", name: "树表格列" }, "data-grid": { type: "data-grid", name: "表格" }, "data-grid-column": { type: "data-grid-column", name: "表格列" }, module: { type: "Module", name: "模块" }, component: { type: "component", name: "组件" }, tabs: { type: "tabs", name: "标签页" }, "tab-page": { type: "tab-page", name: "标签页项", dependentParentControl: "Tab" }, "tab-toolbar-item": { type: "tab-toolbar-item", name: "标签页工具栏按钮" }, "html-template": { type: "html-template", name: "模板容器" }, "time-picker": { type: "time-picker", name: "时间选择" }, section: { type: "section", name: "分组面板" }, "section-toolbar": { type: "section-toolbar", name: "分组面板工具栏" }, "section-toolbar-item": { type: "section-toolbar-item", name: "分组面板按钮" }, splitter: { type: "splitter", name: "分栏面板" }, "splitter-pane": { type: "splitter-pane", name: "分栏面板项", dependentParentControl: "Splitter" }, "component-ref": { type: "component-ref", name: "组件引用节点" }, uploader: { type: "uploader", name: "附件上传" }, "page-header": { type: "page-header", name: "页头" }, "page-footer": { type: "page-footer", name: "页脚" }, "tab-toolbar": { type: "tab-toolbar", name: "标签页工具栏" }, fieldset: { type: "fieldset", name: "分组" }, "query-solution": { type: "query-solution", name: "筛选方案" }, drawer: { type: "drawer", name: "抽屉" }, "external-container": { type: "external-container", name: "外部容器", icon: "content-container" }, "list-nav": { type: "list-nav", name: "列表导航" }, "list-view": { type: "list-view", name: "列表" }, "filter-bar": { type: "filter-bar", name: "筛选条" }, "language-textbox": { type: "language-textbox", name: "多语输入框" } }, Fe = { convertFrom: (e, t, r) => { var b; const a = e.editor && e.editor[t] ? e.editor[t] : e[t]; return ((b = Se[a]) == null ? void 0 : b.name) || a; } }, Te = { convertTo: (e, t, r, a) => { e[t] = e[t]; }, convertFrom: (e, t, r) => e.editor ? r.getRealEditorType(e.editor.type) : "" }, Ce = { convertTo: (e, t, r, a) => { (e.type === "data-grid-column" || e.type === "tree-grid-column") && (e.formatter ? e.formatter[t] = r : e.formatter = { [t]: r }); }, convertFrom: (e, t, r) => { if (e.formatter) { if (t === "trueText") return e.formatter.trueText; if (t === "falseText") return e.formatter.falseText; if (t === "prefix") return e.formatter.prefix; if (t === "suffix") return e.formatter.suffix; if (t === "precision") return e.formatter.precision; if (t === "decimal") return e.formatter.decimal; if (t === "thousand") return e.formatter.thousand; if (t === "tempDateFormat") return e.formatter.dateFormat === "yyyy年MM月dd日" ? "yearMonthDay" : e.formatter.dateFormat === "yyyy-MM-dd HH:mm:ss" ? "yyyy-MM-ddTHH:mm:ss" : e.formatter.dateFormat === "yyyy/MM/dd HH:mm:ss" ? "yyyy/MM/ddTHH:mm:ss" : e.formatter.dateFormat === "yyyy年MM月dd日 HH时mm分ss秒" ? "yearMonthDayHourMinuteSecond" : e.formatter.tempDateFormat || e.formatter.dateFormat || "yyyy-MM-dd"; if (t === "customFormat") return e.formatter.customFormat; if (t === "type") return e.formatter.type || "none"; } return "none"; } }, xe = { convertTo: (e, t, r, a) => { e.command ? e.command[t] = r : e.command = { [t]: r }, t === "enable" && r && (e.command.commands || (e.command.commands = [ { text: "编辑", type: "primary", command: "edit" }, { text: "删除", type: "danger", command: "remove" } ])); }, convertFrom: (e, t, r) => e.command && t === "enable" ? e.command.enable : "" }, Me = { convertTo: (e, t, r, a) => { e.column ? e.column[t] = r : e.column = { [t]: r }, t === "fitColumns" && r && (e.column.fitMode || (e.column.fitMode = "average")); }, convertFrom: (e, t, r) => { if (e.column) { if (t === "fitColumns") return e.column.fitColumns; if (t === "fitMode") return e.column.fitMode; } return ""; } }, Oe = { convertTo: (e, t, r, a) => { e.summary ? e.summary[t] = r : e.summary = { [t]: r }, t === "enable" && r && (e.summary ? e.summary.groupFields || (e.summary.groupFields = []) : e.summary = { enable: r, groupFields: [] }); }, convertFrom: (e, t, r) => e.summary && t === "enable" ? e.summary.enable : e.type === "data-grid-column" ? e.enableSummary === void 0 ? !1 : e.enableSummary : "" }, Pe = { convertTo: (e, t, r, a) => { e.group ? e.group[t] = r : e.group = { [t]: r }, t === "enable" && r && (e.group ? e.group.groupFields || (e.group.groupFields = []) : e.group = { enable: r, groupFields: [], showSummary: !1 }); }, convertFrom: (e, t, r) => { if (e.group) { if (t === "enable") return e.group.enable; if (t === "showSummary") return e.group.showSummary; } } }, we = { convertFrom: (e, t) => e.binding ? e.binding.path : "", convertTo: (e, t, r) => { if (r && r.length > 0) { const a = r[0]; e.binding || (e.binding = {}), e.binding.type = "Form", e.binding.path = a.bindingField, e.binding.field = a.id, e.binding.fullPath = a.path, e.path = a.bindingPath; } } }, De = { convertTo: (e, t, r, a) => { e.pagination || (e.pagination = {}), e.pagination[t] = r; }, convertFrom: (e, t, r) => e.pagination ? e.pagination[t] : e[t] }, Ee = { convertTo: (e, t, r, a) => { e.rowNumber || (e.rowNumber = {}), e.rowNumber[t] = r; }, convertFrom: (e, t, r) => e.rowNumber ? e.rowNumber[t] : e[t] }, $e = { convertTo: (e, t, r, a) => { e.selection || (e.selection = {}), e.selection[t] = r; }, convertFrom: (e, t, r) => e.selection ? e.selection[t] : e[t] }, je = { convertFrom: (e, t, r) => e[t] && e[t].length ? `共 ${e[t].length} 项` : "" }, Ne = { convertFrom: (e, t) => e[t] || "", convertTo: (e, t, r) => { e[t] = r; } }, Re = { convertTo: (e, t, r, a) => { e.size || (e.size = {}), e.size[t] = r; }, convertFrom: (e, t, r) => e.size ? e.size[t] : e[t] }, ke = { convertFrom: (e, t, r) => { var a, b; return (a = e.formatter) != null && a.data && t === "formatterEnumData" && !e.formatterEnumData ? (b = e.formatter) == null ? void 0 : b.data : e.formatterEnumData; } }, he = { convertTo: (e, t, r, a) => { e.sort || (e.sort = {}), e.sort[t] = r; }, convertFrom: (e, t, r) => { var a, b; if (t === "mode") return ((a = e.sort) == null ? void 0 : a.mode) || "client"; if (t === "multiSort") return !!((b = e.sort) != null && b.multiSort); } }, Be = { convertTo: (e, t, r, a) => { e.filter || (e.filter = {}), e.filter[t] = r; }, convertFrom: (e, t, r) => { var a; if (t === "mode") return ((a = e.filter) == null ? void 0 : a.mode) || "client"; } }, He = { convertTo: (e, t, r, a) => { e.rowOption ? e.rowOption[t] = r : e.rowOption = { [t]: r }; }, convertFrom: (e, t, r) => { if (e.rowOption) { if (t === "customRowStyle") return e.rowOption.customRowStyle; if (t === "customCellStyle") return e.rowOption.customCellStyle; } return ""; } }; function Q(e, t, r) { const a = /* @__PURE__ */ new Map([ ["/converter/appearance.converter", ge], ["/converter/buttons.converter", be], ["/converter/property-editor.converter", ye], ["/converter/items-count.converter", je], ["/converter/type.converter", Fe], ["/converter/change-editor.converter", Te], ["/converter/change-formatter.converter", Ce], ["/converter/column-command.converter", xe], ["/converter/column-option.converter", Me], ["/converter/summary.converter", Oe], ["/converter/group.converter", Pe], ["/converter/form-group-label.converter", Ne], ["/converter/field-selector.converter", we], ["/converter/pagination.converter", De], ["/converter/row-number.converter", Ee], ["/converter/grid-selection.converter", $e], ["/converter/size.converter", Re], ["/converter/change-formatter-enum.converter", ke], ["/converter/grid-sort.converter", he], ["/converter/grid-filter.converter", Be], ["/converter/row-option.converter", He] ]), b = /* @__PURE__ */ new Map([ ["string", { type: "input-group", enableClear: !1 }], ["boolean", { type: "combo-list", textField: "name", valueField: "value", idField: "value", enableClear: !1, editable: !1, data: [ { value: !0, name: "是" }, { value: !1, name: "否" } ] }], ["enum", { type: "combo-list", maxHeight: 128, enableClear: !1, editable: !1 }], ["array", { type: "button-edit" }], ["number", { type: "number-spinner", placeholder: "" }], ["events-editor", { type: "events-editor", hide: !0 }] ]), v = ve(); function y(n, o) { return () => v.parseValueSchema(n, o); } function S(n, o, c) { return n.includes("visible") && o.visible !== void 0 ? typeof o.visible == "boolean" ? () => !!o.visible : o.visible === void 0 ? !0 : y(o.visible, c) : () => !0; } function x(n, o, c) { return n.includes("readonly") && o.readonly !== void 0 ? typeof o.readonly == "boolean" ? () => !!o.readonly : y(o.readonly, c) : () => !1; } function l(n, o) { const c = n.$converter || o; return typeof c == "string" && c && a.has(c) ? a.get(c) || null : c || null; } function f(n, o, c, p, m, F = "", M = "") { return Object.keys(n).map((g) => { const O = _(1), P = g, u = n[g], T = Object.keys(u), R = u.title, $ = u.type, j = b.get($) || { type: "input-group", enableClear: !1 }, E = u.editor ? Object.assign({}, j, u.editor) : Object.assign({}, j), B = S(T, u, o), k = x(T, u, o); E.readonly = E.readonly === void 0 ? k() : E.readonly; const H = u.type === "cascade" ? f(u.properties, o, c, p, m, F, M) : [], re = !0; let w = l(u, M); const ne = ue({ get() { if (O.value) { if (["class", "style"].find((ce) => ce === P) && !w && (w = a.get("/converter/appearance.converter") || null), w && w.convertFrom) return w.convertFrom(c, g, m, F); const D = c[g]; return Object.prototype.hasOwnProperty.call(u, "defaultValue") && (D === void 0 || typeof D == "string" && D === "") ? u.type === "boolean" ? u.defaultValue : u.defaultValue || "" : D; } return null; }, set(D) { O.value += 1, w && w.convertTo ? (w.convertTo(p, g, D, m, F), w.convertTo(c, g, D, m, F)) : (p[g] = D, c[g] = D); } }), { refreshPanelAfterChanged: oe, description: ie, isExpand: ae, parentPropertyID: se } = u, q = { propertyID: P, propertyName: R, propertyType: $, propertyValue: ne, editor: E, visible: B, readonly: k, cascadeConfig: H, hideCascadeTitle: re, refreshPanelAfterChanged: oe, description: ie, isExpand: ae, parentPropertyID: se }; return o[P] = q, q; }); } function i(n, o, c = {}) { const p = {}, m = e[n]; return m && m.categories ? Object.keys(m.categories).map((M) => { const C = m.categories[M], g = C == null ? void 0 : C.title, O = f(C.properties || {}, p, {}, c, o); return { categoryId: M, categoryName: g, properties: O }; }) : []; } function s(n, o, c, p, m = "") { const F = o.$ref.schema, M = o.$ref.converter, C = c[F], g = C.type, O = r(C), P = {}, u = e[g]; if (u && u.categories) { const T = u.categories[n], R = T == null ? void 0 : T.title; M && Object.keys(T.properties).forEach((E) => { T.properties[E].$converter = M; }); const $ = (T == null ? void 0 : T.properties) || {}, j = f($, P, O, C, p, m); return { categoryId: n, categoryName: R, properties: j }; } return { categoryId: n, categoryName: "", properties: [] }; } function d(n, o, c, p, m) { const F = n.type, M = r(n), C = {}; let g = m || e[F]; if (g && Object.keys(g).length === 0 && c && c.getPropConfig && (g = c.getPropConfig(p)), g && g.categories) { const O = []; return Object.keys(g.categories).map((P) => { const u = g.categories[P]; if (u.$ref) { O.push(s(P, u, n, o, p)); return; } const T = u == null ? void 0 : u.title, R = u == null ? void 0 : u.tabId, $ = u == null ? void 0 : u.tabName, j = u == null ? void 0 : u.hide, E = u == null ? void 0 : u.hideTitle, B = f(u.properties || {}, C, M, n, o, p, u.$converter), { setPropertyRelates: k } = u, H = u == null ? void 0 : u.parentPropertyID; O.push({ categoryId: P, categoryName: T, tabId: R, tabName: $, hide: j, properties: B, hideTitle: E, setPropertyRelates: k, parentPropertyID: H }); }), O; } return []; } return { getPropertyConfigBySchema: d, getPropertyConfigByType: i, propertyConverterMap: a }; } const U = {}, X = {}; Q(U, X, de); const Y = {}, Z = {}, { getSchemaByType: ct, resolveSchemaWithDefaultValue: Ae, resolveSchemaToProps: ut, mappingSchemaToProps: lt, setDesignerContext: ft } = V(Y, Z), K = {}, ee = {}; Q(K, ee, Ae); function qe(e, t, r = /* @__PURE__ */ new Map(), a = (y, S, x, l) => S, b = {}, v = (y) => y) { return I[t.title] = t, J[t.title] = a, U[t.title] = b, X[t.title] = v, Y[t.title] = t, Z[t.title] = a, K[t.title] = b, ee[t.title] = v, (y = {}, S = !0) => { if (!S) return me(y, r); const x = pe(y, t, r), l = Object.keys(e).reduce((f, i) => (f[i] = e[i].default, f), {}); return Object.assign(l, x); }; } function Le(e, t) { return { customClass: t.class, customStyle: t.style }; } const ze = /* @__PURE__ */ new Map([ ["appearance", Le] ]); function _e(e, t, r) { return t; } const Ge = "https://json-schema.org/draft/2020-12/schema", We = "https://farris-design.gitee.io/radio-button.schema.json", Ve = "radio-button", Ie = "A Farris Component", Je = "object", Qe = { id: { description: "The unique identifier for radio-button", type: "string" }, type: { description: "The type string of radio-button", type: "string", default: "radio-button" }, appearance: { description: "", type: "object", properties: { class: { type: "string" }, style: { type: "string" } }, default: {} }, binding: { description: "", type: "object", default: {} }, disable: { type: "string", default: !1 }, editable: { description: "", type: "boolean", default: !0 }, placeholder: { description: "", type: "string", default: "" }, readonly: { description: "", type: "boolean", default: !1 }, require: { description: "", type: "boolean", default: !1 }, tabindex: { description: "", type: "number", default: -1 }, visible: { description: "", type: "boolean", default: !0 } }, Ue = [ "id", "type" ], Xe = { $schema: Ge, $id: We, title: Ve, description: Ie, type: Je, properties: Qe, required: Ue }, Ye = "radio-button", Ze = "A Farris Component", Ke = "object", et = { basic: { description: "Basic Infomation", title: "基本信息", properties: { id: { description: "组件标识", title: "标识", type: "string", readonly: !0 }, type: { description: "组件类型", title: "控件类型", type: "select", editor: { type: "waiting for modification", enum: [] } } } } }, tt = { title: Ye, description: Ze, type: Ke, categories: et }, A = { /** * 单选组枚举数组 */ enumData: { type: Array, default: [{ text: "1", active: !0 }] }, /** * 后缀 */ suffixValue: { type: String, default: "" }, /** * 返回值 */ onSelectedValueChanged: { type: Function, default: () => { } } }, te = qe(A, Xe, ze, _e, tt), h = /* @__PURE__ */ G({ name: "FRadioButton", props: A, emits: ["selectedValueChanged"], setup(e, t) { const r = _(e.enumData); function a(v, y) { if (v.currentTarget.classList.value = "btn btn-secondary active", v.currentTarget.tagName.toLowerCase() === "label") { const { currentTarget: S } = v, x = S.parentElement; Array.from(x.querySelectorAll("label")).filter((f) => f !== S).forEach((f) => f.classList.remove("active")); } t.emit("selectedValueChanged", y); } function b(v) { return `${v.text}${e.suffixValue}`; } return le(() => e.enumData, (v, y) => { v !== y && (r.value = e.enumData); }), () => N("div", { class: "f-radio-button" }, [N("div", { class: ["farris-input-wrap"] }, [r.value.map((v, y) => N(W, null, [N("label", { class: v.active ? "btn btn-secondary active" : "btn btn-secondary", onClick: (S) => a(S, v) }, [N("span", { class: "f-radio-button-text" }, [b(v)])])]))])]); } }), rt = /* @__PURE__ */ G({ name: "FRadioButtonDesign", props: A, emits: [""], setup(e, t) { return () => N(W, null, null); } }); h.register = (e, t, r, a) => { e["radio-button"] = h, t["radio-button"] = te; }; h.registerDesigner = (e, t, r) => { e["radio-button"] = rt, t["radio-button"] = te; }; const dt = fe(h); export { h as RadioButton, dt as default, te as propsResolver, A as radioButtonProps };