@jxyszb/jxy-form-designer 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/chunks/RuntimePreviewPanel-3704c8f8.js +1991 -0
- package/dist/chunks/compositeField-98c1b192.js +588 -0
- package/dist/chunks/dataSourceUrl-4b17feb8.js +55 -0
- package/dist/designer.js +3023 -0
- package/dist/index.js +45 -0
- package/dist/runtime.js +67 -0
- package/dist/schema.js +266 -0
- package/dist/style.css +1 -0
- package/dist/testing.js +1026 -0
- package/docs/field-suffix-extension.md +289 -0
- package/package.json +100 -0
- package/types/designer.d.ts +12 -0
- package/types/index.d.ts +345 -0
- package/types/runtime.d.ts +22 -0
- package/types/schema.d.ts +31 -0
- package/types/testing.d.ts +3 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { JXYFormDesigner as a } from "./designer.js";
|
|
2
|
+
import { useFormDesignerStore as x } from "./designer.js";
|
|
3
|
+
import { J as i, a as n, b as c } from "./chunks/RuntimePreviewPanel-3704c8f8.js";
|
|
4
|
+
import { createRequestDataSourceProvider as l } from "./runtime.js";
|
|
5
|
+
import { C as Y, S as g, c as D, a as T, d as _, e as C, b as E, m as h, n as q } from "./chunks/compositeField-98c1b192.js";
|
|
6
|
+
import { validateJxyFormSchema as M } from "./schema.js";
|
|
7
|
+
import "vue";
|
|
8
|
+
import "pinia";
|
|
9
|
+
import "element-plus";
|
|
10
|
+
import "@element-plus/icons-vue";
|
|
11
|
+
import "vuedraggable";
|
|
12
|
+
import "./chunks/dataSourceUrl-4b17feb8.js";
|
|
13
|
+
function N(e = {}) {
|
|
14
|
+
var o, t;
|
|
15
|
+
const m = {
|
|
16
|
+
dataSourceProvider: e.dataSourceProvider || (e.request ? l(e.request) : null),
|
|
17
|
+
components: {
|
|
18
|
+
fileUpload: ((o = e.components) == null ? void 0 : o.fileUpload) || null,
|
|
19
|
+
editor: ((t = e.components) == null ? void 0 : t.editor) || null
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
install(r) {
|
|
24
|
+
r.provide(i, m), r.component("JXYFormDesigner", a), r.component("JXYFormRuntime", n), r.component("JXYRuntimePreviewPanel", c);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
Y as COMPONENT_GROUPS,
|
|
30
|
+
a as JXYFormDesigner,
|
|
31
|
+
n as JXYFormRuntime,
|
|
32
|
+
c as JXYRuntimePreviewPanel,
|
|
33
|
+
g as SCHEMA_VERSION,
|
|
34
|
+
D as createDefaultSchema,
|
|
35
|
+
T as createFieldNode,
|
|
36
|
+
_ as createGridNode,
|
|
37
|
+
N as createJxyFormPlugin,
|
|
38
|
+
C as createNodeFromPaletteItem,
|
|
39
|
+
l as createRequestDataSourceProvider,
|
|
40
|
+
E as createTitleNode,
|
|
41
|
+
h as migrateSchema,
|
|
42
|
+
q as normalizeImport,
|
|
43
|
+
x as useFormDesignerStore,
|
|
44
|
+
M as validateJxyFormSchema
|
|
45
|
+
};
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { a as w, b as A, a as D } from "./chunks/RuntimePreviewPanel-3704c8f8.js";
|
|
2
|
+
import { a as n } from "./chunks/dataSourceUrl-4b17feb8.js";
|
|
3
|
+
import "vue";
|
|
4
|
+
import "element-plus";
|
|
5
|
+
import "@element-plus/icons-vue";
|
|
6
|
+
import "./chunks/compositeField-98c1b192.js";
|
|
7
|
+
function l(c) {
|
|
8
|
+
if (typeof c != "function")
|
|
9
|
+
throw new TypeError("createRequestDataSourceProvider 需要传入宿主 request 函数");
|
|
10
|
+
const e = /* @__PURE__ */ new Map();
|
|
11
|
+
async function s(a) {
|
|
12
|
+
const r = n(a);
|
|
13
|
+
if (!e.has(r)) {
|
|
14
|
+
const o = c({
|
|
15
|
+
url: r,
|
|
16
|
+
method: "post",
|
|
17
|
+
data: {},
|
|
18
|
+
headers: {
|
|
19
|
+
isNotLoading: !0,
|
|
20
|
+
repeatSubmit: !1
|
|
21
|
+
}
|
|
22
|
+
}).then((t) => {
|
|
23
|
+
const i = t == null ? void 0 : t.data;
|
|
24
|
+
if (!i || typeof i != "object" || Array.isArray(i))
|
|
25
|
+
throw new Error("DICT 总接口返回格式错误,data 必须是以 dictType 为 key 的对象");
|
|
26
|
+
return i;
|
|
27
|
+
}).catch((t) => {
|
|
28
|
+
throw e.delete(r), t;
|
|
29
|
+
});
|
|
30
|
+
e.set(r, o);
|
|
31
|
+
}
|
|
32
|
+
return e.get(r);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
async loadDictOptions(a, r) {
|
|
36
|
+
const t = (await s(r))[a];
|
|
37
|
+
return Array.isArray(t) ? t : (console.warn(`[JXYRuntime] DICT 总接口未返回字典类型:${a}`), []);
|
|
38
|
+
},
|
|
39
|
+
async loadApiOptions(a, r = {}) {
|
|
40
|
+
const o = n(a), t = await c({
|
|
41
|
+
url: o,
|
|
42
|
+
method: "post",
|
|
43
|
+
data: r,
|
|
44
|
+
headers: {
|
|
45
|
+
isNotLoading: !0,
|
|
46
|
+
repeatSubmit: !1
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
if (!Array.isArray(t == null ? void 0 : t.data))
|
|
50
|
+
throw new Error("API 数据源返回格式错误,data 必须是选项数组");
|
|
51
|
+
return t.data;
|
|
52
|
+
},
|
|
53
|
+
clearDictCache(a) {
|
|
54
|
+
a ? e.delete(a) : e.clear();
|
|
55
|
+
},
|
|
56
|
+
// 兼容现有 provider 约定;Runtime 不依赖该方法。
|
|
57
|
+
listApiSources() {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
w as JXYFormRuntime,
|
|
64
|
+
A as JXYRuntimePreviewPanel,
|
|
65
|
+
l as createRequestDataSourceProvider,
|
|
66
|
+
D as default
|
|
67
|
+
};
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { S as h, N as S, x as A, U as E, D as v, V as b, y as O, g as x, f as C, h as d, z as m, A as T, E as _ } from "./chunks/compositeField-98c1b192.js";
|
|
2
|
+
import { W as ie, G as te, C as ae, K as se, B as re, F as pe, J as ue, I as ne, L as le, X as oe, H as ce, P as fe, T as de, u as ye, q as $e, p as he, c as Se, o as Ae, t as Ee, a as me, d as Te, e as _e, v as ge, w as Ie, s as Fe, b as Ne, Q as Ve, k as Pe, M as De, O as ve, m as be, i as Oe, n as xe, j as Ce, l as Re, R as Le, r as Ue, Y as Ke } from "./chunks/compositeField-98c1b192.js";
|
|
3
|
+
import { v as F } from "./chunks/dataSourceUrl-4b17feb8.js";
|
|
4
|
+
import { a as ke } from "./chunks/dataSourceUrl-4b17feb8.js";
|
|
5
|
+
const g = ["blur", "change"];
|
|
6
|
+
function Q(e, a = {}) {
|
|
7
|
+
const s = a.mode || "publish", p = a.componentRegistry || {}, i = [], t = [];
|
|
8
|
+
return !e || typeof e != "object" ? (i.push("schema 不是有效对象"), { valid: !1, errors: i, warnings: t }) : (R(e, i), L(e, t), U(e, i), K(e, i), Array.isArray(e.nodes) ? N(e.nodes, i, t, s, !1) : i.push("nodes 不是数组"), M(e, i), B(e, i), G(e, i, t), z(e, i), w(e, i, t), W(e, i, p), {
|
|
9
|
+
valid: i.length === 0,
|
|
10
|
+
errors: i,
|
|
11
|
+
warnings: t
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function R(e, a) {
|
|
15
|
+
if (!e.schemaVersion) {
|
|
16
|
+
a.push("schemaVersion 缺失");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
e.schemaVersion !== h && a.push(`schemaVersion 不支持:${e.schemaVersion},当前支持 ${h}`);
|
|
20
|
+
}
|
|
21
|
+
function L(e, a) {
|
|
22
|
+
e.meta && (e.meta.formName || a.push("表单名称(meta.formName)为空"));
|
|
23
|
+
}
|
|
24
|
+
function U(e, a) {
|
|
25
|
+
if (!e.config)
|
|
26
|
+
return;
|
|
27
|
+
const s = e.config.suffixWidth;
|
|
28
|
+
s !== void 0 && (!Number.isFinite(s) || s < 0) && a.push("表单配置:suffixWidth 必须是大于等于 0 的数字");
|
|
29
|
+
}
|
|
30
|
+
function K(e, a) {
|
|
31
|
+
var u;
|
|
32
|
+
const p = (Array.isArray(e.dataSources) ? e.dataSources : []).some((r) => (r == null ? void 0 : r.type) === "dict"), i = ((u = e.dataSourceConfig) == null ? void 0 : u.dictUrl) || "", t = F(i, { required: p });
|
|
33
|
+
t.valid || a.push(`DICT 总接口地址:${t.message}`);
|
|
34
|
+
}
|
|
35
|
+
function N(e, a, s, p, i) {
|
|
36
|
+
e.forEach((t, u) => {
|
|
37
|
+
if (!t.nodeType || !S.includes(t.nodeType)) {
|
|
38
|
+
a.push(`节点 #${u} 的 nodeType "${t.nodeType}" 非法,支持:${S.join(", ")}`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
t.nodeType === "field" ? Y(t, a, s, u) : t.nodeType === "title" ? j(t, s, u) : t.nodeType === "grid" && (i ? a.push(`节点 "${t.id}":grid 内不允许再嵌套 grid`) : q(t, a, s, p, u));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function Y(e, a, s, p) {
|
|
45
|
+
var u, r, n, o, c, y, $;
|
|
46
|
+
const i = `字段 "${e.id || "#" + p}"`;
|
|
47
|
+
if (e.prop || a.push(`${i}:缺少字段标识(prop)`), e.label || (e.prop ? s.push(`${i}(${e.prop}):label 为空`) : a.push(`${i}:缺少 label`)), (!e.type || !A.includes(e.type)) && a.push(`${i}:type "${e.type}" 不支持,支持:${A.join(", ")}`), !e.placeholder && !["custom", "addressSelector", "linkedSelectList"].includes(e.type) && !E.includes(e.type) && s.push(`${i}(${e.prop || ""}):placeholder 为空`), e.required || s.push(`${i}(${e.prop || ""}):未配置 required`), e.hidden && e.required && s.push(`${i}(${e.prop || ""}):hidden 与 required 同时存在`), v.includes(e.type) && !e.dataSourceId && s.push(`${i}(${e.prop || ""}):选择型字段未绑定数据源`), E.includes(e.type)) {
|
|
48
|
+
const l = e.props || {};
|
|
49
|
+
(!l.fileType || !Array.isArray(l.fileType) || l.fileType.length === 0) && s.push(`${i}(${e.prop || ""}):上传组件未配置 fileType 限制`);
|
|
50
|
+
}
|
|
51
|
+
if (e.defaultValue !== void 0 && e.defaultValue !== "" && e.defaultValue !== null && (["daterange", "datetimerange", "checkBox", "cascader", "file", "dragFile", "imgFile", "linkedSelectList"].includes(e.type) && !Array.isArray(e.defaultValue) && s.push(`${i}(${e.prop || ""}):defaultValue 类型疑似不匹配(期望数组)`), e.type === "addressSelector" && (typeof e.defaultValue != "object" || Array.isArray(e.defaultValue)) && s.push(`${i}(${e.prop || ""}):defaultValue 类型疑似不匹配(期望地址对象)`)), e.type === "linkedSelectList") {
|
|
52
|
+
const l = Number(((u = e.props) == null ? void 0 : u.minItems) ?? 1), f = Number(((r = e.props) == null ? void 0 : r.maxItems) ?? 5);
|
|
53
|
+
(l < 1 || f < 1 || l > f) && a.push(`${i}(${e.prop || ""}):关联选择列表的 minItems/maxItems 配置无效`), I(e, i, a), (n = e.props) != null && n.addButtonAlign && !["left", "center", "right"].includes(e.props.addButtonAlign) && a.push(`${i}(${e.prop || ""}):新增按钮对齐方式不支持`);
|
|
54
|
+
}
|
|
55
|
+
e.type === "addressSelector" && I(e, i, a), ((c = (o = e.extensions) == null ? void 0 : o.suffix) == null ? void 0 : c.enabled) !== void 0 && typeof e.extensions.suffix.enabled != "boolean" && a.push(`${i}:extensions.suffix.enabled 必须是布尔值`);
|
|
56
|
+
const t = ($ = (y = e.extensions) == null ? void 0 : y.suffix) == null ? void 0 : $.width;
|
|
57
|
+
t != null && t !== "" && (!Number.isFinite(t) || t < 0) && a.push(`${i}:extensions.suffix.width 必须是大于等于 0 的数字`), Array.isArray(e.validations) && e.validations.forEach((l, f) => {
|
|
58
|
+
if ((!l.type || !b.includes(l.type)) && a.push(`${i} validations[${f}]:type "${l.type}" 不支持`), l.message || s.push(`${i} validations[${f}]:message 为空`), !k(l.trigger)) {
|
|
59
|
+
const D = Array.isArray(l.trigger) ? l.trigger.join(",") : l.trigger;
|
|
60
|
+
a.push(`${i} validations[${f}]:trigger "${D}" 不支持,支持:blur、change、blur+change`);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function I(e, a, s) {
|
|
65
|
+
const p = e.type === "addressSelector";
|
|
66
|
+
(p ? [
|
|
67
|
+
["provinceProp", "省份"],
|
|
68
|
+
["cityProp", "城市"],
|
|
69
|
+
["countyProp", "区县"],
|
|
70
|
+
["detailAddressProp", "详细地址"]
|
|
71
|
+
] : [
|
|
72
|
+
["parentValueProp", "一级值"],
|
|
73
|
+
["childValueProp", "二级值"]
|
|
74
|
+
]).forEach(([u, r]) => {
|
|
75
|
+
var o;
|
|
76
|
+
const n = (o = e.props) == null ? void 0 : o[u];
|
|
77
|
+
n !== void 0 && (typeof n != "string" || !n.trim()) && s.push(`${a}(${e.prop || ""}):${r}字段标识(prop)不能为空`), O(n) && s.push(`${a}(${e.prop || ""}):${r}字段标识(prop)“${n}”不安全`);
|
|
78
|
+
});
|
|
79
|
+
const t = Object.values(p ? x(e) : C(e));
|
|
80
|
+
new Set(t).size !== t.length && s.push(`${a}(${e.prop || ""}):内部字段标识(prop)不能重复`);
|
|
81
|
+
}
|
|
82
|
+
function k(e) {
|
|
83
|
+
return e == null || e === "" ? !0 : typeof e == "string" ? g.includes(e) : Array.isArray(e) ? e.length > 0 && e.every((a) => g.includes(a)) : !1;
|
|
84
|
+
}
|
|
85
|
+
function j(e, a, s) {
|
|
86
|
+
e.title || a.push(`标题节点 "${e.id || "#" + s}":标题文本为空`);
|
|
87
|
+
}
|
|
88
|
+
function q(e, a, s, p, i) {
|
|
89
|
+
const t = `栅格 "${e.id || "#" + i}"`;
|
|
90
|
+
if (!Array.isArray(e.columns) || e.columns.length === 0) {
|
|
91
|
+
a.push(`${t}:columns 为空`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
let u = 0;
|
|
95
|
+
e.columns.forEach((r, n) => {
|
|
96
|
+
const o = `${t} column[${n}]`;
|
|
97
|
+
typeof r.span != "number" || r.span < 1 || r.span > 24 ? a.push(`${o}:span "${r.span}" 非法(1-24)`) : u += r.span, Array.isArray(r.children) && r.children.length > 0 && N(r.children, a, s, p, !0);
|
|
98
|
+
}), u !== 24 && (p === "publish" ? a.push(`${t}:column span 合计 ${u},发布时必须为 24`) : s.push(`${t}:column span 合计 ${u},不等于 24`));
|
|
99
|
+
}
|
|
100
|
+
function M(e, a) {
|
|
101
|
+
const s = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Set();
|
|
102
|
+
function i(t) {
|
|
103
|
+
t && (s.has(t) && p.add(t), s.add(t));
|
|
104
|
+
}
|
|
105
|
+
V(e.nodes, i), Array.isArray(e.dataSources) && e.dataSources.forEach((t) => i(t.id)), Array.isArray(e.reactions) && e.reactions.forEach((t) => i(t.id)), p.forEach((t) => {
|
|
106
|
+
a.push(`id 重复:${t}`);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function V(e, a) {
|
|
110
|
+
Array.isArray(e) && e.forEach((s) => {
|
|
111
|
+
a(s.id), s.nodeType === "grid" && Array.isArray(s.columns) && s.columns.forEach((p) => {
|
|
112
|
+
a(p.id), V(p.children, a);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function B(e, a) {
|
|
117
|
+
const s = d(e), p = {};
|
|
118
|
+
s.forEach((i) => {
|
|
119
|
+
i.prop && (p[i.prop] ? a.push(`字段标识(prop)重复:${i.prop}(节点 ${p[i.prop]} 与 ${i.id})`) : p[i.prop] = i.id);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
function G(e, a, s) {
|
|
123
|
+
if (!Array.isArray(e.dataSources))
|
|
124
|
+
return;
|
|
125
|
+
const p = /* @__PURE__ */ new Set();
|
|
126
|
+
e.dataSources.forEach((i, t) => {
|
|
127
|
+
const u = `数据源 "${i.id || "#" + t}"`;
|
|
128
|
+
if (i.id && p.has(i.id) && a.push(`${u}:id 重复`), i.id && p.add(i.id), !i.type || !m.includes(i.type)) {
|
|
129
|
+
a.push(`${u}:类型 "${i.type}" 非法,支持:${m.join(", ")}`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (i.type === "static" && (Array.isArray(i.options) ? P(i.options, `${u} options`, a) : a.push(`${u}:static 类型缺少 options 数组`)), i.type === "dict" && (i.dictType || a.push(`${u}:dict 类型缺少 dictType`)), i.type === "api") {
|
|
133
|
+
const r = F(i.url, { required: !0 });
|
|
134
|
+
if (!r.valid) {
|
|
135
|
+
const n = i.apiKey ? `(旧 apiKey:${i.apiKey})` : "";
|
|
136
|
+
a.push(`${u}:API 地址${n}${r.message}`);
|
|
137
|
+
}
|
|
138
|
+
i.apiKey && s.push(`${u}:仍包含旧 apiKey“${i.apiKey}”,配置有效 URL 后将自动移除`);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function P(e, a, s) {
|
|
143
|
+
e.forEach((p, i) => {
|
|
144
|
+
const t = `${a}[${i}]`;
|
|
145
|
+
if (!p || typeof p != "object") {
|
|
146
|
+
s.push(`${t}:选项必须是对象`);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
(p.label === void 0 || p.label === null) && s.push(`${t}:缺少 label`), (p.value === void 0 || p.value === null) && s.push(`${t}:缺少 value`), p.children !== void 0 && (Array.isArray(p.children) ? P(p.children, `${t}.children`, s) : s.push(`${t}:children 必须是数组`));
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function z(e, a, s) {
|
|
153
|
+
if (!Array.isArray(e.dataSources))
|
|
154
|
+
return;
|
|
155
|
+
const p = new Set(e.dataSources.map((t) => t.id));
|
|
156
|
+
d(e).forEach((t) => {
|
|
157
|
+
t.dataSourceId && !p.has(t.dataSourceId) && a.push(`字段 "${t.id}"(${t.prop || ""}):引用的数据源 "${t.dataSourceId}" 不存在`);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function w(e, a, s) {
|
|
161
|
+
if (!Array.isArray(e.reactions) || e.reactions.length === 0)
|
|
162
|
+
return;
|
|
163
|
+
const p = d(e), i = new Set(p.map((t) => t.prop).filter(Boolean));
|
|
164
|
+
e.reactions.forEach((t, u) => {
|
|
165
|
+
const r = `联动规则 "${t.id || "#" + u}"`;
|
|
166
|
+
t.sourceField ? i.has(t.sourceField) || a.push(`${r}:sourceField "${t.sourceField}" 不存在`) : a.push(`${r}:sourceField 为空`), !t.condition || !t.condition.type ? s.push(`${r}:condition 缺失,默认 always`) : T.includes(t.condition.type) || a.push(`${r}:condition.type "${t.condition.type}" 非法,支持:${T.join(", ")}`), !Array.isArray(t.effects) || t.effects.length === 0 ? a.push(`${r}:effects 为空`) : t.effects.forEach((n, o) => {
|
|
167
|
+
const c = `${r} effects[${o}]`;
|
|
168
|
+
(!n.type || !_.includes(n.type)) && a.push(`${c}:type "${n.type}" 非法,支持:${_.join(", ")}`), n.targetField ? i.has(n.targetField) || a.push(`${c}:targetField "${n.targetField}" 不存在`) : a.push(`${c}:targetField 为空`);
|
|
169
|
+
});
|
|
170
|
+
}), H(e.reactions, a);
|
|
171
|
+
}
|
|
172
|
+
function H(e, a) {
|
|
173
|
+
const s = {}, p = /* @__PURE__ */ new Set();
|
|
174
|
+
e.forEach((r) => {
|
|
175
|
+
!r.sourceField || !Array.isArray(r.effects) || (p.add(r.sourceField), r.effects.forEach((n) => {
|
|
176
|
+
n.targetField && (p.add(n.targetField), s[r.sourceField] || (s[r.sourceField] = /* @__PURE__ */ new Set()), s[r.sourceField].add(n.targetField));
|
|
177
|
+
}));
|
|
178
|
+
});
|
|
179
|
+
const i = {}, t = {};
|
|
180
|
+
function u(r) {
|
|
181
|
+
if (t[r])
|
|
182
|
+
return !0;
|
|
183
|
+
if (i[r])
|
|
184
|
+
return !1;
|
|
185
|
+
i[r] = !0, t[r] = !0;
|
|
186
|
+
const n = s[r];
|
|
187
|
+
if (n) {
|
|
188
|
+
for (const o of n)
|
|
189
|
+
if (s[o] && u(o))
|
|
190
|
+
return !0;
|
|
191
|
+
}
|
|
192
|
+
return t[r] = !1, !1;
|
|
193
|
+
}
|
|
194
|
+
for (const r of p)
|
|
195
|
+
if (s[r] && u(r)) {
|
|
196
|
+
a.push(`联动规则存在循环依赖,涉及字段:${r}`);
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function W(e, a, s) {
|
|
201
|
+
d(e).forEach((i) => {
|
|
202
|
+
if (i.type === "custom") {
|
|
203
|
+
if (!i.componentKey) {
|
|
204
|
+
a.push(`字段 "${i.id}"(${i.prop || ""}):custom 类型缺少 componentKey`);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
Object.keys(s).length > 0 && !s[i.componentKey] && a.push(`字段 "${i.id}"(${i.prop || ""}):componentKey "${i.componentKey}" 未在 componentRegistry 中注册`);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
export {
|
|
212
|
+
ie as ADDRESS_VALUE_KEY_DEFAULTS,
|
|
213
|
+
te as BASIC_TYPES,
|
|
214
|
+
ae as COMPONENT_GROUPS,
|
|
215
|
+
T as CONDITION_TYPES,
|
|
216
|
+
se as CUSTOM_TYPES,
|
|
217
|
+
v as DATA_SOURCE_FIELD_TYPES,
|
|
218
|
+
re as DATA_SOURCE_SCHEMA_VERSION,
|
|
219
|
+
m as DATA_SOURCE_TYPES,
|
|
220
|
+
_ as EFFECT_TYPES,
|
|
221
|
+
pe as EXTENSION_FIELD_SCHEMA_VERSION,
|
|
222
|
+
ue as EXTENSION_TYPES,
|
|
223
|
+
ne as LAYOUT_TYPES,
|
|
224
|
+
le as LEGACY_SCHEMA_VERSION,
|
|
225
|
+
oe as LINKED_VALUE_KEY_DEFAULTS,
|
|
226
|
+
S as NODE_TYPES,
|
|
227
|
+
h as SCHEMA_VERSION,
|
|
228
|
+
ce as SELECTION_TYPES,
|
|
229
|
+
A as SUPPORTED_FIELD_TYPES,
|
|
230
|
+
E as UPLOAD_TYPES,
|
|
231
|
+
b as VALIDATION_TYPES,
|
|
232
|
+
ke as assertDataSourceUrl,
|
|
233
|
+
d as collectAllFieldNodes,
|
|
234
|
+
fe as collectAllIds,
|
|
235
|
+
de as collectAllProps,
|
|
236
|
+
ye as createApiDataSource,
|
|
237
|
+
$e as createApiParam,
|
|
238
|
+
he as createColumnNode,
|
|
239
|
+
Se as createDefaultSchema,
|
|
240
|
+
Ae as createDesignerId,
|
|
241
|
+
Ee as createDictDataSource,
|
|
242
|
+
me as createFieldNode,
|
|
243
|
+
Te as createGridNode,
|
|
244
|
+
_e as createNodeFromPaletteItem,
|
|
245
|
+
ge as createReaction,
|
|
246
|
+
Ie as createReactionEffect,
|
|
247
|
+
Fe as createStaticDataSource,
|
|
248
|
+
Ne as createTitleNode,
|
|
249
|
+
Ve as deduplicateIds,
|
|
250
|
+
Pe as findNodeById,
|
|
251
|
+
x as getAddressValueKeys,
|
|
252
|
+
De as getDefaultProps,
|
|
253
|
+
ve as getDefaultValue,
|
|
254
|
+
C as getLinkedValueKeys,
|
|
255
|
+
O as isUnsafeCompositeValueKey,
|
|
256
|
+
be as migrateSchema,
|
|
257
|
+
Oe as normalizeAddressValue,
|
|
258
|
+
xe as normalizeImport,
|
|
259
|
+
Ce as normalizeLinkedValue,
|
|
260
|
+
Re as normalizeSortOrder,
|
|
261
|
+
Le as reassignAllIds,
|
|
262
|
+
Ue as removeNodeById,
|
|
263
|
+
Ke as resolveCompositeValueKey,
|
|
264
|
+
F as validateDataSourceUrl,
|
|
265
|
+
Q as validateJxyFormSchema
|
|
266
|
+
};
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.no-options[data-v-dcf61f35],.no-options[data-v-2545dad2]{font-size:12px;color:#c0c4cc}.jxy-host-component-missing[data-v-1e52dc63]{padding:8px 12px;border:1px solid var(--el-color-warning-light-5);border-radius:4px;color:var(--el-color-warning);background:var(--el-color-warning-light-9);font-size:12px}.jxy-editor-field[data-v-620014d1]{width:100%}.jxy-editor-readonly[data-v-620014d1]{border:1px solid #dcdfe6;border-radius:4px;padding:8px 12px;font-size:14px;color:#606266;background:#f5f7fa;overflow:auto;line-height:1.6}.jxy-editor-missing[data-v-620014d1]{padding:8px 12px;border:1px solid var(--el-color-warning-light-5);border-radius:4px;color:var(--el-color-warning);background:var(--el-color-warning-light-9);font-size:12px}.jxy-custom-field[data-v-47936676]{width:100%}.custom-not-found[data-v-47936676]{display:flex;align-items:center;gap:6px;padding:8px 12px;background:#fdf6ec;border:1px solid #f5dab1;border-radius:4px;font-size:12px;color:#e6a23c}.custom-not-found code[data-v-47936676]{background:rgba(0,0,0,.06);padding:1px 4px;border-radius:2px;font-family:monospace}.jxy-address-selector[data-v-7143c4fd]{display:flex;flex-direction:column;gap:10px;width:100%}.jxy-address-selector__selects[data-v-7143c4fd]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.jxy-address-selector[data-v-7143c4fd] .el-select,.jxy-address-selector[data-v-7143c4fd] .el-input{width:100%}@media (max-width: 768px){.jxy-address-selector__selects[data-v-7143c4fd]{grid-template-columns:1fr}}.jxy-integer-uppercase-input[data-v-23d44c1e]{display:flex;flex-direction:column;align-items:flex-start;gap:10px;width:100%}.jxy-integer-uppercase-input[data-v-23d44c1e] .el-input{width:100%}.jxy-integer-uppercase-input__preview[data-v-23d44c1e]{min-height:32px;padding:6px 12px;box-sizing:border-box;color:var(--el-color-primary);font-weight:600;line-height:20px;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);border-radius:var(--el-border-radius-base)}.jxy-linked-select-list[data-v-dc09a2f0]{display:flex;flex-direction:column;align-items:flex-start;gap:10px;width:100%}.jxy-linked-select-list__row[data-v-dc09a2f0]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr)) auto;align-items:center;gap:10px;width:100%}.jxy-linked-select-list[data-v-dc09a2f0] .el-select{width:100%;min-width:0}.jxy-linked-select-list__remove[data-v-dc09a2f0],.jxy-linked-select-list__add[data-v-dc09a2f0]{height:auto;padding:0;font-weight:500}.jxy-linked-select-list__add--left[data-v-dc09a2f0]{align-self:flex-start}.jxy-linked-select-list__add--center[data-v-dc09a2f0]{align-self:center}.jxy-linked-select-list__add--right[data-v-dc09a2f0]{align-self:flex-end}@media (max-width: 768px){.jxy-linked-select-list__row[data-v-dc09a2f0]{grid-template-columns:1fr}}.jxy-field-suffix[data-v-8626e24d]{flex:0 0 auto;min-width:0;box-sizing:border-box}.jxy-field-item[data-v-6a13f76c]{width:100%}.jxy-field-content[data-v-6a13f76c]{width:100%;min-width:0}.jxy-field-content--with-suffix[data-v-6a13f76c]{display:flex;align-items:flex-start;gap:8px}.jxy-field-control[data-v-6a13f76c]{flex:1;min-width:0}.jxy-field-unknown[data-v-6a13f76c]{padding:4px 0}.jxy-field-item--composite.is-error[data-v-6a13f76c] .el-input__wrapper,.jxy-field-item--composite.is-error[data-v-6a13f76c] .el-select__wrapper{box-shadow:0 0 0 1px var(--el-border-color) inset!important}.jxy-field-item--composite.is-error[data-v-6a13f76c] .jxy-extension-control--invalid .el-input__wrapper,.jxy-field-item--composite.is-error[data-v-6a13f76c] .jxy-extension-control--invalid .el-select__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset!important}.jxy-title-node[data-v-a3dadfb8]{padding:8px 0 4px;border-bottom:1px solid #ebeef5;margin-bottom:16px}.jxy-title-text[data-v-a3dadfb8]{margin:0;color:#303133;font-weight:600;line-height:1.4}.jxy-title-level-1 .jxy-title-text[data-v-a3dadfb8]{font-size:20px}.jxy-title-level-2 .jxy-title-text[data-v-a3dadfb8]{font-size:17px}.jxy-title-level-3 .jxy-title-text[data-v-a3dadfb8]{font-size:15px}.jxy-title-level-4 .jxy-title-text[data-v-a3dadfb8]{font-size:13px}.jxy-title-description[data-v-a3dadfb8]{margin:4px 0 0;font-size:12px;color:#909399;line-height:1.5}.jxy-grid-node[data-v-df3469b9]{margin-bottom:0}.jxy-grid-col[data-v-df3469b9]{padding:0}.jxy-form-runtime[data-v-c8c6eb87],.jxy-runtime-form[data-v-c8c6eb87]{width:100%}.jxy-runtime-form[data-v-c8c6eb87] .el-form-item{margin-bottom:18px}.jxy-runtime-form[data-v-c8c6eb87] .el-date-editor,.jxy-runtime-form[data-v-c8c6eb87] .el-select,.jxy-runtime-form[data-v-c8c6eb87] .el-cascader,.jxy-runtime-form[data-v-c8c6eb87] .el-input-number{width:100%}.jxy-runtime-form[data-v-c8c6eb87] .el-input.is-disabled .el-input__inner,.jxy-runtime-form[data-v-c8c6eb87] .el-textarea.is-disabled .el-textarea__inner,.jxy-runtime-form[data-v-c8c6eb87] .el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-text-color-regular);-webkit-text-fill-color:var(--el-text-color-regular)}.jxy-runtime-preview-panel[data-v-1eae2f9c]{width:100%}.runtime-preview-form[data-v-1eae2f9c]{min-width:0}.runtime-preview-actions[data-v-1eae2f9c]{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}.runtime-preview-divider[data-v-1eae2f9c]{margin:18px 0}.runtime-preview-data[data-v-1eae2f9c]{margin:0;padding:12px;background:#f5f7fa;border:1px solid #ebeef5;border-radius:4px;font-size:12px;font-family:Cascadia Code,Fira Code,Consolas,monospace;color:#476582;line-height:1.6;max-height:300px;overflow:auto;white-space:pre}.jxy-runtime-preview-panel.is-dialog-layout[data-v-1eae2f9c]{display:flex;align-items:flex-start;gap:24px}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-form[data-v-1eae2f9c]{flex:0 0 calc(70% - 12px);max-width:calc(70% - 12px)}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-side[data-v-1eae2f9c]{flex:0 0 calc(30% - 12px);max-width:calc(30% - 12px);min-width:260px;padding-left:20px;border-left:1px solid #ebeef5;box-sizing:border-box;position:sticky;top:0}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-divider[data-v-1eae2f9c]{display:none}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-actions[data-v-1eae2f9c]{margin-bottom:12px}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-actions .el-button[data-v-1eae2f9c]{margin-left:0}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-data[data-v-1eae2f9c]{max-height:calc(100vh - 190px)}@media (max-width: 960px){.jxy-runtime-preview-panel.is-dialog-layout[data-v-1eae2f9c]{display:block}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-form[data-v-1eae2f9c],.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-side[data-v-1eae2f9c]{max-width:none;min-width:0}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-side[data-v-1eae2f9c]{margin-top:16px;padding-left:0;border-left:0;position:static}.jxy-runtime-preview-panel.is-dialog-layout .runtime-preview-divider[data-v-1eae2f9c]{display:block}}.jxy-designer-toolbar[data-v-d6e3dd8d]{display:flex;align-items:center;justify-content:space-between;height:48px;padding:0 12px;background:#fff;border-bottom:1px solid #e4e7ed;flex-shrink:0}.toolbar-left[data-v-d6e3dd8d],.toolbar-right[data-v-d6e3dd8d]{display:flex;align-items:center;gap:4px}.toolbar-center[data-v-d6e3dd8d]{flex:1;text-align:center}.toolbar-title[data-v-d6e3dd8d]{font-size:15px;font-weight:600;color:#303133}.jxy-publish-error-box .jxy-publish-error-list{margin:0;padding-left:20px;line-height:1.8;text-align:left;white-space:normal}.jxy-component-palette[data-v-20210c01]{padding:8px 0}.palette-group[data-v-20210c01]{margin-bottom:8px}.palette-group-title[data-v-20210c01]{padding:8px 16px 4px;font-size:12px;font-weight:600;color:#909399;text-transform:uppercase;letter-spacing:.5px}.palette-item-list[data-v-20210c01]{display:flex;flex-wrap:wrap;padding:0 8px;gap:6px}.palette-item[data-v-20210c01]{display:flex;align-items:center;gap:4px;padding:6px 10px;border:1px solid #e4e7ed;border-radius:4px;cursor:grab;font-size:12px;color:#606266;background:#fafafa;transition:all .2s;user-select:none;width:calc(50% - 3px);box-sizing:border-box}.palette-item[data-v-20210c01]:hover{border-color:#409eff;color:#409eff;background:#ecf5ff}.palette-item[data-v-20210c01]:active{cursor:grabbing}.palette-item-icon[data-v-20210c01]{font-size:14px}.palette-item-label[data-v-20210c01]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.field-preview[data-v-5338ecd2]{width:100%}.preview-radio[data-v-5338ecd2],.preview-checkbox[data-v-5338ecd2]{display:flex;gap:12px;padding:4px 0}.preview-upload[data-v-5338ecd2]{padding:4px 0}.preview-editor-box[data-v-5338ecd2]{height:60px;border:1px dashed #dcdfe6;border-radius:4px;display:flex;align-items:center;justify-content:center;color:#c0c4cc;font-size:12px;background:#fafafa}.preview-custom[data-v-5338ecd2]{padding:4px 0}.preview-address[data-v-5338ecd2],.preview-integer-uppercase[data-v-5338ecd2],.preview-linked-select[data-v-5338ecd2]{display:flex;flex-direction:column;gap:6px}.preview-address-selects[data-v-5338ecd2],.preview-linked-select>div[data-v-5338ecd2]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.preview-linked-select>div[data-v-5338ecd2]{grid-template-columns:repeat(2,minmax(0,1fr))}.preview-integer-uppercase span[data-v-5338ecd2]{color:var(--el-color-primary);font-size:12px}.preview-linked-select-add.is-left[data-v-5338ecd2]{align-self:flex-start}.preview-linked-select-add.is-center[data-v-5338ecd2]{align-self:center}.preview-linked-select-add.is-right[data-v-5338ecd2]{align-self:flex-end}.preview-unknown[data-v-5338ecd2]{padding:4px 0}.canvas-node[data-v-b4ea2b4e]{position:relative;margin-bottom:8px;border:1px solid transparent;border-radius:4px;padding:8px;transition:all .15s;cursor:pointer}.canvas-node[data-v-b4ea2b4e]:hover{border-color:#c6e2ff;background:#f5f9ff}.canvas-node.is-selected[data-v-b4ea2b4e]{border-color:#409eff;background:#ecf5ff}.canvas-node-actions[data-v-b4ea2b4e]{position:absolute;top:-1px;right:-1px;display:flex;gap:2px;background:#409eff;border-radius:0 4px;padding:2px 4px;z-index:10}.canvas-node-actions .el-icon[data-v-b4ea2b4e]{color:#fff;font-size:14px;cursor:pointer;padding:2px}.canvas-node-drag-handle[data-v-b4ea2b4e]{cursor:grab!important}.canvas-node-drag-handle[data-v-b4ea2b4e]:active{cursor:grabbing!important}.canvas-field-node[data-v-b4ea2b4e]{display:flex;align-items:flex-start;gap:8px}.canvas-field-label[data-v-b4ea2b4e]{flex-shrink:0;width:100px;text-align:right;font-size:13px;color:#606266;padding-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.required-mark[data-v-b4ea2b4e]{color:#f56c6c;margin-right:2px}.canvas-field-preview[data-v-b4ea2b4e]{flex:1;min-width:0}.canvas-field-suffix-placeholder[data-v-b4ea2b4e]{flex:0 0 auto;box-sizing:border-box;padding:6px 8px;border:1px dashed #a8abb2;border-radius:4px;color:#909399;font-size:12px;line-height:1;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.canvas-title-node[data-v-b4ea2b4e]{padding:4px 0}.canvas-title-text[data-v-b4ea2b4e]{margin:0;color:#303133}.canvas-title-desc[data-v-b4ea2b4e]{margin:4px 0 0;font-size:12px;color:#909399}.canvas-grid-node[data-v-b4ea2b4e]{padding:4px 0}.canvas-grid-label[data-v-b4ea2b4e]{display:flex;align-items:center;gap:4px;font-size:12px;color:#909399;margin-bottom:8px}.canvas-grid-col[data-v-b4ea2b4e]{position:relative;min-height:120px;border:1px dashed #dcdfe6;border-radius:4px;padding:8px;transition:border-color .15s}.canvas-grid-col[data-v-b4ea2b4e]:hover{border-color:#c6e2ff}.canvas-grid-col.col-selected[data-v-b4ea2b4e]{border-color:#409eff;background:rgba(64,158,255,.04)}.col-span-badge[data-v-b4ea2b4e]{position:absolute;top:2px;left:4px;font-size:10px;color:#c0c4cc}.canvas-col-children[data-v-b4ea2b4e]{min-height:96px}.col-empty[data-v-b4ea2b4e]{display:flex;align-items:center;justify-content:center;min-height:80px;color:#c0c4cc;font-size:12px;pointer-events:none}[data-v-b4ea2b4e] .canvas-drag-ghost{opacity:.4;border:2px dashed #409eff!important}[data-v-b4ea2b4e] .canvas-drag-chosen{box-shadow:0 0 0 2px #409eff}.jxy-designer-canvas[data-v-face1280]{min-height:100%}.canvas-form-wrapper[data-v-face1280]{min-height:400px;background:#fff;border-radius:4px;box-shadow:0 2px 12px #0000000f;padding:20px}.canvas-empty[data-v-face1280]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;color:#c0c4cc}.canvas-empty p[data-v-face1280]{margin-top:12px;font-size:14px}.canvas-node-list[data-v-face1280]{min-height:180px;padding-bottom:80px}.canvas-drag-ghost[data-v-face1280]{opacity:.4;border:2px dashed #409eff!important}.canvas-drag-chosen[data-v-face1280]{box-shadow:0 0 0 2px #409eff}.jxy-props-panel[data-v-8cb9e83e]{min-height:200px}.props-empty[data-v-8cb9e83e]{display:flex;align-items:center;justify-content:center;min-height:200px;color:#c0c4cc;font-size:13px}.props-node-type[data-v-8cb9e83e]{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #ebeef5}.props-node-id[data-v-8cb9e83e]{font-size:11px;color:#606266;font-family:monospace;user-select:all}.props-node-copy[data-v-8cb9e83e]{padding:2px;min-height:20px;color:#606266}.props-field-list[data-v-8cb9e83e] .el-form-item{margin-bottom:12px}.props-field-list[data-v-8cb9e83e] .el-form-item__label{font-size:12px;color:#606266;padding-bottom:2px}.props-switch-form-item[data-v-8cb9e83e] .el-form-item__content{width:100%}.props-switch-row[data-v-8cb9e83e]{display:flex;align-items:center;justify-content:space-between;width:100%}.props-switch-label[data-v-8cb9e83e]{font-size:12px;color:#606266;cursor:default;user-select:none}.validation-editor[data-v-8cb9e83e]{width:100%}.validation-row[data-v-8cb9e83e]{padding:8px;margin-bottom:8px;border:1px solid #ebeef5;border-radius:4px;background:#fafafa}.validation-main-row[data-v-8cb9e83e]{display:flex;align-items:center;gap:6px;margin-bottom:6px}.validation-type[data-v-8cb9e83e]{width:92px;flex-shrink:0}.validation-value[data-v-8cb9e83e]{flex:1;min-width:0}.validation-trigger[data-v-8cb9e83e]{width:76px;flex-shrink:0}.validation-delete[data-v-8cb9e83e]{color:#f56c6c;cursor:pointer}.panel-header[data-v-a3a65c84]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;font-size:14px;font-weight:600;color:#303133}.ds-empty[data-v-a3a65c84]{text-align:center;color:#c0c4cc;padding:40px 0;font-size:13px}.ds-item-title[data-v-a3a65c84]{display:flex;align-items:center;gap:8px;width:100%;font-size:13px}.ds-delete-btn[data-v-a3a65c84]{margin-left:auto;color:#f56c6c;cursor:pointer}.static-option-row[data-v-a3a65c84]{display:flex;gap:8px;margin-bottom:8px;align-items:center}.static-editor-mode[data-v-a3a65c84]{margin-bottom:10px}.tree-options-editor[data-v-a3a65c84]{width:100%}.tree-options-error[data-v-a3a65c84]{margin-top:6px;color:#f56c6c;font-size:12px}.tree-options-tip[data-v-a3a65c84]{margin-top:6px;color:#909399;font-size:12px;line-height:1.5}.static-option-row .el-input[data-v-a3a65c84]{flex:1}.opt-delete[data-v-a3a65c84]{color:#f56c6c;cursor:pointer;flex-shrink:0}.api-params-wrap[data-v-a3a65c84]{width:100%}.api-param-header[data-v-a3a65c84]{display:flex;gap:4px;align-items:center;margin-bottom:6px;font-size:11px;color:#909399;font-weight:600}.api-param-row[data-v-a3a65c84]{display:flex;gap:4px;align-items:center;margin-bottom:6px}.param-col-key[data-v-a3a65c84],.param-col-type[data-v-a3a65c84]{flex:2;min-width:0}.param-col-source[data-v-a3a65c84]{flex:3;min-width:0}.param-col-req[data-v-a3a65c84]{flex:0 0 32px;display:flex;justify-content:center}.param-col-del[data-v-a3a65c84]{flex:0 0 18px;display:flex;justify-content:center}.api-param-tip[data-v-a3a65c84]{display:flex;align-items:flex-start;gap:4px;margin-top:8px;font-size:11px;color:#909399;line-height:1.5}.legacy-api-tip[data-v-a3a65c84]{margin-top:4px;color:#e6a23c;font-size:11px;line-height:1.5}.panel-header[data-v-c7063ca9]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;font-size:14px;font-weight:600;color:#303133}.reaction-empty[data-v-c7063ca9]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 0;color:#c0c4cc;font-size:13px}.reaction-empty p[data-v-c7063ca9]{margin-top:8px}.reaction-item-title[data-v-c7063ca9]{display:flex;align-items:center;gap:8px;width:100%;font-size:13px;padding-right:8px}.reaction-item-label[data-v-c7063ca9]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#606266}.reaction-delete-btn[data-v-c7063ca9]{color:#f56c6c;cursor:pointer;flex-shrink:0}.reaction-form[data-v-c7063ca9] .el-form-item{margin-bottom:10px}.reaction-form[data-v-c7063ca9] .el-form-item__label{font-size:12px;color:#606266;padding-bottom:2px}.condition-row[data-v-c7063ca9]{display:flex;gap:8px;width:100%;align-items:center}.effects-list[data-v-c7063ca9]{width:100%;display:flex;flex-direction:column;gap:0}.effect-row[data-v-c7063ca9]{display:flex;gap:6px;margin-bottom:8px;align-items:center;flex-wrap:wrap}.effect-delete[data-v-c7063ca9]{color:#f56c6c;cursor:pointer;flex-shrink:0}.effect-json-value[data-v-c7063ca9]{width:100%}.section-title[data-v-99b3e94a]{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:#606266;margin-bottom:10px}.section-title .el-icon[data-v-99b3e94a]{font-size:14px;color:#909399}.config-form[data-v-99b3e94a] .el-form-item{margin-bottom:12px}.config-form[data-v-99b3e94a] .el-form-item__label{font-size:12px;color:#606266;padding-bottom:2px}.config-divider[data-v-99b3e94a]{margin:14px 0}.config-tip[data-v-99b3e94a]{margin-top:4px;color:#909399;font-size:11px;line-height:1.5}.schema-info[data-v-99b3e94a]{background:#f5f7fa;border-radius:4px;padding:10px 12px;display:flex;flex-direction:column;gap:8px}.schema-info-row[data-v-99b3e94a]{display:flex;align-items:center;justify-content:space-between}.schema-info-label[data-v-99b3e94a]{font-size:12px;color:#909399}.jxy-designer-right-panel[data-v-82e44664]{padding:0;height:100%}.right-panel-tabs[data-v-82e44664]{height:100%}.right-panel-tabs[data-v-82e44664] .el-tabs__content{padding:12px;overflow-y:auto;height:calc(100% - 55px)}.right-panel-tabs[data-v-82e44664] .el-tabs__header{margin-bottom:0;padding:0 12px}.jxy-preview-content[data-v-0779918e]{padding:16px;min-height:300px}.runtime-wrap[data-v-0779918e]{padding:8px 0}.schema-json-wrap[data-v-0779918e]{border:1px solid #ebeef5;border-radius:4px;overflow:hidden}.json-toolbar[data-v-0779918e]{padding:6px 12px;background:#f5f7fa;border-bottom:1px solid #ebeef5;display:flex;justify-content:flex-end}.schema-json-view[data-v-0779918e]{margin:0;padding:12px;background:#fafafa;font-size:11px;font-family:Cascadia Code,Fira Code,Consolas,monospace;color:#476582;line-height:1.6;max-height:500px;overflow:auto;white-space:pre}.jxy-form-designer[data-v-aaf0899a]{display:flex;flex-direction:column;height:100%;min-height:600px;background:#f5f7fa;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.jxy-designer-body[data-v-aaf0899a]{display:flex;flex:1;overflow:hidden}.jxy-designer-left[data-v-aaf0899a]{width:280px;min-width:280px;background:#fff;border-right:1px solid #e4e7ed;overflow-y:auto}.jxy-designer-center[data-v-aaf0899a]{flex:1;overflow:auto;padding:16px;background:#f5f7fa}.jxy-designer-right[data-v-aaf0899a]{width:340px;min-width:340px;min-height:0;background:#fff;border-left:1px solid #e4e7ed;overflow:hidden}.jxy-designer-preview-dialog .el-dialog__body{padding:20px 40px;width:100%;max-width:none;max-height:calc(100vh - 111px)!important;margin:0 auto;box-sizing:border-box}
|