UNPKG

epic-designer-gold

Version:

基于vue3的设计器,可视化开发页面表单

272 lines (271 loc) 8.36 kB
import { defineComponent as L, computed as C, inject as D, openBlock as n, createElementBlock as i, Fragment as g, renderList as k, createElementVNode as p, unref as c, toDisplayString as q, createVNode as y, createCommentVNode as M, ref as T, watchEffect as E, createBlock as F, withCtx as O, createTextVNode as I } from "vue"; import { p as N, a as B } from "./pluginManager-BCnrHPYv.js"; import { _ as U, g as A } from "./index-Dx4IQxp4.js"; import { _ as z } from "./icon.vue_vue_type_script_setup_true_lang-D3QdcReY.js"; import { u as $ } from "./index-B1s67XDZ.js"; const R = [ { label: "string", value: "string" }, { label: "number", value: "number" }, { label: "boolean", value: "boolean" }, { label: "method", value: "method" }, { label: "regexp", value: "regexp" }, { label: "integer", value: "integer" }, { label: "float", value: "float" }, { label: "array", value: "array" }, { label: "object", value: "object" }, // { label: 'enum', value: 'enum' }, { label: "date", value: "date" }, { label: "url", value: "url" }, { label: "hex", value: "hex" }, { label: "email", value: "email" }, { label: "any", value: "any" } ], j = [ { label: "change", value: "change" }, { label: "blur", value: "blur" } ], x = ["string", "number", "url", "array", "email"], G = { class: "rule-item-main bg-white m-t-2 p-2 rounded border border-solid border-gray-200 hover:border-primary transition-all relative" }, H = { key: 0, class: "flex m-t-2 first:m-0" }, J = ["title"], K = { class: "epic-attr-input" }, Q = /* @__PURE__ */ L({ __name: "ERuleItem", props: { rule: {} }, emits: ["change", "delete", "update:rule"], setup(f, { emit: _ }) { const { t: e } = $(), m = _, v = f, o = C({ get() { return v.rule; }, set(l) { m("update:rule", l); } }), s = D("pageManager", {}), r = C(() => Object.entries(s.funcs.value).filter(([l, h]) => typeof h == "function").map(([l]) => ({ label: l, value: l }))), V = [ { type: "select", label: e("validationTrigger"), model: "trigger", componentProps: { options: j, placeholder: e("validationTrigger"), multiple: !0, mode: "multiple" } }, { type: "switch", label: e("customRule"), model: "isValidator" }, { type: "select", label: e("validationFunction"), model: "validator", show() { return !!o.value.isValidator; }, componentProps: { options: r.value, placeholder: e("validationFunction") } }, { type: "select", label: e("type"), model: "type", show() { return !o.value.isValidator; }, componentProps: { options: R, placeholder: e("type") } }, { type: "input", label: e("regexValidation"), model: "pattern", show() { return !o.value.isValidator; }, componentProps: { placeholder: e("regexValidation") } }, { type: "number", label: e("fieldLength"), model: "len", show() { return x.includes(o.value.type ?? ""); }, componentProps: { min: 0, placeholder: e("fieldLength") } }, { type: "number", label: e("minLength"), model: "min", show() { return x.includes(o.value.type ?? ""); }, componentProps: { min: 0, placeholder: e("minLength") } }, { type: "number", label: e("maxLength"), model: "max", show() { return x.includes(o.value.type ?? ""); }, componentProps: { min: 0, placeholder: e("maxLength") } }, { type: "input", label: e("validationMessage"), model: "message", componentProps: { placeholder: e("validationMessage") } } ]; function a() { const l = o.value; l.isValidator ? (delete l.type, delete l.pattern, delete l.len, delete l.min, delete l.max) : delete l.validator, m("change", l); } function w() { m("delete"); } return (l, h) => (n(), i("div", G, [ (n(), i(g, null, k(V, (t, P) => (n(), i(g, { key: P }, [ !t.show || t.show() ? (n(), i("div", H, [ p("div", { class: "epic-attr-label", title: c(e)("validationTrigger") }, q(t.label), 9, J), p("div", K, [ y(c(U), { modelValue: o.value[t.model], "onUpdate:modelValue": (u) => o.value[t.model] = u, componentSchema: { ...t, noFormItem: !0 }, onChange: a }, null, 8, ["modelValue", "onUpdate:modelValue", "componentSchema"]) ]) ])) : M("", !0) ], 64))), 64)), p("div", { class: "rule-btn-delete absolute top-0 text-md right-0 transition-all w-24px h-24px cursor-pointer rounded-bl-2 flex justify-center items-center color-white", onClick: w }, [ y(c(z), { name: "icon--epic--delete-outline-rounded" }) ]) ])); } }), W = { class: "rule-item-main m-t-2 p-2 rounded border border-solid transition-all relative" }, X = { key: 0, class: "flex m-t-2 first:m-0" }, Y = { class: "epic-attr-label" }, Z = { class: "flex-1" }, oe = /* @__PURE__ */ L({ __name: "index", props: { ruleType: { type: String, default: "string" }, modelValue: { type: Array, default: void 0 } }, emits: ["update:modelValue"], setup(f, { emit: _ }) { const { t: e } = $(), m = N.getComponent("button"), v = f, s = A(v, "modelValue", _), r = T({ required: !1, message: e("required"), type: v.ruleType, trigger: ["change"] }), V = [ { type: "switch", label: e("required"), model: "required" }, { type: "select", label: e("validationTrigger"), model: "trigger", show() { return !!r.value.required; }, componentProps: { options: j, placeholder: e("validationTrigger"), multiple: !0, mode: "multiple" } }, { type: "select", label: e("type"), model: "type", show() { return !!r.value.required; }, componentProps: { options: R, placeholder: e("type") } }, { type: "input", label: e("validationMessage"), model: "message", show() { return !!r.value.required; }, componentProps: { placeholder: e("validationMessage") } } ], a = T([]); E(() => { s.value && (a.value = [], s.value.forEach((t) => { typeof t.required < "u" ? r.value = t : a.value.push(t); })); }); function w() { a.value.push({ message: "", type: v.ruleType, trigger: ["change"] }), l(); } function l() { if (r.value.required) { s.value = B([...a.value, r.value]); return; } if (a.value.length) { s.value = B(a.value); return; } s.value = void 0; } function h(t) { a.value.splice(t, 1), l(); } return (t, P) => (n(), i("div", null, [ p("div", W, [ (n(), i(g, null, k(V, (u, d) => (n(), i(g, { key: d }, [ !u.show || u.show() ? (n(), i("div", X, [ p("div", Y, q(u.label), 1), p("div", Z, [ y(c(U), { modelValue: r.value[u.model], "onUpdate:modelValue": (b) => r.value[u.model] = b, componentSchema: { ...u, noFormItem: !0 }, onChange: l }, null, 8, ["modelValue", "onUpdate:modelValue", "componentSchema"]) ]) ])) : M("", !0) ], 64))), 64)) ]), (n(!0), i(g, null, k(a.value, (u, d) => (n(), F(Q, { key: d, rule: a.value[d], "onUpdate:rule": (b) => a.value[d] = b, onDelete: (b) => h(d), onChange: l }, null, 8, ["rule", "onUpdate:rule", "onDelete"]))), 128)), y(c(m), { class: "m-t-2", onClick: w }, { default: O(() => [ I(q(c(e)("addRule")), 1) ]), _: 1 }) ])); } }); export { oe as default };