snowy-designer
Version:
基于Epic-Designer-Pro版本的设计器,可视化开发页面表单
141 lines (140 loc) • 3.9 kB
JavaScript
import { reactive as g, inject as A, watch as h, nextTick as m } from "vue";
/* empty css */
import "radix-vue";
import "clsx";
import "tailwind-merge";
import "lucide-vue-next";
import "../../../ui-kit/base-ui/src/shadch-ui/button/index.js";
import "@vueuse/core";
import "../../../ui-kit/base-ui/src/shadch-ui/toast/index.js";
import "vuedraggable";
import { deepClone as k, deepEqual as y } from "../../../utils/src/common/data.js";
import "../store/index.js";
import "lodash";
import "../../../utils/src/manager/pluginManager.js";
import "monaco-editor";
import "../../../utils/src/request/index.js";
function B(s = null) {
const f = g({}), d = A("pageManager");
let o = [], i = {};
h(
() => f,
(t) => {
m(() => {
for (const e in t)
t[e] !== i[e] && (o == null || o.forEach((r) => {
r.condition.conditions.map((n) => n.field).includes(e) && (a(r.condition) ? r.actions.forEach((n) => {
u(n);
}) : r.actions.filter((n) => n.reverseExecute).forEach((n) => {
u(n, !0);
}));
}));
i = k(t);
});
},
{ deep: !0 }
);
function a(t) {
return t.operator === "and" ? t.conditions.every((e) => {
if (!e.field) return !0;
const r = f[e.field];
return p(r, e);
}) : t.operator === "or" ? t.conditions.some((e) => {
if (!e.field) return !0;
const r = f[e.field];
return p(r, e);
}) : !0;
}
function p(t, e) {
if (!e.value) return !1;
switch (e.operator) {
case "eq":
return typeof t == "object" ? y(t, e.value) : t === e.value;
case "gt":
return (typeof t == "number" || typeof t == "string") && t > e.value;
case "gte":
return (typeof t == "number" || typeof t == "string") && t >= e.value;
case "in":
return c(t, e.value);
case "lt":
return (typeof t == "number" || typeof t == "string") && t < e.value;
case "lte":
return (typeof t == "number" || typeof t == "string") && t <= e.value;
case "neq":
return typeof t == "object" ? !y(t, e.value) : t !== e.value;
case "nin":
return !c(t, e.value);
case "notNull":
return t != null && t.length > 0;
case "null":
return t == null || t.length === 0;
default:
return !0;
}
}
function u(t, e = !1) {
if (!t.componentId || e && // 忽略对应的动作
["setValue"].includes(t.trigger ?? ""))
return;
const r = d.find(t.componentId);
if (r)
switch (t.trigger) {
case "disabled": {
r.setAttr("disabled", !e);
break;
}
case "enabled": {
r.setAttr("disabled", e);
break;
}
case "hide": {
r.setAttr("hidden", !e);
break;
}
case "notRequired": {
r.setAttr("required", e), s == null || s();
break;
}
case "readonly": {
r.setAttr("readOnly", !e);
break;
}
case "readWrite": {
r.setAttr("readOnly", e);
break;
}
case "required": {
r.setAttr("required", !e), s == null || s();
break;
}
case "show": {
r.setAttr("hidden", e);
break;
}
case "setValue":
r.setValue(t.value);
}
}
function b(t) {
o = t;
}
function c(t, e) {
if (Array.isArray(t) && Array.isArray(e)) {
const r = new Set(t);
return e.every((n) => r.has(n));
} else {
if (Array.isArray(t) && typeof e != "object")
return new Set(t).has(e);
if (typeof t == "string" && typeof e == "string")
return t.includes(e);
}
return !1;
}
return {
formData: f,
setLogicRules: b
};
}
export {
B as useFormLogic
};