@tmagic/editor 1.8.0-manmanyu.9 → 1.8.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/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +22 -13
- package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +10 -5
- package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +7 -6
- package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +21 -122
- package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +21 -5
- package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +62 -16
- package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/es/components/ScrollBar.js +0 -1
- package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +5 -4
- package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ViewForm.js +5 -0
- package/dist/es/components/ViewForm.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/es/editorProps.js +7 -1
- package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +30 -113
- package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +7 -19
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +7 -6
- package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +12 -4
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +9 -20
- package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +2 -2
- package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +5 -3
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +9 -4
- package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +10 -110
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +52 -363
- package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +3 -6
- package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +4 -35
- package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/es/fields/StyleSetter/configs.js +663 -0
- package/dist/es/fields/StyleSetter/icons/align-items/Center.js +1 -1
- package/dist/es/fields/StyleSetter/icons/align-items/FlexEnd.js +1 -1
- package/dist/es/fields/StyleSetter/icons/align-items/FlexStart.js +1 -1
- package/dist/es/fields/StyleSetter/icons/align-items/SpaceAround.js +1 -1
- package/dist/es/fields/StyleSetter/icons/align-items/SpaceBetween.js +1 -1
- package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +1 -1
- package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +1 -1
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +1 -1
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Block.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Flex.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Inline.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/None.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Center.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Left.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Right.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +29 -106
- package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +8 -11
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +30 -89
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +29 -297
- package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +29 -82
- package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +8 -24
- package/dist/es/fields/UISelect.js +0 -1
- package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/configs/codeSelect.js +98 -0
- package/dist/es/fields/configs/displayConds.js +158 -0
- package/dist/es/fields/configs/eventSelect.js +225 -0
- package/dist/es/fields/configs/stickyAddButton.js +21 -0
- package/dist/es/fields/headless-validation.js +139 -0
- package/dist/es/headless.js +2 -0
- package/dist/es/hooks/use-code-block-edit.js +4 -2
- package/dist/es/hooks/use-compare-form.js +101 -0
- package/dist/es/hooks/use-form-context.js +29 -0
- package/dist/es/hooks/use-stage.js +1 -0
- package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/icons/DatasourceIcon.js +1 -1
- package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/index.js +16 -8
- package/dist/es/initService.js +52 -16
- package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +26 -10
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +11 -8
- package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/NavMenuColumn.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +8 -5
- package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +26 -10
- package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +11 -13
- package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/composables.js +1 -1
- package/dist/es/layouts/history-list/useHistoryRevert.js +38 -33
- package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +50 -20
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +53 -35
- package/dist/es/layouts/props-panel/use-style-panel.js +3 -2
- package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +21 -36
- package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/sidebar/code-block/useContentMenu.js +19 -4
- package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +9 -4
- package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/sidebar/data-source/useContentMenu.js +19 -4
- package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +3 -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/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +6 -4
- package/dist/es/layouts/sidebar/layer/use-click.js +3 -3
- package/dist/es/layouts/sidebar/layer/use-drag.js +11 -10
- package/dist/es/layouts/sidebar/layer/use-node-status.js +2 -2
- package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +9 -3
- package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +55 -9
- package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/es/plugin.js +35 -23
- package/dist/es/services/codeBlock.js +8 -3
- package/dist/es/services/dataSource.js +3 -0
- package/dist/es/services/dep.js +162 -41
- package/dist/es/services/editor.js +344 -113
- package/dist/es/services/events.js +4 -4
- package/dist/es/services/history.js +17 -1
- package/dist/es/services/keybinding.js +3 -3
- package/dist/es/services/props.js +2 -1
- package/dist/es/services/storage.js +2 -2
- package/dist/es/services/ui.js +7 -2
- package/dist/es/style.css +277 -114
- package/dist/es/utils/code-block.js +14 -7
- package/dist/es/utils/config.js +4 -1
- package/dist/es/utils/const.js +2 -2
- package/dist/es/utils/content-menu.js +2 -2
- package/dist/es/utils/data-source/index.js +34 -12
- package/dist/es/utils/dep/collect-worker-client.js +154 -0
- package/dist/es/utils/dep/idle-task.js +70 -22
- package/dist/es/utils/dep/worker.js +1 -1
- package/dist/es/utils/editor.js +4 -2
- package/dist/es/utils/event.js +135 -0
- package/dist/es/utils/monaco-editor.js +22 -6
- package/dist/es/utils/operator.js +2 -2
- package/dist/es/utils/props.js +50 -106
- package/dist/es/utils/type-match-rules.js +356 -0
- package/dist/style.css +277 -114
- package/dist/themes/magic-admin.css +978 -175
- package/dist/tmagic-editor-headless.umd.cjs +10880 -0
- package/dist/tmagic-editor.umd.cjs +12695 -10896
- package/package.json +18 -13
- package/src/Editor.vue +23 -6
- package/src/components/CodeBlockEditor.vue +3 -0
- package/src/components/CodeParams.vue +10 -4
- package/src/components/CompareForm.vue +20 -190
- package/src/components/ContentMenu.vue +34 -6
- package/src/components/FloatingBox.vue +71 -7
- package/src/components/ScrollBar.vue +0 -67
- package/src/components/ViewForm.vue +54 -0
- package/src/editorProps.ts +23 -10
- package/src/fields/Code.vue +1 -1
- package/src/fields/CodeSelect.vue +20 -113
- package/src/fields/CodeSelectCol.vue +1 -1
- package/src/fields/CondOpSelect.vue +5 -26
- package/src/fields/DataSourceFieldSelect/FieldSelect.vue +2 -2
- package/src/fields/DataSourceFieldSelect/Index.vue +4 -1
- package/src/fields/DataSourceFields.vue +5 -1
- package/src/fields/DataSourceInput.vue +10 -28
- package/src/fields/DataSourceMethodSelect.vue +1 -1
- package/src/fields/DataSourceMethods.vue +6 -2
- package/src/fields/DataSourceMocks.vue +3 -0
- package/src/fields/DataSourceSelect.vue +1 -1
- package/src/fields/DisplayConds.vue +17 -139
- package/src/fields/EventSelect.vue +29 -416
- package/src/fields/KeyValue.vue +1 -1
- package/src/fields/StyleSetter/Index.vue +2 -8
- package/src/fields/StyleSetter/components/Border.vue +4 -38
- package/src/fields/StyleSetter/components/Box.vue +1 -1
- package/src/fields/StyleSetter/components/Position.vue +1 -1
- package/src/fields/StyleSetter/configs.ts +690 -0
- package/src/fields/StyleSetter/pro/Background.vue +9 -64
- package/src/fields/StyleSetter/pro/Border.vue +5 -16
- package/src/fields/StyleSetter/pro/Font.vue +11 -71
- package/src/fields/StyleSetter/pro/Layout.vue +10 -230
- package/src/fields/StyleSetter/pro/Position.vue +11 -82
- package/src/fields/StyleSetter/pro/Transform.vue +6 -34
- package/src/fields/UISelect.vue +0 -12
- package/src/fields/configs/codeSelect.ts +127 -0
- package/src/fields/configs/displayConds.ts +184 -0
- package/src/fields/configs/eventSelect.ts +309 -0
- package/src/fields/configs/stickyAddButton.ts +32 -0
- package/src/fields/headless-validation.ts +177 -0
- package/src/headless.ts +33 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/use-compare-form.ts +166 -0
- package/src/hooks/use-form-context.ts +56 -0
- package/src/hooks/use-stage.ts +1 -0
- package/src/index.ts +9 -0
- package/src/initService.ts +73 -18
- package/src/layouts/CodeEditor.vue +32 -6
- package/src/layouts/Framework.vue +7 -6
- package/src/layouts/history-list/BucketTab.vue +2 -2
- package/src/layouts/history-list/HistoryDiffDialog.vue +33 -15
- package/src/layouts/history-list/HistoryListPanel.vue +16 -18
- package/src/layouts/history-list/useHistoryRevert.ts +57 -41
- package/src/layouts/props-panel/FormPanel.vue +75 -20
- package/src/layouts/props-panel/PropsPanel.vue +81 -30
- package/src/layouts/props-panel/use-style-panel.ts +4 -3
- package/src/layouts/sidebar/ComponentListPanel.vue +6 -2
- package/src/layouts/sidebar/Sidebar.vue +5 -3
- package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +5 -2
- package/src/layouts/sidebar/code-block/useContentMenu.ts +14 -2
- package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +3 -0
- package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +3 -3
- package/src/layouts/sidebar/data-source/useContentMenu.ts +14 -2
- package/src/layouts/sidebar/layer/LayerMenu.vue +2 -2
- package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
- package/src/layouts/sidebar/layer/LayerPanel.vue +5 -2
- package/src/layouts/sidebar/layer/use-click.ts +3 -3
- package/src/layouts/sidebar/layer/use-node-status.ts +2 -2
- package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
- package/src/layouts/workspace/viewer/Stage.vue +80 -10
- package/src/layouts/workspace/viewer/ViewerMenu.vue +7 -7
- package/src/plugin.ts +35 -25
- package/src/services/codeBlock.ts +4 -0
- package/src/services/dataSource.ts +3 -0
- package/src/services/dep.ts +292 -47
- package/src/services/editor.ts +383 -120
- package/src/services/events.ts +8 -7
- package/src/services/history.ts +22 -1
- package/src/services/keybinding.ts +3 -3
- package/src/services/ui.ts +26 -5
- package/src/theme/code-block.scss +0 -37
- package/src/theme/display-conds.scss +4 -0
- package/src/theme/event.scss +25 -33
- package/src/theme/floating-box.scss +9 -1
- package/src/theme/framework.scss +4 -1
- package/src/theme/layer-node-content.scss +14 -0
- package/src/theme/nav-menu.scss +5 -1
- package/src/theme/props-panel.scss +17 -3
- package/src/theme/scroll-bar.scss +64 -0
- package/src/theme/theme.scss +3 -0
- package/src/theme/themes/magic-admin/index.scss +109 -9
- package/src/theme/ui-select.scss +9 -0
- package/src/type.ts +216 -6
- package/src/utils/code-block.ts +1 -0
- package/src/utils/config.ts +9 -1
- package/src/utils/const.ts +3 -3
- package/src/utils/content-menu.ts +2 -2
- package/src/utils/data-source/index.ts +31 -12
- package/src/utils/dep/collect-worker-client.ts +215 -0
- package/src/utils/dep/idle-task.ts +104 -35
- package/src/utils/dep/worker.ts +113 -9
- package/src/utils/event.ts +237 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/monaco-editor.ts +27 -0
- package/src/utils/operator.ts +2 -2
- package/src/utils/props.ts +61 -122
- package/src/utils/type-match-rules.ts +697 -0
- package/types/headless.d.ts +17 -0
- package/types/index.d.ts +1199 -724
- package/src/fields/StyleSetter/icons/align-items/index copy.ts +0 -5
package/src/type.ts
CHANGED
|
@@ -33,7 +33,8 @@ import type {
|
|
|
33
33
|
MPage,
|
|
34
34
|
MPageFragment,
|
|
35
35
|
} from '@tmagic/core';
|
|
36
|
-
import type {
|
|
36
|
+
import type { FieldSize } from '@tmagic/design';
|
|
37
|
+
import type { ChangeRecord, FormConfig, TableColumnConfig, TypeFunction } from '@tmagic/form';
|
|
37
38
|
import type StageCore from '@tmagic/stage';
|
|
38
39
|
import type {
|
|
39
40
|
CanDropIn,
|
|
@@ -76,7 +77,7 @@ export interface FrameworkSlots {
|
|
|
76
77
|
empty(props: {}): any;
|
|
77
78
|
workspace(props: {}): any;
|
|
78
79
|
'props-panel'(props: {}): any;
|
|
79
|
-
|
|
80
|
+
footer(props: {}): any;
|
|
80
81
|
'page-bar'(props: {}): any;
|
|
81
82
|
'page-bar-add-button'(props: {}): any;
|
|
82
83
|
'page-bar-title'(props: { page: MPage | MPageFragment }): any;
|
|
@@ -139,6 +140,7 @@ export type BeforeAdd = (config: MNode, parent: MContainer) => Promise<MNode> |
|
|
|
139
140
|
export type GetConfig = (config: FormConfig) => Promise<FormConfig> | FormConfig;
|
|
140
141
|
|
|
141
142
|
export interface EditorInstallOptions {
|
|
143
|
+
flat?: boolean;
|
|
142
144
|
parseDSL: <T = any>(dsl: string) => T;
|
|
143
145
|
customCreateMonacoEditor: (
|
|
144
146
|
monaco: typeof import('monaco-editor'),
|
|
@@ -170,12 +172,26 @@ export interface Services {
|
|
|
170
172
|
}
|
|
171
173
|
// #endregion Services
|
|
172
174
|
|
|
175
|
+
declare module '@tmagic/form-schema' {
|
|
176
|
+
interface FormContext {
|
|
177
|
+
/** 编辑器服务集合(由 Editor / FormPanel provide) */
|
|
178
|
+
services?: Services;
|
|
179
|
+
/** 当前画布 Stage 实例(由 Editor / FormPanel provide) */
|
|
180
|
+
stage?: any;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
173
184
|
export interface StageOptions {
|
|
174
185
|
runtimeUrl?: string;
|
|
175
186
|
autoScrollIntoView?: boolean;
|
|
176
187
|
containerHighlightClassName?: string;
|
|
177
188
|
containerHighlightDuration?: number;
|
|
178
189
|
containerHighlightType?: ContainerHighlightType;
|
|
190
|
+
/**
|
|
191
|
+
* 是否仅在新增组件(从组件列表拖入新组件)时才启用识别容器,
|
|
192
|
+
* 开启后在画布中拖动已有组件不会识别容器,默认 false
|
|
193
|
+
*/
|
|
194
|
+
containerHighlightAddOnly?: boolean;
|
|
179
195
|
disabledDragStart?: boolean;
|
|
180
196
|
render?: (stage: StageCore) => HTMLDivElement | void | Promise<HTMLDivElement | void>;
|
|
181
197
|
moveableOptions?: CustomizeMoveableOptions;
|
|
@@ -209,6 +225,26 @@ export interface StageOptions {
|
|
|
209
225
|
beforeDblclick?: (event: MouseEvent) => Promise<boolean | void> | boolean | void;
|
|
210
226
|
}
|
|
211
227
|
|
|
228
|
+
// #region NodeInvalidInfo
|
|
229
|
+
/**
|
|
230
|
+
* 节点校验错误信息,按来源(属性表单 / 样式表单)分别保存错误文案。
|
|
231
|
+
* 属性表单与样式表单是两个独立的 FormPanel,均指向同一节点,故以来源为键,
|
|
232
|
+
* 避免某个面板校验通过时误清另一个面板记录的错误。
|
|
233
|
+
* 节点视为存在错误当且仅当任一来源存在非空文本。
|
|
234
|
+
*/
|
|
235
|
+
export interface NodeInvalidInfo {
|
|
236
|
+
/** 属性表单校验错误文案(可能为包含 <br> 的 HTML) */
|
|
237
|
+
props?: string;
|
|
238
|
+
/** 样式表单校验错误文案(可能为包含 <br> 的 HTML) */
|
|
239
|
+
style?: string;
|
|
240
|
+
}
|
|
241
|
+
// #endregion NodeInvalidInfo
|
|
242
|
+
|
|
243
|
+
// #region NodeInvalidSource
|
|
244
|
+
/** 节点校验错误来源 */
|
|
245
|
+
export type NodeInvalidSource = keyof NodeInvalidInfo;
|
|
246
|
+
// #endregion NodeInvalidSource
|
|
247
|
+
|
|
212
248
|
export interface StoreState {
|
|
213
249
|
root: MApp | null;
|
|
214
250
|
page: MPage | MPageFragment | null;
|
|
@@ -219,6 +255,8 @@ export interface StoreState {
|
|
|
219
255
|
stage: StageCore | null;
|
|
220
256
|
stageLoading: boolean;
|
|
221
257
|
modifiedNodeIds: Map<Id, Id>;
|
|
258
|
+
/** 校验失败的节点错误信息,按节点 id 存储,供组件树标记与保存拦截读取 */
|
|
259
|
+
invalidNodeIds: Map<Id, NodeInvalidInfo>;
|
|
222
260
|
pageLength: number;
|
|
223
261
|
pageFragmentLength: number;
|
|
224
262
|
disabledMultiSelect: boolean;
|
|
@@ -278,6 +316,7 @@ export interface StageRect {
|
|
|
278
316
|
height: number | string;
|
|
279
317
|
}
|
|
280
318
|
|
|
319
|
+
// #region UiState
|
|
281
320
|
export interface UiState {
|
|
282
321
|
/** 当前点击画布是否触发选中,true: 不触发,false: 触发,默认为false */
|
|
283
322
|
uiSelectMode: boolean;
|
|
@@ -296,6 +335,12 @@ export interface UiState {
|
|
|
296
335
|
stageRect: StageRect;
|
|
297
336
|
/** 编辑器列布局每一列的宽度,分为左中右三列 */
|
|
298
337
|
columnWidth: GetColumnWidth;
|
|
338
|
+
/** 编辑器列布局左侧列最小宽度 */
|
|
339
|
+
minLeftColumnWidth: number;
|
|
340
|
+
/** 编辑器列布局中间列最小宽度 */
|
|
341
|
+
minCenterColumnWidth: number;
|
|
342
|
+
/** 编辑器列布局右侧列最小宽度 */
|
|
343
|
+
minRightColumnWidth: number;
|
|
299
344
|
/** 是否显示画布参考线,true: 显示,false: 不显示,默认为true */
|
|
300
345
|
showGuides: boolean;
|
|
301
346
|
/** 画布上是否存在参考线 */
|
|
@@ -329,6 +374,7 @@ export interface UiState {
|
|
|
329
374
|
height: number;
|
|
330
375
|
};
|
|
331
376
|
}
|
|
377
|
+
// #endregion UiState
|
|
332
378
|
|
|
333
379
|
// #region EditorNodeInfo
|
|
334
380
|
export interface EditorNodeInfo {
|
|
@@ -541,6 +587,46 @@ export interface CompareFormLoadConfigContext {
|
|
|
541
587
|
* 可通过 `ctx.defaultLoadConfig()` 复用默认结果再做二次加工。
|
|
542
588
|
*/
|
|
543
589
|
export type CompareFormLoadConfig = (ctx: CompareFormLoadConfigContext) => FormConfig | Promise<FormConfig>;
|
|
590
|
+
|
|
591
|
+
/**
|
|
592
|
+
* CompareForm / ViewForm 共用的基础 props。
|
|
593
|
+
* 两者都基于同一套「按 category 加载 FormConfig + 注入 services/stage」的逻辑(见 useCompareForm),
|
|
594
|
+
* 差异仅在于是否做新旧值对比。这里抽出公共字段避免重复定义。
|
|
595
|
+
*/
|
|
596
|
+
export interface CompareFormBaseProps {
|
|
597
|
+
/** 当前值(对比场景下为修改后的值) */
|
|
598
|
+
value: Partial<MNode> | Partial<DataSourceSchema> | Partial<CodeBlockContent> | Record<string, any>;
|
|
599
|
+
/**
|
|
600
|
+
* 类型说明:
|
|
601
|
+
* - `category` 为 `node` 时,`type` 为节点组件的类型,例如 'text'、'button'、'page'、'container' 等
|
|
602
|
+
* - `category` 为 `data-source` 时,`type` 为数据源类型,例如 'base'、'http'
|
|
603
|
+
* - `category` 为 `code-block` 时,`type` 可不传
|
|
604
|
+
*/
|
|
605
|
+
type?: string;
|
|
606
|
+
/** 表单配置类别,决定从哪里取 FormConfig */
|
|
607
|
+
category?: CompareCategory;
|
|
608
|
+
/** 数据源代码块场景下的数据源类型(base/http),用于代码块表单中"执行时机"展示 */
|
|
609
|
+
dataSourceType?: string;
|
|
610
|
+
labelWidth?: string;
|
|
611
|
+
/**
|
|
612
|
+
* 外层容器高度。设置后表单内容超出时会在组件内部出现滚动条,
|
|
613
|
+
* 避免 dialog / 面板使用方需要自行处理滚动。可传任意 CSS 长度,例如 `60vh` / `400px` / `100%`。
|
|
614
|
+
*/
|
|
615
|
+
height?: string;
|
|
616
|
+
/**
|
|
617
|
+
* 表单内组件的尺寸(透传给 MForm 的 `size`),可选 'large' | 'default' | 'small'。
|
|
618
|
+
* 缺省时使用 MForm 内置默认尺寸。
|
|
619
|
+
*/
|
|
620
|
+
size?: FieldSize;
|
|
621
|
+
/**
|
|
622
|
+
* 自定义 FormConfig 加载逻辑。传入后将接管内置的按 `category`(node/data-source/code-block)
|
|
623
|
+
* 取配置逻辑,调用方可根据业务自行返回(或异步返回)表单配置。可通过
|
|
624
|
+
* `ctx.defaultLoadConfig()` 复用默认结果再做二次加工。
|
|
625
|
+
*/
|
|
626
|
+
loadConfig?: CompareFormLoadConfig;
|
|
627
|
+
/** 编辑器服务集合,由调用方传入(不再通过 inject('services') 获取)。 */
|
|
628
|
+
services?: Services;
|
|
629
|
+
}
|
|
544
630
|
// #endregion CompareForm
|
|
545
631
|
|
|
546
632
|
// #region SideItemKey
|
|
@@ -844,6 +930,10 @@ export interface StepExtra {
|
|
|
844
930
|
selectedAfter?: Id[];
|
|
845
931
|
/** 本次操作涉及的节点 id 集合(page 类型) */
|
|
846
932
|
modifiedNodeIds?: Map<Id, Id>;
|
|
933
|
+
/** 操作前的节点校验错误快照,撤销后还原(使撤销一个「校验失败」的改动后错误消失) */
|
|
934
|
+
invalidNodeIdsBefore?: Map<Id, NodeInvalidInfo>;
|
|
935
|
+
/** 操作后的节点校验错误快照,重做后还原(使重做后错误恢复) */
|
|
936
|
+
invalidNodeIdsAfter?: Map<Id, NodeInvalidInfo>;
|
|
847
937
|
[key: string]: any;
|
|
848
938
|
}
|
|
849
939
|
// #endregion StepExtra
|
|
@@ -1200,9 +1290,24 @@ export interface PageBarSortOptions extends PartSortableOptions {
|
|
|
1200
1290
|
}
|
|
1201
1291
|
// #endregion PageBarSortOptions
|
|
1202
1292
|
|
|
1293
|
+
/**
|
|
1294
|
+
* 右键菜单当前目标(侧栏树节点等)。
|
|
1295
|
+
* 数据源 / 代码块面板通过 `customContentMenu` 的 `getTarget` 暴露,业务在 handler 内自行读取。
|
|
1296
|
+
*/
|
|
1297
|
+
export interface ContentMenuTarget {
|
|
1298
|
+
/** 目标 ID */
|
|
1299
|
+
id: string;
|
|
1300
|
+
/** 原始节点数据(树节点等) */
|
|
1301
|
+
data?: TreeNodeData;
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
export type ContentMenuType = 'layer' | 'data-source' | 'viewer' | 'code-block';
|
|
1305
|
+
|
|
1203
1306
|
export type CustomContentMenuFunction = (
|
|
1204
1307
|
menus: (MenuButton | MenuComponent)[],
|
|
1205
|
-
type:
|
|
1308
|
+
type: ContentMenuType,
|
|
1309
|
+
/** 读取当前右键目标;数据源 / 代码块面板会传入,图层 / 画布一般不需要 */
|
|
1310
|
+
getTarget?: () => ContentMenuTarget | null,
|
|
1206
1311
|
) => (MenuButton | MenuComponent)[];
|
|
1207
1312
|
|
|
1208
1313
|
export interface EditorEvents {
|
|
@@ -1218,8 +1323,63 @@ export interface EditorEvents {
|
|
|
1218
1323
|
'move-layer': [offset: number | LayerOffset];
|
|
1219
1324
|
'drag-to': [data: { targetIndex: number; configs: MNode | MNode[]; targetParent: MContainer }];
|
|
1220
1325
|
'history-change': [data: MPage | MPageFragment];
|
|
1326
|
+
/**
|
|
1327
|
+
* DSL 发生变更后统一触发,免去分别监听 add / remove / update / move-layer / drag-to。
|
|
1328
|
+
* 回调参数为 {@link EditorChangeEvent},按 `type` 区分操作类型并携带各自的操作内容(payload)
|
|
1329
|
+
* 以及变更所在的当前 page(可能为 null)。撤销 / 重做内部同样会经由
|
|
1330
|
+
* add / remove / update 触发本事件;如需区分「用户操作」与「撤销重做」请配合 `history-change`。
|
|
1331
|
+
*/
|
|
1332
|
+
change: [event: EditorChangeEvent];
|
|
1333
|
+
/** 节点校验错误状态发生变化时触发,携带当前完整的错误 Map(供非响应式消费方订阅) */
|
|
1334
|
+
'invalid-node-change': [invalidNodeIds: Map<Id, NodeInvalidInfo>];
|
|
1221
1335
|
}
|
|
1222
1336
|
|
|
1337
|
+
// #region EditorChangeEvent
|
|
1338
|
+
/** `change` 事件中单个变更项:变更的 node 及其所属的 page(可能为 null)。 */
|
|
1339
|
+
export interface EditorChangeItem {
|
|
1340
|
+
node: MNode;
|
|
1341
|
+
page: StoreState['page'];
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1344
|
+
/** `update` 类型变更项:node 为前后快照及 form 端变更记录,page 为其所属页面。 */
|
|
1345
|
+
export interface EditorUpdateChangeItem {
|
|
1346
|
+
node: { newNode: MNode; oldNode: MNode; changeRecords?: ChangeRecord[] };
|
|
1347
|
+
page: StoreState['page'];
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
/** {@link EditorEvents.change} 各操作类型共有的历史相关字段。 */
|
|
1351
|
+
export interface EditorChangeEventHistoryMeta {
|
|
1352
|
+
/**
|
|
1353
|
+
* 本次变更的「历史来源」(调用 DSL 操作时传入的 {@link HistoryOpOptions.historySource},
|
|
1354
|
+
* 撤销 / 重做时则为被应用 step 上记录的 `source`),未携带时为 undefined。
|
|
1355
|
+
*/
|
|
1356
|
+
historySource?: HistoryOpSource;
|
|
1357
|
+
/**
|
|
1358
|
+
* 本次操作是否未写入历史记录(即调用时传入的 {@link HistoryOpOptions.doNotPushHistory},缺省为 false);
|
|
1359
|
+
* 撤销 / 重做路径补发的事件恒为 true(撤销/重做本身不再入栈)。
|
|
1360
|
+
*/
|
|
1361
|
+
doNotPushHistory?: boolean;
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
/**
|
|
1365
|
+
* {@link EditorEvents.change} 的回调参数:以 `type` 区分操作类型,并携带对应的操作内容。
|
|
1366
|
+
* `data` 为本次变更的节点列表,每项包含 node 及其所属的 page(可能为 null);
|
|
1367
|
+
* `move-layer` 额外带层级偏移 `offset`,`drag-to` 额外带目标位置 `targetIndex` / `targetParent`;
|
|
1368
|
+
* 历史相关字段(historySource / doNotPushHistory)见 {@link EditorChangeEventHistoryMeta}。
|
|
1369
|
+
*/
|
|
1370
|
+
export type EditorChangeEvent =
|
|
1371
|
+
| ({ type: 'add'; data: EditorChangeItem[] } & EditorChangeEventHistoryMeta)
|
|
1372
|
+
| ({ type: 'remove'; data: EditorChangeItem[] } & EditorChangeEventHistoryMeta)
|
|
1373
|
+
| ({ type: 'update'; data: EditorUpdateChangeItem[] } & EditorChangeEventHistoryMeta)
|
|
1374
|
+
| ({ type: 'move-layer'; data: EditorChangeItem[]; offset: number | LayerOffset } & EditorChangeEventHistoryMeta)
|
|
1375
|
+
| ({
|
|
1376
|
+
type: 'drag-to';
|
|
1377
|
+
data: EditorChangeItem[];
|
|
1378
|
+
targetIndex: number;
|
|
1379
|
+
targetParent: MContainer;
|
|
1380
|
+
} & EditorChangeEventHistoryMeta);
|
|
1381
|
+
// #endregion EditorChangeEvent
|
|
1382
|
+
|
|
1223
1383
|
export interface HistoryEvents {
|
|
1224
1384
|
change: [
|
|
1225
1385
|
state: BaseStepValue | StepValue | CodeBlockStepValue | DataSourceStepValue,
|
|
@@ -1233,6 +1393,12 @@ export interface HistoryEvents {
|
|
|
1233
1393
|
'mark-saved': [{ kind: HistoryStepType; id?: Id }];
|
|
1234
1394
|
clear: [{ id: Id; stepType: HistoryStepType }];
|
|
1235
1395
|
'marker-change': [{ id: Id; marker: StepValue; stepType: HistoryStepType }];
|
|
1396
|
+
/**
|
|
1397
|
+
* 页面 / 页面片结构变更(新增 / 删除)时派发,见 {@link HistoryService.notifyPageStructureChange}。
|
|
1398
|
+
* 一次操作(add / remove / setRoot 整体替换)涉及多个页面时合并为**一个**事件;
|
|
1399
|
+
* `add` / `remove` 分别为本次新增与删除的页面列表(其一可为空数组)。
|
|
1400
|
+
*/
|
|
1401
|
+
'page-structure-change': [change: { add: (MPage | MPageFragment)[]; remove: (MPage | MPageFragment)[] }];
|
|
1236
1402
|
}
|
|
1237
1403
|
|
|
1238
1404
|
export const canUsePluginMethods = {
|
|
@@ -1301,6 +1467,29 @@ export interface DslOpOptions extends HistoryOpOptions {
|
|
|
1301
1467
|
}
|
|
1302
1468
|
// #endregion DslOpOptions
|
|
1303
1469
|
|
|
1470
|
+
// #region UpdateOptions
|
|
1471
|
+
/**
|
|
1472
|
+
* {@link EditorService.update} / {@link EditorService.doUpdate} 的额外数据
|
|
1473
|
+
* - changeRecords: 单节点 form 端变更记录(多节点场景下被忽略,使用 changeRecordList)
|
|
1474
|
+
* - changeRecordList: 多节点 form 端变更记录列表,按 config 数组同序对应每个节点;优先级高于 changeRecords
|
|
1475
|
+
* - replace: 为 true 时跳过 mergeWith / toggleFixedPosition / setChildrenLayout,直接用传入配置整节点替换
|
|
1476
|
+
* - invalidInfo: 属性面板提交时携带的校验错误信息,在写入历史记录之前落库
|
|
1477
|
+
*/
|
|
1478
|
+
export interface UpdateOptions extends HistoryOpOptionsWithChangeRecords {
|
|
1479
|
+
changeRecordList?: ChangeRecord[][];
|
|
1480
|
+
/**
|
|
1481
|
+
* 为 true 时不做深合并等变换,直接用传入配置整节点替换现有节点。
|
|
1482
|
+
* 适用于源码编辑、历史整节点快照回放等「完整 DSL」场景;默认 false(局部属性更新走 merge)。
|
|
1483
|
+
*/
|
|
1484
|
+
replace?: boolean;
|
|
1485
|
+
/**
|
|
1486
|
+
* 属性面板提交时携带的校验错误信息,在写入历史记录之前落库,
|
|
1487
|
+
* 使历史快照与本次变更对齐,从而 undo/redo 能正确还原错误标记。
|
|
1488
|
+
*/
|
|
1489
|
+
invalidInfo?: { id: Id; source: NodeInvalidSource; error?: string };
|
|
1490
|
+
}
|
|
1491
|
+
// #endregion UpdateOptions
|
|
1492
|
+
|
|
1304
1493
|
/** 差异对话框的入参 */
|
|
1305
1494
|
export interface DiffDialogPayload {
|
|
1306
1495
|
/** 表单类别 */
|
|
@@ -1319,6 +1508,14 @@ export interface DiffDialogPayload {
|
|
|
1319
1508
|
targetLabel?: string;
|
|
1320
1509
|
/** 用于标题展示的目标 id */
|
|
1321
1510
|
id?: string | number;
|
|
1511
|
+
/**
|
|
1512
|
+
* 指定打开时的初始对比模式:
|
|
1513
|
+
* - before:该步骤修改前 vs 修改后
|
|
1514
|
+
* - current:该步骤修改后 vs 当前最新值
|
|
1515
|
+
* 不传时按是否存在「修改后的值」/「当前值」自动推断。
|
|
1516
|
+
* 若指定的模式当前不可用(对应数据缺失),将回退到自动推断结果。
|
|
1517
|
+
*/
|
|
1518
|
+
mode?: 'before' | 'current';
|
|
1322
1519
|
}
|
|
1323
1520
|
|
|
1324
1521
|
/**
|
|
@@ -1353,6 +1550,8 @@ export interface HistoryBucketConfig<T extends BaseStepValue = BaseStepValue> ex
|
|
|
1353
1550
|
showInitial?: boolean;
|
|
1354
1551
|
/** 是否支持「跳转到该记录」(goto),默认 true。 */
|
|
1355
1552
|
gotoEnabled?: boolean;
|
|
1553
|
+
/** 是否展示顶部「清空」按钮,默认 true。无需提供清空能力的自定义历史可传 false。 */
|
|
1554
|
+
showClear?: boolean;
|
|
1356
1555
|
}
|
|
1357
1556
|
|
|
1358
1557
|
export interface UseHistoryRevertOptions {
|
|
@@ -1363,10 +1562,11 @@ export interface UseHistoryRevertOptions {
|
|
|
1363
1562
|
*/
|
|
1364
1563
|
appContext?: AppContext | null;
|
|
1365
1564
|
/**
|
|
1366
|
-
*
|
|
1367
|
-
*
|
|
1565
|
+
* 内置页面 / 数据源 / 代码块的差异 / 回滚确认弹窗默认宽度(透传给 TMagicDialog 的 `width`),
|
|
1566
|
+
* 如 `'1200px'` / `'80%'`。缺省时使用弹窗内置默认宽度(900px)。
|
|
1567
|
+
* 业务自有历史(`viewDiff` / `confirmAndRevert`)可在调用时通过各自入参的 `width` 单独覆盖。
|
|
1368
1568
|
*/
|
|
1369
|
-
|
|
1569
|
+
dialogWidth?: string;
|
|
1370
1570
|
}
|
|
1371
1571
|
|
|
1372
1572
|
/**
|
|
@@ -1382,6 +1582,16 @@ export interface CustomDiffFormOptions {
|
|
|
1382
1582
|
loadConfig?: CompareFormLoadConfig;
|
|
1383
1583
|
/** 需要走 self diff 的字段类型(如模块的 mod-cond)。 */
|
|
1384
1584
|
selfDiffFieldTypes?: string[];
|
|
1585
|
+
/**
|
|
1586
|
+
* 差异 / 确认回滚弹窗宽度(透传给 HistoryDiffDialog 的 TMagicDialog `width`),
|
|
1587
|
+
* 如 `'1200px'` / `'80%'`。缺省时使用弹窗内置默认宽度(900px)。
|
|
1588
|
+
*/
|
|
1589
|
+
width?: string;
|
|
1590
|
+
/**
|
|
1591
|
+
* 差异 / 确认回滚弹窗内 form 表单的尺寸(透传给 CompareForm 的 `size`),
|
|
1592
|
+
* 可选 `'large' | 'default' | 'small'`,缺省时使用表单内置默认尺寸。
|
|
1593
|
+
*/
|
|
1594
|
+
size?: FieldSize;
|
|
1385
1595
|
}
|
|
1386
1596
|
|
|
1387
1597
|
/**
|
package/src/utils/code-block.ts
CHANGED
|
@@ -103,6 +103,7 @@ export const getCodeBlockFormConfig = (options: GetCodeBlockFormConfigOptions =
|
|
|
103
103
|
const list = [
|
|
104
104
|
{ text: '初始化前', value: 'beforeInit' },
|
|
105
105
|
{ text: '初始化后', value: 'afterInit' },
|
|
106
|
+
{ text: '页面渲染后', value: 'mounted' },
|
|
106
107
|
];
|
|
107
108
|
if (dataSourceType?.() !== 'base') {
|
|
108
109
|
list.push({ text: '请求前', value: 'beforeRequest' });
|
package/src/utils/config.ts
CHANGED
|
@@ -16,14 +16,22 @@
|
|
|
16
16
|
* limitations under the License.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
+
import { ref } from 'vue';
|
|
20
|
+
|
|
19
21
|
import { EditorInstallOptions } from '@editor/type';
|
|
20
22
|
|
|
21
23
|
let $TMAGIC_EDITOR: EditorInstallOptions = {} as any;
|
|
22
24
|
|
|
25
|
+
// 用 ref 持有 flat 全局开关:const 引用本身不可变,符合 `import/no-mutable-exports`;
|
|
26
|
+
// 通过 `.value` 改值仍保持模块级响应式语义,与 editor/plugin.ts、design/index.ts 里
|
|
27
|
+
// 的同名变量写法对齐。
|
|
28
|
+
const isGlobalFlat = ref(false);
|
|
29
|
+
|
|
23
30
|
const setEditorConfig = (option: EditorInstallOptions): void => {
|
|
24
31
|
$TMAGIC_EDITOR = option;
|
|
32
|
+
isGlobalFlat.value = option.flat ?? false;
|
|
25
33
|
};
|
|
26
34
|
|
|
27
35
|
const getEditorConfig = <K extends keyof EditorInstallOptions>(key: K): EditorInstallOptions[K] => $TMAGIC_EDITOR[key];
|
|
28
36
|
|
|
29
|
-
export { getEditorConfig, setEditorConfig };
|
|
37
|
+
export { getEditorConfig, isGlobalFlat, setEditorConfig };
|
package/src/utils/const.ts
CHANGED
|
@@ -5,11 +5,11 @@ export const LEFT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorLeftColumnWidthData';
|
|
|
5
5
|
export const RIGHT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorRightColumnWidthData';
|
|
6
6
|
export const PROPS_PANEL_WIDTH_STORAGE_KEY = '$MagicEditorPropsPanelWidthData';
|
|
7
7
|
|
|
8
|
-
export const DEFAULT_LEFT_COLUMN_WIDTH =
|
|
8
|
+
export const DEFAULT_LEFT_COLUMN_WIDTH = 345;
|
|
9
9
|
export const DEFAULT_RIGHT_COLUMN_WIDTH = 480;
|
|
10
10
|
|
|
11
|
-
// 2026-06-11 设计稿修改,固定左侧栏存在时最小宽度为
|
|
12
|
-
export const MIN_LEFT_COLUMN_WIDTH =
|
|
11
|
+
// 2026-06-11 设计稿修改,固定左侧栏存在时最小宽度为 345
|
|
12
|
+
export const MIN_LEFT_COLUMN_WIDTH = 345;
|
|
13
13
|
export const MIN_CENTER_COLUMN_WIDTH = 400;
|
|
14
14
|
export const MIN_RIGHT_COLUMN_WIDTH = 300;
|
|
15
15
|
|
|
@@ -2,7 +2,7 @@ import { computed, markRaw, type ShallowRef } from 'vue';
|
|
|
2
2
|
import { CopyDocument, Delete, DocumentCopy } from '@element-plus/icons-vue';
|
|
3
3
|
|
|
4
4
|
import { cloneDeep, Id, MContainer, NodeType } from '@tmagic/core';
|
|
5
|
-
import { calcValueByFontsize, isPage,
|
|
5
|
+
import { calcValueByFontsize, isPage, isPageOrFragment } from '@tmagic/utils';
|
|
6
6
|
|
|
7
7
|
import ContentMenu from '@editor/components/ContentMenu.vue';
|
|
8
8
|
import type { HistoryOpSource, MenuButton, Services } from '@editor/type';
|
|
@@ -20,7 +20,7 @@ export const useDeleteMenu = (historySource?: HistoryOpSource): MenuButton => ({
|
|
|
20
20
|
icon: Delete,
|
|
21
21
|
display: ({ editorService }) => {
|
|
22
22
|
const node = editorService.get('node');
|
|
23
|
-
return node?.type !== NodeType.ROOT && !
|
|
23
|
+
return node?.type !== NodeType.ROOT && !isPageOrFragment(node);
|
|
24
24
|
},
|
|
25
25
|
handler: ({ editorService }) => {
|
|
26
26
|
const nodes = editorService.get('nodes');
|
|
@@ -37,6 +37,7 @@ const dataSourceFormConfig: TabConfig = {
|
|
|
37
37
|
name: 'events',
|
|
38
38
|
src: 'datasource',
|
|
39
39
|
type: 'event-select',
|
|
40
|
+
defaultValue: [],
|
|
40
41
|
},
|
|
41
42
|
],
|
|
42
43
|
},
|
|
@@ -235,19 +236,37 @@ export const getCascaderOptionsFromFields = (
|
|
|
235
236
|
return result;
|
|
236
237
|
};
|
|
237
238
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
239
|
+
/**
|
|
240
|
+
* 按字段名路径下钻 DataSchema。
|
|
241
|
+
* @param skipNumberIndices 为 true 时跳过数字段(模板路径中的数组下标,如 arr[0].x)
|
|
242
|
+
*/
|
|
243
|
+
export const resolveFieldByPath = (
|
|
244
|
+
fields: DataSchema[] | undefined,
|
|
245
|
+
fieldNames: string[],
|
|
246
|
+
options: { skipNumberIndices?: boolean } = {},
|
|
247
|
+
): { ok: boolean; field?: DataSchema; fields: DataSchema[]; failedName?: string } => {
|
|
248
|
+
let currentFields = fields || [];
|
|
249
|
+
let field: DataSchema | undefined;
|
|
247
250
|
|
|
248
|
-
|
|
249
|
-
|
|
251
|
+
for (const name of fieldNames) {
|
|
252
|
+
if (options.skipNumberIndices && isNumber(name)) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (!currentFields.length) {
|
|
256
|
+
return { ok: false, fields: currentFields, failedName: name };
|
|
257
|
+
}
|
|
258
|
+
field = currentFields.find((item) => item.name === name);
|
|
259
|
+
if (!field) {
|
|
260
|
+
return { ok: false, fields: currentFields, failedName: name };
|
|
261
|
+
}
|
|
262
|
+
currentFields = field.fields || [];
|
|
250
263
|
}
|
|
251
264
|
|
|
252
|
-
return
|
|
265
|
+
return { field, ok: true, fields: currentFields };
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
export const getFieldType = (ds: DataSourceSchema | undefined, fieldNames: string[]) => {
|
|
269
|
+
const { ok, field } = resolveFieldByPath(ds?.fields, fieldNames);
|
|
270
|
+
if (!ok) return '';
|
|
271
|
+
return field?.type || '';
|
|
253
272
|
};
|