@tmagic/editor 1.8.0-beta.1 → 1.8.0-beta.2
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 +11 -2
- package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +18 -110
- package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +6 -0
- package/dist/es/components/CompareForm.js +5 -0
- package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +167 -0
- package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +19 -3
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +18 -2
- package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +37 -6
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +14 -6
- package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +3 -1
- package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +15 -7
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +14 -6
- package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +58 -11
- package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +11 -6
- package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +8 -5
- package/dist/es/hooks/use-code-block-edit.js +2 -2
- package/dist/es/hooks/use-stage.js +15 -7
- package/dist/es/index.js +3 -1
- package/dist/es/initService.js +6 -6
- package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +4 -0
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +12 -7
- package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +8 -0
- 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 +84 -0
- package/dist/es/layouts/history-list/CodeBlockTab.js +5 -0
- package/dist/es/layouts/history-list/CodeBlockTab.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/es/layouts/history-list/DataSourceTab.js +5 -0
- package/dist/es/layouts/history-list/DataSourceTab.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 +180 -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 +195 -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 +270 -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 +48 -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 +99 -0
- package/dist/es/layouts/history-list/composables.js +154 -0
- package/dist/es/layouts/sidebar/layer/use-node-status.js +1 -1
- package/dist/es/services/BaseService.js +31 -68
- package/dist/es/services/codeBlock.js +205 -8
- package/dist/es/services/componentList.js +2 -2
- package/dist/es/services/dataSource.js +217 -8
- package/dist/es/services/dep.js +21 -9
- package/dist/es/services/editor.js +350 -160
- package/dist/es/services/events.js +2 -2
- package/dist/es/services/history.js +407 -12
- package/dist/es/services/keybinding.js +2 -2
- 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 +2 -2
- package/dist/es/style.css +347 -1
- package/dist/es/utils/code-block.js +122 -0
- package/dist/es/utils/content-menu.js +4 -5
- package/dist/es/utils/dep/worker.js +1 -1
- package/dist/es/utils/editor.js +2 -2
- package/dist/es/utils/undo-redo.js +20 -0
- package/dist/style.css +347 -1
- package/dist/tmagic-editor.umd.cjs +3165 -774
- package/package.json +7 -7
- package/src/Editor.vue +7 -0
- package/src/components/CodeBlockEditor.vue +20 -109
- package/src/components/CodeParams.vue +6 -0
- package/src/components/CompareForm.vue +225 -0
- package/src/editorProps.ts +2 -0
- package/src/fields/Code.vue +19 -3
- package/src/fields/CodeSelect.vue +17 -1
- package/src/fields/CodeSelectCol.vue +30 -2
- package/src/fields/DataSourceFieldSelect/FieldSelect.vue +7 -1
- package/src/fields/DataSourceFieldSelect/Index.vue +2 -2
- package/src/fields/DataSourceFields.vue +12 -3
- package/src/fields/DataSourceMethodSelect.vue +4 -1
- package/src/fields/DataSourceMethods.vue +14 -4
- 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/UISelect.vue +5 -2
- package/src/hooks/use-code-block-edit.ts +5 -2
- package/src/hooks/use-stage.ts +23 -7
- package/src/index.ts +1 -0
- package/src/layouts/CodeEditor.vue +15 -0
- package/src/layouts/Framework.vue +10 -5
- package/src/layouts/NavMenu.vue +9 -0
- package/src/layouts/history-list/Bucket.vue +99 -0
- package/src/layouts/history-list/CodeBlockTab.vue +61 -0
- package/src/layouts/history-list/DataSourceTab.vue +61 -0
- package/src/layouts/history-list/GroupRow.vue +207 -0
- package/src/layouts/history-list/HistoryDiffDialog.vue +212 -0
- package/src/layouts/history-list/HistoryListPanel.vue +271 -0
- package/src/layouts/history-list/InitialRow.vue +41 -0
- package/src/layouts/history-list/PageTab.vue +94 -0
- package/src/layouts/history-list/composables.ts +195 -0
- package/src/layouts/sidebar/layer/use-node-status.ts +9 -6
- package/src/services/BaseService.ts +35 -86
- package/src/services/codeBlock.ts +256 -5
- package/src/services/dataSource.ts +257 -6
- package/src/services/dep.ts +32 -9
- package/src/services/editor.ts +454 -171
- package/src/services/history.ts +452 -8
- package/src/services/props.ts +2 -2
- package/src/theme/history-list-panel.scss +423 -0
- package/src/theme/theme.scss +1 -0
- package/src/type.ts +179 -6
- package/src/utils/code-block.ts +150 -0
- package/src/utils/content-menu.ts +8 -5
- package/src/utils/dep/worker.ts +5 -3
- package/src/utils/index.ts +1 -0
- package/src/utils/undo-redo.ts +23 -0
- package/types/index.d.ts +2105 -810
- 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
|
@@ -29,6 +29,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
29
29
|
componentGroupList: {},
|
|
30
30
|
datasourceList: {},
|
|
31
31
|
sidebar: {},
|
|
32
|
+
hideSidebar: { type: Boolean },
|
|
32
33
|
menu: {},
|
|
33
34
|
layerContentMenu: {},
|
|
34
35
|
stageContentMenu: {},
|
|
@@ -124,6 +125,12 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
124
125
|
provide("services", services);
|
|
125
126
|
provide("codeOptions", props.codeOptions);
|
|
126
127
|
provide("stageOptions", stageOptions);
|
|
128
|
+
/**
|
|
129
|
+
* 把顶层 `extendFormState` 提供给非 PropsPanel 链路上的组件使用(例如历史差异对话框 HistoryDiffDialog
|
|
130
|
+
* 内部的 CompareForm)。这样所有依赖业务上下文的表单 filterFunction 都能拿到一致的扩展状态,
|
|
131
|
+
* 与 PropsPanel 通过 `:extend-state` 显式传入的方式保持等价。
|
|
132
|
+
*/
|
|
133
|
+
provide("extendFormState", props.extendFormState);
|
|
127
134
|
provide("eventBus", new EventEmitter());
|
|
128
135
|
const propsPanelMountedHandler = (e) => {
|
|
129
136
|
emit("props-panel-mounted", e);
|
|
@@ -145,7 +152,8 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
145
152
|
return openBlock(), createBlock(Framework_default, {
|
|
146
153
|
"disabled-page-fragment": __props.disabledPageFragment,
|
|
147
154
|
"page-bar-sort-options": __props.pageBarSortOptions,
|
|
148
|
-
"page-filter-function": __props.pageFilterFunction
|
|
155
|
+
"page-filter-function": __props.pageFilterFunction,
|
|
156
|
+
"hide-sidebar": __props.hideSidebar
|
|
149
157
|
}, {
|
|
150
158
|
header: withCtx(() => [renderSlot(_ctx.$slots, "header")]),
|
|
151
159
|
nav: withCtx(() => [renderSlot(_ctx.$slots, "nav", { editorService: unref(editor_default) }, () => [createVNode(NavMenu_default, { data: __props.menu }, null, 8, ["data"])])]),
|
|
@@ -225,7 +233,8 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
225
233
|
}, 8, [
|
|
226
234
|
"disabled-page-fragment",
|
|
227
235
|
"page-bar-sort-options",
|
|
228
|
-
"page-filter-function"
|
|
236
|
+
"page-filter-function",
|
|
237
|
+
"hide-sidebar"
|
|
229
238
|
]);
|
|
230
239
|
};
|
|
231
240
|
}
|
|
@@ -3,9 +3,10 @@ import { useServices } from "../hooks/use-services.js";
|
|
|
3
3
|
import { useWindowRect } from "../hooks/use-window-rect.js";
|
|
4
4
|
import { useEditorContentHeight } from "../hooks/use-editor-content-height.js";
|
|
5
5
|
import { useNextFloatBoxPosition } from "../hooks/use-next-float-box-position.js";
|
|
6
|
+
import { getCodeBlockFormConfig } from "../utils/code-block.js";
|
|
6
7
|
import CodeEditor_default from "../layouts/CodeEditor.js";
|
|
7
8
|
import FloatingBox_default from "./FloatingBox.js";
|
|
8
|
-
import { MFormBox
|
|
9
|
+
import { MFormBox } from "@tmagic/form";
|
|
9
10
|
import { TMagicButton, TMagicDialog, TMagicTag, tMagicMessage, tMagicMessageBox } from "@tmagic/design";
|
|
10
11
|
import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, isRef, mergeModels, nextTick, openBlock, ref, unref, useModel, useTemplateRef, watch, withCtx } from "vue";
|
|
11
12
|
//#region packages/editor/src/components/CodeBlockEditor.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -53,114 +54,21 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
53
54
|
formBox.value.form.values.content = magicVsEditorRef.value.getEditorValue();
|
|
54
55
|
difVisible.value = false;
|
|
55
56
|
};
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
text: "字符串",
|
|
72
|
-
label: "字符串",
|
|
73
|
-
value: "text"
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
text: "组件",
|
|
77
|
-
label: "组件",
|
|
78
|
-
value: "ui-select"
|
|
79
|
-
}
|
|
80
|
-
]
|
|
81
|
-
}]
|
|
82
|
-
});
|
|
83
|
-
const functionConfig = computed(() => defineFormConfig([
|
|
84
|
-
{
|
|
85
|
-
text: "名称",
|
|
86
|
-
name: "name",
|
|
87
|
-
rules: [{
|
|
88
|
-
required: true,
|
|
89
|
-
message: "请输入名称",
|
|
90
|
-
trigger: "blur"
|
|
91
|
-
}]
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
text: "描述",
|
|
95
|
-
name: "desc"
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
text: "执行时机",
|
|
99
|
-
name: "timing",
|
|
100
|
-
type: "select",
|
|
101
|
-
options: () => {
|
|
102
|
-
const options = [{
|
|
103
|
-
text: "初始化前",
|
|
104
|
-
value: "beforeInit"
|
|
105
|
-
}, {
|
|
106
|
-
text: "初始化后",
|
|
107
|
-
value: "afterInit"
|
|
108
|
-
}];
|
|
109
|
-
if (props.dataSourceType !== "base") {
|
|
110
|
-
options.push({
|
|
111
|
-
text: "请求前",
|
|
112
|
-
value: "beforeRequest"
|
|
113
|
-
});
|
|
114
|
-
options.push({
|
|
115
|
-
text: "请求后",
|
|
116
|
-
value: "afterRequest"
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
return options;
|
|
120
|
-
},
|
|
121
|
-
display: () => props.isDataSource
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
type: "table",
|
|
125
|
-
border: true,
|
|
126
|
-
text: "参数",
|
|
127
|
-
enableFullscreen: false,
|
|
128
|
-
enableToggleMode: false,
|
|
129
|
-
name: "params",
|
|
130
|
-
dropSort: false,
|
|
131
|
-
items: [
|
|
132
|
-
{
|
|
133
|
-
type: "text",
|
|
134
|
-
label: "参数名",
|
|
135
|
-
name: "name"
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
type: "text",
|
|
139
|
-
label: "描述",
|
|
140
|
-
name: "extra"
|
|
141
|
-
},
|
|
142
|
-
codeBlockService.getParamsColConfig() || defaultParamColConfig
|
|
143
|
-
]
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
name: "content",
|
|
147
|
-
type: "vs-code",
|
|
148
|
-
options: inject("codeOptions", {}),
|
|
149
|
-
autosize: {
|
|
150
|
-
minRows: 10,
|
|
151
|
-
maxRows: 30
|
|
152
|
-
},
|
|
153
|
-
onChange: (_formState, code) => {
|
|
154
|
-
try {
|
|
155
|
-
getEditorConfig("parseDSL")(code);
|
|
156
|
-
return code;
|
|
157
|
-
} catch (error) {
|
|
158
|
-
tMagicMessage.error(error.message);
|
|
159
|
-
throw error;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
]));
|
|
57
|
+
const codeOptions = inject("codeOptions", {});
|
|
58
|
+
/**
|
|
59
|
+
* 代码块编辑表单配置。统一委托到 utils/code-block 的 `getCodeBlockFormConfig`,
|
|
60
|
+
* 与 CompareForm 等其它使用方共享同一份 schema,避免双份维护。
|
|
61
|
+
*
|
|
62
|
+
* 这里以 computed 包裹是为了让 `props.isDataSource` / `props.dataSourceType` 变化时
|
|
63
|
+
* "执行时机"字段的可见性与可选项实时刷新。
|
|
64
|
+
*/
|
|
65
|
+
const functionConfig = computed(() => getCodeBlockFormConfig({
|
|
66
|
+
paramColConfig: codeBlockService.getParamsColConfig(),
|
|
67
|
+
isDataSource: () => Boolean(props.isDataSource),
|
|
68
|
+
dataSourceType: () => props.dataSourceType,
|
|
69
|
+
codeOptions,
|
|
70
|
+
editable: true
|
|
71
|
+
}));
|
|
164
72
|
const parseContent = (content) => {
|
|
165
73
|
if (typeof content === "string") return getEditorConfig("parseDSL")(content);
|
|
166
74
|
return content;
|
|
@@ -304,7 +212,7 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
304
212
|
})])]),
|
|
305
213
|
default: withCtx(() => [createElementVNode("div", _hoisted_1, [createElementVNode("div", _hoisted_2, [createVNode(unref(TMagicTag), {
|
|
306
214
|
size: "small",
|
|
307
|
-
type: "
|
|
215
|
+
type: "danger"
|
|
308
216
|
}, {
|
|
309
217
|
default: withCtx(() => [..._cache[7] || (_cache[7] = [createTextVNode("修改前", -1)])]),
|
|
310
218
|
_: 1
|
|
@@ -7,6 +7,8 @@ var CodeParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
7
7
|
__name: "CodeParams",
|
|
8
8
|
props: {
|
|
9
9
|
model: {},
|
|
10
|
+
lastValues: {},
|
|
11
|
+
isCompare: { type: Boolean },
|
|
10
12
|
size: {},
|
|
11
13
|
disabled: { type: Boolean },
|
|
12
14
|
name: {},
|
|
@@ -56,6 +58,8 @@ var CodeParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
56
58
|
ref: "form",
|
|
57
59
|
config: codeParamsConfig.value,
|
|
58
60
|
"init-values": __props.model,
|
|
61
|
+
"last-values": __props.lastValues,
|
|
62
|
+
"is-compare": __props.isCompare,
|
|
59
63
|
disabled: __props.disabled,
|
|
60
64
|
size: __props.size,
|
|
61
65
|
"watch-props": false,
|
|
@@ -63,6 +67,8 @@ var CodeParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
63
67
|
}, null, 8, [
|
|
64
68
|
"config",
|
|
65
69
|
"init-values",
|
|
70
|
+
"last-values",
|
|
71
|
+
"is-compare",
|
|
66
72
|
"disabled",
|
|
67
73
|
"size"
|
|
68
74
|
]);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import CompareForm_vue_vue_type_script_setup_true_lang_default from "./CompareForm.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region packages/editor/src/components/CompareForm.vue
|
|
3
|
+
var CompareForm_default = CompareForm_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { CompareForm_default as default };
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { useServices } from "../hooks/use-services.js";
|
|
2
|
+
import { getCodeBlockFormConfig } from "../utils/code-block.js";
|
|
3
|
+
import { MForm } from "@tmagic/form";
|
|
4
|
+
import { HookType } from "@tmagic/core";
|
|
5
|
+
import { computed, createBlock, createCommentVNode, createElementBlock, defineComponent, inject, normalizeStyle, openBlock, ref, unref, useTemplateRef, watch, watchEffect } from "vue";
|
|
6
|
+
import { isEqual } from "lodash-es";
|
|
7
|
+
//#region packages/editor/src/components/CompareForm.vue?vue&type=script&setup=true&lang.ts
|
|
8
|
+
var CompareForm_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
9
|
+
name: "MEditorCompareForm",
|
|
10
|
+
__name: "CompareForm",
|
|
11
|
+
props: {
|
|
12
|
+
value: {},
|
|
13
|
+
lastValue: {},
|
|
14
|
+
type: {},
|
|
15
|
+
category: { default: "node" },
|
|
16
|
+
dataSourceType: {},
|
|
17
|
+
labelWidth: { default: "120px" },
|
|
18
|
+
height: {},
|
|
19
|
+
extendState: {}
|
|
20
|
+
},
|
|
21
|
+
setup(__props, { expose: __expose }) {
|
|
22
|
+
/**
|
|
23
|
+
* 对比类型:
|
|
24
|
+
* - node: 节点组件,按 `type` 从 propsService 获取属性表单配置
|
|
25
|
+
* - data-source: 数据源,按 `type`(base/http/...) 从 dataSourceService 获取数据源表单配置
|
|
26
|
+
* - code-block: 数据源代码块,使用内置的代码块表单配置
|
|
27
|
+
*/
|
|
28
|
+
const props = __props;
|
|
29
|
+
const { propsService, dataSourceService, codeBlockService, editorService } = useServices();
|
|
30
|
+
const services = useServices();
|
|
31
|
+
const config = ref([]);
|
|
32
|
+
/** vs-code 编辑器的 monaco 配置项,沿用 Editor 顶层 provide('codeOptions', ...) 的注入。 */
|
|
33
|
+
const codeOptions = inject("codeOptions", {});
|
|
34
|
+
/** 将代码块的 content 字段统一成字符串,便于在表单/对比中展示 */
|
|
35
|
+
const normalizeCodeBlockValue = (v) => {
|
|
36
|
+
if (!v) return {};
|
|
37
|
+
const next = { ...v };
|
|
38
|
+
if (next.content && typeof next.content !== "string") try {
|
|
39
|
+
next.content = next.content.toString();
|
|
40
|
+
} catch {
|
|
41
|
+
next.content = "";
|
|
42
|
+
}
|
|
43
|
+
return next;
|
|
44
|
+
};
|
|
45
|
+
const currentValues = computed(() => {
|
|
46
|
+
if (props.category === "code-block") return normalizeCodeBlockValue(props.value);
|
|
47
|
+
return props.value || {};
|
|
48
|
+
});
|
|
49
|
+
const lastValuesProcessed = computed(() => {
|
|
50
|
+
if (props.category === "code-block") return normalizeCodeBlockValue(props.lastValue);
|
|
51
|
+
return props.lastValue || {};
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* 外层包裹层的样式:当传入 `height` 时启用固定高度 + 内部滚动,
|
|
55
|
+
* 这样滚动条会出现在 CompareForm 内部,避免父容器(如 Dialog)自身也产生滚动。
|
|
56
|
+
*/
|
|
57
|
+
const wrapperStyle = computed(() => {
|
|
58
|
+
if (!props.height) return void 0;
|
|
59
|
+
return {
|
|
60
|
+
height: props.height,
|
|
61
|
+
overflow: "auto"
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
/**
|
|
65
|
+
* `code-select` 字段在历史数据中存在两种"语义为空"的形态:
|
|
66
|
+
* - 字符串 `''`(旧数据 / 用户从未配置过钩子);
|
|
67
|
+
* - `{ hookType: HookType.CODE, hookData: [] }`(CodeSelect.vue 在挂载时
|
|
68
|
+
* 写入的默认结构,参见 packages/editor/src/fields/CodeSelect.vue 中
|
|
69
|
+
* `props.model[props.name] = { hookType: HookType.CODE, hookData: [] }`)。
|
|
70
|
+
*
|
|
71
|
+
* 直接 `isEqual` 会把两者判为不等,从而在历史对比里对每个未配置过钩子的组件
|
|
72
|
+
* 都展示一份"差异",体验很糟糕。这里把它们视为相等,跳过对比。
|
|
73
|
+
*
|
|
74
|
+
* 其它类型字段沿用 MForm/Container 的默认 `!isEqual` 判断逻辑。
|
|
75
|
+
*/
|
|
76
|
+
const isEmptyCodeSelectValue = (v) => {
|
|
77
|
+
if (v === "" || v === void 0 || v === null) return true;
|
|
78
|
+
if (Array.isArray(v) && v.length === 0) return true;
|
|
79
|
+
return typeof v === "object" && v.hookType === HookType.CODE && Array.isArray(v.hookData) && v.hookData.length === 0;
|
|
80
|
+
};
|
|
81
|
+
const showDiff = ({ curValue, lastValue, config }) => {
|
|
82
|
+
if (config?.type === "code-select") {
|
|
83
|
+
if (isEmptyCodeSelectValue(curValue) && isEmptyCodeSelectValue(lastValue)) return false;
|
|
84
|
+
}
|
|
85
|
+
return !isEqual(curValue, lastValue);
|
|
86
|
+
};
|
|
87
|
+
const loadConfig = async () => {
|
|
88
|
+
switch (props.category) {
|
|
89
|
+
case "node":
|
|
90
|
+
if (!props.type) {
|
|
91
|
+
config.value = [];
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
config.value = await propsService.getPropsConfig(props.type);
|
|
95
|
+
break;
|
|
96
|
+
case "data-source":
|
|
97
|
+
config.value = dataSourceService.getFormConfig(props.type || "base");
|
|
98
|
+
break;
|
|
99
|
+
case "code-block":
|
|
100
|
+
config.value = getCodeBlockFormConfig({
|
|
101
|
+
paramColConfig: codeBlockService.getParamsColConfig(),
|
|
102
|
+
isDataSource: () => Boolean(props.dataSourceType),
|
|
103
|
+
dataSourceType: () => props.dataSourceType,
|
|
104
|
+
codeOptions,
|
|
105
|
+
editable: false
|
|
106
|
+
});
|
|
107
|
+
break;
|
|
108
|
+
default: config.value = [];
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
watch([
|
|
112
|
+
() => props.category,
|
|
113
|
+
() => props.type,
|
|
114
|
+
() => props.dataSourceType
|
|
115
|
+
], () => {
|
|
116
|
+
loadConfig();
|
|
117
|
+
}, { immediate: true });
|
|
118
|
+
const formRef = useTemplateRef("form");
|
|
119
|
+
/**
|
|
120
|
+
* 把 services / stage 注入 MForm 的 formState,避免 propsService 注入的表单配置中
|
|
121
|
+
* 形如 `display: ({ services }) => services.uiService.get(...)` 的 filterFunction
|
|
122
|
+
* 在执行时拿不到 `formState.services` 而报错。
|
|
123
|
+
*
|
|
124
|
+
* 与 props-panel/FormPanel.vue 中的注入方式保持一致:
|
|
125
|
+
* - services:整个 useServices() 返回的服务集合;
|
|
126
|
+
* - stage:当前 editorService.get('stage') 的最新值。
|
|
127
|
+
*/
|
|
128
|
+
const stage = computed(() => editorService.get("stage"));
|
|
129
|
+
watchEffect(() => {
|
|
130
|
+
if (formRef.value) {
|
|
131
|
+
formRef.value.formState.stage = stage.value;
|
|
132
|
+
formRef.value.formState.services = services;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
__expose({
|
|
136
|
+
form: formRef,
|
|
137
|
+
config,
|
|
138
|
+
reload: loadConfig
|
|
139
|
+
});
|
|
140
|
+
return (_ctx, _cache) => {
|
|
141
|
+
return openBlock(), createElementBlock("div", {
|
|
142
|
+
class: "m-editor-compare-form-wrapper",
|
|
143
|
+
style: normalizeStyle(wrapperStyle.value)
|
|
144
|
+
}, [config.value.length ? (openBlock(), createBlock(unref(MForm), {
|
|
145
|
+
key: 0,
|
|
146
|
+
ref: "form",
|
|
147
|
+
class: "m-editor-compare-form",
|
|
148
|
+
config: config.value,
|
|
149
|
+
"init-values": currentValues.value,
|
|
150
|
+
"last-values": lastValuesProcessed.value,
|
|
151
|
+
"is-compare": true,
|
|
152
|
+
disabled: true,
|
|
153
|
+
"label-width": __props.labelWidth,
|
|
154
|
+
"extend-state": __props.extendState,
|
|
155
|
+
"show-diff": showDiff
|
|
156
|
+
}, null, 8, [
|
|
157
|
+
"config",
|
|
158
|
+
"init-values",
|
|
159
|
+
"last-values",
|
|
160
|
+
"label-width",
|
|
161
|
+
"extend-state"
|
|
162
|
+
])) : createCommentVNode("v-if", true)], 4);
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
//#endregion
|
|
167
|
+
export { CompareForm_vue_vue_type_script_setup_true_lang_default as default };
|
|
@@ -1,5 +1,5 @@
|
|
|
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
4
|
var Code_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
5
5
|
name: "MFieldsVsCode",
|
|
@@ -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",
|
|
@@ -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";
|
|
@@ -35,6 +35,17 @@ 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
50
|
const hasCodeBlockSidePanel = computed(() => (uiService.get("sideBarItems") || []).find((item) => item.$key === SideItemKey.CODE_BLOCK));
|
|
40
51
|
/**
|
|
@@ -97,7 +108,23 @@ var CodeSelectCol_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
97
108
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
98
109
|
createElementVNode("div", _hoisted_2, [
|
|
99
110
|
createCommentVNode(" 代码块下拉框 "),
|
|
100
|
-
|
|
111
|
+
createCommentVNode(" 对比模式下交由 MFormContainer 展示下拉框的前后差异(codeId 变化时高亮新旧代码块名),\n 普通模式仍直接渲染 MSelect 以保留选择 / 写值逻辑 "),
|
|
112
|
+
isCompareMode.value ? (openBlock(), createBlock(unref(MContainer), {
|
|
113
|
+
key: 0,
|
|
114
|
+
class: "select",
|
|
115
|
+
config: selectConfig,
|
|
116
|
+
model: __props.model,
|
|
117
|
+
"last-values": __props.lastValues,
|
|
118
|
+
"is-compare": true,
|
|
119
|
+
size: __props.size,
|
|
120
|
+
prop: __props.prop
|
|
121
|
+
}, null, 8, [
|
|
122
|
+
"model",
|
|
123
|
+
"last-values",
|
|
124
|
+
"size",
|
|
125
|
+
"prop"
|
|
126
|
+
])) : (openBlock(), createBlock(unref(MSelect), {
|
|
127
|
+
key: 1,
|
|
101
128
|
class: "select",
|
|
102
129
|
config: selectConfig,
|
|
103
130
|
name: __props.name,
|
|
@@ -110,10 +137,10 @@ var CodeSelectCol_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
110
137
|
"model",
|
|
111
138
|
"size",
|
|
112
139
|
"prop"
|
|
113
|
-
]),
|
|
114
|
-
createCommentVNode("
|
|
115
|
-
__props.model[__props.name] && hasCodeBlockSidePanel.value ? (openBlock(), createBlock(unref(TMagicButton), {
|
|
116
|
-
key:
|
|
140
|
+
])),
|
|
141
|
+
createCommentVNode(" 查看/编辑按钮:对比模式为只读,不展示 "),
|
|
142
|
+
!isCompareMode.value && __props.model[__props.name] && hasCodeBlockSidePanel.value ? (openBlock(), createBlock(unref(TMagicButton), {
|
|
143
|
+
key: 2,
|
|
117
144
|
class: "m-fields-select-action-button",
|
|
118
145
|
size: __props.size,
|
|
119
146
|
onClick: _cache[0] || (_cache[0] = ($event) => editCode(__props.model[__props.name]))
|
|
@@ -127,12 +154,16 @@ var CodeSelectCol_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
127
154
|
name: "params",
|
|
128
155
|
key: __props.model[__props.name],
|
|
129
156
|
model: __props.model,
|
|
157
|
+
"last-values": __props.lastValues,
|
|
158
|
+
"is-compare": isCompareMode.value,
|
|
130
159
|
size: __props.size,
|
|
131
160
|
disabled: __props.disabled,
|
|
132
161
|
"params-config": paramsConfig.value,
|
|
133
162
|
onChange: onParamsChangeHandler
|
|
134
163
|
}, null, 8, [
|
|
135
164
|
"model",
|
|
165
|
+
"last-values",
|
|
166
|
+
"is-compare",
|
|
136
167
|
"size",
|
|
137
168
|
"disabled",
|
|
138
169
|
"params-config"
|
package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -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}`
|
|
@@ -166,7 +168,7 @@ var FieldSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
166
168
|
"size",
|
|
167
169
|
"options",
|
|
168
170
|
"props"
|
|
169
|
-
])), selectDataSourceId.value && hasDataSourceSidePanel.value ? (openBlock(), createBlock(unref(TMagicTooltip), {
|
|
171
|
+
])), selectDataSourceId.value && hasDataSourceSidePanel.value && !isCompare.value ? (openBlock(), createBlock(unref(TMagicTooltip), {
|
|
170
172
|
key: 3,
|
|
171
173
|
content: notEditable.value ? "查看" : "编辑"
|
|
172
174
|
}, {
|
|
@@ -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,10 +7,13 @@ 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, openBlock, 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 = {
|
|
13
|
+
var _hoisted_2 = {
|
|
14
|
+
key: 0,
|
|
15
|
+
class: "m-editor-data-source-fields-footer"
|
|
16
|
+
};
|
|
14
17
|
var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
15
18
|
name: "MFieldsDataSourceFields",
|
|
16
19
|
__name: "DataSourceFields",
|
|
@@ -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");
|
|
@@ -130,6 +136,8 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
130
136
|
}]
|
|
131
137
|
}
|
|
132
138
|
];
|
|
139
|
+
/** 对比模式下移除「操作」列(编辑/删除按钮),仅保留只读列。 */
|
|
140
|
+
const displayColumns = computed(() => isCompare.value ? fieldColumns.filter((col) => !col.actions) : fieldColumns);
|
|
133
141
|
const dataSourceFieldsConfig = [
|
|
134
142
|
{
|
|
135
143
|
name: "index",
|
|
@@ -306,10 +314,10 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
306
314
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
307
315
|
createVNode(unref(MagicTable), {
|
|
308
316
|
data: __props.model[__props.name],
|
|
309
|
-
columns:
|
|
317
|
+
columns: displayColumns.value,
|
|
310
318
|
border: true
|
|
311
|
-
}, null, 8, ["data"]),
|
|
312
|
-
|
|
319
|
+
}, null, 8, ["data", "columns"]),
|
|
320
|
+
!isCompare.value ? (openBlock(), createElementBlock("div", _hoisted_2, [createVNode(unref(TMagicButton), {
|
|
313
321
|
size: "small",
|
|
314
322
|
disabled: __props.disabled,
|
|
315
323
|
plain: "",
|
|
@@ -326,7 +334,7 @@ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
326
334
|
}, {
|
|
327
335
|
default: withCtx(() => [..._cache[9] || (_cache[9] = [createTextVNode("添加", -1)])]),
|
|
328
336
|
_: 1
|
|
329
|
-
}, 8, ["disabled"])]),
|
|
337
|
+
}, 8, ["disabled"])])) : createCommentVNode("v-if", true),
|
|
330
338
|
createVNode(FloatingBox_default, {
|
|
331
339
|
visible: addDialogVisible.value,
|
|
332
340
|
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => addDialogVisible.value = $event),
|