ai-form-designer
Version:
vue3+adv的设计器,可视化开发页面表单
271 lines (270 loc) • 8.11 kB
JavaScript
import { defineComponent as B, computed as P, inject as O, createElementBlock as u, openBlock as r, createElementVNode as d, Fragment as c, renderList as k, createCommentVNode as U, toDisplayString as $, createVNode as g, unref as y, ref as C, watchEffect as T, createBlock as I, withCtx as M, createTextVNode as N } from "vue";
import { _ as j, p as R, n as F, m as q } from "./index-DwcJO-0a.js";
import { _ as A } from "./icon.vue_vue_type_script_setup_true_lang-DW206h_7.js";
const D = [
{ 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" }
], E = [
{ label: "change", value: "change" },
{ label: "blur", value: "blur" }
], x = ["string", "number", "url", "array", "email"], L = { class: "rule-item-main bg-white m-t-2 p-2 rounded border border-solid border-gray-200 hover:border-primary transition-all relative" }, z = {
key: 0,
class: "flex m-t-2 first:m-0"
}, G = {
class: "epic-attr-label",
title: "校验时机"
}, H = { class: "epic-attr-input" }, J = /* @__PURE__ */ B({
__name: "ERuleItem",
props: {
rule: {}
},
emits: ["change", "delete", "update:rule"],
setup(f, { emit: _ }) {
const p = _, m = f, a = P({
get() {
return m.rule;
},
set(e) {
p("update:rule", e);
}
}), s = O("pageManager", {}), o = P(() => Object.entries(s.funcs.value).filter(([e, v]) => typeof v == "function").map(([e]) => ({ label: e, value: e }))), V = [
{
type: "select",
label: "校验时机",
model: "trigger",
componentProps: { options: E, placeholder: "校验时机", multiple: !0, mode: "multiple" }
},
{
type: "switch",
label: "自定义规则",
model: "isValidator"
},
{
type: "select",
label: "校验函数",
model: "validator",
show() {
return !!a.value.isValidator;
},
componentProps: { options: o.value, placeholder: "校验函数" }
},
{
type: "select",
label: "类型",
model: "type",
show() {
return !a.value.isValidator;
},
componentProps: { options: D, placeholder: "类型" }
},
{
type: "input",
label: "正则校验",
model: "pattern",
show() {
return !a.value.isValidator;
},
componentProps: { placeholder: "正则校验" }
},
{
type: "number",
label: "字段长度",
model: "len",
show() {
return x.includes(a.value.type ?? "");
},
componentProps: { min: 0, placeholder: "字段长度" }
},
{
type: "number",
label: "最小长度",
model: "min",
show() {
return x.includes(a.value.type ?? "");
},
componentProps: { min: 0, placeholder: "最小长度" }
},
{
type: "number",
label: "最大长度",
model: "max",
show() {
return x.includes(a.value.type ?? "");
},
componentProps: { min: 0, placeholder: "最大长度" }
},
{
type: "input",
label: "校验信息",
model: "message",
componentProps: { placeholder: "校验信息" }
}
];
function t() {
const e = a.value;
e.isValidator ? (delete e.type, delete e.pattern, delete e.len, delete e.min, delete e.max) : delete e.validator, p("change", e);
}
function w() {
p("delete");
}
return (e, v) => (r(), u("div", L, [
(r(), u(c, null, k(V, (l, h) => (r(), u(c, { key: h }, [
!l.show || l.show() ? (r(), u("div", z, [
d("div", G, $(l.label), 1),
d("div", H, [
g(y(j), {
modelValue: a.value[l.model],
"onUpdate:modelValue": (n) => a.value[l.model] = n,
componentSchema: { ...l, noFormItem: !0 },
onChange: t
}, null, 8, ["modelValue", "onUpdate:modelValue", "componentSchema"])
])
])) : U("", !0)
], 64))), 64)),
d("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
}, [
g(y(A), { name: "icon--epic--delete-outline-rounded" })
])
]));
}
}), K = { class: "rule-item-main m-t-2 p-2 rounded border border-solid transition-all relative" }, Q = {
key: 0,
class: "flex m-t-2 first:m-0"
}, W = { class: "epic-attr-label" }, X = { class: "flex-1" }, ee = /* @__PURE__ */ B({
__name: "index",
props: {
ruleType: {
type: String,
default: "string"
},
modelValue: {
type: Array,
default: void 0
}
},
emits: ["update:modelValue"],
setup(f, { emit: _ }) {
const p = R.getComponent("button"), m = f, s = F(m, "modelValue", _), o = C({
required: !1,
message: "必填项",
type: m.ruleType,
trigger: ["change"]
}), V = [
{
type: "switch",
label: "必填项",
model: "required"
},
{
type: "select",
label: "校验时机",
model: "trigger",
show() {
return !!o.value.required;
},
componentProps: {
options: E,
placeholder: "校验时机",
multiple: !0,
mode: "multiple"
}
},
{
type: "select",
label: "类型",
model: "type",
show() {
return !!o.value.required;
},
componentProps: { options: D, placeholder: "类型" }
},
{
type: "input",
label: "校验信息",
model: "message",
show() {
return !!o.value.required;
},
componentProps: { placeholder: "校验信息" }
}
], t = C([]);
T(() => {
s.value && (t.value = [], s.value.forEach((l) => {
typeof l.required < "u" ? o.value = l : t.value.push(l);
}));
});
function w() {
t.value.push({
message: "",
type: m.ruleType,
trigger: ["change"]
}), e();
}
function e() {
if (o.value.required) {
s.value = q([...t.value, o.value]);
return;
}
if (t.value.length) {
s.value = q(t.value);
return;
}
s.value = void 0;
}
function v(l) {
t.value.splice(l, 1), e();
}
return (l, h) => (r(), u("div", null, [
d("div", K, [
(r(), u(c, null, k(V, (n, i) => (r(), u(c, { key: i }, [
!n.show || n.show() ? (r(), u("div", Q, [
d("div", W, $(n.label), 1),
d("div", X, [
g(y(j), {
modelValue: o.value[n.model],
"onUpdate:modelValue": (b) => o.value[n.model] = b,
componentSchema: { ...n, noFormItem: !0 },
onChange: e
}, null, 8, ["modelValue", "onUpdate:modelValue", "componentSchema"])
])
])) : U("", !0)
], 64))), 64))
]),
(r(!0), u(c, null, k(t.value, (n, i) => (r(), I(J, {
key: i,
rule: t.value[i],
"onUpdate:rule": (b) => t.value[i] = b,
onDelete: (b) => v(i),
onChange: e
}, null, 8, ["rule", "onUpdate:rule", "onDelete"]))), 128)),
g(y(p), {
class: "m-t-2",
onClick: w
}, {
default: M(() => h[0] || (h[0] = [
N(" 添加规则 ")
])),
_: 1,
__: [0]
})
]));
}
});
export {
ee as default
};