@tmagic/editor 1.8.0-beta.3 → 1.8.0-beta.5
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/components/CompareForm.vue_vue_type_script_setup_true_lang.js +15 -1
- package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +6 -6
- package/dist/es/hooks/use-code-block-edit.js +6 -3
- package/dist/es/hooks/use-data-source-edit.js +5 -2
- package/dist/es/hooks/use-stage.js +6 -3
- package/dist/es/index.js +6 -3
- package/dist/es/initService.js +1 -1
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +19 -51
- package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +22 -36
- package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +152 -93
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +36 -10
- package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +334 -208
- package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +28 -7
- package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +47 -57
- package/dist/es/layouts/history-list/composables.js +118 -25
- package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +5 -1
- package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +5 -1
- package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/code-block/useContentMenu.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +1 -1
- 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 +5 -5
- package/dist/es/layouts/sidebar/layer/LayerNodeTool.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 +1 -1
- package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/es/services/codeBlock.js +105 -42
- package/dist/es/services/dataSource.js +85 -35
- package/dist/es/services/editor.js +317 -122
- package/dist/es/services/history.js +270 -204
- package/dist/es/services/keybinding.js +3 -3
- package/dist/es/services/ui.js +3 -0
- package/dist/es/style.css +65 -10
- package/dist/es/utils/content-menu.js +17 -9
- package/dist/es/utils/editor.js +35 -1
- package/dist/es/utils/history.js +223 -0
- package/dist/es/utils/indexed-db.js +86 -0
- package/dist/es/utils/undo-redo.js +60 -1
- package/dist/style.css +65 -10
- package/dist/tmagic-editor.umd.cjs +2047 -954
- package/package.json +7 -7
- package/src/components/CompareForm.vue +21 -1
- package/src/components/ToolButton.vue +2 -2
- package/src/hooks/use-code-block-edit.ts +4 -3
- package/src/hooks/use-data-source-edit.ts +2 -2
- package/src/hooks/use-stage.ts +3 -3
- package/src/index.ts +1 -0
- package/src/initService.ts +1 -1
- package/src/layouts/Framework.vue +1 -1
- package/src/layouts/NavMenu.vue +1 -1
- package/src/layouts/history-list/Bucket.vue +34 -67
- package/src/layouts/history-list/BucketTab.vue +46 -51
- package/src/layouts/history-list/GroupRow.vue +150 -98
- package/src/layouts/history-list/HistoryDiffDialog.vue +96 -69
- package/src/layouts/history-list/HistoryListPanel.vue +298 -111
- package/src/layouts/history-list/InitialRow.vue +25 -9
- package/src/layouts/history-list/PageTab.vue +58 -48
- package/src/layouts/history-list/composables.ts +210 -29
- 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 +6 -1
- 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/DataSourceListPanel.vue +1 -1
- 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/workspace/viewer/Stage.vue +1 -1
- package/src/layouts/workspace/viewer/ViewerMenu.vue +8 -8
- package/src/services/codeBlock.ts +129 -35
- package/src/services/dataSource.ts +105 -34
- package/src/services/editor.ts +470 -157
- package/src/services/history.ts +312 -203
- package/src/services/keybinding.ts +3 -3
- package/src/services/ui.ts +7 -0
- package/src/theme/history-list-panel.scss +87 -6
- package/src/theme/page-bar.scss +0 -4
- package/src/theme/props-panel.scss +3 -3
- package/src/type.ts +221 -61
- package/src/utils/content-menu.ts +18 -9
- package/src/utils/editor.ts +41 -1
- package/src/utils/history.ts +298 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/indexed-db.ts +122 -0
- package/src/utils/undo-redo.ts +88 -0
- package/types/index.d.ts +871 -308
|
@@ -1,109 +1,150 @@
|
|
|
1
|
-
import { opLabel } from "./composables.js";
|
|
1
|
+
import { opLabel, sourceLabel } from "./composables.js";
|
|
2
2
|
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, renderList, toDisplayString, unref, withModifiers } from "vue";
|
|
3
3
|
//#region packages/editor/src/layouts/history-list/GroupRow.vue?vue&type=script&setup=true&lang.ts
|
|
4
4
|
var _hoisted_1 = ["title"];
|
|
5
5
|
var _hoisted_2 = ["title"];
|
|
6
6
|
var _hoisted_3 = { class: "m-editor-history-list-item-desc" };
|
|
7
|
-
var _hoisted_4 =
|
|
7
|
+
var _hoisted_4 = {
|
|
8
|
+
key: 0,
|
|
9
|
+
class: "m-editor-history-list-item-saved",
|
|
10
|
+
title: "该记录为最近一次保存的状态"
|
|
11
|
+
};
|
|
8
12
|
var _hoisted_5 = {
|
|
9
13
|
key: 1,
|
|
14
|
+
class: "m-editor-history-list-item-actions"
|
|
15
|
+
};
|
|
16
|
+
var _hoisted_6 = ["title"];
|
|
17
|
+
var _hoisted_7 = ["title"];
|
|
18
|
+
var _hoisted_8 = {
|
|
19
|
+
key: 4,
|
|
10
20
|
class: "m-editor-history-list-item-merge"
|
|
11
21
|
};
|
|
12
|
-
var
|
|
22
|
+
var _hoisted_9 = {
|
|
13
23
|
key: 0,
|
|
14
24
|
class: "m-editor-history-list-substeps"
|
|
15
25
|
};
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
var _hoisted_10 = ["title", "onClick"];
|
|
27
|
+
var _hoisted_11 = { class: "m-editor-history-list-item-index" };
|
|
28
|
+
var _hoisted_12 = { class: "m-editor-history-list-substep-desc" };
|
|
29
|
+
var _hoisted_13 = {
|
|
30
|
+
key: 0,
|
|
31
|
+
class: "m-editor-history-list-item-saved",
|
|
32
|
+
title: "该记录为最近一次保存的状态"
|
|
33
|
+
};
|
|
34
|
+
var _hoisted_14 = {
|
|
35
|
+
key: 1,
|
|
36
|
+
class: "m-editor-history-list-item-actions"
|
|
37
|
+
};
|
|
38
|
+
var _hoisted_15 = ["onClick"];
|
|
39
|
+
var _hoisted_16 = ["onClick"];
|
|
40
|
+
var _hoisted_17 = ["onClick"];
|
|
41
|
+
var _hoisted_18 = ["title"];
|
|
42
|
+
var _hoisted_19 = ["title"];
|
|
23
43
|
var GroupRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
24
44
|
name: "MEditorHistoryListGroupRow",
|
|
25
45
|
__name: "GroupRow",
|
|
26
46
|
props: {
|
|
27
|
-
|
|
28
|
-
applied: { type: Boolean },
|
|
29
|
-
merged: { type: Boolean },
|
|
30
|
-
opType: {},
|
|
31
|
-
desc: {},
|
|
32
|
-
time: {},
|
|
33
|
-
timeTitle: {},
|
|
34
|
-
stepCount: {},
|
|
35
|
-
subSteps: {},
|
|
47
|
+
group: {},
|
|
36
48
|
expanded: { type: Boolean },
|
|
37
|
-
isCurrent: {
|
|
38
|
-
type: Boolean,
|
|
39
|
-
default: false
|
|
40
|
-
},
|
|
41
49
|
gotoEnabled: {
|
|
42
50
|
type: Boolean,
|
|
43
51
|
default: true
|
|
52
|
+
},
|
|
53
|
+
selectEnabled: {
|
|
54
|
+
type: Boolean,
|
|
55
|
+
default: false
|
|
44
56
|
}
|
|
45
57
|
},
|
|
46
58
|
emits: [
|
|
47
59
|
"toggle",
|
|
48
60
|
"goto",
|
|
49
61
|
"diff-step",
|
|
50
|
-
"revert-step"
|
|
62
|
+
"revert-step",
|
|
63
|
+
"select"
|
|
51
64
|
],
|
|
52
65
|
setup(__props, { emit: __emit }) {
|
|
53
66
|
const props = __props;
|
|
54
67
|
const emit = __emit;
|
|
68
|
+
/** 子步数大于 1 即为合并组:决定是否展示合并标记与可展开的子步列表。 */
|
|
69
|
+
const merged = computed(() => props.group.subSteps.length > 1);
|
|
70
|
+
/** 组内 step 总数,仅在合并组时显示为 "合并 N 步"。 */
|
|
71
|
+
const stepCount = computed(() => props.group.subSteps.length);
|
|
55
72
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
73
|
+
* 头部可点击的场景:
|
|
74
|
+
* - 合并组:点击切换展开 / 收起;
|
|
75
|
+
* - 开启 `selectEnabled`(页面 tab):点击选中对应节点。
|
|
76
|
+
* 单步组的跳转仍由头部的「回到」按钮触发。
|
|
58
77
|
*/
|
|
59
|
-
const isHeadClickable = computed(() => props.
|
|
78
|
+
const isHeadClickable = computed(() => merged.value || props.selectEnabled);
|
|
60
79
|
const headTitle = computed(() => {
|
|
61
|
-
if (
|
|
62
|
-
|
|
80
|
+
if (merged.value) {
|
|
81
|
+
const expandHint = props.expanded ? "点击收起子步" : "点击展开子步";
|
|
82
|
+
return props.selectEnabled ? `${expandHint}(并选中该节点)` : expandHint;
|
|
83
|
+
}
|
|
84
|
+
if (props.selectEnabled) return "点击选中该节点";
|
|
85
|
+
if (props.group.isCurrent) return "当前所在记录";
|
|
63
86
|
return "";
|
|
64
87
|
});
|
|
65
88
|
/**
|
|
66
|
-
*
|
|
89
|
+
* 头部点击行为:
|
|
90
|
+
* - 开启 selectEnabled 时,发出 select(携带组内首步 index,上层据此选中节点);
|
|
91
|
+
* - 合并组同时切换展开 / 收起。
|
|
67
92
|
*/
|
|
68
93
|
const onHeadClick = () => {
|
|
69
|
-
if (props.
|
|
94
|
+
if (props.selectEnabled && props.group.subSteps.length) emit("select", props.group.subSteps[0].index);
|
|
95
|
+
if (merged.value) emit("toggle", props.group.key);
|
|
70
96
|
};
|
|
71
97
|
const onGotoClick = (index) => {
|
|
72
98
|
if (!props.gotoEnabled) return;
|
|
73
99
|
emit("goto", index);
|
|
74
100
|
};
|
|
101
|
+
/** 点击子步行:开启 selectEnabled 时选中该子步对应的节点。 */
|
|
102
|
+
const onSubStepClick = (index) => {
|
|
103
|
+
if (!props.selectEnabled) return;
|
|
104
|
+
emit("select", index);
|
|
105
|
+
};
|
|
75
106
|
const subStepTitle = (s) => {
|
|
107
|
+
if (props.selectEnabled) return "点击选中该节点";
|
|
76
108
|
if (s.isCurrent) return "当前所在记录";
|
|
77
109
|
return "";
|
|
78
110
|
};
|
|
111
|
+
/**
|
|
112
|
+
* 头部是否展示「已保存」标记:
|
|
113
|
+
* - 单步组:取该唯一子步的 saved;
|
|
114
|
+
* - 合并组:组内任一子步为已保存即在头部提示(具体落在哪一步可展开查看)。
|
|
115
|
+
*/
|
|
116
|
+
const headSaved = computed(() => merged.value ? props.group.subSteps.some((s) => s.saved) : Boolean(props.group.subSteps[0]?.saved));
|
|
79
117
|
/** 单步组头部是否展示"查看差异"入口:要求该唯一子步本身可对比。 */
|
|
80
|
-
const headDiffable = computed(() => !
|
|
118
|
+
const headDiffable = computed(() => !merged.value && Boolean(props.group.subSteps[0]?.diffable));
|
|
81
119
|
/** 单步组头部是否展示"回滚"入口:要求该唯一子步本身可回滚(已应用)。 */
|
|
82
|
-
const headRevertable = computed(() => !
|
|
120
|
+
const headRevertable = computed(() => !merged.value && Boolean(props.group.subSteps[0]?.revertable));
|
|
121
|
+
/** 单步组头部是否展示"回到"入口:可跳转、非当前、且存在唯一子步。 */
|
|
122
|
+
const canHeadGoto = computed(() => !merged.value && props.gotoEnabled && !props.group.isCurrent && props.group.subSteps.length > 0);
|
|
83
123
|
/**
|
|
84
124
|
* 合并组展开后的子步渲染顺序:与外层分组列表保持一致——倒序展示(最新的子步在最上方)。
|
|
85
125
|
* 外层 page tab / bucket 都已对 groups 做了 reverse,子步沿用同样的视觉规则更直观。
|
|
86
126
|
* 注意:仅用于渲染,原 `subSteps` 保持时间正序,`headIndexLabel` 等基于首尾索引的展示语义不变。
|
|
87
127
|
*/
|
|
88
|
-
const subStepsDisplay = computed(() => props.subSteps.slice().reverse());
|
|
128
|
+
const subStepsDisplay = computed(() => props.group.subSteps.slice().reverse());
|
|
89
129
|
/**
|
|
90
130
|
* 头部索引展示:
|
|
91
|
-
* -
|
|
131
|
+
* - 单步组(非合并):显示该唯一 step 的编号,如 `#5`;
|
|
92
132
|
* - 合并组:显示组内 step 的编号范围,如 `#3-#7`(首尾相同则退化为 `#5`)。
|
|
93
133
|
*
|
|
94
134
|
* 这里展示的是 step.index + 1(与子步列表 `#{{ s.index + 1 }}` 保持一致),从 1 起编号更符合直觉。
|
|
95
135
|
*/
|
|
96
136
|
const headIndexLabel = computed(() => {
|
|
97
|
-
const list = props.subSteps;
|
|
137
|
+
const list = props.group.subSteps;
|
|
98
138
|
if (!list.length) return "";
|
|
99
139
|
const first = list[0].index + 1;
|
|
100
140
|
const last = list[list.length - 1].index + 1;
|
|
101
|
-
if (!
|
|
141
|
+
if (!merged.value || first === last) return `#${first}`;
|
|
102
142
|
return `#${first}-#${last}`;
|
|
103
143
|
});
|
|
104
144
|
const headIndexTitle = computed(() => {
|
|
105
|
-
|
|
106
|
-
|
|
145
|
+
const list = props.group.subSteps;
|
|
146
|
+
if (!merged.value) return `历史步骤编号 #${list[0]?.index + 1}`;
|
|
147
|
+
return `合并了第 ${list[0]?.index + 1} 至第 ${list[list.length - 1]?.index + 1} 共 ${list.length} 条历史步骤`;
|
|
107
148
|
});
|
|
108
149
|
const onDiffClick = (index) => {
|
|
109
150
|
emit("diff-step", index);
|
|
@@ -113,9 +154,9 @@ var GroupRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
113
154
|
};
|
|
114
155
|
return (_ctx, _cache) => {
|
|
115
156
|
return openBlock(), createElementBlock("li", { class: normalizeClass(["m-editor-history-list-item m-editor-history-list-group", {
|
|
116
|
-
"is-undone": !__props.applied,
|
|
117
|
-
"is-merged":
|
|
118
|
-
"is-current": __props.isCurrent
|
|
157
|
+
"is-undone": !__props.group.applied,
|
|
158
|
+
"is-merged": merged.value,
|
|
159
|
+
"is-current": __props.group.isCurrent
|
|
119
160
|
}]) }, [createElementVNode("div", {
|
|
120
161
|
class: normalizeClass(["m-editor-history-list-group-head", { "is-clickable": isHeadClickable.value }]),
|
|
121
162
|
title: headTitle.value,
|
|
@@ -125,71 +166,89 @@ var GroupRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
125
166
|
class: "m-editor-history-list-item-index",
|
|
126
167
|
title: headIndexTitle.value
|
|
127
168
|
}, toDisplayString(headIndexLabel.value), 9, _hoisted_2),
|
|
128
|
-
createElementVNode("span", { class: normalizeClass(["m-editor-history-list-item-op", `op-${__props.opType}`]) }, toDisplayString(unref(opLabel)(__props.opType)), 3),
|
|
129
|
-
createElementVNode("span", _hoisted_3, toDisplayString(__props.desc), 1),
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
169
|
+
createElementVNode("span", { class: normalizeClass(["m-editor-history-list-item-op", `op-${__props.group.opType}`]) }, toDisplayString(unref(opLabel)(__props.group.opType)), 3),
|
|
170
|
+
createElementVNode("span", _hoisted_3, toDisplayString(__props.group.desc), 1),
|
|
171
|
+
headSaved.value ? (openBlock(), createElementBlock("span", _hoisted_4, "已保存")) : createCommentVNode("v-if", true),
|
|
172
|
+
!merged.value && (headRevertable.value || headDiffable.value || canHeadGoto.value) ? (openBlock(), createElementBlock("span", _hoisted_5, [
|
|
173
|
+
headRevertable.value ? (openBlock(), createElementBlock("span", {
|
|
174
|
+
key: 0,
|
|
175
|
+
class: "m-editor-history-list-item-revert",
|
|
176
|
+
title: "将该步骤的修改作为一次新操作反向应用(不影响后续历史)",
|
|
177
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onRevertClick(__props.group.subSteps[0].index), ["stop"]))
|
|
178
|
+
}, "回滚")) : createCommentVNode("v-if", true),
|
|
179
|
+
canHeadGoto.value ? (openBlock(), createElementBlock("span", {
|
|
180
|
+
key: 1,
|
|
181
|
+
class: "m-editor-history-list-item-goto",
|
|
182
|
+
title: "回到该记录",
|
|
183
|
+
onClick: _cache[1] || (_cache[1] = withModifiers(($event) => onGotoClick(__props.group.subSteps[0].index), ["stop"]))
|
|
184
|
+
}, "回到")) : createCommentVNode("v-if", true),
|
|
185
|
+
headDiffable.value ? (openBlock(), createElementBlock("span", {
|
|
186
|
+
key: 2,
|
|
187
|
+
class: "m-editor-history-list-item-diff",
|
|
188
|
+
title: "查看修改差异",
|
|
189
|
+
onClick: _cache[2] || (_cache[2] = withModifiers(($event) => onDiffClick(__props.group.subSteps[0].index), ["stop"]))
|
|
190
|
+
}, "查看差异")) : createCommentVNode("v-if", true)
|
|
191
|
+
])) : createCommentVNode("v-if", true),
|
|
192
|
+
!merged.value && unref(sourceLabel)(__props.group.source) ? (openBlock(), createElementBlock("span", {
|
|
137
193
|
key: 2,
|
|
138
|
-
class: "m-editor-history-list-item-
|
|
139
|
-
title:
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
!__props.merged && __props.gotoEnabled && !__props.isCurrent && __props.subSteps.length ? (openBlock(), createElementBlock("span", {
|
|
194
|
+
class: "m-editor-history-list-item-source",
|
|
195
|
+
title: `操作途径:${unref(sourceLabel)(__props.group.source)}`
|
|
196
|
+
}, toDisplayString(unref(sourceLabel)(__props.group.source)), 9, _hoisted_6)) : createCommentVNode("v-if", true),
|
|
197
|
+
!merged.value && __props.group.time ? (openBlock(), createElementBlock("span", {
|
|
143
198
|
key: 3,
|
|
144
|
-
class: "m-editor-history-list-item-
|
|
145
|
-
title:
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
key: 4,
|
|
150
|
-
class: "m-editor-history-list-item-diff",
|
|
151
|
-
title: "查看修改差异",
|
|
152
|
-
onClick: _cache[2] || (_cache[2] = withModifiers(($event) => onDiffClick(__props.subSteps[0].index), ["stop"]))
|
|
153
|
-
}, "查看差异")) : createCommentVNode("v-if", true),
|
|
154
|
-
__props.merged ? (openBlock(), createElementBlock("span", {
|
|
199
|
+
class: "m-editor-history-list-item-time",
|
|
200
|
+
title: __props.group.timeTitle || __props.group.time
|
|
201
|
+
}, toDisplayString(__props.group.time), 9, _hoisted_7)) : createCommentVNode("v-if", true),
|
|
202
|
+
merged.value ? (openBlock(), createElementBlock("span", _hoisted_8, "合并 " + toDisplayString(stepCount.value) + " 步", 1)) : createCommentVNode("v-if", true),
|
|
203
|
+
merged.value ? (openBlock(), createElementBlock("span", {
|
|
155
204
|
key: 5,
|
|
156
205
|
class: normalizeClass(["m-editor-history-list-group-toggle", { "is-expanded": __props.expanded }])
|
|
157
206
|
}, "▾", 2)) : createCommentVNode("v-if", true)
|
|
158
|
-
], 10, _hoisted_1),
|
|
207
|
+
], 10, _hoisted_1), merged.value && __props.expanded ? (openBlock(), createElementBlock("ul", _hoisted_9, [(openBlock(true), createElementBlock(Fragment, null, renderList(subStepsDisplay.value, (s) => {
|
|
159
208
|
return openBlock(), createElementBlock("li", {
|
|
160
209
|
key: s.index,
|
|
161
210
|
class: normalizeClass({
|
|
162
211
|
"is-undone": !s.applied,
|
|
163
|
-
"is-current": s.isCurrent
|
|
212
|
+
"is-current": s.isCurrent,
|
|
213
|
+
"is-clickable": __props.selectEnabled
|
|
164
214
|
}),
|
|
165
|
-
title: subStepTitle(s)
|
|
215
|
+
title: subStepTitle(s),
|
|
216
|
+
onClick: ($event) => onSubStepClick(s.index)
|
|
166
217
|
}, [
|
|
167
|
-
createElementVNode("span",
|
|
168
|
-
createElementVNode("span",
|
|
218
|
+
createElementVNode("span", _hoisted_11, "#" + toDisplayString(s.index + 1), 1),
|
|
219
|
+
createElementVNode("span", _hoisted_12, toDisplayString(s.desc), 1),
|
|
220
|
+
s.saved ? (openBlock(), createElementBlock("span", _hoisted_13, "已保存")) : createCommentVNode("v-if", true),
|
|
221
|
+
s.revertable || s.diffable || __props.gotoEnabled && !s.isCurrent ? (openBlock(), createElementBlock("span", _hoisted_14, [
|
|
222
|
+
s.revertable ? (openBlock(), createElementBlock("span", {
|
|
223
|
+
key: 0,
|
|
224
|
+
class: "m-editor-history-list-item-revert",
|
|
225
|
+
title: "将该步骤的修改作为一次新操作反向应用(不影响后续历史)",
|
|
226
|
+
onClick: withModifiers(($event) => onRevertClick(s.index), ["stop"])
|
|
227
|
+
}, "回滚", 8, _hoisted_15)) : createCommentVNode("v-if", true),
|
|
228
|
+
__props.gotoEnabled && !s.isCurrent ? (openBlock(), createElementBlock("span", {
|
|
229
|
+
key: 1,
|
|
230
|
+
class: "m-editor-history-list-item-goto",
|
|
231
|
+
title: "回到该记录",
|
|
232
|
+
onClick: withModifiers(($event) => onGotoClick(s.index), ["stop"])
|
|
233
|
+
}, "回到", 8, _hoisted_16)) : createCommentVNode("v-if", true),
|
|
234
|
+
s.diffable ? (openBlock(), createElementBlock("span", {
|
|
235
|
+
key: 2,
|
|
236
|
+
class: "m-editor-history-list-item-diff",
|
|
237
|
+
title: "查看修改差异",
|
|
238
|
+
onClick: withModifiers(($event) => onDiffClick(s.index), ["stop"])
|
|
239
|
+
}, "查看差异", 8, _hoisted_17)) : createCommentVNode("v-if", true)
|
|
240
|
+
])) : createCommentVNode("v-if", true),
|
|
241
|
+
unref(sourceLabel)(s.source) ? (openBlock(), createElementBlock("span", {
|
|
242
|
+
key: 2,
|
|
243
|
+
class: "m-editor-history-list-item-source",
|
|
244
|
+
title: `操作途径:${unref(sourceLabel)(s.source)}`
|
|
245
|
+
}, toDisplayString(unref(sourceLabel)(s.source)), 9, _hoisted_18)) : createCommentVNode("v-if", true),
|
|
169
246
|
s.time ? (openBlock(), createElementBlock("span", {
|
|
170
|
-
key:
|
|
247
|
+
key: 3,
|
|
171
248
|
class: "m-editor-history-list-item-time",
|
|
172
249
|
title: s.timeTitle || s.time
|
|
173
|
-
}, toDisplayString(s.time), 9,
|
|
174
|
-
|
|
175
|
-
key: 1,
|
|
176
|
-
class: "m-editor-history-list-item-revert",
|
|
177
|
-
title: "将该步骤的修改作为一次新操作反向应用(不影响后续历史)",
|
|
178
|
-
onClick: withModifiers(($event) => onRevertClick(s.index), ["stop"])
|
|
179
|
-
}, "回滚", 8, _hoisted_11)) : createCommentVNode("v-if", true),
|
|
180
|
-
__props.gotoEnabled && !s.isCurrent ? (openBlock(), createElementBlock("span", {
|
|
181
|
-
key: 2,
|
|
182
|
-
class: "m-editor-history-list-item-goto",
|
|
183
|
-
title: "回到该记录",
|
|
184
|
-
onClick: withModifiers(($event) => onGotoClick(s.index), ["stop"])
|
|
185
|
-
}, "回到", 8, _hoisted_12)) : createCommentVNode("v-if", true),
|
|
186
|
-
s.diffable ? (openBlock(), createElementBlock("span", {
|
|
187
|
-
key: 3,
|
|
188
|
-
class: "m-editor-history-list-item-diff",
|
|
189
|
-
title: "查看修改差异",
|
|
190
|
-
onClick: withModifiers(($event) => onDiffClick(s.index), ["stop"])
|
|
191
|
-
}, "查看差异", 8, _hoisted_13)) : createCommentVNode("v-if", true)
|
|
192
|
-
], 10, _hoisted_7);
|
|
250
|
+
}, toDisplayString(s.time), 9, _hoisted_19)) : createCommentVNode("v-if", true)
|
|
251
|
+
], 10, _hoisted_10);
|
|
193
252
|
}), 128))])) : createCommentVNode("v-if", true)], 2);
|
|
194
253
|
};
|
|
195
254
|
}
|
package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import CodeEditor_default from "../CodeEditor.js";
|
|
2
2
|
import CompareForm_default from "../../components/CompareForm.js";
|
|
3
3
|
import { TMagicButton, TMagicDialog, TMagicRadioButton, TMagicRadioGroup, TMagicTag } from "@tmagic/design";
|
|
4
|
-
import { Fragment,
|
|
4
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, ref, toDisplayString, unref, watch, withCtx } from "vue";
|
|
5
5
|
import { isEqual } from "lodash-es";
|
|
6
6
|
//#region packages/editor/src/layouts/history-list/HistoryDiffDialog.vue?vue&type=script&setup=true&lang.ts
|
|
7
7
|
var _hoisted_1 = {
|
|
@@ -27,6 +27,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
27
27
|
extendState: {},
|
|
28
28
|
loadConfig: {},
|
|
29
29
|
width: { default: "900px" },
|
|
30
|
+
isConfirm: { type: Boolean },
|
|
30
31
|
onConfirm: {},
|
|
31
32
|
selfDiffFieldTypes: {}
|
|
32
33
|
},
|
|
@@ -81,18 +82,23 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
81
82
|
if (mode.value !== "current" || !payload.value) return false;
|
|
82
83
|
return isEqual(payload.value.value, payload.value.currentValue);
|
|
83
84
|
});
|
|
85
|
+
/** confirm() 的 resolve,仅在「等待用户确认回滚」期间存在 */
|
|
86
|
+
let confirmResolve = null;
|
|
84
87
|
const onConfirmClick = () => {
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
props.onConfirm?.();
|
|
89
|
+
confirmResolve?.(true);
|
|
90
|
+
confirmResolve = null;
|
|
87
91
|
visible.value = false;
|
|
88
92
|
};
|
|
89
93
|
const targetText = computed(() => {
|
|
90
94
|
if (!payload.value) return "";
|
|
91
|
-
const
|
|
95
|
+
const categoryText = {
|
|
92
96
|
node: "节点",
|
|
93
97
|
"data-source": "数据源",
|
|
94
98
|
"code-block": "代码块"
|
|
95
|
-
}
|
|
99
|
+
};
|
|
100
|
+
const { category } = payload.value;
|
|
101
|
+
const prefix = category ? categoryText[category] : "";
|
|
96
102
|
const label = payload.value.targetLabel || payload.value.type || "";
|
|
97
103
|
const { id } = payload.value;
|
|
98
104
|
return [prefix, id !== void 0 && id !== "" ? `${label}(${id})` : label].filter(Boolean).join(":");
|
|
@@ -103,21 +109,41 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
103
109
|
viewMode.value = "form";
|
|
104
110
|
visible.value = true;
|
|
105
111
|
};
|
|
112
|
+
/**
|
|
113
|
+
* 以 Promise 形式打开确认回滚弹窗:
|
|
114
|
+
* - 用户点击「确定回滚」时 resolve(true);
|
|
115
|
+
* - 取消 / 关闭 / 按 Esc 等其他方式关闭弹窗时 resolve(false)。
|
|
116
|
+
*
|
|
117
|
+
* 同一时刻只允许一个待确认流程,重复调用会先 resolve(false) 掉上一个。
|
|
118
|
+
*/
|
|
119
|
+
const confirm = (p) => {
|
|
120
|
+
confirmResolve?.(false);
|
|
121
|
+
confirmResolve = null;
|
|
122
|
+
return new Promise((resolve) => {
|
|
123
|
+
confirmResolve = resolve;
|
|
124
|
+
open(p);
|
|
125
|
+
});
|
|
126
|
+
};
|
|
106
127
|
const close = () => {
|
|
107
128
|
visible.value = false;
|
|
108
129
|
};
|
|
109
130
|
watch(visible, (v) => {
|
|
110
|
-
if (!v)
|
|
131
|
+
if (!v) {
|
|
132
|
+
payload.value = null;
|
|
133
|
+
confirmResolve?.(false);
|
|
134
|
+
confirmResolve = null;
|
|
135
|
+
}
|
|
111
136
|
});
|
|
112
137
|
const onClose = () => {
|
|
113
138
|
emit("close");
|
|
114
139
|
};
|
|
115
140
|
__expose({
|
|
116
141
|
open,
|
|
142
|
+
confirm,
|
|
117
143
|
close
|
|
118
144
|
});
|
|
119
145
|
return (_ctx, _cache) => {
|
|
120
|
-
return openBlock(), createBlock(
|
|
146
|
+
return openBlock(), createBlock(unref(TMagicDialog), {
|
|
121
147
|
modelValue: visible.value,
|
|
122
148
|
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => visible.value = $event),
|
|
123
149
|
class: "m-editor-history-diff-dialog",
|
|
@@ -128,7 +154,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
128
154
|
width: __props.width,
|
|
129
155
|
onClose
|
|
130
156
|
}, {
|
|
131
|
-
footer: withCtx(() => [__props.
|
|
157
|
+
footer: withCtx(() => [__props.isConfirm ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createVNode(unref(TMagicButton), {
|
|
132
158
|
size: "small",
|
|
133
159
|
onClick: _cache[2] || (_cache[2] = ($event) => visible.value = false)
|
|
134
160
|
}, {
|
|
@@ -149,7 +175,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
149
175
|
default: withCtx(() => [..._cache[12] || (_cache[12] = [createTextVNode("关闭", -1)])]),
|
|
150
176
|
_: 1
|
|
151
177
|
}))]),
|
|
152
|
-
default: withCtx(() => [payload.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
178
|
+
default: withCtx(() => [payload.value && visible.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
153
179
|
__props.onConfirm ? (openBlock(), createElementBlock("div", _hoisted_2, "仅回滚有差异的字段")) : createCommentVNode("v-if", true),
|
|
154
180
|
createElementVNode("div", _hoisted_3, [createElementVNode("span", _hoisted_4, toDisplayString(targetText.value), 1), createElementVNode("div", _hoisted_5, [createVNode(unref(TMagicRadioGroup), {
|
|
155
181
|
modelValue: viewMode.value,
|
|
@@ -237,7 +263,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
237
263
|
"modelValue",
|
|
238
264
|
"title",
|
|
239
265
|
"width"
|
|
240
|
-
])
|
|
266
|
+
]);
|
|
241
267
|
};
|
|
242
268
|
}
|
|
243
269
|
});
|