@tmagic/editor 1.8.0-beta.10 → 1.8.0-beta.12
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/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +7 -4
- package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +4 -0
- package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +60 -14
- package/dist/es/components/ScrollBar.js +0 -1
- package/dist/es/editorProps.js +6 -1
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +15 -3
- package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +2 -17
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +7 -0
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +5 -17
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +4 -0
- package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +29 -3
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +50 -88
- package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +2 -5
- package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +48 -23
- package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +28 -22
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +28 -22
- package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +28 -22
- package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/es/fields/UISelect.js +0 -1
- package/dist/es/index.js +9 -6
- package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +21 -6
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +9 -6
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +14 -4
- package/dist/es/layouts/history-list/composables.js +1 -1
- package/dist/es/layouts/history-list/useHistoryRevert.js +17 -6
- package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +44 -5
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +15 -8
- package/dist/es/layouts/props-panel/use-style-panel.js +3 -2
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +15 -31
- package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/code-block/useContentMenu.js +18 -3
- package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +4 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/data-source/useContentMenu.js +18 -3
- package/dist/es/layouts/sidebar/layer/LayerNodeContent.js +5 -0
- package/dist/es/layouts/sidebar/layer/LayerNodeContent.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/es/plugin.js +3 -1
- package/dist/es/services/editor.js +104 -5
- package/dist/es/services/props.js +2 -1
- package/dist/es/services/storage.js +1 -1
- package/dist/es/services/ui.js +3 -0
- package/dist/es/style.css +104 -55
- package/dist/es/utils/data-source/index.js +30 -11
- package/dist/es/utils/event.js +123 -0
- package/dist/es/utils/monaco-editor.js +22 -6
- package/dist/es/utils/props.js +94 -8
- package/dist/es/utils/type-match-rules.js +360 -0
- package/dist/style.css +104 -55
- package/dist/tmagic-editor.umd.cjs +16923 -15771
- package/package.json +8 -8
- package/src/Editor.vue +3 -1
- package/src/components/CodeBlockEditor.vue +3 -0
- package/src/components/CompareForm.vue +7 -0
- package/src/components/FloatingBox.vue +77 -8
- package/src/components/ScrollBar.vue +0 -67
- package/src/editorProps.ts +13 -0
- package/src/fields/CodeSelect.vue +4 -1
- package/src/fields/CondOpSelect.vue +2 -24
- package/src/fields/DataSourceFields.vue +5 -0
- package/src/fields/DataSourceInput.vue +7 -25
- package/src/fields/DataSourceMocks.vue +3 -0
- package/src/fields/DisplayConds.vue +14 -0
- package/src/fields/EventSelect.vue +84 -129
- package/src/fields/StyleSetter/Index.vue +2 -8
- package/src/fields/StyleSetter/pro/Background.vue +94 -55
- package/src/fields/StyleSetter/pro/Border.vue +9 -11
- package/src/fields/StyleSetter/pro/Font.vue +66 -64
- package/src/fields/StyleSetter/pro/Layout.vue +140 -138
- package/src/fields/StyleSetter/pro/Position.vue +69 -67
- package/src/fields/StyleSetter/pro/Transform.vue +23 -25
- package/src/fields/UISelect.vue +0 -12
- package/src/index.ts +1 -0
- package/src/layouts/CodeEditor.vue +32 -6
- package/src/layouts/Framework.vue +7 -6
- package/src/layouts/history-list/HistoryDiffDialog.vue +23 -5
- package/src/layouts/history-list/useHistoryRevert.ts +25 -5
- package/src/layouts/props-panel/FormPanel.vue +66 -5
- package/src/layouts/props-panel/PropsPanel.vue +20 -6
- package/src/layouts/props-panel/use-style-panel.ts +4 -3
- package/src/layouts/sidebar/Sidebar.vue +2 -0
- package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +4 -1
- package/src/layouts/sidebar/code-block/useContentMenu.ts +13 -1
- package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +3 -0
- package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +2 -2
- package/src/layouts/sidebar/data-source/useContentMenu.ts +13 -1
- package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
- package/src/layouts/sidebar/layer/LayerPanel.vue +4 -1
- package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
- package/src/plugin.ts +3 -1
- package/src/services/editor.ts +168 -3
- package/src/services/ui.ts +6 -0
- package/src/theme/event.scss +8 -0
- package/src/theme/floating-box.scss +9 -1
- package/src/theme/layer-node-content.scss +14 -0
- package/src/theme/scroll-bar.scss +64 -0
- package/src/theme/theme.scss +3 -0
- package/src/theme/ui-select.scss +9 -0
- package/src/type.ts +72 -2
- package/src/utils/data-source/index.ts +30 -12
- package/src/utils/event.ts +224 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/monaco-editor.ts +27 -0
- package/src/utils/props.ts +160 -2
- package/src/utils/type-match-rules.ts +678 -0
- package/types/index.d.ts +391 -85
|
@@ -3,20 +3,20 @@ import history_default from "./services/history.js";
|
|
|
3
3
|
import storage_default from "./services/storage.js";
|
|
4
4
|
import editor_default from "./services/editor.js";
|
|
5
5
|
import ui_default from "./services/ui.js";
|
|
6
|
+
import codeBlock_default from "./services/codeBlock.js";
|
|
7
|
+
import dataSource_default from "./services/dataSource.js";
|
|
8
|
+
import events_default from "./services/events.js";
|
|
6
9
|
import Framework_default from "./layouts/Framework.js";
|
|
7
10
|
import NavMenu_default from "./layouts/NavMenu.js";
|
|
11
|
+
import { ENABLE_PROPS_FORM_VALIDATE, defaultEditorProps } from "./editorProps.js";
|
|
8
12
|
import PropsPanel_default from "./layouts/props-panel/PropsPanel.js";
|
|
9
13
|
import keybinding_config_default from "./utils/keybinding-config.js";
|
|
10
14
|
import Sidebar_default from "./layouts/sidebar/Sidebar.js";
|
|
11
15
|
import Workspace_default from "./layouts/workspace/Workspace.js";
|
|
12
|
-
import codeBlock_default from "./services/codeBlock.js";
|
|
13
16
|
import componentList_default from "./services/componentList.js";
|
|
14
|
-
import dataSource_default from "./services/dataSource.js";
|
|
15
17
|
import dep_default from "./services/dep.js";
|
|
16
|
-
import events_default from "./services/events.js";
|
|
17
18
|
import keybinding_default from "./services/keybinding.js";
|
|
18
19
|
import stageOverlay_default from "./services/stageOverlay.js";
|
|
19
|
-
import { defaultEditorProps } from "./editorProps.js";
|
|
20
20
|
import { initServiceEvents, initServiceState } from "./initService.js";
|
|
21
21
|
import { createBlock, createVNode, defineComponent, mergeDefaults, openBlock, provide, ref, renderSlot, unref, withCtx } from "vue";
|
|
22
22
|
import { EventEmitter } from "events";
|
|
@@ -56,6 +56,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
56
56
|
disabledPageFragment: { type: Boolean },
|
|
57
57
|
disabledFlashTip: { type: Boolean },
|
|
58
58
|
disabledStageOverlay: { type: Boolean },
|
|
59
|
+
enablePropsFormValidate: { type: Boolean },
|
|
59
60
|
disabledShowSrc: { type: Boolean },
|
|
60
61
|
disabledDataSource: { type: Boolean },
|
|
61
62
|
disabledCodeBlock: { type: Boolean },
|
|
@@ -129,6 +130,8 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
129
130
|
provide("services", services);
|
|
130
131
|
provide("codeOptions", props.codeOptions);
|
|
131
132
|
provide("stageOptions", stageOptions);
|
|
133
|
+
/** 是否启用「属性配置表单校验」联动能力,供 PropsPanel / FormPanel 判断校验失败时是否仍更新节点并记录错误 */
|
|
134
|
+
provide(ENABLE_PROPS_FORM_VALIDATE, props.enablePropsFormValidate ?? false);
|
|
132
135
|
/**
|
|
133
136
|
* 把顶层 `extendFormState` 提供给非 PropsPanel 链路上的组件使用(例如历史差异对话框 HistoryDiffDialog
|
|
134
137
|
* 内部的 CompareForm)。这样所有依赖业务上下文的表单 filterFunction 都能拿到一致的扩展状态,
|
|
@@ -120,6 +120,7 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
120
120
|
changedValue.value = void 0;
|
|
121
121
|
};
|
|
122
122
|
const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, inject("parentFloating", ref(null)));
|
|
123
|
+
const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
|
|
123
124
|
watch(boxVisible, (visible) => {
|
|
124
125
|
nextTick(() => {
|
|
125
126
|
if (!visible) emit("close");
|
|
@@ -145,7 +146,9 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
145
146
|
"onUpdate:width": _cache[2] || (_cache[2] = ($event) => width.value = $event),
|
|
146
147
|
height: unref(codeBlockEditorHeight),
|
|
147
148
|
"onUpdate:height": _cache[3] || (_cache[3] = ($event) => isRef(codeBlockEditorHeight) ? codeBlockEditorHeight.value = $event : null),
|
|
149
|
+
"body-style": { padding: "0 16px" },
|
|
148
150
|
title: __props.content.name ? `${__props.disabled ? "查看" : "编辑"}${__props.content.name}` : "新增代码",
|
|
151
|
+
"framework-width": frameworkWidth.value,
|
|
149
152
|
position: unref(boxPosition),
|
|
150
153
|
"before-close": beforeClose
|
|
151
154
|
}, {
|
|
@@ -187,6 +190,7 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
187
190
|
"width",
|
|
188
191
|
"height",
|
|
189
192
|
"title",
|
|
193
|
+
"framework-width",
|
|
190
194
|
"position"
|
|
191
195
|
]),
|
|
192
196
|
(openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(TMagicDialog), {
|
|
@@ -48,7 +48,8 @@ var CodeParams_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
48
48
|
*/
|
|
49
49
|
const onParamsChangeHandler = async (v, eventData) => {
|
|
50
50
|
try {
|
|
51
|
-
|
|
51
|
+
const value = await formRef.value?.submitForm(true);
|
|
52
|
+
emit("change", value, eventData);
|
|
52
53
|
} catch (e) {
|
|
53
54
|
error(e);
|
|
54
55
|
}
|
|
@@ -21,6 +21,7 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
21
21
|
},
|
|
22
22
|
baseFormState: {},
|
|
23
23
|
selfDiffFieldTypes: {},
|
|
24
|
+
size: {},
|
|
24
25
|
loadConfig: {},
|
|
25
26
|
services: {}
|
|
26
27
|
},
|
|
@@ -181,13 +182,15 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
181
182
|
"label-width": __props.labelWidth,
|
|
182
183
|
"extend-state": mergedExtendState,
|
|
183
184
|
"show-diff": showDiff,
|
|
184
|
-
"self-diff-field-types": __props.selfDiffFieldTypes
|
|
185
|
+
"self-diff-field-types": __props.selfDiffFieldTypes,
|
|
186
|
+
size: __props.size
|
|
185
187
|
}, null, 8, [
|
|
186
188
|
"config",
|
|
187
189
|
"init-values",
|
|
188
190
|
"last-values",
|
|
189
191
|
"label-width",
|
|
190
|
-
"self-diff-field-types"
|
|
192
|
+
"self-diff-field-types",
|
|
193
|
+
"size"
|
|
191
194
|
])) : createCommentVNode("v-if", true)], 4);
|
|
192
195
|
};
|
|
193
196
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { useServices } from "../hooks/use-services.js";
|
|
2
1
|
import Icon_default from "./Icon.js";
|
|
3
2
|
import { TMagicButton, useZIndex } from "@tmagic/design";
|
|
4
|
-
import { Teleport, computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeStyle, onBeforeUnmount, openBlock, provide, ref, renderSlot, toDisplayString, unref, useModel, useTemplateRef, watch, withCtx } from "vue";
|
|
3
|
+
import { Teleport, computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeStyle, onBeforeUnmount, openBlock, provide, ref, renderSlot, toDisplayString, unref, useModel, useTemplateRef, watch, withCtx } from "vue";
|
|
5
4
|
import { Close } from "@element-plus/icons-vue";
|
|
6
5
|
import VanillaMoveable from "moveable";
|
|
7
6
|
//#region packages/editor/src/components/FloatingBox.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -17,6 +16,9 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
17
16
|
top: 0
|
|
18
17
|
}) },
|
|
19
18
|
title: { default: "" },
|
|
19
|
+
bodyStyle: {},
|
|
20
|
+
initialStyle: { default: () => ({}) },
|
|
21
|
+
frameworkWidth: { default: 0 },
|
|
20
22
|
beforeClose: {}
|
|
21
23
|
}, {
|
|
22
24
|
"width": { default: 0 },
|
|
@@ -49,19 +51,51 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
49
51
|
if (targetEl.value) return targetEl.value.clientHeight - titleHeight.value;
|
|
50
52
|
return "auto";
|
|
51
53
|
});
|
|
52
|
-
const { uiService } = useServices();
|
|
53
|
-
const frameworkWidth = computed(() => uiService.get("frameworkRect").width || 0);
|
|
54
54
|
const style = computed(() => {
|
|
55
55
|
let { left } = props.position;
|
|
56
|
-
|
|
56
|
+
const frameworkWidth = props.frameworkWidth || globalThis.window?.innerWidth || 0;
|
|
57
|
+
if (width.value && frameworkWidth) left = left + width.value > frameworkWidth ? frameworkWidth - width.value : left;
|
|
57
58
|
return {
|
|
58
59
|
left: `${left}px`,
|
|
59
60
|
top: `${props.position.top}px`,
|
|
60
61
|
width: width.value ? `${width.value}px` : "auto",
|
|
61
|
-
height: height.value ? `${height.value}px` : "auto"
|
|
62
|
+
height: height.value ? `${height.value}px` : "auto",
|
|
63
|
+
...props.initialStyle
|
|
62
64
|
};
|
|
63
65
|
});
|
|
64
66
|
let moveable = null;
|
|
67
|
+
let dragMask = null;
|
|
68
|
+
let dragMaskVisible = false;
|
|
69
|
+
const bindDragMaskSafety = () => {
|
|
70
|
+
globalThis.window?.addEventListener("pointerup", hideDragMask, true);
|
|
71
|
+
globalThis.window?.addEventListener("blur", hideDragMask);
|
|
72
|
+
globalThis.document?.addEventListener("visibilitychange", hideDragMask);
|
|
73
|
+
};
|
|
74
|
+
const unbindDragMaskSafety = () => {
|
|
75
|
+
globalThis.window?.removeEventListener("pointerup", hideDragMask, true);
|
|
76
|
+
globalThis.window?.removeEventListener("blur", hideDragMask);
|
|
77
|
+
globalThis.document?.removeEventListener("visibilitychange", hideDragMask);
|
|
78
|
+
};
|
|
79
|
+
const showDragMask = () => {
|
|
80
|
+
if (dragMaskVisible) return;
|
|
81
|
+
if (!dragMask) {
|
|
82
|
+
dragMask = globalThis.document.createElement("div");
|
|
83
|
+
dragMask.className = "m-editor-float-box-drag-mask";
|
|
84
|
+
}
|
|
85
|
+
globalThis.document.body.appendChild(dragMask);
|
|
86
|
+
dragMaskVisible = true;
|
|
87
|
+
bindDragMaskSafety();
|
|
88
|
+
const setMaskZIndex = () => {
|
|
89
|
+
if (dragMask) dragMask.style.zIndex = `${curZIndex.value + 1}`;
|
|
90
|
+
};
|
|
91
|
+
setMaskZIndex();
|
|
92
|
+
nextTick(setMaskZIndex);
|
|
93
|
+
};
|
|
94
|
+
const hideDragMask = () => {
|
|
95
|
+
unbindDragMaskSafety();
|
|
96
|
+
dragMask?.parentNode?.removeChild(dragMask);
|
|
97
|
+
dragMaskVisible = false;
|
|
98
|
+
};
|
|
65
99
|
const initMoveable = () => {
|
|
66
100
|
moveable = new VanillaMoveable(globalThis.document.body, {
|
|
67
101
|
className: "m-editor-floating-box-moveable",
|
|
@@ -84,6 +118,10 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
84
118
|
position: "css"
|
|
85
119
|
}
|
|
86
120
|
});
|
|
121
|
+
moveable.on("drag", showDragMask);
|
|
122
|
+
moveable.on("resize", showDragMask);
|
|
123
|
+
moveable.on("dragEnd", hideDragMask);
|
|
124
|
+
moveable.on("resizeEnd", hideDragMask);
|
|
87
125
|
moveable.on("drag", (e) => {
|
|
88
126
|
e.target.style.transform = e.transform;
|
|
89
127
|
});
|
|
@@ -96,6 +134,7 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
96
134
|
});
|
|
97
135
|
};
|
|
98
136
|
const destroyMoveable = () => {
|
|
137
|
+
hideDragMask();
|
|
99
138
|
moveable?.destroy();
|
|
100
139
|
moveable = null;
|
|
101
140
|
};
|
|
@@ -109,7 +148,10 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
109
148
|
height.value = targetRect.height;
|
|
110
149
|
initMoveable();
|
|
111
150
|
}
|
|
112
|
-
if (titleEl.value)
|
|
151
|
+
if (titleEl.value) {
|
|
152
|
+
const titleRect = titleEl.value.getBoundingClientRect();
|
|
153
|
+
titleHeight.value = titleRect.height;
|
|
154
|
+
}
|
|
113
155
|
} else destroyMoveable();
|
|
114
156
|
}, { immediate: true });
|
|
115
157
|
onBeforeUnmount(() => {
|
|
@@ -135,15 +177,16 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
135
177
|
return visible.value ? (openBlock(), createBlock(Teleport, {
|
|
136
178
|
key: 0,
|
|
137
179
|
to: "body"
|
|
138
|
-
}, [createElementVNode("div", {
|
|
180
|
+
}, [createElementVNode("div", mergeProps({
|
|
139
181
|
ref: "target",
|
|
140
|
-
class: "m-editor-float-box"
|
|
141
|
-
|
|
182
|
+
class: "m-editor-float-box"
|
|
183
|
+
}, _ctx.$attrs, {
|
|
184
|
+
style: {
|
|
142
185
|
...style.value,
|
|
143
186
|
zIndex: curZIndex.value
|
|
144
|
-
}
|
|
187
|
+
},
|
|
145
188
|
onMousedown: nextZIndex
|
|
146
|
-
}, [createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", null, toDisplayString(__props.title), 1)]), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
|
|
189
|
+
}), [createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", null, toDisplayString(__props.title), 1)]), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
|
|
147
190
|
link: "",
|
|
148
191
|
size: "small",
|
|
149
192
|
onClick: closeHandler
|
|
@@ -152,8 +195,11 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
152
195
|
_: 1
|
|
153
196
|
})])], 512), createElementVNode("div", {
|
|
154
197
|
class: "m-editor-float-box-body",
|
|
155
|
-
style: normalizeStyle({
|
|
156
|
-
|
|
198
|
+
style: normalizeStyle({
|
|
199
|
+
height: `${bodyHeight.value}px`,
|
|
200
|
+
...__props.bodyStyle
|
|
201
|
+
})
|
|
202
|
+
}, [renderSlot(_ctx.$slots, "body")], 4)], 16)])) : createCommentVNode("v-if", true);
|
|
157
203
|
};
|
|
158
204
|
}
|
|
159
205
|
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import ScrollBar_vue_vue_type_script_setup_true_lang_default from "./ScrollBar.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
-
/* empty css */
|
|
3
2
|
//#region packages/editor/src/components/ScrollBar.vue
|
|
4
3
|
var ScrollBar_default = ScrollBar_vue_vue_type_script_setup_true_lang_default;
|
|
5
4
|
//#endregion
|
package/dist/es/editorProps.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { CONTAINER_HIGHLIGHT_CLASS_NAME, ContainerHighlightType, RenderType } from "@tmagic/stage";
|
|
2
2
|
import { getIdFromEl } from "@tmagic/utils";
|
|
3
3
|
//#region packages/editor/src/editorProps.ts
|
|
4
|
+
/**
|
|
5
|
+
* 「属性配置表单校验」联动能力的 provide/inject 注入键。
|
|
6
|
+
* 使用 Symbol 避免与其它字符串键冲突,供 PropsPanel / FormPanel 注入判断校验失败时是否仍更新节点并记录错误。
|
|
7
|
+
*/
|
|
8
|
+
var ENABLE_PROPS_FORM_VALIDATE = Symbol("enablePropsFormValidate");
|
|
4
9
|
var defaultEditorProps = {
|
|
5
10
|
renderType: RenderType.IFRAME,
|
|
6
11
|
disabledMultiSelect: false,
|
|
@@ -34,4 +39,4 @@ var defaultEditorProps = {
|
|
|
34
39
|
customContentMenu: (menus) => menus
|
|
35
40
|
};
|
|
36
41
|
//#endregion
|
|
37
|
-
export { defaultEditorProps };
|
|
42
|
+
export { ENABLE_PROPS_FORM_VALIDATE, defaultEditorProps };
|
|
@@ -70,7 +70,11 @@ var CodeSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
70
70
|
value: HookCodeType.DATA_SOURCE_METHOD,
|
|
71
71
|
text: "数据源方法"
|
|
72
72
|
}],
|
|
73
|
-
|
|
73
|
+
rules: [{
|
|
74
|
+
typeMatch: true,
|
|
75
|
+
trigger: "change"
|
|
76
|
+
}],
|
|
77
|
+
defaultValue: HookCodeType.CODE,
|
|
74
78
|
onChange: (_mForm, v, { setModel }) => {
|
|
75
79
|
if (v === HookCodeType.DATA_SOURCE_METHOD) setModel("codeId", []);
|
|
76
80
|
else setModel("codeId", "");
|
|
@@ -83,7 +87,11 @@ var CodeSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
83
87
|
span: 18,
|
|
84
88
|
labelWidth: 0,
|
|
85
89
|
display: (_mForm, { model }) => model.codeType !== HookCodeType.DATA_SOURCE_METHOD,
|
|
86
|
-
notEditable: () => !codeBlockService.getEditStatus()
|
|
90
|
+
notEditable: () => !codeBlockService.getEditStatus(),
|
|
91
|
+
rules: [{
|
|
92
|
+
typeMatch: true,
|
|
93
|
+
trigger: "change"
|
|
94
|
+
}]
|
|
87
95
|
},
|
|
88
96
|
{
|
|
89
97
|
type: "data-source-method-select",
|
|
@@ -91,7 +99,11 @@ var CodeSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
91
99
|
span: 18,
|
|
92
100
|
labelWidth: 0,
|
|
93
101
|
display: (_mForm, { model }) => model.codeType === HookCodeType.DATA_SOURCE_METHOD,
|
|
94
|
-
notEditable: () => !dataSourceService.get("editable")
|
|
102
|
+
notEditable: () => !dataSourceService.get("editable"),
|
|
103
|
+
rules: [{
|
|
104
|
+
typeMatch: true,
|
|
105
|
+
trigger: "change"
|
|
106
|
+
}]
|
|
95
107
|
}
|
|
96
108
|
]
|
|
97
109
|
}]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getCondOpOptionsByFieldType } from "../utils/props.js";
|
|
2
2
|
import { useServices } from "../hooks/use-services.js";
|
|
3
3
|
import { getFieldType } from "../utils/data-source/index.js";
|
|
4
4
|
import { TMagicSelect, getDesignConfig } from "@tmagic/design";
|
|
@@ -27,22 +27,7 @@ var CondOpSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
27
27
|
const optionComponent = getDesignConfig("components")?.option;
|
|
28
28
|
const options = computed(() => {
|
|
29
29
|
const [id, ...fieldNames] = [...props.config.parentFields || [], ...props.model.field];
|
|
30
|
-
|
|
31
|
-
if (type === "array") return arrayOptions;
|
|
32
|
-
if (type === "boolean" || type === "null") return [{
|
|
33
|
-
text: "是",
|
|
34
|
-
value: "is"
|
|
35
|
-
}, {
|
|
36
|
-
text: "不是",
|
|
37
|
-
value: "not"
|
|
38
|
-
}];
|
|
39
|
-
if (type === "number") return [...eqOptions, ...numberOptions];
|
|
40
|
-
if (type === "string") return [...arrayOptions, ...eqOptions];
|
|
41
|
-
return [
|
|
42
|
-
...arrayOptions,
|
|
43
|
-
...eqOptions,
|
|
44
|
-
...numberOptions
|
|
45
|
-
];
|
|
30
|
+
return getCondOpOptionsByFieldType(getFieldType(dataSourceService.getDataSourceById(id), fieldNames));
|
|
46
31
|
});
|
|
47
32
|
const fieldChangeHandler = (v) => {
|
|
48
33
|
emit("change", v);
|
package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -49,7 +49,8 @@ var FieldSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
49
49
|
const selectFieldsId = ref([]);
|
|
50
50
|
watch(modelValue, (value) => {
|
|
51
51
|
if (props.dataSourceId) {
|
|
52
|
-
|
|
52
|
+
const dsIdValue = valueIsKey.value ? props.dataSourceId : `${DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX}${props.dataSourceId}`;
|
|
53
|
+
selectDataSourceId.value = dsIdValue;
|
|
53
54
|
selectFieldsId.value = Array.isArray(value) ? value : [];
|
|
54
55
|
} else if (Array.isArray(value) && value.length) {
|
|
55
56
|
const [dsId, ...fields] = value;
|
|
@@ -313,6 +313,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
313
313
|
const addFromJsonDialogVisible = useModel(__props, "visible1");
|
|
314
314
|
const { height: editorHeight } = useEditorContentHeight();
|
|
315
315
|
const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, inject("parentFloating", ref(null)));
|
|
316
|
+
const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
|
|
316
317
|
/**
|
|
317
318
|
* 由 DataSourceConfigPanel 注入:打开数据源详情后需要直接打开的字段路径(字段名数组)。
|
|
318
319
|
* 当前层消费 path[0],并把剩余路径下发给嵌套字段,实现逐层打开。
|
|
@@ -353,6 +354,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
353
354
|
_: 1
|
|
354
355
|
}, 8, ["disabled"])])) : createCommentVNode("v-if", true),
|
|
355
356
|
createVNode(FloatingBox_default, {
|
|
357
|
+
"body-style": { padding: "0 16px" },
|
|
356
358
|
visible: addDialogVisible.value,
|
|
357
359
|
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => addDialogVisible.value = $event),
|
|
358
360
|
width: width.value,
|
|
@@ -360,6 +362,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
360
362
|
height: unref(editorHeight),
|
|
361
363
|
"onUpdate:height": _cache[4] || (_cache[4] = ($event) => isRef(editorHeight) ? editorHeight.value = $event : null),
|
|
362
364
|
title: fieldTitle.value,
|
|
365
|
+
"framework-width": frameworkWidth.value,
|
|
363
366
|
position: unref(boxPosition)
|
|
364
367
|
}, {
|
|
365
368
|
body: withCtx(() => [createVNode(unref(MFormBox), {
|
|
@@ -382,9 +385,11 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
382
385
|
"width",
|
|
383
386
|
"height",
|
|
384
387
|
"title",
|
|
388
|
+
"framework-width",
|
|
385
389
|
"position"
|
|
386
390
|
]),
|
|
387
391
|
createVNode(FloatingBox_default, {
|
|
392
|
+
"body-style": { padding: "0 16px" },
|
|
388
393
|
visible: addFromJsonDialogVisible.value,
|
|
389
394
|
"onUpdate:visible": _cache[5] || (_cache[5] = ($event) => addFromJsonDialogVisible.value = $event),
|
|
390
395
|
width: width.value,
|
|
@@ -392,6 +397,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
392
397
|
height: unref(editorHeight),
|
|
393
398
|
"onUpdate:height": _cache[7] || (_cache[7] = ($event) => isRef(editorHeight) ? editorHeight.value = $event : null),
|
|
394
399
|
title: "快速添加数据定义",
|
|
400
|
+
"framework-width": frameworkWidth.value,
|
|
395
401
|
position: unref(boxPosition)
|
|
396
402
|
}, {
|
|
397
403
|
body: withCtx(() => [createVNode(unref(MFormBox), {
|
|
@@ -405,6 +411,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
405
411
|
"visible",
|
|
406
412
|
"width",
|
|
407
413
|
"height",
|
|
414
|
+
"framework-width",
|
|
408
415
|
"position"
|
|
409
416
|
])
|
|
410
417
|
]);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useServices } from "../hooks/use-services.js";
|
|
2
|
-
import { getDisplayField } from "../utils/data-source/index.js";
|
|
2
|
+
import { getDisplayField, resolveFieldByPath } from "../utils/data-source/index.js";
|
|
3
3
|
import Icon_default from "../components/Icon.js";
|
|
4
4
|
import { TMagicInput, TMagicTag, getDesignConfig } from "@tmagic/design";
|
|
5
|
-
import { getKeysArray
|
|
5
|
+
import { getKeysArray } from "@tmagic/utils";
|
|
6
6
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, nextTick, normalizeClass, openBlock, ref, renderList, resolveDynamicComponent, toDisplayString, unref, useTemplateRef, watch, withCtx } from "vue";
|
|
7
7
|
import { Coin } from "@element-plus/icons-vue";
|
|
8
8
|
//#region packages/editor/src/fields/DataSourceInput.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -132,23 +132,11 @@ var DataSourceInput_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
132
132
|
cb([]);
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
while (key) {
|
|
138
|
-
if (isNumber(key)) {
|
|
139
|
-
key = keys.shift();
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
for (const field of fields) if (field.name === key) {
|
|
143
|
-
fields = field.fields || [];
|
|
144
|
-
key = keys.shift();
|
|
145
|
-
break;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
if (curCharIsDot(dotIndex)) result = fields || [];
|
|
135
|
+
const { fields } = resolveFieldByPath(ds.fields, keys, { skipNumberIndices: true });
|
|
136
|
+
if (curCharIsDot(dotIndex)) result = fields;
|
|
149
137
|
else if (dotIndex > -1) {
|
|
150
138
|
const queryName = queryString.substring(dotIndex + 1).toLowerCase();
|
|
151
|
-
result = fields.filter((field) => field.name?.toLowerCase().includes(queryName) || field.title?.toLowerCase().includes(queryName))
|
|
139
|
+
result = fields.filter((field) => field.name?.toLowerCase().includes(queryName) || field.title?.toLowerCase().includes(queryName));
|
|
152
140
|
}
|
|
153
141
|
cb(result.map((field) => ({
|
|
154
142
|
value: field.name,
|
|
@@ -213,6 +213,7 @@ var DataSourceMocks_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
213
213
|
const addDialogVisible = useModel(__props, "visible");
|
|
214
214
|
const { height: editorHeight } = useEditorContentHeight();
|
|
215
215
|
const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, inject("parentFloating", ref(null)));
|
|
216
|
+
const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
|
|
216
217
|
return (_ctx, _cache) => {
|
|
217
218
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
218
219
|
createVNode(unref(MagicTable), {
|
|
@@ -230,6 +231,7 @@ var DataSourceMocks_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
230
231
|
_: 1
|
|
231
232
|
}, 8, ["disabled"])])) : createCommentVNode("v-if", true),
|
|
232
233
|
createVNode(FloatingBox_default, {
|
|
234
|
+
"body-style": { padding: "0 16px" },
|
|
233
235
|
visible: addDialogVisible.value,
|
|
234
236
|
"onUpdate:visible": _cache[1] || (_cache[1] = ($event) => addDialogVisible.value = $event),
|
|
235
237
|
width: width.value,
|
|
@@ -237,6 +239,7 @@ var DataSourceMocks_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
237
239
|
height: unref(editorHeight),
|
|
238
240
|
"onUpdate:height": _cache[3] || (_cache[3] = ($event) => isRef(editorHeight) ? editorHeight.value = $event : null),
|
|
239
241
|
title: drawerTitle.value,
|
|
242
|
+
"framework-width": frameworkWidth.value,
|
|
240
243
|
position: unref(boxPosition)
|
|
241
244
|
}, {
|
|
242
245
|
body: withCtx(() => [createVNode(unref(MFormBox), {
|
|
@@ -257,6 +260,7 @@ var DataSourceMocks_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
257
260
|
"width",
|
|
258
261
|
"height",
|
|
259
262
|
"title",
|
|
263
|
+
"framework-width",
|
|
260
264
|
"position"
|
|
261
265
|
])
|
|
262
266
|
]);
|
|
@@ -70,7 +70,16 @@ var DisplayConds_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
70
70
|
value: "key",
|
|
71
71
|
label: "字段",
|
|
72
72
|
checkStrictly: false,
|
|
73
|
-
onChange: fieldOnChange
|
|
73
|
+
onChange: fieldOnChange,
|
|
74
|
+
defaultValue: () => [],
|
|
75
|
+
rules: [{
|
|
76
|
+
required: true,
|
|
77
|
+
trigger: "blur",
|
|
78
|
+
message: "请选择字段"
|
|
79
|
+
}, {
|
|
80
|
+
typeMatch: true,
|
|
81
|
+
trigger: "change"
|
|
82
|
+
}]
|
|
74
83
|
} : {
|
|
75
84
|
type: "data-source-field-select",
|
|
76
85
|
name: "field",
|
|
@@ -83,14 +92,31 @@ var DisplayConds_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
83
92
|
"boolean",
|
|
84
93
|
"any"
|
|
85
94
|
],
|
|
86
|
-
onChange: fieldOnChange
|
|
95
|
+
onChange: fieldOnChange,
|
|
96
|
+
defaultValue: () => [],
|
|
97
|
+
rules: [{
|
|
98
|
+
required: true,
|
|
99
|
+
trigger: "blur",
|
|
100
|
+
message: "请选择字段"
|
|
101
|
+
}, {
|
|
102
|
+
typeMatch: true,
|
|
103
|
+
trigger: "change"
|
|
104
|
+
}]
|
|
87
105
|
},
|
|
88
106
|
{
|
|
89
107
|
type: "cond-op-select",
|
|
90
108
|
parentFields: parentFields.value,
|
|
91
109
|
label: "条件",
|
|
92
110
|
width: 140,
|
|
93
|
-
name: "op"
|
|
111
|
+
name: "op",
|
|
112
|
+
rules: [{
|
|
113
|
+
required: true,
|
|
114
|
+
trigger: "blur",
|
|
115
|
+
message: "请选择条件"
|
|
116
|
+
}, {
|
|
117
|
+
typeMatch: true,
|
|
118
|
+
trigger: "change"
|
|
119
|
+
}]
|
|
94
120
|
},
|
|
95
121
|
{
|
|
96
122
|
label: "值",
|