@tmagic/editor 1.8.0-beta.1 → 1.8.0-beta.10
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 +31 -5
- package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +21 -113
- package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/es/components/CompareForm.js +5 -0
- package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +196 -0
- package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +2 -2
- 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 +1 -1
- package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +1 -1
- 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 +7 -7
- 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/editorProps.js +2 -0
- package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +20 -4
- package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +3 -6
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +19 -3
- package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +42 -8
- package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +14 -6
- package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +41 -16
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +9 -5
- package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +40 -19
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +17 -9
- package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +59 -12
- package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +12 -7
- 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 +1 -1
- 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 +28 -6
- package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.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 +1 -1
- package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +9 -6
- package/dist/es/hooks/use-code-block-edit.js +7 -4
- package/dist/es/hooks/use-data-source-edit.js +5 -2
- package/dist/es/hooks/use-stage.js +22 -10
- 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/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/index.js +14 -3
- package/dist/es/initService.js +7 -7
- 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 +7 -6
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +14 -9
- package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +12 -4
- package/dist/es/layouts/NavMenuColumn.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/Bucket.js +5 -0
- package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/es/layouts/history-list/BucketTab.js +5 -0
- package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/es/layouts/history-list/GroupRow.js +5 -0
- package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +269 -0
- package/dist/es/layouts/history-list/HistoryDiffDialog.js +5 -0
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +287 -0
- package/dist/es/layouts/history-list/HistoryListPanel.js +5 -0
- package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +327 -0
- package/dist/es/layouts/history-list/InitialRow.js +5 -0
- package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +83 -0
- package/dist/es/layouts/history-list/PageTab.js +5 -0
- package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +95 -0
- package/dist/es/layouts/history-list/composables.js +184 -0
- package/dist/es/layouts/history-list/useHistoryList.js +56 -0
- package/dist/es/layouts/history-list/useHistoryRevert.js +306 -0
- 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 +5 -3
- 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 +1 -1
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +8 -4
- package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +4 -4
- 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 +1 -1
- 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 +19 -6
- 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 +25 -3
- package/dist/es/layouts/sidebar/data-source/useContentMenu.js +1 -1
- package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +6 -6
- package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/layer/use-node-status.js +1 -1
- 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 +1 -1
- package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +2 -2
- 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 +9 -9
- package/dist/es/services/BaseService.js +31 -68
- package/dist/es/services/codeBlock.js +286 -8
- package/dist/es/services/componentList.js +2 -2
- package/dist/es/services/dataSource.js +287 -8
- package/dist/es/services/dep.js +21 -9
- package/dist/es/services/editor.js +655 -194
- package/dist/es/services/events.js +2 -2
- package/dist/es/services/history.js +390 -47
- package/dist/es/services/keybinding.js +5 -5
- package/dist/es/services/props.js +8 -8
- package/dist/es/services/stageOverlay.js +2 -2
- package/dist/es/services/storage.js +2 -2
- package/dist/es/services/ui.js +5 -2
- package/dist/es/style.css +456 -8
- package/dist/es/utils/code-block.js +122 -0
- package/dist/es/utils/content-menu.js +19 -12
- package/dist/es/utils/data-source/index.js +2 -0
- package/dist/es/utils/dep/worker.js +1 -1
- package/dist/es/utils/editor.js +105 -51
- package/dist/es/utils/history.js +220 -0
- package/dist/es/utils/indexed-db.js +86 -0
- package/dist/es/utils/undo-redo.js +80 -1
- package/dist/style.css +456 -8
- package/dist/tmagic-editor.umd.cjs +10135 -5646
- package/package.json +8 -8
- package/src/Editor.vue +25 -1
- package/src/components/CodeBlockEditor.vue +20 -109
- package/src/components/CodeParams.vue +6 -0
- package/src/components/CompareForm.vue +277 -0
- package/src/components/ToolButton.vue +2 -2
- package/src/editorProps.ts +9 -0
- package/src/fields/Code.vue +19 -3
- package/src/fields/CodeLink.vue +2 -5
- package/src/fields/CodeSelect.vue +17 -1
- package/src/fields/CodeSelectCol.vue +37 -3
- package/src/fields/DataSourceFieldSelect/FieldSelect.vue +23 -3
- package/src/fields/DataSourceFieldSelect/Index.vue +2 -2
- package/src/fields/DataSourceFields.vue +48 -10
- package/src/fields/DataSourceInput.vue +3 -3
- package/src/fields/DataSourceMethodSelect.vue +12 -4
- package/src/fields/DataSourceMethods.vue +55 -24
- package/src/fields/DataSourceMocks.vue +13 -3
- package/src/fields/DataSourceSelect.vue +4 -1
- package/src/fields/EventSelect.vue +57 -8
- package/src/fields/KeyValue.vue +17 -4
- package/src/fields/StyleSetter/components/Border.vue +15 -6
- package/src/fields/UISelect.vue +5 -2
- package/src/hooks/use-code-block-edit.ts +9 -5
- package/src/hooks/use-data-source-edit.ts +2 -2
- package/src/hooks/use-stage.ts +26 -9
- package/src/index.ts +8 -0
- package/src/initService.ts +1 -1
- package/src/layouts/CodeEditor.vue +17 -5
- package/src/layouts/Framework.vue +11 -6
- package/src/layouts/NavMenu.vue +12 -3
- package/src/layouts/history-list/Bucket.vue +91 -0
- package/src/layouts/history-list/BucketTab.vue +72 -0
- package/src/layouts/history-list/GroupRow.vue +304 -0
- package/src/layouts/history-list/HistoryDiffDialog.vue +273 -0
- package/src/layouts/history-list/HistoryListPanel.vue +367 -0
- package/src/layouts/history-list/InitialRow.vue +71 -0
- package/src/layouts/history-list/PageTab.vue +118 -0
- package/src/layouts/history-list/composables.ts +309 -0
- package/src/layouts/history-list/useHistoryList.ts +60 -0
- package/src/layouts/history-list/useHistoryRevert.ts +405 -0
- package/src/layouts/page-bar/PageBar.vue +4 -2
- package/src/layouts/props-panel/PropsPanel.vue +5 -1
- package/src/layouts/sidebar/ComponentListPanel.vue +9 -5
- package/src/layouts/sidebar/Sidebar.vue +8 -3
- package/src/layouts/sidebar/code-block/CodeBlockList.vue +5 -5
- package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +1 -1
- package/src/layouts/sidebar/code-block/useContentMenu.ts +1 -1
- package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +31 -2
- package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +27 -2
- package/src/layouts/sidebar/data-source/useContentMenu.ts +1 -1
- package/src/layouts/sidebar/layer/LayerMenu.vue +19 -11
- package/src/layouts/sidebar/layer/LayerNodeTool.vue +7 -4
- package/src/layouts/sidebar/layer/use-node-status.ts +9 -6
- package/src/layouts/workspace/viewer/Stage.vue +1 -1
- package/src/layouts/workspace/viewer/ViewerMenu.vue +8 -8
- package/src/services/BaseService.ts +35 -86
- package/src/services/codeBlock.ts +361 -5
- package/src/services/dataSource.ts +336 -6
- package/src/services/dep.ts +32 -9
- package/src/services/editor.ts +834 -194
- package/src/services/history.ts +509 -49
- package/src/services/keybinding.ts +3 -3
- package/src/services/props.ts +2 -2
- package/src/services/ui.ts +7 -0
- package/src/theme/history-list-panel.scss +557 -0
- package/src/theme/page-bar.scss +0 -4
- package/src/theme/props-panel.scss +3 -3
- package/src/theme/style-setter/border.scss +4 -1
- package/src/theme/theme.scss +1 -0
- package/src/type.ts +594 -31
- package/src/utils/code-block.ts +150 -0
- package/src/utils/content-menu.ts +25 -13
- package/src/utils/data-source/index.ts +2 -0
- package/src/utils/dep/worker.ts +5 -3
- package/src/utils/editor.ts +166 -60
- package/src/utils/history.ts +286 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/indexed-db.ts +122 -0
- package/src/utils/undo-redo.ts +111 -0
- package/types/index.d.ts +3171 -889
- package/dist/es/utils/compose.js +0 -44
- package/dist/es/utils/editor-history.js +0 -100
- package/src/utils/compose.ts +0 -52
- package/src/utils/editor-history.ts +0 -138
package/dist/es/editorProps.js
CHANGED
|
@@ -6,6 +6,7 @@ var defaultEditorProps = {
|
|
|
6
6
|
disabledMultiSelect: false,
|
|
7
7
|
alwaysMultiSelect: false,
|
|
8
8
|
disabledPageFragment: false,
|
|
9
|
+
disabledFlashTip: false,
|
|
9
10
|
disabledStageOverlay: false,
|
|
10
11
|
containerHighlightClassName: CONTAINER_HIGHLIGHT_CLASS_NAME,
|
|
11
12
|
containerHighlightDuration: 800,
|
|
@@ -15,6 +16,7 @@ var defaultEditorProps = {
|
|
|
15
16
|
disabledCodeBlock: false,
|
|
16
17
|
componentGroupList: () => [],
|
|
17
18
|
datasourceList: () => [],
|
|
19
|
+
historyListExtraTabs: () => [],
|
|
18
20
|
menu: () => ({
|
|
19
21
|
left: [],
|
|
20
22
|
right: []
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import CodeEditor_default from "../layouts/CodeEditor.js";
|
|
2
|
-
import { createBlock, defineComponent, openBlock } from "vue";
|
|
2
|
+
import { computed, createBlock, defineComponent, openBlock } from "vue";
|
|
3
3
|
//#region packages/editor/src/fields/Code.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
-
var Code_vue_vue_type_script_setup_true_lang_default =
|
|
4
|
+
var Code_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
5
5
|
name: "MFieldsVsCode",
|
|
6
6
|
__name: "Code",
|
|
7
7
|
props: {
|
|
@@ -22,17 +22,31 @@ var Code_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
|
|
|
22
22
|
emits: ["change"],
|
|
23
23
|
setup(__props, { emit: __emit }) {
|
|
24
24
|
const emit = __emit;
|
|
25
|
+
const props = __props;
|
|
26
|
+
/**
|
|
27
|
+
* 对比模式判定:
|
|
28
|
+
*
|
|
29
|
+
* - 当 `isCompare === true` 时,由父级 `MFormContainer` 统一渲染一次本字段(不再渲染前后两份独立组件),
|
|
30
|
+
* 并把 `model`(当前值)与 `lastValues`(历史值)一并传入;
|
|
31
|
+
* - 此时本字段切换到 monaco 自带的 diff 编辑器(左侧旧、右侧新),相比"两个独立 monaco 实例"更直观,
|
|
32
|
+
* 也避免了同一表单内重复实例化重型编辑器带来的开销。
|
|
33
|
+
*
|
|
34
|
+
* 仅当存在历史值(lastValues)且开启了对比模式时启用 diff,避免在 lastValues 缺失时退化为空对比。
|
|
35
|
+
*/
|
|
36
|
+
const diffMode = computed(() => Boolean(props.isCompare && props.lastValues));
|
|
25
37
|
const save = (v) => {
|
|
26
38
|
emit("change", v);
|
|
27
39
|
};
|
|
28
40
|
return (_ctx, _cache) => {
|
|
29
41
|
return openBlock(), createBlock(CodeEditor_default, {
|
|
30
42
|
height: __props.config.height,
|
|
31
|
-
"
|
|
43
|
+
type: diffMode.value ? "diff" : void 0,
|
|
44
|
+
"init-values": diffMode.value ? (__props.lastValues || {})[__props.name] : __props.model[__props.name],
|
|
45
|
+
"modified-values": diffMode.value ? __props.model[__props.name] : void 0,
|
|
32
46
|
language: __props.config.language,
|
|
33
47
|
options: {
|
|
34
48
|
...__props.config.options,
|
|
35
|
-
readOnly: __props.disabled
|
|
49
|
+
readOnly: diffMode.value ? true : __props.disabled
|
|
36
50
|
},
|
|
37
51
|
autosize: __props.config.autosize,
|
|
38
52
|
parse: __props.config.parse,
|
|
@@ -40,7 +54,9 @@ var Code_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
|
|
|
40
54
|
onSave: save
|
|
41
55
|
}, null, 8, [
|
|
42
56
|
"height",
|
|
57
|
+
"type",
|
|
43
58
|
"init-values",
|
|
59
|
+
"modified-values",
|
|
44
60
|
"language",
|
|
45
61
|
"options",
|
|
46
62
|
"autosize",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getEditorConfig } from "../utils/config.js";
|
|
2
|
+
import { serializeConfig } from "../utils/editor.js";
|
|
2
3
|
import { computed, createBlock, defineComponent, openBlock, reactive, resolveComponent, watch } from "vue";
|
|
3
|
-
import serialize from "serialize-javascript";
|
|
4
4
|
//#region packages/editor/src/fields/CodeLink.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
-
var CodeLink_vue_vue_type_script_setup_true_lang_default =
|
|
5
|
+
var CodeLink_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
6
6
|
name: "MFieldsCodeLink",
|
|
7
7
|
__name: "CodeLink",
|
|
8
8
|
props: {
|
|
@@ -39,10 +39,7 @@ var CodeLink_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
39
39
|
});
|
|
40
40
|
const modelValue = reactive({ form: { [props.name]: "" } });
|
|
41
41
|
watch(() => props.model[props.name], (value) => {
|
|
42
|
-
modelValue.form = { [props.name]:
|
|
43
|
-
space: 2,
|
|
44
|
-
unsafe: true
|
|
45
|
-
}).replace(/"(\w+)":\s/g, "$1: ") };
|
|
42
|
+
modelValue.form = { [props.name]: serializeConfig(value) };
|
|
46
43
|
}, { immediate: true });
|
|
47
44
|
const changeHandler = (v) => {
|
|
48
45
|
if (!props.name || !props.model) return;
|
|
@@ -5,7 +5,7 @@ import { HookCodeType, HookType } from "@tmagic/core";
|
|
|
5
5
|
import { computed, createElementBlock, createVNode, defineComponent, normalizeClass, openBlock, unref, watch, withCtx } from "vue";
|
|
6
6
|
import { isEmpty } from "lodash-es";
|
|
7
7
|
//#region packages/editor/src/fields/CodeSelect.vue?vue&type=script&setup=true&lang.ts
|
|
8
|
-
var CodeSelect_vue_vue_type_script_setup_true_lang_default =
|
|
8
|
+
var CodeSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
9
9
|
name: "MFieldsCodeSelect",
|
|
10
10
|
__name: "CodeSelect",
|
|
11
11
|
props: {
|
|
@@ -25,6 +25,20 @@ var CodeSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
25
25
|
const emit = __emit;
|
|
26
26
|
const { dataSourceService, codeBlockService } = useServices();
|
|
27
27
|
const props = __props;
|
|
28
|
+
/**
|
|
29
|
+
* 对比模式判定:
|
|
30
|
+
*
|
|
31
|
+
* code-select 仅是对内部「钩子列表」group-list 的包裹,本身不渲染叶子字段。父级 `MFormContainer`
|
|
32
|
+
* 已将其归入「自接管对比字段」(见 Container.vue 的 `SELF_DIFF_FIELD_TYPES`),即对比时只渲染一次
|
|
33
|
+
* 本组件,并把当前值 `model` 与历史值 `lastValues` 一并传入,由本组件把 `is-compare`/`lastValues`
|
|
34
|
+
* 透传给内部 MContainer,再由 group-list / code-select-col 等子级逐项展示前后差异。
|
|
35
|
+
*
|
|
36
|
+
* 注意:`model` 传入的是 `model[name]`(钩子值本身),因此 `lastValues` 也必须同层取 `lastValues[name]`,
|
|
37
|
+
* 否则前后值的嵌套层级不一致会导致对比错位。
|
|
38
|
+
*
|
|
39
|
+
* 仅当存在历史值时才启用对比,避免 lastValues 缺失时退化为「全部新增」的空对比。
|
|
40
|
+
*/
|
|
41
|
+
const isCompareMode = computed(() => Boolean(props.isCompare && props.lastValues));
|
|
28
42
|
const codeConfig = computed(() => ({
|
|
29
43
|
type: "group-list",
|
|
30
44
|
name: "hookData",
|
|
@@ -96,7 +110,8 @@ var CodeSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
96
110
|
size: __props.size,
|
|
97
111
|
prop: __props.prop,
|
|
98
112
|
disabled: __props.disabled,
|
|
99
|
-
|
|
113
|
+
"is-compare": isCompareMode.value,
|
|
114
|
+
"last-values": __props.lastValues?.[__props.name],
|
|
100
115
|
model: __props.model[__props.name],
|
|
101
116
|
onChange: changeHandler
|
|
102
117
|
}, null, 8, [
|
|
@@ -104,7 +119,8 @@ var CodeSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
104
119
|
"size",
|
|
105
120
|
"prop",
|
|
106
121
|
"disabled",
|
|
107
|
-
"
|
|
122
|
+
"is-compare",
|
|
123
|
+
"last-values",
|
|
108
124
|
"model"
|
|
109
125
|
])]),
|
|
110
126
|
_: 1
|
|
@@ -2,7 +2,7 @@ import { SideItemKey } from "../type.js";
|
|
|
2
2
|
import { useServices } from "../hooks/use-services.js";
|
|
3
3
|
import Icon_default from "../components/Icon.js";
|
|
4
4
|
import CodeParams_default from "../components/CodeParams.js";
|
|
5
|
-
import { MSelect, createValues, filterFunction } from "@tmagic/form";
|
|
5
|
+
import { MContainer, MSelect, createValues, filterFunction } from "@tmagic/form";
|
|
6
6
|
import { TMagicButton } from "@tmagic/design";
|
|
7
7
|
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, ref, unref, watch, withCtx } from "vue";
|
|
8
8
|
import { isEmpty, map } from "lodash-es";
|
|
@@ -10,7 +10,7 @@ import { Edit, View } from "@element-plus/icons-vue";
|
|
|
10
10
|
//#region packages/editor/src/fields/CodeSelectCol.vue?vue&type=script&setup=true&lang.ts
|
|
11
11
|
var _hoisted_1 = { class: "m-fields-code-select-col" };
|
|
12
12
|
var _hoisted_2 = { class: "code-select-container" };
|
|
13
|
-
var CodeSelectCol_vue_vue_type_script_setup_true_lang_default =
|
|
13
|
+
var CodeSelectCol_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
14
14
|
name: "MFieldsCodeSelectCol",
|
|
15
15
|
__name: "CodeSelectCol",
|
|
16
16
|
props: {
|
|
@@ -35,8 +35,20 @@ var CodeSelectCol_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
35
35
|
const eventBus = inject("eventBus");
|
|
36
36
|
const emit = __emit;
|
|
37
37
|
const props = __props;
|
|
38
|
+
/**
|
|
39
|
+
* 对比模式判定:
|
|
40
|
+
*
|
|
41
|
+
* code-select-col 由「代码块下拉框 + 参数子表单」组成,属于复合字段。父级 `MFormContainer` 已将其
|
|
42
|
+
* 归入「自接管对比字段」(见 Container.vue 的 `SELF_DIFF_FIELD_TYPES`),即对比时只渲染一次本组件,
|
|
43
|
+
* 并把当前值 `model` 与历史值 `lastValues` 一并传入,由本组件把 `is-compare`/`lastValues` 透传给
|
|
44
|
+
* 内部的下拉框(MFormContainer)与参数表单(CodeParams),逐项展示前后差异。
|
|
45
|
+
*
|
|
46
|
+
* 仅当存在历史值时才启用对比,避免 lastValues 缺失时退化为「全部新增」的空对比。
|
|
47
|
+
*/
|
|
48
|
+
const isCompareMode = computed(() => Boolean(props.isCompare && props.lastValues));
|
|
38
49
|
const notEditable = computed(() => filterFunction(mForm, props.config.notEditable, props));
|
|
39
|
-
const
|
|
50
|
+
const codeBlockSidePanel = computed(() => (uiService.get("sideBarItems") || []).find((item) => item.$key === SideItemKey.CODE_BLOCK));
|
|
51
|
+
const hasCodeBlockSidePanel = computed(() => codeBlockSidePanel.value);
|
|
40
52
|
/**
|
|
41
53
|
* 根据代码块id获取代码块参数配置
|
|
42
54
|
* @param codeId 代码块ID
|
|
@@ -91,13 +103,31 @@ var CodeSelectCol_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
91
103
|
emit("change", props.model[props.name], eventData);
|
|
92
104
|
};
|
|
93
105
|
const editCode = (id) => {
|
|
106
|
+
const sideBarItem = codeBlockSidePanel.value;
|
|
107
|
+
if (sideBarItem) uiService.set("sideBarActiveTabName", sideBarItem.text || sideBarItem.$key || SideItemKey.CODE_BLOCK);
|
|
94
108
|
eventBus?.emit("edit-code", id);
|
|
95
109
|
};
|
|
96
110
|
return (_ctx, _cache) => {
|
|
97
111
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
98
112
|
createElementVNode("div", _hoisted_2, [
|
|
99
113
|
createCommentVNode(" 代码块下拉框 "),
|
|
100
|
-
|
|
114
|
+
createCommentVNode(" 对比模式下交由 MFormContainer 展示下拉框的前后差异(codeId 变化时高亮新旧代码块名),\n 普通模式仍直接渲染 MSelect 以保留选择 / 写值逻辑 "),
|
|
115
|
+
isCompareMode.value ? (openBlock(), createBlock(unref(MContainer), {
|
|
116
|
+
key: 0,
|
|
117
|
+
class: "select",
|
|
118
|
+
config: selectConfig,
|
|
119
|
+
model: __props.model,
|
|
120
|
+
"last-values": __props.lastValues,
|
|
121
|
+
"is-compare": true,
|
|
122
|
+
size: __props.size,
|
|
123
|
+
prop: __props.prop
|
|
124
|
+
}, null, 8, [
|
|
125
|
+
"model",
|
|
126
|
+
"last-values",
|
|
127
|
+
"size",
|
|
128
|
+
"prop"
|
|
129
|
+
])) : (openBlock(), createBlock(unref(MSelect), {
|
|
130
|
+
key: 1,
|
|
101
131
|
class: "select",
|
|
102
132
|
config: selectConfig,
|
|
103
133
|
name: __props.name,
|
|
@@ -110,10 +140,10 @@ var CodeSelectCol_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
110
140
|
"model",
|
|
111
141
|
"size",
|
|
112
142
|
"prop"
|
|
113
|
-
]),
|
|
114
|
-
createCommentVNode("
|
|
115
|
-
__props.model[__props.name] && hasCodeBlockSidePanel.value ? (openBlock(), createBlock(unref(TMagicButton), {
|
|
116
|
-
key:
|
|
143
|
+
])),
|
|
144
|
+
createCommentVNode(" 查看/编辑按钮:对比模式为只读,不展示 "),
|
|
145
|
+
!isCompareMode.value && __props.model[__props.name] && hasCodeBlockSidePanel.value ? (openBlock(), createBlock(unref(TMagicButton), {
|
|
146
|
+
key: 2,
|
|
117
147
|
class: "m-fields-select-action-button",
|
|
118
148
|
size: __props.size,
|
|
119
149
|
onClick: _cache[0] || (_cache[0] = ($event) => editCode(__props.model[__props.name]))
|
|
@@ -127,12 +157,16 @@ var CodeSelectCol_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
127
157
|
name: "params",
|
|
128
158
|
key: __props.model[__props.name],
|
|
129
159
|
model: __props.model,
|
|
160
|
+
"last-values": __props.lastValues,
|
|
161
|
+
"is-compare": isCompareMode.value,
|
|
130
162
|
size: __props.size,
|
|
131
163
|
disabled: __props.disabled,
|
|
132
164
|
"params-config": paramsConfig.value,
|
|
133
165
|
onChange: onParamsChangeHandler
|
|
134
166
|
}, null, 8, [
|
|
135
167
|
"model",
|
|
168
|
+
"last-values",
|
|
169
|
+
"is-compare",
|
|
136
170
|
"size",
|
|
137
171
|
"disabled",
|
|
138
172
|
"params-config"
|
|
@@ -4,7 +4,7 @@ import { getFieldType } from "../utils/data-source/index.js";
|
|
|
4
4
|
import { TMagicSelect, getDesignConfig } from "@tmagic/design";
|
|
5
5
|
import { Fragment, computed, createBlock, createElementBlock, defineComponent, mergeProps, openBlock, renderList, resolveDynamicComponent, unref, withCtx } from "vue";
|
|
6
6
|
//#region packages/editor/src/fields/CondOpSelect.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
-
var CondOpSelect_vue_vue_type_script_setup_true_lang_default =
|
|
7
|
+
var CondOpSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
8
8
|
name: "MFieldsCondOpSelect",
|
|
9
9
|
__name: "CondOpSelect",
|
|
10
10
|
props: {
|
package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -9,9 +9,9 @@ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock
|
|
|
9
9
|
import { Edit, View } from "@element-plus/icons-vue";
|
|
10
10
|
//#region packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue?vue&type=script&setup=true&lang.ts
|
|
11
11
|
var _hoisted_1 = { class: "m-editor-data-source-field-select" };
|
|
12
|
-
var FieldSelect_vue_vue_type_script_setup_true_lang_default =
|
|
12
|
+
var FieldSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
13
13
|
__name: "FieldSelect",
|
|
14
|
-
props:
|
|
14
|
+
props: /*@__PURE__*/ mergeModels({
|
|
15
15
|
value: {},
|
|
16
16
|
disabled: { type: Boolean },
|
|
17
17
|
checkStrictly: { type: Boolean },
|
|
@@ -23,7 +23,7 @@ var FieldSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
23
23
|
"modelValue": { default: [] },
|
|
24
24
|
"modelModifiers": {}
|
|
25
25
|
}),
|
|
26
|
-
emits:
|
|
26
|
+
emits: /*@__PURE__*/ mergeModels(["change"], ["update:modelValue"]),
|
|
27
27
|
setup(__props, { emit: __emit }) {
|
|
28
28
|
const props = __props;
|
|
29
29
|
const emit = __emit;
|
|
@@ -39,6 +39,8 @@ var FieldSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
39
39
|
});
|
|
40
40
|
const valueIsKey = computed(() => props.value === "key");
|
|
41
41
|
const notEditable = computed(() => filterFunction(mForm, props.notEditable, props));
|
|
42
|
+
/** 对比模式下隐藏查看/编辑操作按钮,仅保留只读展示。 */
|
|
43
|
+
const isCompare = computed(() => Boolean(mForm?.isCompare));
|
|
42
44
|
const dataSourcesOptions = computed(() => dataSources.value.map((ds) => ({
|
|
43
45
|
text: ds.title || ds.id,
|
|
44
46
|
value: valueIsKey.value ? ds.id : `${DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX}${ds.id}`
|
|
@@ -87,9 +89,15 @@ var FieldSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
87
89
|
modelValue.value = v;
|
|
88
90
|
emit("change", v);
|
|
89
91
|
};
|
|
90
|
-
const
|
|
92
|
+
const dataSourceSidePanel = computed(() => uiService.get("sideBarItems").find((item) => item.$key === SideItemKey.DATA_SOURCE));
|
|
93
|
+
const hasDataSourceSidePanel = computed(() => dataSourceSidePanel.value);
|
|
91
94
|
const editHandler = (id) => {
|
|
92
|
-
|
|
95
|
+
const sideBarItem = dataSourceSidePanel.value;
|
|
96
|
+
if (sideBarItem) uiService.set("sideBarActiveTabName", sideBarItem.text || sideBarItem.$key || SideItemKey.DATA_SOURCE);
|
|
97
|
+
const dataSourceId = removeDataSourceFieldPrefix(id);
|
|
98
|
+
const fieldPath = selectFieldsId.value;
|
|
99
|
+
if (fieldPath.length) eventBus?.emit("edit-data-source-field", dataSourceId, [...fieldPath]);
|
|
100
|
+
else eventBus?.emit("edit-data-source", dataSourceId);
|
|
93
101
|
};
|
|
94
102
|
return (_ctx, _cache) => {
|
|
95
103
|
return openBlock(), createElementBlock("div", _hoisted_1, [__props.dataSourceId ? (openBlock(), createBlock(unref(TMagicCascader), {
|
|
@@ -166,7 +174,7 @@ var FieldSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
166
174
|
"size",
|
|
167
175
|
"options",
|
|
168
176
|
"props"
|
|
169
|
-
])), selectDataSourceId.value && hasDataSourceSidePanel.value ? (openBlock(), createBlock(unref(TMagicTooltip), {
|
|
177
|
+
])), selectDataSourceId.value && hasDataSourceSidePanel.value && !isCompare.value ? (openBlock(), createBlock(unref(TMagicTooltip), {
|
|
170
178
|
key: 3,
|
|
171
179
|
content: notEditable.value ? "查看" : "编辑"
|
|
172
180
|
}, {
|
|
@@ -8,7 +8,7 @@ import { computed, createBlock, createCommentVNode, createElementBlock, createVN
|
|
|
8
8
|
import { Coin } from "@element-plus/icons-vue";
|
|
9
9
|
//#region packages/editor/src/fields/DataSourceFieldSelect/Index.vue?vue&type=script&setup=true&lang.ts
|
|
10
10
|
var _hoisted_1 = { class: "m-fields-data-source-field-select" };
|
|
11
|
-
var Index_vue_vue_type_script_setup_true_lang_default =
|
|
11
|
+
var Index_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
12
12
|
name: "MFieldsDataSourceFieldSelect",
|
|
13
13
|
__name: "Index",
|
|
14
14
|
props: {
|
|
@@ -140,7 +140,7 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
140
140
|
"init-values",
|
|
141
141
|
"values",
|
|
142
142
|
"prop"
|
|
143
|
-
])), __props.config.fieldConfig && !disabledDataSource.value ? (openBlock(), createBlock(unref(TMagicTooltip), {
|
|
143
|
+
])), __props.config.fieldConfig && !disabledDataSource.value && !unref(mForm)?.isCompare ? (openBlock(), createBlock(unref(TMagicTooltip), {
|
|
144
144
|
key: 2,
|
|
145
145
|
disabled: showDataSourceFieldSelect.value,
|
|
146
146
|
content: "选择数据源"
|
|
@@ -148,7 +148,7 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
148
148
|
default: withCtx(() => [createVNode(unref(TMagicButton), {
|
|
149
149
|
type: showDataSourceFieldSelect.value ? "primary" : "default",
|
|
150
150
|
size: __props.size,
|
|
151
|
-
disabled: __props.disabled
|
|
151
|
+
disabled: __props.disabled,
|
|
152
152
|
onClick: onToggleDataSourceFieldSelectHandler
|
|
153
153
|
}, {
|
|
154
154
|
default: withCtx(() => [createVNode(Icon_default, { icon: unref(Coin) }, null, 8, ["icon"])]),
|
|
@@ -7,14 +7,17 @@ import { MFormBox } from "@tmagic/form";
|
|
|
7
7
|
import { MagicTable } from "@tmagic/table";
|
|
8
8
|
import { TMagicButton, tMagicMessage, tMagicMessageBox } from "@tmagic/design";
|
|
9
9
|
import { getDefaultValueFromFields } from "@tmagic/utils";
|
|
10
|
-
import {
|
|
10
|
+
import { computed, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, inject, isRef, mergeModels, onMounted, openBlock, provide, ref, unref, useModel, withCtx } from "vue";
|
|
11
11
|
//#region packages/editor/src/fields/DataSourceFields.vue?vue&type=script&setup=true&lang.ts
|
|
12
12
|
var _hoisted_1 = { class: "m-editor-data-source-fields" };
|
|
13
|
-
var _hoisted_2 = {
|
|
14
|
-
|
|
13
|
+
var _hoisted_2 = {
|
|
14
|
+
key: 0,
|
|
15
|
+
class: "m-editor-data-source-fields-footer"
|
|
16
|
+
};
|
|
17
|
+
var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
15
18
|
name: "MFieldsDataSourceFields",
|
|
16
19
|
__name: "DataSourceFields",
|
|
17
|
-
props:
|
|
20
|
+
props: /*@__PURE__*/ mergeModels({
|
|
18
21
|
config: {},
|
|
19
22
|
model: {},
|
|
20
23
|
initValues: {},
|
|
@@ -42,7 +45,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
42
45
|
},
|
|
43
46
|
"visible1Modifiers": {}
|
|
44
47
|
}),
|
|
45
|
-
emits:
|
|
48
|
+
emits: /*@__PURE__*/ mergeModels(["change"], [
|
|
46
49
|
"update:width",
|
|
47
50
|
"update:visible",
|
|
48
51
|
"update:visible1"
|
|
@@ -51,6 +54,9 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
51
54
|
const props = __props;
|
|
52
55
|
const emit = __emit;
|
|
53
56
|
const { uiService } = useServices();
|
|
57
|
+
const mForm = inject("mForm");
|
|
58
|
+
/** 对比模式下隐藏新增/编辑/删除等操作按钮,仅保留只读展示。 */
|
|
59
|
+
const isCompare = computed(() => Boolean(mForm?.isCompare));
|
|
54
60
|
const fieldValues = ref({});
|
|
55
61
|
const fieldTitle = ref("");
|
|
56
62
|
const width = useModel(__props, "width");
|
|
@@ -60,6 +66,15 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
60
66
|
calcBoxPosition();
|
|
61
67
|
addDialogVisible.value = true;
|
|
62
68
|
};
|
|
69
|
+
const editField = (row, index) => {
|
|
70
|
+
fieldValues.value = {
|
|
71
|
+
...row,
|
|
72
|
+
index
|
|
73
|
+
};
|
|
74
|
+
fieldTitle.value = `编辑${row.title}`;
|
|
75
|
+
calcBoxPosition();
|
|
76
|
+
addDialogVisible.value = true;
|
|
77
|
+
};
|
|
63
78
|
const fieldChange = ({ index, ...value }, data) => {
|
|
64
79
|
addDialogVisible.value = false;
|
|
65
80
|
if (index > -1) emit("change", value, {
|
|
@@ -111,13 +126,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
111
126
|
actions: [{
|
|
112
127
|
text: "编辑",
|
|
113
128
|
handler: (row, index) => {
|
|
114
|
-
|
|
115
|
-
...row,
|
|
116
|
-
index
|
|
117
|
-
};
|
|
118
|
-
fieldTitle.value = `编辑${row.title}`;
|
|
119
|
-
calcBoxPosition();
|
|
120
|
-
addDialogVisible.value = true;
|
|
129
|
+
editField(row, index);
|
|
121
130
|
}
|
|
122
131
|
}, {
|
|
123
132
|
text: "删除",
|
|
@@ -130,6 +139,8 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
130
139
|
}]
|
|
131
140
|
}
|
|
132
141
|
];
|
|
142
|
+
/** 对比模式下移除「操作」列(编辑/删除按钮),仅保留只读列。 */
|
|
143
|
+
const displayColumns = computed(() => isCompare.value ? fieldColumns.filter((col) => !col.actions) : fieldColumns);
|
|
133
144
|
const dataSourceFieldsConfig = [
|
|
134
145
|
{
|
|
135
146
|
name: "index",
|
|
@@ -302,14 +313,28 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
302
313
|
const addFromJsonDialogVisible = useModel(__props, "visible1");
|
|
303
314
|
const { height: editorHeight } = useEditorContentHeight();
|
|
304
315
|
const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, inject("parentFloating", ref(null)));
|
|
316
|
+
/**
|
|
317
|
+
* 由 DataSourceConfigPanel 注入:打开数据源详情后需要直接打开的字段路径(字段名数组)。
|
|
318
|
+
* 当前层消费 path[0],并把剩余路径下发给嵌套字段,实现逐层打开。
|
|
319
|
+
*/
|
|
320
|
+
const editingFieldPath = inject("editingDataSourceFieldPath", computed(() => []));
|
|
321
|
+
provide("editingDataSourceFieldPath", computed(() => editingFieldPath.value.slice(1)));
|
|
322
|
+
onMounted(() => {
|
|
323
|
+
const path = editingFieldPath.value;
|
|
324
|
+
if (!path.length) return;
|
|
325
|
+
const fields = props.model[props.name] || [];
|
|
326
|
+
const index = fields.findIndex((field) => field.name === path[0]);
|
|
327
|
+
if (index === -1) return;
|
|
328
|
+
editField(fields[index], index);
|
|
329
|
+
});
|
|
305
330
|
return (_ctx, _cache) => {
|
|
306
331
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
307
332
|
createVNode(unref(MagicTable), {
|
|
308
333
|
data: __props.model[__props.name],
|
|
309
|
-
columns:
|
|
334
|
+
columns: displayColumns.value,
|
|
310
335
|
border: true
|
|
311
|
-
}, null, 8, ["data"]),
|
|
312
|
-
|
|
336
|
+
}, null, 8, ["data", "columns"]),
|
|
337
|
+
!isCompare.value ? (openBlock(), createElementBlock("div", _hoisted_2, [createVNode(unref(TMagicButton), {
|
|
313
338
|
size: "small",
|
|
314
339
|
disabled: __props.disabled,
|
|
315
340
|
plain: "",
|
|
@@ -326,7 +351,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
326
351
|
}, {
|
|
327
352
|
default: withCtx(() => [..._cache[9] || (_cache[9] = [createTextVNode("添加", -1)])]),
|
|
328
353
|
_: 1
|
|
329
|
-
}, 8, ["disabled"])]),
|
|
354
|
+
}, 8, ["disabled"])])) : createCommentVNode("v-if", true),
|
|
330
355
|
createVNode(FloatingBox_default, {
|
|
331
356
|
visible: addDialogVisible.value,
|
|
332
357
|
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => addDialogVisible.value = $event),
|
|
@@ -15,7 +15,7 @@ var _hoisted_2 = { style: {
|
|
|
15
15
|
"font-size": "10px",
|
|
16
16
|
"color": "rgba(0, 0, 0, 0.6)"
|
|
17
17
|
} };
|
|
18
|
-
var DataSourceInput_vue_vue_type_script_setup_true_lang_default =
|
|
18
|
+
var DataSourceInput_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
19
19
|
name: "MFieldsDataSourceInput",
|
|
20
20
|
__name: "DataSourceInput",
|
|
21
21
|
props: {
|
|
@@ -227,7 +227,7 @@ var DataSourceInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
227
227
|
onSelect: selectHandler
|
|
228
228
|
}), {
|
|
229
229
|
suffix: withCtx(() => [createVNode(Icon_default, { icon: unref(Coin) }, null, 8, ["icon"])]),
|
|
230
|
-
default: withCtx((
|
|
230
|
+
default: withCtx((slotProps) => [createElementVNode("div", _hoisted_1, [createElementVNode("div", null, toDisplayString(slotProps?.item?.text || ""), 1), createElementVNode("span", _hoisted_2, toDisplayString(slotProps?.item?.value || ""), 1)])]),
|
|
231
231
|
_: 1
|
|
232
232
|
}, 16, ["modelValue"])) : (openBlock(), createElementBlock("div", {
|
|
233
233
|
key: 2,
|
package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js
CHANGED
|
@@ -11,7 +11,7 @@ import { Edit, View } from "@element-plus/icons-vue";
|
|
|
11
11
|
//#region packages/editor/src/fields/DataSourceMethodSelect.vue?vue&type=script&setup=true&name=true&lang.ts
|
|
12
12
|
var _hoisted_1 = { class: "m-fields-data-source-method-select" };
|
|
13
13
|
var _hoisted_2 = { class: "data-source-method-select-container" };
|
|
14
|
-
var DataSourceMethodSelect_vue_vue_type_script_setup_true_name_true_lang_default =
|
|
14
|
+
var DataSourceMethodSelect_vue_vue_type_script_setup_true_name_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
15
15
|
name: "MFieldsDataSourceMethodSelect",
|
|
16
16
|
__name: "DataSourceMethodSelect",
|
|
17
17
|
props: {
|
|
@@ -36,8 +36,10 @@ var DataSourceMethodSelect_vue_vue_type_script_setup_true_name_true_lang_default
|
|
|
36
36
|
const eventBus = inject("eventBus");
|
|
37
37
|
const emit = __emit;
|
|
38
38
|
const props = __props;
|
|
39
|
-
const
|
|
39
|
+
const dataSourceSidePanel = computed(() => (uiService.get("sideBarItems") || []).find((item) => item.$key === SideItemKey.DATA_SOURCE));
|
|
40
40
|
const notEditable = computed(() => filterFunction(mForm, props.config.notEditable, props));
|
|
41
|
+
/** 对比模式下隐藏查看/编辑操作按钮,仅保留只读展示。 */
|
|
42
|
+
const isCompare = computed(() => Boolean(mForm?.isCompare));
|
|
41
43
|
const dataSources = computed(() => dataSourceService.get("dataSources"));
|
|
42
44
|
const isCustomMethod = computed(() => {
|
|
43
45
|
const [id, name] = props.model[props.name];
|
|
@@ -122,9 +124,11 @@ var DataSourceMethodSelect_vue_vue_type_script_setup_true_name_true_lang_default
|
|
|
122
124
|
emit("change", props.model[props.name], eventData);
|
|
123
125
|
};
|
|
124
126
|
const editCodeHandler = () => {
|
|
125
|
-
const [id] = props.model[props.name];
|
|
127
|
+
const [id, methodName] = props.model[props.name];
|
|
126
128
|
if (!dataSourceService.getDataSourceById(id)) return;
|
|
127
|
-
|
|
129
|
+
const sideBarItem = dataSourceSidePanel.value;
|
|
130
|
+
if (sideBarItem) uiService.set("sideBarActiveTabName", sideBarItem.text || sideBarItem.$key || SideItemKey.DATA_SOURCE);
|
|
131
|
+
eventBus?.emit("edit-data-source-method", id, methodName);
|
|
128
132
|
};
|
|
129
133
|
return (_ctx, _cache) => {
|
|
130
134
|
return openBlock(), createElementBlock("div", _hoisted_1, [createElementVNode("div", _hoisted_2, [createVNode(unref(MCascader), {
|
|
@@ -143,7 +147,7 @@ var DataSourceMethodSelect_vue_vue_type_script_setup_true_name_true_lang_default
|
|
|
143
147
|
"size",
|
|
144
148
|
"disabled",
|
|
145
149
|
"prop"
|
|
146
|
-
]), __props.model[__props.name] && isCustomMethod.value &&
|
|
150
|
+
]), __props.model[__props.name] && isCustomMethod.value && dataSourceSidePanel.value && !isCompare.value ? (openBlock(), createBlock(unref(TMagicTooltip), {
|
|
147
151
|
key: 0,
|
|
148
152
|
content: notEditable.value ? "查看" : "编辑"
|
|
149
153
|
}, {
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import CodeBlockEditor_default from "../components/CodeBlockEditor.js";
|
|
2
2
|
import { MagicTable } from "@tmagic/table";
|
|
3
3
|
import { TMagicButton, tMagicMessageBox } from "@tmagic/design";
|
|
4
|
-
import { createBlock, createCommentVNode, createElementBlock,
|
|
4
|
+
import { computed, createBlock, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, inject, nextTick, onMounted, openBlock, ref, unref, useTemplateRef, withCtx } from "vue";
|
|
5
5
|
import { cloneDeep } from "lodash-es";
|
|
6
6
|
//#region packages/editor/src/fields/DataSourceMethods.vue?vue&type=script&setup=true&lang.ts
|
|
7
7
|
var _hoisted_1 = { class: "m-editor-data-source-methods" };
|
|
8
|
-
var _hoisted_2 = {
|
|
9
|
-
|
|
8
|
+
var _hoisted_2 = {
|
|
9
|
+
key: 0,
|
|
10
|
+
class: "m-editor-data-source-methods-footer"
|
|
11
|
+
};
|
|
12
|
+
var DataSourceMethods_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
10
13
|
name: "MFieldsDataSourceMethods",
|
|
11
14
|
__name: "DataSourceMethods",
|
|
12
15
|
props: {
|
|
@@ -28,9 +31,25 @@ var DataSourceMethods_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
28
31
|
setup(__props, { emit: __emit }) {
|
|
29
32
|
const props = __props;
|
|
30
33
|
const emit = __emit;
|
|
34
|
+
const mForm = inject("mForm");
|
|
35
|
+
/** 对比模式下隐藏新增/编辑/删除等操作按钮,仅保留只读展示。 */
|
|
36
|
+
const isCompare = computed(() => Boolean(mForm?.isCompare));
|
|
31
37
|
const codeConfig = ref();
|
|
32
38
|
const codeBlockEditorRef = useTemplateRef("codeBlockEditor");
|
|
33
39
|
let editIndex = -1;
|
|
40
|
+
const editMethod = (method, index) => {
|
|
41
|
+
let codeContent = "({ params, dataSource, app }) => {\n // place your code here\n}";
|
|
42
|
+
if (method.content) if (typeof method.content !== "string") codeContent = method.content.toString();
|
|
43
|
+
else codeContent = method.content;
|
|
44
|
+
codeConfig.value = {
|
|
45
|
+
...cloneDeep(method),
|
|
46
|
+
content: codeContent
|
|
47
|
+
};
|
|
48
|
+
editIndex = index;
|
|
49
|
+
nextTick(() => {
|
|
50
|
+
codeBlockEditorRef.value?.show();
|
|
51
|
+
});
|
|
52
|
+
};
|
|
34
53
|
const methodColumns = [
|
|
35
54
|
{
|
|
36
55
|
label: "名称",
|
|
@@ -55,17 +74,7 @@ var DataSourceMethods_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
55
74
|
actions: [{
|
|
56
75
|
text: "编辑",
|
|
57
76
|
handler: (method, index) => {
|
|
58
|
-
|
|
59
|
-
if (method.content) if (typeof method.content !== "string") codeContent = method.content.toString();
|
|
60
|
-
else codeContent = method.content;
|
|
61
|
-
codeConfig.value = {
|
|
62
|
-
...cloneDeep(method),
|
|
63
|
-
content: codeContent
|
|
64
|
-
};
|
|
65
|
-
editIndex = index;
|
|
66
|
-
nextTick(() => {
|
|
67
|
-
codeBlockEditorRef.value?.show();
|
|
68
|
-
});
|
|
77
|
+
editMethod(method, index);
|
|
69
78
|
}
|
|
70
79
|
}, {
|
|
71
80
|
text: "删除",
|
|
@@ -78,6 +87,8 @@ var DataSourceMethods_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
78
87
|
}]
|
|
79
88
|
}
|
|
80
89
|
];
|
|
90
|
+
/** 对比模式下移除「操作」列(编辑/删除按钮),仅保留只读列。 */
|
|
91
|
+
const displayColumns = computed(() => isCompare.value ? methodColumns.filter((col) => !col.actions) : methodColumns);
|
|
81
92
|
const createCodeHandler = () => {
|
|
82
93
|
codeConfig.value = {
|
|
83
94
|
name: "",
|
|
@@ -111,14 +122,24 @@ var DataSourceMethods_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
111
122
|
codeConfig.value = void 0;
|
|
112
123
|
codeBlockEditorRef.value?.hide();
|
|
113
124
|
};
|
|
125
|
+
/** 由 DataSourceConfigPanel 注入:打开数据源详情后需要直接打开的方法名 */
|
|
126
|
+
const editingMethodName = inject("editingDataSourceMethodName", computed(() => ""));
|
|
127
|
+
onMounted(() => {
|
|
128
|
+
const methodName = editingMethodName.value;
|
|
129
|
+
if (!methodName) return;
|
|
130
|
+
const methods = props.model[props.name] || [];
|
|
131
|
+
const index = methods.findIndex((method) => method.name === methodName);
|
|
132
|
+
if (index === -1) return;
|
|
133
|
+
editMethod(methods[index], index);
|
|
134
|
+
});
|
|
114
135
|
return (_ctx, _cache) => {
|
|
115
136
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
116
137
|
createVNode(unref(MagicTable), {
|
|
117
138
|
data: __props.model[__props.name],
|
|
118
|
-
columns:
|
|
139
|
+
columns: displayColumns.value,
|
|
119
140
|
border: true
|
|
120
|
-
}, null, 8, ["data"]),
|
|
121
|
-
|
|
141
|
+
}, null, 8, ["data", "columns"]),
|
|
142
|
+
!isCompare.value ? (openBlock(), createElementBlock("div", _hoisted_2, [createVNode(unref(TMagicButton), {
|
|
122
143
|
size: "small",
|
|
123
144
|
type: "primary",
|
|
124
145
|
disabled: __props.disabled,
|
|
@@ -127,9 +148,9 @@ var DataSourceMethods_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
127
148
|
}, {
|
|
128
149
|
default: withCtx(() => [..._cache[0] || (_cache[0] = [createTextVNode("添加", -1)])]),
|
|
129
150
|
_: 1
|
|
130
|
-
}, 8, ["disabled"])]),
|
|
151
|
+
}, 8, ["disabled"])])) : createCommentVNode("v-if", true),
|
|
131
152
|
codeConfig.value ? (openBlock(), createBlock(CodeBlockEditor_default, {
|
|
132
|
-
key:
|
|
153
|
+
key: 1,
|
|
133
154
|
ref: "codeBlockEditor",
|
|
134
155
|
disabled: __props.disabled,
|
|
135
156
|
content: codeConfig.value,
|