@tmagic/form 1.8.0-beta.9 → 1.8.0-manmanyu.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/Form.vue_vue_type_script_setup_true_lang.js +44 -5
- package/dist/es/FormDialog.vue_vue_type_script_setup_true_lang.js +12 -5
- package/dist/es/FormDrawer.vue_vue_type_script_setup_true_lang.js +37 -12
- package/dist/es/containers/Container.vue_vue_type_script_setup_true_lang.js +22 -16
- package/dist/es/containers/GroupList.vue_vue_type_script_setup_true_lang.js +6 -5
- package/dist/es/containers/GroupListItem.vue_vue_type_script_setup_true_lang.js +41 -31
- package/dist/es/containers/Panel.vue_vue_type_script_setup_true_lang.js +16 -10
- package/dist/es/containers/table/ActionsColumn.vue_vue_type_script_setup_true_lang.js +13 -6
- package/dist/es/containers/table/Table.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/es/containers/table/useTableColumns.js +6 -2
- package/dist/es/containers/table-group-list/TableGroupList.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/es/fields/Cascader.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Checkbox.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/CheckboxGroup.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/ColorPicker.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Date.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/DateTime.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Daterange.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Display.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/DynamicField.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Link.vue_vue_type_script_setup_true_lang.js +29 -7
- package/dist/es/fields/Number.vue_vue_type_script_setup_true_lang.js +8 -3
- package/dist/es/fields/NumberRange.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/RadioGroup.vue_vue_type_script_setup_true_lang.js +16 -8
- package/dist/es/fields/Select.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Switch.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Text.vue_vue_type_script_setup_true_lang.js +112 -77
- package/dist/es/fields/Textarea.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Time.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/Timerange.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/plugin.js +2 -0
- package/dist/es/style.css +121 -8
- package/dist/style.css +121 -8
- package/dist/themes/magic-admin.css +495 -0
- package/dist/tmagic-form.umd.cjs +448 -225
- package/package.json +4 -4
- package/src/Form.vue +53 -4
- package/src/FormDialog.vue +14 -3
- package/src/FormDrawer.vue +40 -12
- package/src/containers/Container.vue +16 -5
- package/src/containers/GroupList.vue +1 -1
- package/src/containers/GroupListItem.vue +28 -22
- package/src/containers/Panel.vue +10 -3
- package/src/containers/table/ActionsColumn.vue +10 -4
- package/src/containers/table/Table.vue +1 -0
- package/src/containers/table/useTableColumns.ts +10 -4
- package/src/containers/table-group-list/TableGroupList.vue +7 -1
- package/src/fields/Link.vue +17 -3
- package/src/fields/Number.vue +5 -2
- package/src/fields/RadioGroup.vue +11 -5
- package/src/fields/Text.vue +43 -19
- package/src/plugin.ts +2 -0
- package/src/theme/container.scss +3 -0
- package/src/theme/fieldset.scss +50 -0
- package/src/theme/form.scss +6 -0
- package/src/theme/group-list.scss +9 -7
- package/src/theme/index.scss +1 -0
- package/src/theme/link.scss +17 -0
- package/src/theme/panel.scss +1 -1
- package/src/theme/radio-group.scss +23 -0
- package/src/theme/tabs.scss +2 -2
- package/src/theme/text.scss +38 -0
- package/src/theme/themes/magic-admin/index.scss +91 -0
- package/types/index.d.ts +46 -1
|
@@ -2,9 +2,9 @@ import { FORM_DIFF_CONFIG_KEY } from "./schema.js";
|
|
|
2
2
|
import { getConfig } from "./utils/config.js";
|
|
3
3
|
import { initValue } from "./utils/form.js";
|
|
4
4
|
import Container_default from "./containers/Container.js";
|
|
5
|
-
import { Fragment, createBlock, createCommentVNode, createElementBlock, createSlots, defineComponent, mergeProps, normalizeStyle, openBlock, provide, reactive, ref, renderList, renderSlot, shallowRef, toRaw, unref, useTemplateRef, watch, watchEffect, withCtx } from "vue";
|
|
5
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createSlots, defineComponent, inject, mergeProps, normalizeClass, normalizeStyle, openBlock, provide, reactive, ref, renderList, renderSlot, shallowRef, toRaw, unref, useTemplateRef, watch, watchEffect, withCtx } from "vue";
|
|
6
6
|
import { cloneDeep, isEqual } from "lodash-es";
|
|
7
|
-
import { TMagicForm, tMagicMessage, tMagicMessageBox } from "@tmagic/design";
|
|
7
|
+
import { M_THEME_KEY, TMagicForm, tMagicMessage, tMagicMessageBox } from "@tmagic/design";
|
|
8
8
|
import { setValueByKeyPath } from "@tmagic/utils";
|
|
9
9
|
//#region packages/form/src/Form.vue?vue&type=script&setup=true&lang.ts
|
|
10
10
|
var Form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
@@ -37,7 +37,8 @@ var Form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
37
37
|
preventSubmitDefault: { type: Boolean },
|
|
38
38
|
extendState: {},
|
|
39
39
|
showDiff: {},
|
|
40
|
-
selfDiffFieldTypes: {}
|
|
40
|
+
selfDiffFieldTypes: {},
|
|
41
|
+
theme: {}
|
|
41
42
|
},
|
|
42
43
|
emits: [
|
|
43
44
|
"change",
|
|
@@ -56,6 +57,25 @@ var Form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
56
57
|
const fields = /* @__PURE__ */ new Map();
|
|
57
58
|
const requestFuc = getConfig("request");
|
|
58
59
|
/**
|
|
60
|
+
* 当前表单生效的主题名称:
|
|
61
|
+
* - 优先用本组件自己的 `props.theme`;
|
|
62
|
+
* - 没设置时回退到最近祖先 `<MEditor>` / `<MForm>` provide 的主题,便于内嵌于编辑器
|
|
63
|
+
* 时自动跟随外层主题,无需在每个 `MForm` 上重复传 `theme`。
|
|
64
|
+
*
|
|
65
|
+
* 同时把合并后的值再 provide 出去(见下方 `provide(M_THEME_KEY, ...)`),让 form 子树
|
|
66
|
+
* 里再嵌套的 portal 组件(`TMagicPopover` 等)依然能拿到非空主题。
|
|
67
|
+
*/
|
|
68
|
+
const ancestorTheme = inject(M_THEME_KEY, null);
|
|
69
|
+
const effectiveTheme = computed(() => props.theme || ancestorTheme?.value || "");
|
|
70
|
+
/**
|
|
71
|
+
* 拼到 `formState.popperClass` 上的主题修饰类(仅 `m-theme--<theme>`,
|
|
72
|
+
* 不带 `m-form` / `m-editor` 前缀,因为 Element Plus 弹层节点本身既不是 form 也不是 editor)。
|
|
73
|
+
*
|
|
74
|
+
* 这条类会随所有读 `mForm.popperClass` 的字段(Select / DateTime / Cascader 等)下发到
|
|
75
|
+
* Element Plus 的 `popper-class`,让 portal 节点也命中 `m-theme--<theme>` 上的 CSS 变量。
|
|
76
|
+
*/
|
|
77
|
+
const themeClass = computed(() => effectiveTheme.value ? `m-theme--${effectiveTheme.value}` : "");
|
|
78
|
+
/**
|
|
59
79
|
* formState 实现说明:
|
|
60
80
|
*
|
|
61
81
|
* 1. 与 props 直接对应的字段(config / initValues / lastValues / isCompare / parentValues /
|
|
@@ -71,13 +91,21 @@ var Form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
71
91
|
* 把最新值刷进 formState。
|
|
72
92
|
* - accessor 描述符(`{ get stage() { return ... } }`)按原样写入,调用方可以控制
|
|
73
93
|
* 读时求值,每次读取都会重新执行 getter。
|
|
94
|
+
*
|
|
95
|
+
* 4. `popperClass` 会自动拼接 `themeClass`:调用方传入的 `popperClass` + 当前主题
|
|
96
|
+
* 修饰类(含祖先 `<MEditor>` provide 的主题)。这样所有透传到 Element Plus 弹层
|
|
97
|
+
* `popper-class` 的字段(Select / DateTime / Cascader 等)能自带主题作用域。
|
|
74
98
|
*/
|
|
75
99
|
const formState = reactive({
|
|
76
100
|
get keyProp() {
|
|
77
101
|
return props.keyProp;
|
|
78
102
|
},
|
|
79
103
|
get popperClass() {
|
|
80
|
-
|
|
104
|
+
const userClass = props.popperClass ?? "";
|
|
105
|
+
const tc = themeClass.value;
|
|
106
|
+
if (!userClass) return tc;
|
|
107
|
+
if (!tc) return userClass;
|
|
108
|
+
return `${userClass} ${tc}`;
|
|
81
109
|
},
|
|
82
110
|
get config() {
|
|
83
111
|
return props.config;
|
|
@@ -153,6 +181,12 @@ var Form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
153
181
|
}
|
|
154
182
|
});
|
|
155
183
|
provide("mForm", formState);
|
|
184
|
+
/**
|
|
185
|
+
* 把生效主题(自身或祖先)再 provide 出去,供 form 子树内含 `Teleport` 的组件
|
|
186
|
+
* (如 `TMagicPopover`)在传送目标上挂 `m-theme--<theme>` 类。
|
|
187
|
+
* 详见 `@tmagic/design/theme.ts`。
|
|
188
|
+
*/
|
|
189
|
+
provide(M_THEME_KEY, effectiveTheme);
|
|
156
190
|
provide(FORM_DIFF_CONFIG_KEY, {
|
|
157
191
|
get showDiff() {
|
|
158
192
|
return props.showDiff;
|
|
@@ -256,7 +290,11 @@ var Form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
256
290
|
});
|
|
257
291
|
return (_ctx, _cache) => {
|
|
258
292
|
return openBlock(), createBlock(unref(TMagicForm), {
|
|
259
|
-
class:
|
|
293
|
+
class: normalizeClass([
|
|
294
|
+
"m-form",
|
|
295
|
+
effectiveTheme.value ? `m-form--${effectiveTheme.value}` : "",
|
|
296
|
+
effectiveTheme.value ? `m-theme--${effectiveTheme.value}` : ""
|
|
297
|
+
]),
|
|
260
298
|
ref: "tMagicForm",
|
|
261
299
|
model: values.value,
|
|
262
300
|
"label-width": __props.labelWidth,
|
|
@@ -294,6 +332,7 @@ var Form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
|
|
|
294
332
|
}), 128)) : createCommentVNode("v-if", true)]),
|
|
295
333
|
_: 3
|
|
296
334
|
}, 8, [
|
|
335
|
+
"class",
|
|
297
336
|
"model",
|
|
298
337
|
"label-width",
|
|
299
338
|
"style",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Form_default from "./Form.js";
|
|
2
|
-
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeStyle, openBlock, ref, renderSlot, toDisplayString, unref, withCtx } from "vue";
|
|
3
|
-
import { TMagicButton, TMagicCol, TMagicDialog, TMagicRow } from "@tmagic/design";
|
|
2
|
+
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, normalizeClass, normalizeStyle, openBlock, provide, ref, renderSlot, toDisplayString, unref, withCtx } from "vue";
|
|
3
|
+
import { M_THEME_KEY, TMagicButton, TMagicCol, TMagicDialog, TMagicRow } from "@tmagic/design";
|
|
4
4
|
//#region packages/form/src/FormDialog.vue?vue&type=script&setup=true&lang.ts
|
|
5
5
|
var _hoisted_1 = { style: { "min-height": "1px" } };
|
|
6
6
|
var FormDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
@@ -41,7 +41,8 @@ var FormDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
41
41
|
type: Boolean,
|
|
42
42
|
default: true
|
|
43
43
|
},
|
|
44
|
-
extendState: {}
|
|
44
|
+
extendState: {},
|
|
45
|
+
theme: {}
|
|
45
46
|
},
|
|
46
47
|
emits: [
|
|
47
48
|
"close",
|
|
@@ -51,6 +52,9 @@ var FormDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
51
52
|
],
|
|
52
53
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
53
54
|
const props = __props;
|
|
55
|
+
const ancestorTheme = inject(M_THEME_KEY, null);
|
|
56
|
+
const effectiveTheme = computed(() => props.theme || ancestorTheme?.value || "");
|
|
57
|
+
provide(M_THEME_KEY, effectiveTheme);
|
|
54
58
|
const emit = __emit;
|
|
55
59
|
const form = ref();
|
|
56
60
|
const dialogVisible = ref(false);
|
|
@@ -110,7 +114,7 @@ var FormDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
110
114
|
return openBlock(), createBlock(unref(TMagicDialog), {
|
|
111
115
|
modelValue: dialogVisible.value,
|
|
112
116
|
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => dialogVisible.value = $event),
|
|
113
|
-
class: "m-form-dialog",
|
|
117
|
+
class: normalizeClass(["m-form-dialog", effectiveTheme.value ? `m-theme--${effectiveTheme.value}` : ""]),
|
|
114
118
|
top: "20px",
|
|
115
119
|
"append-to-body": "",
|
|
116
120
|
title: __props.title,
|
|
@@ -192,6 +196,7 @@ var FormDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
192
196
|
inline: __props.inline,
|
|
193
197
|
"prevent-submit-default": __props.preventSubmitDefault,
|
|
194
198
|
"extend-state": __props.extendState,
|
|
199
|
+
theme: effectiveTheme.value,
|
|
195
200
|
onChange: changeHandler
|
|
196
201
|
}, null, 8, [
|
|
197
202
|
"modelValue",
|
|
@@ -204,11 +209,13 @@ var FormDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
204
209
|
"label-position",
|
|
205
210
|
"inline",
|
|
206
211
|
"prevent-submit-default",
|
|
207
|
-
"extend-state"
|
|
212
|
+
"extend-state",
|
|
213
|
+
"theme"
|
|
208
214
|
]), renderSlot(_ctx.$slots, "default")], 4)) : createCommentVNode("v-if", true)]),
|
|
209
215
|
_: 3
|
|
210
216
|
}, 8, [
|
|
211
217
|
"modelValue",
|
|
218
|
+
"class",
|
|
212
219
|
"title",
|
|
213
220
|
"width",
|
|
214
221
|
"zIndex",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import Form_default from "./Form.js";
|
|
2
|
-
import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, ref, renderSlot, toDisplayString, unref, watchEffect, withCtx } from "vue";
|
|
3
|
-
import { TMagicButton, TMagicCol, TMagicDrawer, TMagicRow } from "@tmagic/design";
|
|
2
|
+
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, normalizeClass, openBlock, provide, ref, renderSlot, toDisplayString, unref, watchEffect, withCtx } from "vue";
|
|
3
|
+
import { M_THEME_KEY, TMagicButton, TMagicCol, TMagicDrawer, TMagicRow } from "@tmagic/design";
|
|
4
4
|
//#region packages/form/src/FormDrawer.vue?vue&type=script&setup=true&lang.ts
|
|
5
5
|
var _hoisted_1 = { style: { "min-height": "1px" } };
|
|
6
6
|
var FormDrawer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
7
|
-
name: "
|
|
7
|
+
name: "MFormDrawer",
|
|
8
8
|
__name: "FormDrawer",
|
|
9
9
|
props: {
|
|
10
10
|
config: { default: () => [] },
|
|
@@ -25,7 +25,8 @@ var FormDrawer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
25
25
|
labelPosition: {},
|
|
26
26
|
preventSubmitDefault: { type: Boolean },
|
|
27
27
|
beforeClose: {},
|
|
28
|
-
extendState: {}
|
|
28
|
+
extendState: {},
|
|
29
|
+
theme: {}
|
|
29
30
|
},
|
|
30
31
|
emits: [
|
|
31
32
|
"close",
|
|
@@ -37,11 +38,15 @@ var FormDrawer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
37
38
|
"opened"
|
|
38
39
|
],
|
|
39
40
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
41
|
+
const props = __props;
|
|
42
|
+
const ancestorTheme = inject(M_THEME_KEY, null);
|
|
43
|
+
const effectiveTheme = computed(() => props.theme || ancestorTheme?.value || "");
|
|
44
|
+
provide(M_THEME_KEY, effectiveTheme);
|
|
40
45
|
const emit = __emit;
|
|
41
46
|
const drawer = ref();
|
|
42
47
|
const form = ref();
|
|
43
48
|
const drawerBody = ref();
|
|
44
|
-
const
|
|
49
|
+
const dialogVisible = ref(false);
|
|
45
50
|
const saveFetch = ref(false);
|
|
46
51
|
const bodyHeight = ref(0);
|
|
47
52
|
watchEffect(() => {
|
|
@@ -71,30 +76,47 @@ var FormDrawer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
71
76
|
emit("closed");
|
|
72
77
|
};
|
|
73
78
|
const show = () => {
|
|
74
|
-
|
|
79
|
+
dialogVisible.value = true;
|
|
75
80
|
};
|
|
76
81
|
const hide = () => {
|
|
77
|
-
|
|
82
|
+
dialogVisible.value = false;
|
|
83
|
+
};
|
|
84
|
+
const close = () => {
|
|
85
|
+
dialogVisible.value = false;
|
|
86
|
+
};
|
|
87
|
+
const cancel = () => {
|
|
88
|
+
hide();
|
|
78
89
|
};
|
|
79
90
|
/** 用于关闭 Drawer, 该方法会调用传入的 before-close 方法 */
|
|
80
91
|
const handleClose = () => {
|
|
81
92
|
drawer.value?.handleClose();
|
|
82
93
|
};
|
|
94
|
+
const save = async () => {
|
|
95
|
+
try {
|
|
96
|
+
const changeRecords = [...form.value?.changeRecords || []];
|
|
97
|
+
emit("submit", await form.value?.submitForm(), { changeRecords });
|
|
98
|
+
} catch (e) {
|
|
99
|
+
emit("error", e);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
83
102
|
__expose({
|
|
84
103
|
form,
|
|
85
104
|
saveFetch,
|
|
86
105
|
bodyHeight,
|
|
106
|
+
close,
|
|
87
107
|
show,
|
|
88
108
|
hide,
|
|
109
|
+
save,
|
|
110
|
+
cancel,
|
|
89
111
|
handleClose
|
|
90
112
|
});
|
|
91
113
|
return (_ctx, _cache) => {
|
|
92
114
|
return openBlock(), createBlock(unref(TMagicDrawer), {
|
|
93
|
-
class: "m-form-drawer",
|
|
115
|
+
class: normalizeClass(["m-form-drawer", effectiveTheme.value ? `m-theme--${effectiveTheme.value}` : ""]),
|
|
94
116
|
ref_key: "drawer",
|
|
95
117
|
ref: drawer,
|
|
96
|
-
modelValue:
|
|
97
|
-
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) =>
|
|
118
|
+
modelValue: dialogVisible.value,
|
|
119
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => dialogVisible.value = $event),
|
|
98
120
|
title: __props.title,
|
|
99
121
|
"close-on-press-escape": __props.closeOnPressEscape,
|
|
100
122
|
"append-to-body": true,
|
|
@@ -132,7 +154,7 @@ var FormDrawer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
132
154
|
})]),
|
|
133
155
|
_: 3
|
|
134
156
|
})]),
|
|
135
|
-
default: withCtx(() => [
|
|
157
|
+
default: withCtx(() => [dialogVisible.value ? (openBlock(), createElementBlock("div", {
|
|
136
158
|
key: 0,
|
|
137
159
|
ref_key: "drawerBody",
|
|
138
160
|
ref: drawerBody,
|
|
@@ -150,6 +172,7 @@ var FormDrawer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
150
172
|
inline: __props.inline,
|
|
151
173
|
"prevent-submit-default": __props.preventSubmitDefault,
|
|
152
174
|
"extend-state": __props.extendState,
|
|
175
|
+
theme: effectiveTheme.value,
|
|
153
176
|
onChange: changeHandler
|
|
154
177
|
}, null, 8, [
|
|
155
178
|
"size",
|
|
@@ -161,10 +184,12 @@ var FormDrawer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
161
184
|
"label-position",
|
|
162
185
|
"inline",
|
|
163
186
|
"prevent-submit-default",
|
|
164
|
-
"extend-state"
|
|
187
|
+
"extend-state",
|
|
188
|
+
"theme"
|
|
165
189
|
]), renderSlot(_ctx.$slots, "default")], 512)) : createCommentVNode("v-if", true)]),
|
|
166
190
|
_: 3
|
|
167
191
|
}, 8, [
|
|
192
|
+
"class",
|
|
168
193
|
"modelValue",
|
|
169
194
|
"title",
|
|
170
195
|
"close-on-press-escape",
|
|
@@ -7,19 +7,23 @@ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock
|
|
|
7
7
|
import { isEqual } from "lodash-es";
|
|
8
8
|
import { TMagicButton, TMagicFormItem, TMagicIcon, TMagicTooltip } from "@tmagic/design";
|
|
9
9
|
import { getValueByKeyPath } from "@tmagic/utils";
|
|
10
|
-
import { WarningFilled } from "@element-plus/icons-vue";
|
|
10
|
+
import { ArrowDown, ArrowUp, WarningFilled } from "@element-plus/icons-vue";
|
|
11
11
|
//#region packages/form/src/containers/Container.vue?vue&type=script&setup=true&lang.ts
|
|
12
12
|
var _hoisted_1 = ["data-tmagic-id", "data-tmagic-form-item-prop"];
|
|
13
|
-
var _hoisted_2 =
|
|
13
|
+
var _hoisted_2 = {
|
|
14
|
+
key: 0,
|
|
15
|
+
class: "m-form-tip m-form-title-extra"
|
|
16
|
+
};
|
|
14
17
|
var _hoisted_3 = ["innerHTML"];
|
|
15
18
|
var _hoisted_4 = ["innerHTML"];
|
|
16
19
|
var _hoisted_5 = ["innerHTML"];
|
|
17
20
|
var _hoisted_6 = ["innerHTML"];
|
|
18
21
|
var _hoisted_7 = ["innerHTML"];
|
|
19
22
|
var _hoisted_8 = ["innerHTML"];
|
|
20
|
-
var _hoisted_9 =
|
|
23
|
+
var _hoisted_9 = ["innerHTML"];
|
|
24
|
+
var _hoisted_10 = {
|
|
21
25
|
key: 5,
|
|
22
|
-
|
|
26
|
+
class: "m-form-container-expand"
|
|
23
27
|
};
|
|
24
28
|
var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
25
29
|
name: "MFormContainer",
|
|
@@ -144,7 +148,8 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
144
148
|
labelWidth: itemLabelWidth.value,
|
|
145
149
|
labelPosition: props.config.labelPosition,
|
|
146
150
|
rules: rule.value,
|
|
147
|
-
extra: filterFunction(mForm, props.config.extra, props)
|
|
151
|
+
extra: filterFunction(mForm, props.config.extra, props),
|
|
152
|
+
extraTips: props.config.extraTips
|
|
148
153
|
}));
|
|
149
154
|
const itemLabelWidth = computed(() => props.config.labelWidth ?? props.labelWidth);
|
|
150
155
|
watchEffect(() => {
|
|
@@ -297,12 +302,12 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
297
302
|
"use-label",
|
|
298
303
|
"label-title",
|
|
299
304
|
"text"
|
|
300
|
-
])])]),
|
|
305
|
+
]), __props.config.titleExtra && __props.config.labelPosition === "top" ? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(__props.config.titleExtra), 1)) : createCommentVNode("v-if", true)])]),
|
|
301
306
|
default: withCtx(() => [tooltip.value.text ? (openBlock(), createBlock(unref(TMagicTooltip), {
|
|
302
307
|
key: 0,
|
|
303
308
|
placement: tooltip.value.placement
|
|
304
309
|
}, {
|
|
305
|
-
content: withCtx(() => [createElementVNode("div", { innerHTML: tooltip.value.text }, null, 8,
|
|
310
|
+
content: withCtx(() => [createElementVNode("div", { innerHTML: tooltip.value.text }, null, 8, _hoisted_3)]),
|
|
306
311
|
default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(tagName.value), mergeProps(fieldsProps.value, {
|
|
307
312
|
model: __props.model,
|
|
308
313
|
"last-values": __props.lastValues,
|
|
@@ -331,7 +336,7 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
331
336
|
key: 0,
|
|
332
337
|
placement: "top"
|
|
333
338
|
}, {
|
|
334
|
-
content: withCtx(() => [createElementVNode("div", { innerHTML: __props.config.tip }, null, 8,
|
|
339
|
+
content: withCtx(() => [createElementVNode("div", { innerHTML: __props.config.tip }, null, 8, _hoisted_4)]),
|
|
335
340
|
default: withCtx(() => [createVNode(unref(TMagicIcon), { style: {
|
|
336
341
|
"line-height": "40px",
|
|
337
342
|
"margin-left": "5px"
|
|
@@ -370,7 +375,7 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
370
375
|
key: 0,
|
|
371
376
|
placement: tooltip.value.placement
|
|
372
377
|
}, {
|
|
373
|
-
content: withCtx(() => [createElementVNode("div", { innerHTML: tooltip.value.text }, null, 8,
|
|
378
|
+
content: withCtx(() => [createElementVNode("div", { innerHTML: tooltip.value.text }, null, 8, _hoisted_5)]),
|
|
374
379
|
default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(tagName.value), mergeProps(fieldsProps.value, {
|
|
375
380
|
model: __props.model,
|
|
376
381
|
"last-values": __props.lastValues,
|
|
@@ -423,7 +428,7 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
423
428
|
key: 0,
|
|
424
429
|
placement: tooltip.value.placement
|
|
425
430
|
}, {
|
|
426
|
-
content: withCtx(() => [createElementVNode("div", { innerHTML: tooltip.value.text }, null, 8,
|
|
431
|
+
content: withCtx(() => [createElementVNode("div", { innerHTML: tooltip.value.text }, null, 8, _hoisted_6)]),
|
|
427
432
|
default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(tagName.value), mergeProps(fieldsProps.value, {
|
|
428
433
|
model: __props.lastValues,
|
|
429
434
|
onChange: onChangeHandler
|
|
@@ -439,7 +444,7 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
439
444
|
key: 0,
|
|
440
445
|
placement: "top"
|
|
441
446
|
}, {
|
|
442
|
-
content: withCtx(() => [createElementVNode("div", { innerHTML: __props.config.tip }, null, 8,
|
|
447
|
+
content: withCtx(() => [createElementVNode("div", { innerHTML: __props.config.tip }, null, 8, _hoisted_7)]),
|
|
443
448
|
default: withCtx(() => [createVNode(unref(TMagicIcon), { style: {
|
|
444
449
|
"line-height": "40px",
|
|
445
450
|
"margin-left": "5px"
|
|
@@ -480,7 +485,7 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
480
485
|
key: 0,
|
|
481
486
|
placement: tooltip.value.placement
|
|
482
487
|
}, {
|
|
483
|
-
content: withCtx(() => [createElementVNode("div", { innerHTML: tooltip.value.text }, null, 8,
|
|
488
|
+
content: withCtx(() => [createElementVNode("div", { innerHTML: tooltip.value.text }, null, 8, _hoisted_8)]),
|
|
484
489
|
default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(tagName.value), mergeProps(fieldsProps.value, {
|
|
485
490
|
model: __props.model,
|
|
486
491
|
onChange: onChangeHandler
|
|
@@ -496,7 +501,7 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
496
501
|
key: 1,
|
|
497
502
|
placement: "top"
|
|
498
503
|
}, {
|
|
499
|
-
content: withCtx(() => [createElementVNode("div", { innerHTML: __props.config.tip }, null, 8,
|
|
504
|
+
content: withCtx(() => [createElementVNode("div", { innerHTML: __props.config.tip }, null, 8, _hoisted_9)]),
|
|
500
505
|
default: withCtx(() => [createVNode(unref(TMagicIcon), { style: {
|
|
501
506
|
"line-height": "40px",
|
|
502
507
|
"margin-left": "5px"
|
|
@@ -538,16 +543,17 @@ var Container_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
538
543
|
"label-width",
|
|
539
544
|
"prop"
|
|
540
545
|
]);
|
|
541
|
-
}), 128)) : createCommentVNode("v-if", true)], 64)) : createCommentVNode("v-if", true), __props.config.expand && type.value !== "fieldset" ? (openBlock(), createElementBlock("div",
|
|
546
|
+
}), 128)) : createCommentVNode("v-if", true)], 64)) : createCommentVNode("v-if", true), __props.config.expand && type.value !== "fieldset" ? (openBlock(), createElementBlock("div", _hoisted_10, [createVNode(unref(TMagicButton), {
|
|
542
547
|
type: "primary",
|
|
543
548
|
size: "small",
|
|
544
549
|
disabled: false,
|
|
545
550
|
link: "",
|
|
546
|
-
onClick: expandHandler
|
|
551
|
+
onClick: expandHandler,
|
|
552
|
+
icon: expand.value ? unref(ArrowUp) : unref(ArrowDown)
|
|
547
553
|
}, {
|
|
548
554
|
default: withCtx(() => [createTextVNode(toDisplayString(expand.value ? "收起配置" : "展开更多配置"), 1)]),
|
|
549
555
|
_: 1
|
|
550
|
-
})])) : createCommentVNode("v-if", true)], 14, _hoisted_1);
|
|
556
|
+
}, 8, ["icon"])])) : createCommentVNode("v-if", true)], 14, _hoisted_1);
|
|
551
557
|
};
|
|
552
558
|
}
|
|
553
559
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import GroupListItem_default from "./GroupListItem.js";
|
|
2
|
-
import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, renderList, renderSlot } from "vue";
|
|
2
|
+
import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, renderList, renderSlot, toDisplayString } from "vue";
|
|
3
3
|
import { cloneDeep } from "lodash-es";
|
|
4
4
|
//#region packages/form/src/containers/GroupList.vue?vue&type=script&setup=true&lang.ts
|
|
5
5
|
var _hoisted_1 = { class: "m-fields-group-list" };
|
|
@@ -8,11 +8,12 @@ var _hoisted_3 = {
|
|
|
8
8
|
key: 1,
|
|
9
9
|
class: "el-table__empty-block"
|
|
10
10
|
};
|
|
11
|
-
var _hoisted_4 = {
|
|
11
|
+
var _hoisted_4 = { class: "el-table__empty-text t-table__empty" };
|
|
12
|
+
var _hoisted_5 = {
|
|
12
13
|
key: 3,
|
|
13
14
|
class: "m-fields-group-list-footer"
|
|
14
15
|
};
|
|
15
|
-
var
|
|
16
|
+
var _hoisted_6 = { style: {
|
|
16
17
|
"display": "flex",
|
|
17
18
|
"justify-content": "flex-end",
|
|
18
19
|
"flex": "1"
|
|
@@ -63,7 +64,7 @@ var GroupList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
63
64
|
innerHTML: __props.config.extra,
|
|
64
65
|
style: { "color": "rgba(0, 0, 0, 0.45)" }
|
|
65
66
|
}, null, 8, _hoisted_2)) : createCommentVNode("v-if", true),
|
|
66
|
-
!__props.model[__props.name] || !__props.model[__props.name].length ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
67
|
+
!__props.model[__props.name] || !__props.model[__props.name].length ? (openBlock(), createElementBlock("div", _hoisted_3, [createElementVNode("span", _hoisted_4, "暂无" + toDisplayString(__props.config.titlePrefix || "") + "数据", 1)])) : (openBlock(true), createElementBlock(Fragment, { key: 2 }, renderList(__props.model[__props.name], (item, index) => {
|
|
67
68
|
return openBlock(), createBlock(GroupListItem_default, {
|
|
68
69
|
key: index,
|
|
69
70
|
model: item,
|
|
@@ -94,7 +95,7 @@ var GroupList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
94
95
|
"group-model"
|
|
95
96
|
]);
|
|
96
97
|
}), 128)),
|
|
97
|
-
!__props.isCompare ? (openBlock(), createElementBlock("div",
|
|
98
|
+
!__props.isCompare ? (openBlock(), createElementBlock("div", _hoisted_5, [renderSlot(_ctx.$slots, "toggle-button"), createElementVNode("div", _hoisted_6, [renderSlot(_ctx.$slots, "add-button")])])) : createCommentVNode("v-if", true)
|
|
98
99
|
]);
|
|
99
100
|
};
|
|
100
101
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { filterFunction } from "../utils/form.js";
|
|
2
2
|
import Container_default from "./Container.js";
|
|
3
3
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, openBlock, ref, unref, vShow, withCtx, withDirectives } from "vue";
|
|
4
|
-
import { TMagicButton, TMagicCard, TMagicIcon, TMagicInputNumber, TMagicPopover } from "@tmagic/design";
|
|
5
|
-
import {
|
|
4
|
+
import { TMagicButton, TMagicCard, TMagicIcon, TMagicInputNumber, TMagicPopover, TMagicTooltip } from "@tmagic/design";
|
|
5
|
+
import { ArrowDown, ArrowRight, Bottom, Delete, DocumentCopy, Position, Top } from "@element-plus/icons-vue";
|
|
6
6
|
//#region packages/form/src/containers/GroupListItem.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
-
var _hoisted_1 =
|
|
8
|
-
var _hoisted_2 =
|
|
7
|
+
var _hoisted_1 = { class: "m-fields-group-list-item-header" };
|
|
8
|
+
var _hoisted_2 = ["innerHTML"];
|
|
9
|
+
var _hoisted_3 = { style: {
|
|
9
10
|
"text-align": "right",
|
|
10
11
|
"margin-top": "20px"
|
|
11
12
|
} };
|
|
12
|
-
var
|
|
13
|
+
var _hoisted_4 = ["innerHTML"];
|
|
13
14
|
var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
14
15
|
name: "MFormGroupListItem",
|
|
15
16
|
__name: "GroupListItem",
|
|
@@ -46,7 +47,10 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
46
47
|
[mForm?.keyProp || "__key"]: `${props.config[mForm?.keyProp || "__key"]}${String(props.index)}`
|
|
47
48
|
}));
|
|
48
49
|
const title = computed(() => {
|
|
49
|
-
if (props.config.titleKey && props.model[props.config.titleKey])
|
|
50
|
+
if (props.config.titleKey && props.model[props.config.titleKey]) {
|
|
51
|
+
const { titlePrefix } = props.config;
|
|
52
|
+
return titlePrefix ? `${titlePrefix} ${String(props.index + 1)}: ${props.model[props.config.titleKey]}` : `${props.model[props.config.titleKey]}`;
|
|
53
|
+
}
|
|
50
54
|
if (props.config.title) return filterFunction(mForm, props.config.title, props);
|
|
51
55
|
return `${props.config.titlePrefix || "组"} ${String(props.index + 1)}`;
|
|
52
56
|
});
|
|
@@ -85,33 +89,39 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
85
89
|
return (_ctx, _cache) => {
|
|
86
90
|
return openBlock(), createBlock(unref(TMagicCard), {
|
|
87
91
|
class: "m-fields-group-list-item",
|
|
92
|
+
flat: __props.config.flat,
|
|
88
93
|
"body-style": { display: expand.value ? "block" : "none" }
|
|
89
94
|
}, {
|
|
90
|
-
header: withCtx(() => [createElementVNode("div",
|
|
95
|
+
header: withCtx(() => [createElementVNode("div", _hoisted_1, [
|
|
91
96
|
createVNode(unref(TMagicButton), {
|
|
92
97
|
link: "",
|
|
93
98
|
disabled: __props.disabled,
|
|
94
|
-
onClick: expandHandler
|
|
99
|
+
onClick: expandHandler,
|
|
100
|
+
class: "expand-button"
|
|
95
101
|
}, {
|
|
96
102
|
default: withCtx(() => [createVNode(unref(TMagicIcon), null, {
|
|
97
|
-
default: withCtx(() => [expand.value ? (openBlock(), createBlock(unref(
|
|
103
|
+
default: withCtx(() => [expand.value ? (openBlock(), createBlock(unref(ArrowDown), { key: 0 })) : (openBlock(), createBlock(unref(ArrowRight), { key: 1 }))]),
|
|
98
104
|
_: 1
|
|
99
|
-
})
|
|
105
|
+
})]),
|
|
100
106
|
_: 1
|
|
101
107
|
}, 8, ["disabled"]),
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
createElementVNode("span", { innerHTML: title.value }, null, 8, _hoisted_2),
|
|
109
|
+
createVNode(unref(TMagicTooltip), { content: `删除 ${title.value}` }, {
|
|
110
|
+
default: withCtx(() => [!__props.isCompare ? withDirectives((openBlock(), createBlock(unref(TMagicButton), {
|
|
111
|
+
key: 0,
|
|
112
|
+
size: "default",
|
|
113
|
+
link: "",
|
|
114
|
+
class: "delete-button",
|
|
115
|
+
icon: unref(Delete),
|
|
116
|
+
disabled: __props.disabled,
|
|
117
|
+
onClick: removeHandler
|
|
118
|
+
}, null, 8, ["icon", "disabled"])), [[vShow, showDelete.value]]) : createCommentVNode("v-if", true)]),
|
|
119
|
+
_: 1
|
|
120
|
+
}, 8, ["content"]),
|
|
111
121
|
copyable.value && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicButton), {
|
|
112
|
-
key:
|
|
122
|
+
key: 0,
|
|
113
123
|
link: "",
|
|
114
|
-
size: "
|
|
124
|
+
size: "default",
|
|
115
125
|
type: "primary",
|
|
116
126
|
icon: unref(DocumentCopy),
|
|
117
127
|
disabled: __props.disabled,
|
|
@@ -120,27 +130,27 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
120
130
|
default: withCtx(() => [..._cache[6] || (_cache[6] = [createTextVNode("复制", -1)])]),
|
|
121
131
|
_: 1
|
|
122
132
|
}, 8, ["icon", "disabled"])) : createCommentVNode("v-if", true),
|
|
123
|
-
movable.value && !__props.isCompare ? (openBlock(), createElementBlock(Fragment, { key:
|
|
133
|
+
movable.value && !__props.isCompare ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [withDirectives(createVNode(unref(TMagicButton), {
|
|
124
134
|
link: "",
|
|
125
|
-
size: "
|
|
135
|
+
size: "default",
|
|
126
136
|
disabled: __props.disabled,
|
|
127
|
-
icon: unref(
|
|
137
|
+
icon: unref(Top),
|
|
128
138
|
onClick: _cache[0] || (_cache[0] = ($event) => changeOrder(-1))
|
|
129
139
|
}, {
|
|
130
140
|
default: withCtx(() => [..._cache[7] || (_cache[7] = [createTextVNode("上移", -1)])]),
|
|
131
141
|
_: 1
|
|
132
142
|
}, 8, ["disabled", "icon"]), [[vShow, __props.index !== 0]]), withDirectives(createVNode(unref(TMagicButton), {
|
|
133
143
|
link: "",
|
|
134
|
-
size: "
|
|
144
|
+
size: "default",
|
|
135
145
|
disabled: __props.disabled,
|
|
136
|
-
icon: unref(
|
|
146
|
+
icon: unref(Bottom),
|
|
137
147
|
onClick: _cache[1] || (_cache[1] = ($event) => changeOrder(1))
|
|
138
148
|
}, {
|
|
139
149
|
default: withCtx(() => [..._cache[8] || (_cache[8] = [createTextVNode("下移", -1)])]),
|
|
140
150
|
_: 1
|
|
141
151
|
}, 8, ["disabled", "icon"]), [[vShow, __props.index !== length.value - 1]])], 64)) : createCommentVNode("v-if", true),
|
|
142
152
|
__props.config.moveSpecifyLocation && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicPopover), {
|
|
143
|
-
key:
|
|
153
|
+
key: 2,
|
|
144
154
|
trigger: "click",
|
|
145
155
|
placement: "top",
|
|
146
156
|
width: "200",
|
|
@@ -168,7 +178,7 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
168
178
|
disabled: __props.disabled
|
|
169
179
|
}, null, 8, ["modelValue", "disabled"]),
|
|
170
180
|
_cache[11] || (_cache[11] = createTextVNode("行 ", -1))
|
|
171
|
-
]), createElementVNode("div",
|
|
181
|
+
]), createElementVNode("div", _hoisted_3, [createVNode(unref(TMagicButton), {
|
|
172
182
|
size: "small",
|
|
173
183
|
text: "",
|
|
174
184
|
onClick: _cache[4] || (_cache[4] = ($event) => moveSpecifyLocationVisible.value = false)
|
|
@@ -186,10 +196,10 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
186
196
|
_: 1
|
|
187
197
|
}, 8, ["visible"])) : createCommentVNode("v-if", true),
|
|
188
198
|
itemExtra.value ? (openBlock(), createElementBlock("span", {
|
|
189
|
-
key:
|
|
199
|
+
key: 3,
|
|
190
200
|
innerHTML: itemExtra.value,
|
|
191
201
|
class: "m-form-tip"
|
|
192
|
-
}, null, 8,
|
|
202
|
+
}, null, 8, _hoisted_4)) : createCommentVNode("v-if", true)
|
|
193
203
|
])]),
|
|
194
204
|
default: withCtx(() => [expand.value ? (openBlock(), createBlock(Container_default, {
|
|
195
205
|
key: 0,
|
|
@@ -214,7 +224,7 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
214
224
|
"disabled"
|
|
215
225
|
])) : createCommentVNode("v-if", true)]),
|
|
216
226
|
_: 1
|
|
217
|
-
}, 8, ["body-style"]);
|
|
227
|
+
}, 8, ["flat", "body-style"]);
|
|
218
228
|
};
|
|
219
229
|
}
|
|
220
230
|
});
|