@tmagic/editor 1.8.0-manmanyu.10 → 1.8.0-manmanyu.11
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 +9 -1
- package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +13 -4
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/index.js +3 -1
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +13 -5
- package/dist/es/layouts/history-list/useHistoryRevert.js +6 -3
- package/dist/es/style.css +1 -0
- package/dist/style.css +1 -0
- package/dist/themes/magic-admin.css +20 -0
- package/dist/tmagic-editor.umd.cjs +47 -14
- package/package.json +7 -7
- package/src/Editor.vue +10 -1
- package/src/components/CompareForm.vue +14 -1
- package/src/fields/DataSourceInput.vue +3 -3
- package/src/index.ts +2 -0
- package/src/layouts/history-list/HistoryDiffDialog.vue +2 -0
- package/src/layouts/history-list/HistoryListPanel.vue +16 -6
- package/src/layouts/history-list/useHistoryRevert.ts +17 -11
- package/src/type.ts +11 -0
- package/types/index.d.ts +56 -35
|
@@ -19,7 +19,7 @@ import stageOverlay_default from "./services/stageOverlay.js";
|
|
|
19
19
|
import { defaultEditorProps } from "./editorProps.js";
|
|
20
20
|
import { initServiceEvents, initServiceState } from "./initService.js";
|
|
21
21
|
import { M_THEME_KEY } from "@tmagic/design";
|
|
22
|
-
import { computed, createBlock, createVNode, defineComponent, mergeDefaults, openBlock, provide, renderSlot, unref, withCtx } from "vue";
|
|
22
|
+
import { computed, createBlock, createVNode, defineComponent, mergeDefaults, openBlock, provide, ref, renderSlot, unref, withCtx } from "vue";
|
|
23
23
|
import { EventEmitter } from "events";
|
|
24
24
|
//#region packages/editor/src/Editor.vue?vue&type=script&setup=true&lang.ts
|
|
25
25
|
var Editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
@@ -127,6 +127,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
127
127
|
beforeDblclick: props.beforeDblclick
|
|
128
128
|
};
|
|
129
129
|
stageOverlay_default.set("stageOptions", stageOptions);
|
|
130
|
+
const propsPanelRef = ref(null);
|
|
130
131
|
provide("services", services);
|
|
131
132
|
provide("codeOptions", props.codeOptions);
|
|
132
133
|
provide("stageOptions", stageOptions);
|
|
@@ -137,6 +138,11 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
137
138
|
*/
|
|
138
139
|
provide("extendFormState", props.extendFormState);
|
|
139
140
|
/**
|
|
141
|
+
* 提供 PropsPanel 主属性表单的 formState getter,供历史差异弹窗复用,
|
|
142
|
+
* 让 CompareForm 与 PropsPanel 的 filterFunction 上下文保持一致。
|
|
143
|
+
*/
|
|
144
|
+
provide("getPropsPanelFormState", () => propsPanelRef.value?.configForm?.formState);
|
|
145
|
+
/**
|
|
140
146
|
* 把历史记录面板的自定义扩展 tab 提供给深层的 HistoryListPanel(它挂在 NavMenu 中,
|
|
141
147
|
* 以 markRaw component 形式渲染,无法直接通过 props 透传)。业务方可借此在历史记录
|
|
142
148
|
* 面板内追加自定义模块的历史 tab。
|
|
@@ -150,9 +156,11 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
150
156
|
*/
|
|
151
157
|
provide(M_THEME_KEY, computed(() => props.theme ?? ""));
|
|
152
158
|
const propsPanelMountedHandler = (e) => {
|
|
159
|
+
propsPanelRef.value = e;
|
|
153
160
|
emit("props-panel-mounted", e);
|
|
154
161
|
};
|
|
155
162
|
const propsPanelUnmountedHandler = () => {
|
|
163
|
+
propsPanelRef.value = null;
|
|
156
164
|
emit("props-panel-unmounted");
|
|
157
165
|
};
|
|
158
166
|
const propsPanelSubmitErrorHandler = (e) => {
|
|
@@ -16,7 +16,12 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
16
16
|
dataSourceType: {},
|
|
17
17
|
labelWidth: { default: "120px" },
|
|
18
18
|
height: {},
|
|
19
|
-
extendState: {
|
|
19
|
+
extendState: {
|
|
20
|
+
type: Function,
|
|
21
|
+
default: (state) => state
|
|
22
|
+
},
|
|
23
|
+
baseFormState: {},
|
|
24
|
+
selfDiffFieldTypes: {},
|
|
20
25
|
loadConfig: {},
|
|
21
26
|
services: { default: () => useServices() }
|
|
22
27
|
},
|
|
@@ -94,6 +99,9 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
94
99
|
})
|
|
95
100
|
};
|
|
96
101
|
});
|
|
102
|
+
const mergedExtendState = (state) => {
|
|
103
|
+
return props.extendState(props.baseFormState || state);
|
|
104
|
+
};
|
|
97
105
|
/**
|
|
98
106
|
* 内置的默认 FormConfig 加载逻辑:按 `category` 从对应 service / 工具取配置。
|
|
99
107
|
* 作为 ctx.defaultLoadConfig 透传给自定义 `loadConfig`,方便复用与二次加工。
|
|
@@ -173,14 +181,15 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
173
181
|
"is-compare": true,
|
|
174
182
|
disabled: true,
|
|
175
183
|
"label-width": __props.labelWidth,
|
|
176
|
-
"extend-state":
|
|
177
|
-
"show-diff": showDiff
|
|
184
|
+
"extend-state": mergedExtendState,
|
|
185
|
+
"show-diff": showDiff,
|
|
186
|
+
"self-diff-field-types": __props.selfDiffFieldTypes
|
|
178
187
|
}, null, 8, [
|
|
179
188
|
"config",
|
|
180
189
|
"init-values",
|
|
181
190
|
"last-values",
|
|
182
191
|
"label-width",
|
|
183
|
-
"
|
|
192
|
+
"self-diff-field-types"
|
|
184
193
|
])) : createCommentVNode("v-if", true)], 4);
|
|
185
194
|
};
|
|
186
195
|
}
|
|
@@ -230,7 +230,7 @@ var DataSourceInput_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
230
230
|
onSelect: selectHandler
|
|
231
231
|
}), {
|
|
232
232
|
suffix: withCtx(() => [createVNode(Icon_default, { icon: unref(Coin) }, null, 8, ["icon"])]),
|
|
233
|
-
default: withCtx((
|
|
233
|
+
default: withCtx((slotProps) => [createElementVNode("div", _hoisted_1, [createElementVNode("div", null, toDisplayString(slotProps?.item?.text || ""), 1), createElementVNode("span", _hoisted_2, toDisplayString(slotProps?.item?.value || ""), 1)])]),
|
|
234
234
|
_: 1
|
|
235
235
|
}, 16, ["modelValue"])) : (openBlock(), createElementBlock("div", {
|
|
236
236
|
key: 2,
|
package/dist/es/index.js
CHANGED
|
@@ -52,9 +52,11 @@ import DataSourceConfigPanel_default from "./layouts/sidebar/data-source/DataSou
|
|
|
52
52
|
import LayerPanel_default from "./layouts/sidebar/layer/LayerPanel.js";
|
|
53
53
|
import ComponentListPanel_default from "./layouts/sidebar/ComponentListPanel.js";
|
|
54
54
|
import codeBlock_default from "./services/codeBlock.js";
|
|
55
|
+
import componentList_default from "./services/componentList.js";
|
|
55
56
|
import dataSource_default from "./services/dataSource.js";
|
|
56
57
|
import dep_default from "./services/dep.js";
|
|
57
58
|
import events_default from "./services/events.js";
|
|
59
|
+
import keybinding_default from "./services/keybinding.js";
|
|
58
60
|
import stageOverlay_default from "./services/stageOverlay.js";
|
|
59
61
|
import Editor_default from "./Editor.js";
|
|
60
62
|
import CodeSelect_default from "./fields/CodeSelect.js";
|
|
@@ -85,4 +87,4 @@ export * from "@tmagic/table";
|
|
|
85
87
|
export * from "@tmagic/stage";
|
|
86
88
|
export * from "@tmagic/design";
|
|
87
89
|
export * from "@tmagic/utils";
|
|
88
|
-
export { CODE_DRAFT_STORAGE_KEY, COPY_CODE_STORAGE_KEY, COPY_DS_STORAGE_KEY, COPY_STORAGE_KEY, CodeBlockEditor_default as CodeBlockEditor, CodeBlockList_default as CodeBlockList, CodeBlockListPanel_default as CodeBlockListPanel, CodeDeleteErrorType, CodeSelect_default as CodeSelect, CodeSelectCol_default as CodeSelectCol, ColumnLayout, CompareForm_default as CompareForm, ComponentListPanel_default as ComponentListPanel, CondOpSelect_default as CondOpSelect, ContentMenu_default as ContentMenu, DEFAULT_LEFT_COLUMN_WIDTH, DEFAULT_RIGHT_COLUMN_WIDTH, DataSourceAddButton_default as DataSourceAddButton, DataSourceConfigPanel_default as DataSourceConfigPanel, Index_default as DataSourceFieldSelect, DataSourceFields_default as DataSourceFields, DataSourceInput_default as DataSourceInput, DataSourceMethodSelect_default as DataSourceMethodSelect, DataSourceMethods_default as DataSourceMethods, DataSourceMocks_default as DataSourceMocks, DataSourceSelect_default as DataSourceSelect, DepTargetType, DisplayConds_default as DisplayConds, DragType, EventSelect_default as EventSelect, Fixed2Other, FloatingBox_default as FloatingBox, H_GUIDE_LINE_STORAGE_KEY, HistoryDiffDialog_default as HistoryDiffDialog, Bucket_default as HistoryListBucket, BucketTab_default as HistoryListBucketTab, Icon_default as Icon, IdleTask, KeyBindingCommand, KeyValue_default as KeyValue, Keys, LEFT_COLUMN_WIDTH_STORAGE_KEY, LayerOffset, LayerPanel_default as LayerPanel, Layout, SplitView_default as LayoutContainer, MIN_CENTER_COLUMN_WIDTH, MIN_LEFT_COLUMN_WIDTH, MIN_RIGHT_COLUMN_WIDTH, PROPS_PANEL_WIDTH_STORAGE_KEY, PageFragmentSelect_default as PageFragmentSelect, FormPanel_default as PropsFormPanel, PropsPanel_default as PropsPanel, RIGHT_COLUMN_WIDTH_STORAGE_KEY, Resizer_default as Resizer, ScrollViewer, SideItemKey, SplitView_default as SplitView, StageCore, Index_default$1 as StyleSetter, CodeEditor_default as TMagicCodeEditor, Editor_default as TMagicEditor, ToolButton_default as ToolButton, Tree_default as Tree, TreeNode_default as TreeNode, UI_SELECT_MODE_EVENT_NAME, UndoRedo, V_GUIDE_LINE_STORAGE_KEY, advancedTabConfig, arrayOptions, beforePaste, buildChangeRecords, calcAlignCenterStyle, calcLayerTargetIndex, calcMoveStyle, canUsePluginMethods, change2Fixed, classifyDragSources, codeBlock_default as codeBlockService, collectRelatedNodes, confirmHistoryAction, createStackStep, dataSource_default as dataSourceService, debug, plugin_default as default, defaultIsExpandable, dep_default as depService, describeRevertStep, describeStepForRevert, deserializeStacks, designPlugin, detectStackOpType, detectTargetId, detectTargetName, displayTabConfig, editorNodeMergeCustomizer, editor_default as editorService, eqOptions, error, eventTabConfig, events_default as eventsService, fillConfig, fixNodeLeft, fixNodePosition, formPlugin, generatePageName, generatePageNameByApp, getAddParent, getCascaderOptionsFromFields, getCodeBlockFormConfig, getDefaultConfig, getDisplayField, getEditorConfig, getFieldType, getFormConfig, getFormValue, getGuideLineFromCache, getInitPositionStyle, getLastPushedHistoryIds, getNodeIndex, getOrCreateStack, getPageFragmentList, getPageList, getPageNameList, getPositionInContainer, getRelativeStyle, history_default as historyService, idbDelete, idbGet, idbSet, info, isIncludeDataSource, isIndexedDBSupported, monaco_editor_default as loadMonaco, log, markStackSaved, mergeSteps, moveItemsInContainer, numberOptions, openIndexedDB, props_default as propsService, resolveSelectedNode, serializeConfig, serializeStacks, setChildrenLayout, setEditorConfig, setLayout, stageOverlay_default as stageOverlayService, storage_default as storageService, styleTabConfig, tablePlugin, toggleFixedPosition, ui_default as uiService, undoFloor, updateStatus, useCodeBlockEdit, useEditorContentHeight, useFilter, useFloatBox, useGetSo, useHistoryRevert, useNextFloatBoxPosition, useNodeStatus, useServices, useStage, useWindowRect, warn };
|
|
90
|
+
export { CODE_DRAFT_STORAGE_KEY, COPY_CODE_STORAGE_KEY, COPY_DS_STORAGE_KEY, COPY_STORAGE_KEY, CodeBlockEditor_default as CodeBlockEditor, CodeBlockList_default as CodeBlockList, CodeBlockListPanel_default as CodeBlockListPanel, CodeDeleteErrorType, CodeSelect_default as CodeSelect, CodeSelectCol_default as CodeSelectCol, ColumnLayout, CompareForm_default as CompareForm, ComponentListPanel_default as ComponentListPanel, CondOpSelect_default as CondOpSelect, ContentMenu_default as ContentMenu, DEFAULT_LEFT_COLUMN_WIDTH, DEFAULT_RIGHT_COLUMN_WIDTH, DataSourceAddButton_default as DataSourceAddButton, DataSourceConfigPanel_default as DataSourceConfigPanel, Index_default as DataSourceFieldSelect, DataSourceFields_default as DataSourceFields, DataSourceInput_default as DataSourceInput, DataSourceMethodSelect_default as DataSourceMethodSelect, DataSourceMethods_default as DataSourceMethods, DataSourceMocks_default as DataSourceMocks, DataSourceSelect_default as DataSourceSelect, DepTargetType, DisplayConds_default as DisplayConds, DragType, EventSelect_default as EventSelect, Fixed2Other, FloatingBox_default as FloatingBox, H_GUIDE_LINE_STORAGE_KEY, HistoryDiffDialog_default as HistoryDiffDialog, Bucket_default as HistoryListBucket, BucketTab_default as HistoryListBucketTab, Icon_default as Icon, IdleTask, KeyBindingCommand, KeyValue_default as KeyValue, Keys, LEFT_COLUMN_WIDTH_STORAGE_KEY, LayerOffset, LayerPanel_default as LayerPanel, Layout, SplitView_default as LayoutContainer, MIN_CENTER_COLUMN_WIDTH, MIN_LEFT_COLUMN_WIDTH, MIN_RIGHT_COLUMN_WIDTH, PROPS_PANEL_WIDTH_STORAGE_KEY, PageFragmentSelect_default as PageFragmentSelect, FormPanel_default as PropsFormPanel, PropsPanel_default as PropsPanel, RIGHT_COLUMN_WIDTH_STORAGE_KEY, Resizer_default as Resizer, ScrollViewer, SideItemKey, SplitView_default as SplitView, StageCore, Index_default$1 as StyleSetter, CodeEditor_default as TMagicCodeEditor, Editor_default as TMagicEditor, ToolButton_default as ToolButton, Tree_default as Tree, TreeNode_default as TreeNode, UI_SELECT_MODE_EVENT_NAME, UndoRedo, V_GUIDE_LINE_STORAGE_KEY, advancedTabConfig, arrayOptions, beforePaste, buildChangeRecords, calcAlignCenterStyle, calcLayerTargetIndex, calcMoveStyle, canUsePluginMethods, change2Fixed, classifyDragSources, codeBlock_default as codeBlockService, collectRelatedNodes, componentList_default as componentListService, confirmHistoryAction, createStackStep, dataSource_default as dataSourceService, debug, plugin_default as default, defaultIsExpandable, dep_default as depService, describeRevertStep, describeStepForRevert, deserializeStacks, designPlugin, detectStackOpType, detectTargetId, detectTargetName, displayTabConfig, editorNodeMergeCustomizer, editor_default as editorService, eqOptions, error, eventTabConfig, events_default as eventsService, fillConfig, fixNodeLeft, fixNodePosition, formPlugin, generatePageName, generatePageNameByApp, getAddParent, getCascaderOptionsFromFields, getCodeBlockFormConfig, getDefaultConfig, getDisplayField, getEditorConfig, getFieldType, getFormConfig, getFormValue, getGuideLineFromCache, getInitPositionStyle, getLastPushedHistoryIds, getNodeIndex, getOrCreateStack, getPageFragmentList, getPageList, getPageNameList, getPositionInContainer, getRelativeStyle, history_default as historyService, idbDelete, idbGet, idbSet, info, isIncludeDataSource, isIndexedDBSupported, keybinding_default as keybindingService, monaco_editor_default as loadMonaco, log, markStackSaved, mergeSteps, moveItemsInContainer, numberOptions, openIndexedDB, props_default as propsService, resolveSelectedNode, serializeConfig, serializeStacks, setChildrenLayout, setEditorConfig, setLayout, stageOverlay_default as stageOverlayService, storage_default as storageService, styleTabConfig, tablePlugin, toggleFixedPosition, ui_default as uiService, undoFloor, updateStatus, useCodeBlockEdit, useEditorContentHeight, useFilter, useFloatBox, useGetSo, useHistoryRevert, useNextFloatBoxPosition, useNodeStatus, useServices, useStage, useWindowRect, warn };
|
package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -31,7 +31,8 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
|
|
|
31
31
|
width: { default: "900px" },
|
|
32
32
|
isConfirm: { type: Boolean },
|
|
33
33
|
onConfirm: {},
|
|
34
|
-
selfDiffFieldTypes: {}
|
|
34
|
+
selfDiffFieldTypes: {},
|
|
35
|
+
compareFormState: {}
|
|
35
36
|
},
|
|
36
37
|
emits: ["close"],
|
|
37
38
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
@@ -236,6 +237,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
|
|
|
236
237
|
"data-source-type": payload.value.dataSourceType,
|
|
237
238
|
value: rightValue.value,
|
|
238
239
|
"last-value": leftValue.value,
|
|
240
|
+
"base-form-state": __props.compareFormState,
|
|
239
241
|
"extend-state": __props.extendState,
|
|
240
242
|
"load-config": __props.loadConfig,
|
|
241
243
|
"self-diff-field-types": __props.selfDiffFieldTypes,
|
|
@@ -247,6 +249,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
|
|
|
247
249
|
"data-source-type",
|
|
248
250
|
"value",
|
|
249
251
|
"last-value",
|
|
252
|
+
"base-form-state",
|
|
250
253
|
"extend-state",
|
|
251
254
|
"load-config",
|
|
252
255
|
"self-diff-field-types",
|
package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -68,6 +68,7 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
68
68
|
* 未提供时为 undefined,CompareForm/MForm 会跳过 extendState 处理。
|
|
69
69
|
*/
|
|
70
70
|
const extendFormState = inject("extendFormState", void 0);
|
|
71
|
+
const getPropsPanelFormState = inject("getPropsPanelFormState", void 0);
|
|
71
72
|
const { expanded, toggleGroup, pageGroups, dataSourceGroups, codeBlockGroups, pageGroupsDisplay, dataSourceGroupsByTarget, codeBlockGroupsByTarget } = useHistoryList();
|
|
72
73
|
/**
|
|
73
74
|
* 当前活动页的「加载/初始」标记记录(设置 root 时生成),透传给 PageTab 的底部初始行展示。
|
|
@@ -151,7 +152,10 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
151
152
|
* 二者均由 useHistoryRevert 内部按需动态挂载 HistoryDiffDialog,
|
|
152
153
|
* 业务方亦可直接 import useHistoryRevert(services) 调用,无需自行挂载任何弹窗。
|
|
153
154
|
*/
|
|
154
|
-
const { onPageRevert, onDataSourceRevert, onCodeBlockRevert, onPageDiff, onDataSourceDiff, onCodeBlockDiff } = useHistoryRevert(services, {
|
|
155
|
+
const { onPageRevert, onDataSourceRevert, onCodeBlockRevert, onPageDiff, onDataSourceDiff, onCodeBlockDiff } = useHistoryRevert(services, {
|
|
156
|
+
extendState: extendFormState,
|
|
157
|
+
getPropsPanelFormState
|
|
158
|
+
});
|
|
155
159
|
/**
|
|
156
160
|
* 把内存中(已清空对应类别后的)历史状态重新写回 IndexedDB,
|
|
157
161
|
* 使本地持久化的那份与内存保持一致——即「连同本地保存的一并删除」。
|
|
@@ -227,7 +231,8 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
227
231
|
default: withCtx(() => [
|
|
228
232
|
(openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), normalizeProps(guardReactiveProps(unref(tabPaneComponent)?.props({
|
|
229
233
|
name: "page",
|
|
230
|
-
label: `${pageName.value} (${unref(pageGroups).length})
|
|
234
|
+
label: `${pageName.value} (${unref(pageGroups).length})`,
|
|
235
|
+
lazy: true
|
|
231
236
|
}) || {})), {
|
|
232
237
|
default: withCtx(() => [createVNode(PageTab_default, {
|
|
233
238
|
list: unref(pageGroupsDisplay),
|
|
@@ -252,7 +257,8 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
252
257
|
}, 16)),
|
|
253
258
|
!disabledDataSource.value ? (openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), normalizeProps(mergeProps({ key: 0 }, unref(tabPaneComponent)?.props({
|
|
254
259
|
name: "data-source",
|
|
255
|
-
label: `${dataSourceName.value} (${unref(dataSourceGroups).length})
|
|
260
|
+
label: `${dataSourceName.value} (${unref(dataSourceGroups).length})`,
|
|
261
|
+
lazy: true
|
|
256
262
|
}) || {})), {
|
|
257
263
|
default: withCtx(() => [createVNode(BucketTab_default, {
|
|
258
264
|
config: dataSourceConfig.value,
|
|
@@ -276,7 +282,8 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
276
282
|
}, 16)) : createCommentVNode("v-if", true),
|
|
277
283
|
!disabledCodeBlock.value ? (openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), normalizeProps(mergeProps({ key: 1 }, unref(tabPaneComponent)?.props({
|
|
278
284
|
name: "code-block",
|
|
279
|
-
label: `${codeBlockName.value} (${unref(codeBlockGroups).length})
|
|
285
|
+
label: `${codeBlockName.value} (${unref(codeBlockGroups).length})`,
|
|
286
|
+
lazy: true
|
|
280
287
|
}) || {})), {
|
|
281
288
|
default: withCtx(() => [createVNode(BucketTab_default, {
|
|
282
289
|
config: codeBlockConfig.value,
|
|
@@ -301,7 +308,8 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
301
308
|
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(extraTabs), (tab) => {
|
|
302
309
|
return openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), mergeProps({ key: tab.name }, { ref_for: true }, unref(tabPaneComponent)?.props({
|
|
303
310
|
name: tab.name,
|
|
304
|
-
label: resolveTabLabel(tab)
|
|
311
|
+
label: resolveTabLabel(tab),
|
|
312
|
+
lazy: true
|
|
305
313
|
}) || {}), {
|
|
306
314
|
default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(tab.component), mergeProps({ ref_for: true }, tab.props || {}, toHandlers(tab.listeners || {})), null, 16))]),
|
|
307
315
|
_: 2
|
|
@@ -46,6 +46,7 @@ var mountHistoryDiffDialog = async (options) => {
|
|
|
46
46
|
extendState: options.extendState,
|
|
47
47
|
loadConfig: options.loadConfig,
|
|
48
48
|
selfDiffFieldTypes: options.selfDiffFieldTypes,
|
|
49
|
+
compareFormState: options.compareFormState,
|
|
49
50
|
onClose: options.onClose
|
|
50
51
|
});
|
|
51
52
|
if (options.appContext) Object.assign(app._context, options.appContext);
|
|
@@ -59,6 +60,7 @@ var mountHistoryDiffDialog = async (options) => {
|
|
|
59
60
|
}, 300);
|
|
60
61
|
};
|
|
61
62
|
return {
|
|
63
|
+
app,
|
|
62
64
|
instance,
|
|
63
65
|
destroy
|
|
64
66
|
};
|
|
@@ -124,7 +126,7 @@ var viewHistoryDiffDialog = async (payload, options) => {
|
|
|
124
126
|
var useHistoryRevert = (services, options = {}) => {
|
|
125
127
|
const { editorService, dataSourceService, codeBlockService, historyService } = services;
|
|
126
128
|
const appContext = options.appContext ?? getCurrentInstance()?.appContext ?? null;
|
|
127
|
-
const { extendState } = options;
|
|
129
|
+
const { extendState, getPropsPanelFormState } = options;
|
|
128
130
|
/** 目标数据已被删除、无法回滚时的统一提示。 */
|
|
129
131
|
const showRevertTargetMissing = () => {
|
|
130
132
|
tMagicMessage.error("回滚失败:该记录对应的数据已被删除");
|
|
@@ -200,7 +202,7 @@ var useHistoryRevert = (services, options = {}) => {
|
|
|
200
202
|
showRevertTargetMissing();
|
|
201
203
|
return Promise.resolve(null);
|
|
202
204
|
}
|
|
203
|
-
return runRevert(buildPageDiffPayload(index)).then((result) => result ? editorService.revertPageStep(index) : null);
|
|
205
|
+
return runRevert(buildPageDiffPayload(index), { compareFormState: getPropsPanelFormState?.() }).then((result) => result ? editorService.revertPageStep(index) : null);
|
|
204
206
|
};
|
|
205
207
|
const onDataSourceRevert = (id, index) => {
|
|
206
208
|
if (isDataSourceRevertTargetMissing(id, index)) {
|
|
@@ -225,7 +227,8 @@ var useHistoryRevert = (services, options = {}) => {
|
|
|
225
227
|
if (payload) return viewHistoryDiffDialog(payload, {
|
|
226
228
|
appContext,
|
|
227
229
|
extendState,
|
|
228
|
-
services
|
|
230
|
+
services,
|
|
231
|
+
compareFormState: getPropsPanelFormState?.()
|
|
229
232
|
});
|
|
230
233
|
};
|
|
231
234
|
const onDataSourceDiff = (id, index) => {
|
package/dist/es/style.css
CHANGED
package/dist/style.css
CHANGED
|
@@ -110,6 +110,25 @@
|
|
|
110
110
|
margin-bottom: 8px;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
.tmagic-design-form-item.has-extra-tips > .el-form-item__content {
|
|
114
|
+
gap: 10px;
|
|
115
|
+
}
|
|
116
|
+
.tmagic-design-form-item.has-extra-tips > .el-form-item__content > .tmagic-design-alert {
|
|
117
|
+
border-radius: 2px;
|
|
118
|
+
width: fit-content;
|
|
119
|
+
padding: 0 8px;
|
|
120
|
+
color: var(--el-color-primary, #0056ea);
|
|
121
|
+
background-color: var(--el-color-primary-light-9, rgb(236, 245, 255));
|
|
122
|
+
}
|
|
123
|
+
.tmagic-design-form-item.has-extra-tips > .el-form-item__content > .tmagic-design-alert .el-icon.el-alert__icon {
|
|
124
|
+
fill: var(--el-color-primary, #0056ea);
|
|
125
|
+
color: var(--el-color-primary, #0056ea);
|
|
126
|
+
}
|
|
127
|
+
.tmagic-design-form-item.has-extra-tips > .el-form-item__content > .tmagic-design-alert .el-alert__title {
|
|
128
|
+
font-size: 14px;
|
|
129
|
+
line-height: 22px;
|
|
130
|
+
}
|
|
131
|
+
|
|
113
132
|
.m-table .el-button.action-btn + .el-button.action-btn {
|
|
114
133
|
margin-left: 0;
|
|
115
134
|
}
|
|
@@ -423,6 +442,7 @@ fieldset.m-fieldset .m-form-tip {
|
|
|
423
442
|
display: flex;
|
|
424
443
|
justify-content: space-between;
|
|
425
444
|
margin-top: 10px;
|
|
445
|
+
margin-bottom: 16px;
|
|
426
446
|
}
|
|
427
447
|
|
|
428
448
|
.m-form-panel .el-card__header:hover {
|
|
@@ -11255,7 +11255,12 @@
|
|
|
11255
11255
|
dataSourceType: {},
|
|
11256
11256
|
labelWidth: { default: "120px" },
|
|
11257
11257
|
height: {},
|
|
11258
|
-
extendState: {
|
|
11258
|
+
extendState: {
|
|
11259
|
+
type: Function,
|
|
11260
|
+
default: (state) => state
|
|
11261
|
+
},
|
|
11262
|
+
baseFormState: {},
|
|
11263
|
+
selfDiffFieldTypes: {},
|
|
11259
11264
|
loadConfig: {},
|
|
11260
11265
|
services: { default: () => useServices() }
|
|
11261
11266
|
},
|
|
@@ -11333,6 +11338,9 @@
|
|
|
11333
11338
|
})
|
|
11334
11339
|
};
|
|
11335
11340
|
});
|
|
11341
|
+
const mergedExtendState = (state) => {
|
|
11342
|
+
return props.extendState(props.baseFormState || state);
|
|
11343
|
+
};
|
|
11336
11344
|
/**
|
|
11337
11345
|
* 内置的默认 FormConfig 加载逻辑:按 `category` 从对应 service / 工具取配置。
|
|
11338
11346
|
* 作为 ctx.defaultLoadConfig 透传给自定义 `loadConfig`,方便复用与二次加工。
|
|
@@ -11412,14 +11420,15 @@
|
|
|
11412
11420
|
"is-compare": true,
|
|
11413
11421
|
disabled: true,
|
|
11414
11422
|
"label-width": __props.labelWidth,
|
|
11415
|
-
"extend-state":
|
|
11416
|
-
"show-diff": showDiff
|
|
11423
|
+
"extend-state": mergedExtendState,
|
|
11424
|
+
"show-diff": showDiff,
|
|
11425
|
+
"self-diff-field-types": __props.selfDiffFieldTypes
|
|
11417
11426
|
}, null, 8, [
|
|
11418
11427
|
"config",
|
|
11419
11428
|
"init-values",
|
|
11420
11429
|
"last-values",
|
|
11421
11430
|
"label-width",
|
|
11422
|
-
"
|
|
11431
|
+
"self-diff-field-types"
|
|
11423
11432
|
])) : (0, vue.createCommentVNode)("v-if", true)], 4);
|
|
11424
11433
|
};
|
|
11425
11434
|
}
|
|
@@ -11467,7 +11476,8 @@
|
|
|
11467
11476
|
width: { default: "900px" },
|
|
11468
11477
|
isConfirm: { type: Boolean },
|
|
11469
11478
|
onConfirm: {},
|
|
11470
|
-
selfDiffFieldTypes: {}
|
|
11479
|
+
selfDiffFieldTypes: {},
|
|
11480
|
+
compareFormState: {}
|
|
11471
11481
|
},
|
|
11472
11482
|
emits: ["close"],
|
|
11473
11483
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
@@ -11672,6 +11682,7 @@
|
|
|
11672
11682
|
"data-source-type": payload.value.dataSourceType,
|
|
11673
11683
|
value: rightValue.value,
|
|
11674
11684
|
"last-value": leftValue.value,
|
|
11685
|
+
"base-form-state": __props.compareFormState,
|
|
11675
11686
|
"extend-state": __props.extendState,
|
|
11676
11687
|
"load-config": __props.loadConfig,
|
|
11677
11688
|
"self-diff-field-types": __props.selfDiffFieldTypes,
|
|
@@ -11683,6 +11694,7 @@
|
|
|
11683
11694
|
"data-source-type",
|
|
11684
11695
|
"value",
|
|
11685
11696
|
"last-value",
|
|
11697
|
+
"base-form-state",
|
|
11686
11698
|
"extend-state",
|
|
11687
11699
|
"load-config",
|
|
11688
11700
|
"self-diff-field-types",
|
|
@@ -11763,6 +11775,7 @@
|
|
|
11763
11775
|
extendState: options.extendState,
|
|
11764
11776
|
loadConfig: options.loadConfig,
|
|
11765
11777
|
selfDiffFieldTypes: options.selfDiffFieldTypes,
|
|
11778
|
+
compareFormState: options.compareFormState,
|
|
11766
11779
|
onClose: options.onClose
|
|
11767
11780
|
});
|
|
11768
11781
|
if (options.appContext) Object.assign(app._context, options.appContext);
|
|
@@ -11776,6 +11789,7 @@
|
|
|
11776
11789
|
}, 300);
|
|
11777
11790
|
};
|
|
11778
11791
|
return {
|
|
11792
|
+
app,
|
|
11779
11793
|
instance,
|
|
11780
11794
|
destroy
|
|
11781
11795
|
};
|
|
@@ -11841,7 +11855,7 @@
|
|
|
11841
11855
|
var useHistoryRevert = (services, options = {}) => {
|
|
11842
11856
|
const { editorService, dataSourceService, codeBlockService, historyService } = services;
|
|
11843
11857
|
const appContext = options.appContext ?? (0, vue.getCurrentInstance)()?.appContext ?? null;
|
|
11844
|
-
const { extendState } = options;
|
|
11858
|
+
const { extendState, getPropsPanelFormState } = options;
|
|
11845
11859
|
/** 目标数据已被删除、无法回滚时的统一提示。 */
|
|
11846
11860
|
const showRevertTargetMissing = () => {
|
|
11847
11861
|
_tmagic_design.tMagicMessage.error("回滚失败:该记录对应的数据已被删除");
|
|
@@ -11917,7 +11931,7 @@
|
|
|
11917
11931
|
showRevertTargetMissing();
|
|
11918
11932
|
return Promise.resolve(null);
|
|
11919
11933
|
}
|
|
11920
|
-
return runRevert(buildPageDiffPayload(index)).then((result) => result ? editorService.revertPageStep(index) : null);
|
|
11934
|
+
return runRevert(buildPageDiffPayload(index), { compareFormState: getPropsPanelFormState?.() }).then((result) => result ? editorService.revertPageStep(index) : null);
|
|
11921
11935
|
};
|
|
11922
11936
|
const onDataSourceRevert = (id, index) => {
|
|
11923
11937
|
if (isDataSourceRevertTargetMissing(id, index)) {
|
|
@@ -11942,7 +11956,8 @@
|
|
|
11942
11956
|
if (payload) return viewHistoryDiffDialog(payload, {
|
|
11943
11957
|
appContext,
|
|
11944
11958
|
extendState,
|
|
11945
|
-
services
|
|
11959
|
+
services,
|
|
11960
|
+
compareFormState: getPropsPanelFormState?.()
|
|
11946
11961
|
});
|
|
11947
11962
|
};
|
|
11948
11963
|
const onDataSourceDiff = (id, index) => {
|
|
@@ -12080,6 +12095,7 @@
|
|
|
12080
12095
|
* 未提供时为 undefined,CompareForm/MForm 会跳过 extendState 处理。
|
|
12081
12096
|
*/
|
|
12082
12097
|
const extendFormState = (0, vue.inject)("extendFormState", void 0);
|
|
12098
|
+
const getPropsPanelFormState = (0, vue.inject)("getPropsPanelFormState", void 0);
|
|
12083
12099
|
const { expanded, toggleGroup, pageGroups, dataSourceGroups, codeBlockGroups, pageGroupsDisplay, dataSourceGroupsByTarget, codeBlockGroupsByTarget } = useHistoryList();
|
|
12084
12100
|
/**
|
|
12085
12101
|
* 当前活动页的「加载/初始」标记记录(设置 root 时生成),透传给 PageTab 的底部初始行展示。
|
|
@@ -12163,7 +12179,10 @@
|
|
|
12163
12179
|
* 二者均由 useHistoryRevert 内部按需动态挂载 HistoryDiffDialog,
|
|
12164
12180
|
* 业务方亦可直接 import useHistoryRevert(services) 调用,无需自行挂载任何弹窗。
|
|
12165
12181
|
*/
|
|
12166
|
-
const { onPageRevert, onDataSourceRevert, onCodeBlockRevert, onPageDiff, onDataSourceDiff, onCodeBlockDiff } = useHistoryRevert(services, {
|
|
12182
|
+
const { onPageRevert, onDataSourceRevert, onCodeBlockRevert, onPageDiff, onDataSourceDiff, onCodeBlockDiff } = useHistoryRevert(services, {
|
|
12183
|
+
extendState: extendFormState,
|
|
12184
|
+
getPropsPanelFormState
|
|
12185
|
+
});
|
|
12167
12186
|
/**
|
|
12168
12187
|
* 把内存中(已清空对应类别后的)历史状态重新写回 IndexedDB,
|
|
12169
12188
|
* 使本地持久化的那份与内存保持一致——即「连同本地保存的一并删除」。
|
|
@@ -12239,7 +12258,8 @@
|
|
|
12239
12258
|
default: (0, vue.withCtx)(() => [
|
|
12240
12259
|
((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(tabPaneComponent)?.component || "el-tab-pane"), (0, vue.normalizeProps)((0, vue.guardReactiveProps)((0, vue.unref)(tabPaneComponent)?.props({
|
|
12241
12260
|
name: "page",
|
|
12242
|
-
label: `${pageName.value} (${(0, vue.unref)(pageGroups).length})
|
|
12261
|
+
label: `${pageName.value} (${(0, vue.unref)(pageGroups).length})`,
|
|
12262
|
+
lazy: true
|
|
12243
12263
|
}) || {})), {
|
|
12244
12264
|
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(PageTab_default, {
|
|
12245
12265
|
list: (0, vue.unref)(pageGroupsDisplay),
|
|
@@ -12264,7 +12284,8 @@
|
|
|
12264
12284
|
}, 16)),
|
|
12265
12285
|
!disabledDataSource.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(tabPaneComponent)?.component || "el-tab-pane"), (0, vue.normalizeProps)((0, vue.mergeProps)({ key: 0 }, (0, vue.unref)(tabPaneComponent)?.props({
|
|
12266
12286
|
name: "data-source",
|
|
12267
|
-
label: `${dataSourceName.value} (${(0, vue.unref)(dataSourceGroups).length})
|
|
12287
|
+
label: `${dataSourceName.value} (${(0, vue.unref)(dataSourceGroups).length})`,
|
|
12288
|
+
lazy: true
|
|
12268
12289
|
}) || {})), {
|
|
12269
12290
|
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(BucketTab_default, {
|
|
12270
12291
|
config: dataSourceConfig.value,
|
|
@@ -12288,7 +12309,8 @@
|
|
|
12288
12309
|
}, 16)) : (0, vue.createCommentVNode)("v-if", true),
|
|
12289
12310
|
!disabledCodeBlock.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(tabPaneComponent)?.component || "el-tab-pane"), (0, vue.normalizeProps)((0, vue.mergeProps)({ key: 1 }, (0, vue.unref)(tabPaneComponent)?.props({
|
|
12290
12311
|
name: "code-block",
|
|
12291
|
-
label: `${codeBlockName.value} (${(0, vue.unref)(codeBlockGroups).length})
|
|
12312
|
+
label: `${codeBlockName.value} (${(0, vue.unref)(codeBlockGroups).length})`,
|
|
12313
|
+
lazy: true
|
|
12292
12314
|
}) || {})), {
|
|
12293
12315
|
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(BucketTab_default, {
|
|
12294
12316
|
config: codeBlockConfig.value,
|
|
@@ -12313,7 +12335,8 @@
|
|
|
12313
12335
|
((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(extraTabs), (tab) => {
|
|
12314
12336
|
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(tabPaneComponent)?.component || "el-tab-pane"), (0, vue.mergeProps)({ key: tab.name }, { ref_for: true }, (0, vue.unref)(tabPaneComponent)?.props({
|
|
12315
12337
|
name: tab.name,
|
|
12316
|
-
label: resolveTabLabel(tab)
|
|
12338
|
+
label: resolveTabLabel(tab),
|
|
12339
|
+
lazy: true
|
|
12317
12340
|
}) || {}), {
|
|
12318
12341
|
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(tab.component), (0, vue.mergeProps)({ ref_for: true }, tab.props || {}, (0, vue.toHandlers)(tab.listeners || {})), null, 16))]),
|
|
12319
12342
|
_: 2
|
|
@@ -18993,6 +19016,7 @@
|
|
|
18993
19016
|
beforeDblclick: props.beforeDblclick
|
|
18994
19017
|
};
|
|
18995
19018
|
stageOverlay_default.set("stageOptions", stageOptions);
|
|
19019
|
+
const propsPanelRef = (0, vue.ref)(null);
|
|
18996
19020
|
(0, vue.provide)("services", services);
|
|
18997
19021
|
(0, vue.provide)("codeOptions", props.codeOptions);
|
|
18998
19022
|
(0, vue.provide)("stageOptions", stageOptions);
|
|
@@ -19003,6 +19027,11 @@
|
|
|
19003
19027
|
*/
|
|
19004
19028
|
(0, vue.provide)("extendFormState", props.extendFormState);
|
|
19005
19029
|
/**
|
|
19030
|
+
* 提供 PropsPanel 主属性表单的 formState getter,供历史差异弹窗复用,
|
|
19031
|
+
* 让 CompareForm 与 PropsPanel 的 filterFunction 上下文保持一致。
|
|
19032
|
+
*/
|
|
19033
|
+
(0, vue.provide)("getPropsPanelFormState", () => propsPanelRef.value?.configForm?.formState);
|
|
19034
|
+
/**
|
|
19006
19035
|
* 把历史记录面板的自定义扩展 tab 提供给深层的 HistoryListPanel(它挂在 NavMenu 中,
|
|
19007
19036
|
* 以 markRaw component 形式渲染,无法直接通过 props 透传)。业务方可借此在历史记录
|
|
19008
19037
|
* 面板内追加自定义模块的历史 tab。
|
|
@@ -19016,9 +19045,11 @@
|
|
|
19016
19045
|
*/
|
|
19017
19046
|
(0, vue.provide)(_tmagic_design.M_THEME_KEY, (0, vue.computed)(() => props.theme ?? ""));
|
|
19018
19047
|
const propsPanelMountedHandler = (e) => {
|
|
19048
|
+
propsPanelRef.value = e;
|
|
19019
19049
|
emit("props-panel-mounted", e);
|
|
19020
19050
|
};
|
|
19021
19051
|
const propsPanelUnmountedHandler = () => {
|
|
19052
|
+
propsPanelRef.value = null;
|
|
19022
19053
|
emit("props-panel-unmounted");
|
|
19023
19054
|
};
|
|
19024
19055
|
const propsPanelSubmitErrorHandler = (e) => {
|
|
@@ -20613,7 +20644,7 @@
|
|
|
20613
20644
|
onSelect: selectHandler
|
|
20614
20645
|
}), {
|
|
20615
20646
|
suffix: (0, vue.withCtx)(() => [(0, vue.createVNode)(Icon_default, { icon: (0, vue.unref)(_element_plus_icons_vue.Coin) }, null, 8, ["icon"])]),
|
|
20616
|
-
default: (0, vue.withCtx)((
|
|
20647
|
+
default: (0, vue.withCtx)((slotProps) => [(0, vue.createElementVNode)("div", _hoisted_1$38, [(0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)(slotProps?.item?.text || ""), 1), (0, vue.createElementVNode)("span", _hoisted_2$7, (0, vue.toDisplayString)(slotProps?.item?.value || ""), 1)])]),
|
|
20617
20648
|
_: 1
|
|
20618
20649
|
}, 16, ["modelValue"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
20619
20650
|
key: 2,
|
|
@@ -24482,6 +24513,7 @@
|
|
|
24482
24513
|
exports.classifyDragSources = classifyDragSources;
|
|
24483
24514
|
exports.codeBlockService = codeBlock_default;
|
|
24484
24515
|
exports.collectRelatedNodes = collectRelatedNodes;
|
|
24516
|
+
exports.componentListService = componentList_default;
|
|
24485
24517
|
exports.confirmHistoryAction = confirmHistoryAction;
|
|
24486
24518
|
exports.createStackStep = createStackStep;
|
|
24487
24519
|
exports.dataSourceService = dataSource_default;
|
|
@@ -24545,6 +24577,7 @@
|
|
|
24545
24577
|
exports.info = info;
|
|
24546
24578
|
exports.isIncludeDataSource = isIncludeDataSource;
|
|
24547
24579
|
exports.isIndexedDBSupported = isIndexedDBSupported;
|
|
24580
|
+
exports.keybindingService = keybinding_default;
|
|
24548
24581
|
exports.loadMonaco = monaco_editor_default;
|
|
24549
24582
|
exports.log = log;
|
|
24550
24583
|
exports.markStackSaved = markStackSaved;
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.8.0-manmanyu.
|
|
2
|
+
"version": "1.8.0-manmanyu.11",
|
|
3
3
|
"name": "@tmagic/editor",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": [
|
|
@@ -58,11 +58,11 @@
|
|
|
58
58
|
"moveable": "^0.53.0",
|
|
59
59
|
"serialize-javascript": "^7.0.0",
|
|
60
60
|
"sortablejs": "^1.15.6",
|
|
61
|
-
"@tmagic/design": "1.8.0-manmanyu.
|
|
62
|
-
"@tmagic/
|
|
63
|
-
"@tmagic/
|
|
64
|
-
"@tmagic/utils": "1.8.0-manmanyu.
|
|
65
|
-
"@tmagic/
|
|
61
|
+
"@tmagic/design": "1.8.0-manmanyu.11",
|
|
62
|
+
"@tmagic/form": "1.8.0-manmanyu.11",
|
|
63
|
+
"@tmagic/stage": "1.8.0-manmanyu.11",
|
|
64
|
+
"@tmagic/utils": "1.8.0-manmanyu.11",
|
|
65
|
+
"@tmagic/table": "1.8.0-manmanyu.11"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@types/events": "^3.0.3",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"type-fest": "^5.2.0",
|
|
77
77
|
"typescript": "^6.0.3",
|
|
78
78
|
"vue": "^3.5.38",
|
|
79
|
-
"@tmagic/core": "1.8.0-manmanyu.
|
|
79
|
+
"@tmagic/core": "1.8.0-manmanyu.11"
|
|
80
80
|
},
|
|
81
81
|
"peerDependenciesMeta": {
|
|
82
82
|
"typescript": {
|
package/src/Editor.vue
CHANGED
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
<script lang="ts" setup>
|
|
137
137
|
import { EventEmitter } from 'events';
|
|
138
138
|
|
|
139
|
-
import { computed, provide } from 'vue';
|
|
139
|
+
import { computed, provide, ref } from 'vue';
|
|
140
140
|
|
|
141
141
|
import type { MApp } from '@tmagic/core';
|
|
142
142
|
import { M_THEME_KEY } from '@tmagic/design';
|
|
@@ -229,6 +229,8 @@ const stageOptions: StageOptions = {
|
|
|
229
229
|
|
|
230
230
|
stageOverlayService.set('stageOptions', stageOptions);
|
|
231
231
|
|
|
232
|
+
const propsPanelRef = ref<InstanceType<typeof FormPanel> | null>(null);
|
|
233
|
+
|
|
232
234
|
provide('services', services);
|
|
233
235
|
|
|
234
236
|
provide('codeOptions', props.codeOptions);
|
|
@@ -239,6 +241,11 @@ provide('stageOptions', stageOptions);
|
|
|
239
241
|
* 与 PropsPanel 通过 `:extend-state` 显式传入的方式保持等价。
|
|
240
242
|
*/
|
|
241
243
|
provide('extendFormState', props.extendFormState);
|
|
244
|
+
/**
|
|
245
|
+
* 提供 PropsPanel 主属性表单的 formState getter,供历史差异弹窗复用,
|
|
246
|
+
* 让 CompareForm 与 PropsPanel 的 filterFunction 上下文保持一致。
|
|
247
|
+
*/
|
|
248
|
+
provide('getPropsPanelFormState', () => propsPanelRef.value?.configForm?.formState);
|
|
242
249
|
|
|
243
250
|
/**
|
|
244
251
|
* 把历史记录面板的自定义扩展 tab 提供给深层的 HistoryListPanel(它挂在 NavMenu 中,
|
|
@@ -260,9 +267,11 @@ provide(
|
|
|
260
267
|
);
|
|
261
268
|
|
|
262
269
|
const propsPanelMountedHandler = (e: InstanceType<typeof FormPanel>) => {
|
|
270
|
+
propsPanelRef.value = e;
|
|
263
271
|
emit('props-panel-mounted', e);
|
|
264
272
|
};
|
|
265
273
|
const propsPanelUnmountedHandler = () => {
|
|
274
|
+
propsPanelRef.value = null;
|
|
266
275
|
emit('props-panel-unmounted');
|
|
267
276
|
};
|
|
268
277
|
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
:is-compare="true"
|
|
11
11
|
:disabled="true"
|
|
12
12
|
:label-width="labelWidth"
|
|
13
|
-
:extend-state="
|
|
13
|
+
:extend-state="mergedExtendState"
|
|
14
14
|
:show-diff="showDiff"
|
|
15
|
+
:self-diff-field-types="selfDiffFieldTypes"
|
|
15
16
|
></MForm>
|
|
16
17
|
</div>
|
|
17
18
|
</template>
|
|
@@ -61,6 +62,13 @@ const props = withDefaults(
|
|
|
61
62
|
* 因此在差异对比场景下也需要透传,避免出现 `formState.xxx is undefined` 的运行时错误。
|
|
62
63
|
*/
|
|
63
64
|
extendState?: (_state: FormState) => Record<string, any> | Promise<Record<string, any>>;
|
|
65
|
+
/**
|
|
66
|
+
* 外部透传的基础 formState(通常来自 PropsPanel 主属性表单)。
|
|
67
|
+
* CompareForm 会提取其中的扩展字段覆盖到自己的 formState,保证 filterFunction 上下文一致。
|
|
68
|
+
*/
|
|
69
|
+
baseFormState?: FormState;
|
|
70
|
+
/** 需要走 self diff 的字段类型(例如 mod-cond)。 */
|
|
71
|
+
selfDiffFieldTypes?: string[];
|
|
64
72
|
/**
|
|
65
73
|
* 自定义 FormConfig 加载逻辑。传入后将接管内置的按 `category`(node/data-source/code-block)
|
|
66
74
|
* 取配置逻辑,调用方可根据业务自行返回(或异步返回)表单配置。可通过
|
|
@@ -74,6 +82,7 @@ const props = withDefaults(
|
|
|
74
82
|
category: 'node',
|
|
75
83
|
labelWidth: '120px',
|
|
76
84
|
services: () => useServices(),
|
|
85
|
+
extendState: (state: FormState) => state,
|
|
77
86
|
},
|
|
78
87
|
);
|
|
79
88
|
|
|
@@ -174,6 +183,10 @@ const removeStyleDisplayConfig = (formConfig: FormConfig): FormConfig =>
|
|
|
174
183
|
};
|
|
175
184
|
});
|
|
176
185
|
|
|
186
|
+
const mergedExtendState = (state: FormState) => {
|
|
187
|
+
return props.extendState(props.baseFormState || state);
|
|
188
|
+
};
|
|
189
|
+
|
|
177
190
|
/**
|
|
178
191
|
* 内置的默认 FormConfig 加载逻辑:按 `category` 从对应 service / 工具取配置。
|
|
179
192
|
* 作为 ctx.defaultLoadConfig 透传给自定义 `loadConfig`,方便复用与二次加工。
|