@tmagic/form 1.8.0-beta.24 → 1.8.0-beta.26

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.
Files changed (131) hide show
  1. package/dist/es/Form.vue_vue_type_script_setup_true_lang.js +47 -120
  2. package/dist/es/FormBox.vue_vue_type_script_setup_true_lang.js +3 -3
  3. package/dist/es/FormDialog.vue_vue_type_script_setup_true_lang.js +3 -3
  4. package/dist/es/FormDrawer.vue_vue_type_script_setup_true_lang.js +3 -3
  5. package/dist/es/containers/Col.vue_vue_type_script_setup_true_lang.js +3 -0
  6. package/dist/es/containers/Container.vue_vue_type_script_setup_true_lang.js +36 -51
  7. package/dist/es/containers/Fieldset.vue_vue_type_script_setup_true_lang.js +6 -0
  8. package/dist/es/containers/FlexLayout.vue_vue_type_script_setup_true_lang.js +4 -1
  9. package/dist/es/containers/GroupList.vue_vue_type_script_setup_true_lang.js +37 -15
  10. package/dist/es/containers/GroupListItem.vue_vue_type_script_setup_true_lang.js +109 -97
  11. package/dist/es/containers/Panel.vue_vue_type_script_setup_true_lang.js +7 -2
  12. package/dist/es/containers/Row.vue_vue_type_script_setup_true_lang.js +3 -0
  13. package/dist/es/containers/Step.vue_vue_type_script_setup_true_lang.js +4 -1
  14. package/dist/es/containers/Tabs.vue_vue_type_script_setup_true_lang.js +7 -0
  15. package/dist/es/containers/table/Table.vue_vue_type_script_setup_true_lang.js +7 -5
  16. package/dist/es/containers/table/useTableColumns.js +5 -13
  17. package/dist/es/containers/table-group-list/TableGroupList.vue_vue_type_script_setup_true_lang.js +71 -78
  18. package/dist/es/containers/table-group-list/useAdd.js +26 -16
  19. package/dist/es/containers/table-group-list/useScrollLastItemIntoView.js +72 -0
  20. package/dist/es/fields/Cascader.vue_vue_type_script_setup_true_lang.js +1 -1
  21. package/dist/es/fields/CheckboxGroup/Index.js +5 -0
  22. package/dist/es/fields/{CheckboxGroup.vue_vue_type_script_setup_true_lang.js → CheckboxGroup/Index.vue_vue_type_script_setup_true_lang.js} +6 -7
  23. package/dist/es/fields/CheckboxGroup/effect.js +8 -0
  24. package/dist/es/fields/Date/Index.js +5 -0
  25. package/dist/es/fields/{Date.vue_vue_type_script_setup_true_lang.js → Date/Index.vue_vue_type_script_setup_true_lang.js} +5 -7
  26. package/dist/es/fields/Date/effect.js +10 -0
  27. package/dist/es/fields/DateTime/Index.js +5 -0
  28. package/dist/es/fields/{DateTime.vue_vue_type_script_setup_true_lang.js → DateTime/Index.vue_vue_type_script_setup_true_lang.js} +5 -9
  29. package/dist/es/fields/DateTime/effect.js +15 -0
  30. package/dist/es/fields/Display/Index.js +5 -0
  31. package/dist/es/fields/{Display.vue_vue_type_script_setup_true_lang.js → Display/Index.vue_vue_type_script_setup_true_lang.js} +6 -7
  32. package/dist/es/fields/Display/effect.js +8 -0
  33. package/dist/es/fields/DynamicField/Index.js +5 -0
  34. package/dist/es/fields/{DynamicField.vue_vue_type_script_setup_true_lang.js → DynamicField/Index.vue_vue_type_script_setup_true_lang.js} +11 -15
  35. package/dist/es/fields/DynamicField/effect.js +40 -0
  36. package/dist/es/fields/Link.vue_vue_type_script_setup_true_lang.js +1 -1
  37. package/dist/es/fields/Number.vue_vue_type_script_setup_true_lang.js +1 -1
  38. package/dist/es/fields/NumberRange/Index.js +5 -0
  39. package/dist/es/fields/{NumberRange.vue_vue_type_script_setup_true_lang.js → NumberRange/Index.vue_vue_type_script_setup_true_lang.js} +5 -6
  40. package/dist/es/fields/NumberRange/effect.js +8 -0
  41. package/dist/es/fields/Select.vue_vue_type_script_setup_true_lang.js +2 -2
  42. package/dist/es/fields/Text.vue_vue_type_script_setup_true_lang.js +1 -1
  43. package/dist/es/headless.js +13 -0
  44. package/dist/es/index.js +17 -12
  45. package/dist/es/plugin.js +57 -41
  46. package/dist/es/schema.js +6 -8
  47. package/dist/es/style.css +85 -1
  48. package/dist/es/submitForm.js +44 -194
  49. package/dist/es/utils/builtInFields.js +49 -0
  50. package/dist/es/utils/collectFields.js +407 -0
  51. package/dist/es/utils/config.js +1 -8
  52. package/dist/es/utils/fieldInnerConfig.js +42 -0
  53. package/dist/es/utils/fieldValueEffects.js +80 -0
  54. package/dist/es/utils/form.js +96 -43
  55. package/dist/es/utils/formStateProxy.js +75 -0
  56. package/dist/es/utils/registerField.js +158 -0
  57. package/dist/es/utils/submitHeadless.js +54 -0
  58. package/dist/es/utils/tableGroupList.js +85 -0
  59. package/dist/es/utils/typeMatch.js +17 -19
  60. package/dist/es/utils/validateError.js +57 -0
  61. package/dist/es/utils/validateValues.js +115 -0
  62. package/dist/style.css +85 -1
  63. package/dist/themes/magic-admin.css +87 -7
  64. package/dist/tmagic-form-headless.umd.cjs +4044 -0
  65. package/dist/tmagic-form.umd.cjs +1975 -874
  66. package/package.json +10 -4
  67. package/src/Form.vue +49 -149
  68. package/src/FormBox.vue +5 -4
  69. package/src/FormDialog.vue +5 -5
  70. package/src/FormDrawer.vue +5 -5
  71. package/src/containers/Col.vue +2 -0
  72. package/src/containers/Container.vue +86 -157
  73. package/src/containers/Fieldset.vue +5 -0
  74. package/src/containers/FlexLayout.vue +2 -0
  75. package/src/containers/GroupList.vue +41 -11
  76. package/src/containers/GroupListItem.vue +83 -80
  77. package/src/containers/Panel.vue +3 -0
  78. package/src/containers/Row.vue +2 -0
  79. package/src/containers/Step.vue +2 -0
  80. package/src/containers/Tabs.vue +13 -0
  81. package/src/containers/table/ActionsColumn.vue +1 -1
  82. package/src/containers/table/Table.vue +4 -3
  83. package/src/containers/table/usePagination.ts +1 -1
  84. package/src/containers/table/useSortable.ts +1 -1
  85. package/src/containers/table/useTableColumns.ts +9 -19
  86. package/src/containers/table-group-list/TableGroupList.vue +43 -71
  87. package/src/containers/table-group-list/useAdd.ts +40 -25
  88. package/src/containers/table-group-list/useScrollLastItemIntoView.ts +94 -0
  89. package/src/fields/{CheckboxGroup.vue → CheckboxGroup/Index.vue} +3 -8
  90. package/src/fields/CheckboxGroup/effect.ts +27 -0
  91. package/src/fields/{Date.vue → Date/Index.vue} +2 -5
  92. package/src/fields/Date/effect.ts +29 -0
  93. package/src/fields/{DateTime.vue → DateTime/Index.vue} +2 -16
  94. package/src/fields/DateTime/effect.ts +36 -0
  95. package/src/fields/{Display.vue → Display/Index.vue} +3 -7
  96. package/src/fields/Display/effect.ts +28 -0
  97. package/src/fields/{DynamicField.vue → DynamicField/Index.vue} +11 -11
  98. package/src/fields/DynamicField/effect.ts +74 -0
  99. package/src/fields/{NumberRange.vue → NumberRange/Index.vue} +2 -6
  100. package/src/fields/NumberRange/effect.ts +27 -0
  101. package/src/headless.ts +78 -0
  102. package/src/index.ts +32 -15
  103. package/src/plugin.ts +63 -42
  104. package/src/schema.ts +6 -8
  105. package/src/submitForm.ts +81 -409
  106. package/src/theme/form-box.scss +5 -0
  107. package/src/theme/group-list.scss +107 -1
  108. package/src/theme/themes/magic-admin/index.scss +2 -8
  109. package/src/utils/builtInFields.ts +69 -0
  110. package/src/utils/collectFields.ts +561 -0
  111. package/src/utils/config.ts +1 -15
  112. package/src/utils/fieldInnerConfig.ts +127 -0
  113. package/src/utils/fieldValueEffects.ts +140 -0
  114. package/src/utils/form.ts +141 -75
  115. package/src/utils/formStateProxy.ts +104 -0
  116. package/src/utils/registerField.ts +308 -0
  117. package/src/utils/submitHeadless.ts +206 -0
  118. package/src/utils/tableGroupList.ts +120 -0
  119. package/src/utils/typeMatch.ts +19 -15
  120. package/src/utils/validateError.ts +92 -0
  121. package/src/utils/validateValues.ts +177 -0
  122. package/types/headless.d.ts +682 -0
  123. package/types/index.d.ts +631 -272
  124. package/dist/es/fields/CheckboxGroup.js +0 -5
  125. package/dist/es/fields/Date.js +0 -5
  126. package/dist/es/fields/DateTime.js +0 -5
  127. package/dist/es/fields/Display.js +0 -5
  128. package/dist/es/fields/DynamicField.js +0 -5
  129. package/dist/es/fields/NumberRange.js +0 -5
  130. package/dist/es/utils/silentLeafFieldTypes.js +0 -49
  131. package/src/utils/silentLeafFieldTypes.ts +0 -71
@@ -19,6 +19,7 @@ var Fieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
19
19
  __name: "Fieldset",
20
20
  props: {
21
21
  labelWidth: {},
22
+ labelPosition: {},
22
23
  prop: { default: "" },
23
24
  size: {},
24
25
  model: {},
@@ -58,6 +59,7 @@ var Fieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
58
59
  if (props.config.items) return props.config.labelWidth || props.labelWidth;
59
60
  return props.config.labelWidth || props.labelWidth || (props.config.text ? void 0 : "0");
60
61
  });
62
+ const lPosition = computed(() => props.config.labelPosition || props.labelPosition);
61
63
  const valueChangeHandler = (value) => {
62
64
  emit("change", value, { modifyKey: checkboxName.value });
63
65
  };
@@ -105,6 +107,7 @@ var Fieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
105
107
  prop: __props.prop,
106
108
  disabled: __props.disabled,
107
109
  labelWidth: lWidth.value,
110
+ labelPosition: lPosition.value,
108
111
  size: __props.size,
109
112
  onChange: changeHandler,
110
113
  onAddDiffCount: _cache[0] || (_cache[0] = ($event) => onAddDiffCount())
@@ -117,6 +120,7 @@ var Fieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
117
120
  "prop",
118
121
  "disabled",
119
122
  "labelWidth",
123
+ "labelPosition",
120
124
  "size"
121
125
  ]);
122
126
  }), 128))]), createElementVNode("img", {
@@ -132,6 +136,7 @@ var Fieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
132
136
  config: item,
133
137
  prop: __props.prop,
134
138
  labelWidth: lWidth.value,
139
+ labelPosition: lPosition.value,
135
140
  size: __props.size,
136
141
  disabled: __props.disabled,
137
142
  onChange: changeHandler,
@@ -144,6 +149,7 @@ var Fieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
144
149
  "config",
145
150
  "prop",
146
151
  "labelWidth",
152
+ "labelPosition",
147
153
  "size",
148
154
  "disabled"
149
155
  ]);
@@ -11,6 +11,7 @@ var FlexLayout_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
11
11
  config: {},
12
12
  name: {},
13
13
  labelWidth: {},
14
+ labelPosition: {},
14
15
  prop: {},
15
16
  size: {},
16
17
  disabled: { type: Boolean }
@@ -44,6 +45,7 @@ var FlexLayout_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
44
45
  size: __props.size,
45
46
  disabled: __props.disabled,
46
47
  "label-width": __props.config.labelWidth || __props.labelWidth,
48
+ "label-position": __props.config.labelPosition || __props.labelPosition,
47
49
  onChange: changeHandler,
48
50
  onAddDiffCount: _cache[0] || (_cache[0] = ($event) => onAddDiffCount())
49
51
  }, null, 8, [
@@ -54,7 +56,8 @@ var FlexLayout_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
54
56
  "prop",
55
57
  "size",
56
58
  "disabled",
57
- "label-width"
59
+ "label-width",
60
+ "label-position"
58
61
  ]);
59
62
  }), 128))], 4);
60
63
  };
@@ -1,5 +1,5 @@
1
1
  import GroupListItem_default from "./GroupListItem.js";
2
- import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, renderList, renderSlot, toDisplayString } from "vue";
2
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, defineComponent, mergeProps, normalizeClass, openBlock, renderList, renderSlot, toDisplayString, withCtx } 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" };
@@ -9,11 +9,7 @@ var _hoisted_3 = {
9
9
  class: "el-table__empty-block"
10
10
  };
11
11
  var _hoisted_4 = { class: "el-table__empty-text t-table__empty" };
12
- var _hoisted_5 = {
13
- key: 3,
14
- class: "m-fields-group-list-footer"
15
- };
16
- var _hoisted_6 = { style: {
12
+ var _hoisted_5 = { style: {
17
13
  "display": "flex",
18
14
  "justify-content": "flex-end",
19
15
  "flex": "1"
@@ -28,6 +24,7 @@ var GroupList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
28
24
  config: {},
29
25
  name: {},
30
26
  labelWidth: {},
27
+ labelPosition: {},
31
28
  prop: {},
32
29
  size: {},
33
30
  disabled: { type: Boolean },
@@ -56,7 +53,23 @@ var GroupList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
56
53
  emit("change", props.model[props.name]);
57
54
  };
58
55
  const onAddDiffCount = () => emit("addDiffCount");
59
- const getLastValues = (item, index) => item?.[index] || {};
56
+ const asList = (value) => Array.isArray(value) ? value : [];
57
+ const currentList = computed(() => asList(props.model[props.name]));
58
+ /** 对比时按当前/历史较长一侧对齐,已删除的项也能渲染出来 */
59
+ const displayItems = computed(() => {
60
+ const current = currentList.value;
61
+ if (!props.isCompare) return current.map((item, index) => ({
62
+ item: item ?? {},
63
+ last: {},
64
+ index
65
+ }));
66
+ const last = asList(props.lastValues?.[props.name]);
67
+ return Array.from({ length: Math.max(current.length, last.length) }, (_, index) => ({
68
+ item: current[index] ?? {},
69
+ last: last[index] ?? {},
70
+ index
71
+ }));
72
+ });
60
73
  return (_ctx, _cache) => {
61
74
  return openBlock(), createElementBlock("div", _hoisted_1, [
62
75
  __props.config.extra ? (openBlock(), createElementBlock("div", {
@@ -64,25 +77,30 @@ var GroupList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
64
77
  innerHTML: __props.config.extra,
65
78
  style: { "color": "rgba(0, 0, 0, 0.45)" }
66
79
  }, null, 8, _hoisted_2)) : createCommentVNode("v-if", true),
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) => {
80
+ !displayItems.value.length ? (openBlock(), createElementBlock("div", _hoisted_3, [createElementVNode("span", _hoisted_4, "暂无" + toDisplayString(__props.config.titlePrefix || "") + "数据", 1)])) : (openBlock(true), createElementBlock(Fragment, { key: 2 }, renderList(displayItems.value, (entry) => {
68
81
  return openBlock(), createBlock(GroupListItem_default, {
69
- key: index,
70
- model: item,
71
- lastValues: getLastValues(__props.lastValues?.[__props.name], Number(index)),
82
+ key: entry.index,
83
+ model: entry.item,
84
+ lastValues: entry.last,
72
85
  "is-compare": __props.isCompare,
73
86
  config: __props.config,
74
87
  prop: __props.prop,
75
- index: Number(index),
88
+ index: entry.index,
76
89
  "label-width": __props.labelWidth,
90
+ "label-position": __props.labelPosition,
77
91
  size: __props.size,
78
92
  disabled: __props.disabled,
79
- "group-model": __props.model[__props.name],
93
+ "group-model": currentList.value,
80
94
  onRemoveItem: removeHandler,
81
95
  onCopyItem: copyHandler,
82
96
  onSwapItem: swapHandler,
83
97
  onChange: changeHandler,
84
98
  onAddDiffCount: _cache[0] || (_cache[0] = ($event) => onAddDiffCount())
85
- }, null, 8, [
99
+ }, createSlots({ _: 2 }, [_ctx.$slots.title ? {
100
+ name: "title",
101
+ fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, "title", mergeProps({ ref_for: true }, slotProps))]),
102
+ key: "0"
103
+ } : void 0]), 1032, [
86
104
  "model",
87
105
  "lastValues",
88
106
  "is-compare",
@@ -90,12 +108,16 @@ var GroupList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
90
108
  "prop",
91
109
  "index",
92
110
  "label-width",
111
+ "label-position",
93
112
  "size",
94
113
  "disabled",
95
114
  "group-model"
96
115
  ]);
97
116
  }), 128)),
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)
117
+ !__props.isCompare && (_ctx.$slots["toggle-button"] || _ctx.$slots["add-button"]) ? (openBlock(), createElementBlock("div", {
118
+ key: 3,
119
+ class: normalizeClass(["m-fields-group-list-footer", { "is-sticky-full": Boolean(__props.config.addButtonConfig?.sticky) }])
120
+ }, [renderSlot(_ctx.$slots, "toggle-button"), createElementVNode("div", _hoisted_5, [renderSlot(_ctx.$slots, "add-button")])], 2)) : createCommentVNode("v-if", true)
99
121
  ]);
100
122
  };
101
123
  }
@@ -1,16 +1,19 @@
1
- import { filterFunction } from "../utils/form.js";
1
+ import { appendProp, filterFunction } from "../utils/form.js";
2
+ import { getGroupListRowConfig } from "../utils/tableGroupList.js";
2
3
  import Container_default from "./Container.js";
3
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, openBlock, ref, unref, vShow, withCtx, withDirectives } from "vue";
4
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, openBlock, ref, renderSlot, unref, vShow, withCtx, withDirectives } from "vue";
4
5
  import { TMagicButton, TMagicCard, TMagicIcon, TMagicInputNumber, TMagicPopover, TMagicTooltip } from "@tmagic/design";
5
6
  import { ArrowDown, ArrowRight, Bottom, Delete, DocumentCopy, Position, Top } from "@element-plus/icons-vue";
6
7
  //#region packages/form/src/containers/GroupListItem.vue?vue&type=script&setup=true&lang.ts
7
8
  var _hoisted_1 = { class: "m-fields-group-list-item-header" };
8
- var _hoisted_2 = ["innerHTML"];
9
- var _hoisted_3 = { style: {
9
+ var _hoisted_2 = { class: "m-fields-group-list-item-title" };
10
+ var _hoisted_3 = ["innerHTML"];
11
+ var _hoisted_4 = { class: "m-fields-group-list-item-actions" };
12
+ var _hoisted_5 = { style: {
10
13
  "text-align": "right",
11
14
  "margin-top": "20px"
12
15
  } };
13
- var _hoisted_4 = ["innerHTML"];
16
+ var _hoisted_6 = ["innerHTML"];
14
17
  var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
15
18
  name: "MFormGroupListItem",
16
19
  __name: "GroupListItem",
@@ -21,6 +24,7 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
21
24
  groupModel: {},
22
25
  config: {},
23
26
  labelWidth: {},
27
+ labelPosition: {},
24
28
  prop: {},
25
29
  size: {},
26
30
  index: {},
@@ -39,13 +43,8 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
39
43
  const mForm = inject("mForm");
40
44
  const defaultExpandQuantity = props.config.defaultExpandQuantity ?? 7;
41
45
  const expand = ref(props.config.expandAll || defaultExpandQuantity > props.index);
42
- const rowConfig = computed(() => ({
43
- type: "row",
44
- span: props.config.span || 24,
45
- items: props.config.items,
46
- labelWidth: props.config.labelWidth,
47
- [mForm?.keyProp || "__key"]: `${props.config[mForm?.keyProp || "__key"]}${String(props.index)}`
48
- }));
46
+ const rowConfig = computed(() => getGroupListRowConfig(props.config, props.index, mForm?.keyProp));
47
+ const rowProp = computed(() => appendProp(props.prop, props.index));
49
48
  const title = computed(() => {
50
49
  if (props.config.titleKey && props.model[props.config.titleKey]) {
51
50
  const { titlePrefix } = props.config;
@@ -105,101 +104,112 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
105
104
  })]),
106
105
  _: 1
107
106
  }, 8, ["disabled"]),
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), {
107
+ createElementVNode("div", _hoisted_2, [renderSlot(_ctx.$slots, "title", {
108
+ model: __props.model,
109
+ index: __props.index,
110
+ lastValues: __props.lastValues,
111
+ prop: rowProp.value,
112
+ title: title.value
113
+ }, () => [createElementVNode("span", { innerHTML: title.value }, null, 8, _hoisted_3)])]),
114
+ createElementVNode("div", _hoisted_4, [
115
+ copyable.value && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicButton), {
111
116
  key: 0,
117
+ link: "",
112
118
  size: "default",
119
+ type: "primary",
120
+ icon: unref(DocumentCopy),
121
+ disabled: __props.disabled,
122
+ onClick: copyHandler
123
+ }, {
124
+ default: withCtx(() => [..._cache[6] || (_cache[6] = [createTextVNode("复制", -1)])]),
125
+ _: 1
126
+ }, 8, ["icon", "disabled"])) : createCommentVNode("v-if", true),
127
+ movable.value && !__props.isCompare ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [withDirectives(createVNode(unref(TMagicButton), {
113
128
  link: "",
114
- class: "delete-button",
115
- icon: unref(Delete),
129
+ size: "default",
116
130
  disabled: __props.disabled,
117
- onClick: removeHandler
118
- }, null, 8, ["icon", "disabled"])), [[vShow, showDelete.value]]) : createCommentVNode("v-if", true)]),
119
- _: 1
120
- }, 8, ["content"]),
121
- copyable.value && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicButton), {
122
- key: 0,
123
- link: "",
124
- size: "default",
125
- type: "primary",
126
- icon: unref(DocumentCopy),
127
- disabled: __props.disabled,
128
- onClick: copyHandler
129
- }, {
130
- default: withCtx(() => [..._cache[6] || (_cache[6] = [createTextVNode("复制", -1)])]),
131
- _: 1
132
- }, 8, ["icon", "disabled"])) : createCommentVNode("v-if", true),
133
- movable.value && !__props.isCompare ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [withDirectives(createVNode(unref(TMagicButton), {
134
- link: "",
135
- size: "default",
136
- disabled: __props.disabled,
137
- icon: unref(Top),
138
- onClick: _cache[0] || (_cache[0] = ($event) => changeOrder(-1))
139
- }, {
140
- default: withCtx(() => [..._cache[7] || (_cache[7] = [createTextVNode("上移", -1)])]),
141
- _: 1
142
- }, 8, ["disabled", "icon"]), [[vShow, __props.index !== 0]]), withDirectives(createVNode(unref(TMagicButton), {
143
- link: "",
144
- size: "default",
145
- disabled: __props.disabled,
146
- icon: unref(Bottom),
147
- onClick: _cache[1] || (_cache[1] = ($event) => changeOrder(1))
148
- }, {
149
- default: withCtx(() => [..._cache[8] || (_cache[8] = [createTextVNode("下移", -1)])]),
150
- _: 1
151
- }, 8, ["disabled", "icon"]), [[vShow, __props.index !== length.value - 1]])], 64)) : createCommentVNode("v-if", true),
152
- __props.config.moveSpecifyLocation && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicPopover), {
153
- key: 2,
154
- trigger: "click",
155
- placement: "top",
156
- width: "200",
157
- visible: moveSpecifyLocationVisible.value
158
- }, {
159
- reference: withCtx(() => [createVNode(unref(TMagicButton), {
131
+ icon: unref(Top),
132
+ onClick: _cache[0] || (_cache[0] = ($event) => changeOrder(-1))
133
+ }, {
134
+ default: withCtx(() => [..._cache[7] || (_cache[7] = [createTextVNode("上移", -1)])]),
135
+ _: 1
136
+ }, 8, ["disabled", "icon"]), [[vShow, __props.index !== 0]]), withDirectives(createVNode(unref(TMagicButton), {
160
137
  link: "",
161
- size: "small",
162
- type: "primary",
163
- icon: unref(Position),
138
+ size: "default",
164
139
  disabled: __props.disabled,
165
- onClick: _cache[2] || (_cache[2] = ($event) => moveSpecifyLocationVisible.value = true)
140
+ icon: unref(Bottom),
141
+ onClick: _cache[1] || (_cache[1] = ($event) => changeOrder(1))
166
142
  }, {
167
- default: withCtx(() => [..._cache[9] || (_cache[9] = [createTextVNode("移动至", -1)])]),
143
+ default: withCtx(() => [..._cache[8] || (_cache[8] = [createTextVNode("下移", -1)])]),
168
144
  _: 1
169
- }, 8, ["icon", "disabled"])]),
170
- default: withCtx(() => [createElementVNode("div", null, [createElementVNode("div", null, [
171
- _cache[10] || (_cache[10] = createTextVNode(" 第", -1)),
172
- createVNode(unref(TMagicInputNumber), {
173
- style: { "margin": "0 5px" },
174
- modelValue: moveSpecifyLocationIndex.value,
175
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => moveSpecifyLocationIndex.value = $event),
176
- size: "small",
177
- min: 1,
178
- disabled: __props.disabled
179
- }, null, 8, ["modelValue", "disabled"]),
180
- _cache[11] || (_cache[11] = createTextVNode("行 ", -1))
181
- ]), createElementVNode("div", _hoisted_3, [createVNode(unref(TMagicButton), {
182
- size: "small",
183
- text: "",
184
- onClick: _cache[4] || (_cache[4] = ($event) => moveSpecifyLocationVisible.value = false)
145
+ }, 8, ["disabled", "icon"]), [[vShow, __props.index !== length.value - 1]])], 64)) : createCommentVNode("v-if", true),
146
+ __props.config.moveSpecifyLocation && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicPopover), {
147
+ key: 2,
148
+ trigger: "click",
149
+ placement: "top",
150
+ width: "200",
151
+ visible: moveSpecifyLocationVisible.value
185
152
  }, {
186
- default: withCtx(() => [..._cache[12] || (_cache[12] = [createTextVNode("取消", -1)])]),
153
+ reference: withCtx(() => [createVNode(unref(TMagicButton), {
154
+ link: "",
155
+ size: "small",
156
+ type: "primary",
157
+ icon: unref(Position),
158
+ disabled: __props.disabled,
159
+ onClick: _cache[2] || (_cache[2] = ($event) => moveSpecifyLocationVisible.value = true)
160
+ }, {
161
+ default: withCtx(() => [..._cache[9] || (_cache[9] = [createTextVNode("移动至", -1)])]),
162
+ _: 1
163
+ }, 8, ["icon", "disabled"])]),
164
+ default: withCtx(() => [createElementVNode("div", null, [createElementVNode("div", null, [
165
+ _cache[10] || (_cache[10] = createTextVNode(" 第", -1)),
166
+ createVNode(unref(TMagicInputNumber), {
167
+ style: { "margin": "0 5px" },
168
+ modelValue: moveSpecifyLocationIndex.value,
169
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => moveSpecifyLocationIndex.value = $event),
170
+ size: "small",
171
+ min: 1,
172
+ disabled: __props.disabled
173
+ }, null, 8, ["modelValue", "disabled"]),
174
+ _cache[11] || (_cache[11] = createTextVNode("行 ", -1))
175
+ ]), createElementVNode("div", _hoisted_5, [createVNode(unref(TMagicButton), {
176
+ size: "small",
177
+ text: "",
178
+ onClick: _cache[4] || (_cache[4] = ($event) => moveSpecifyLocationVisible.value = false)
179
+ }, {
180
+ default: withCtx(() => [..._cache[12] || (_cache[12] = [createTextVNode("取消", -1)])]),
181
+ _: 1
182
+ }), createVNode(unref(TMagicButton), {
183
+ size: "small",
184
+ type: "primary",
185
+ onClick: moveSpecifyLocationHandler
186
+ }, {
187
+ default: withCtx(() => [..._cache[13] || (_cache[13] = [createTextVNode("确认", -1)])]),
188
+ _: 1
189
+ })])])]),
187
190
  _: 1
188
- }), createVNode(unref(TMagicButton), {
189
- size: "small",
190
- type: "primary",
191
- onClick: moveSpecifyLocationHandler
191
+ }, 8, ["visible"])) : createCommentVNode("v-if", true),
192
+ createCommentVNode(" v-if 必须挂在 Tooltip 上:子节点为 false 时 ElOnlyChild 会报 no valid child node found "),
193
+ !__props.isCompare ? (openBlock(), createBlock(unref(TMagicTooltip), {
194
+ key: 3,
195
+ content: `删除 ${title.value}`
192
196
  }, {
193
- default: withCtx(() => [..._cache[13] || (_cache[13] = [createTextVNode("确认", -1)])]),
197
+ default: withCtx(() => [withDirectives(createVNode(unref(TMagicButton), {
198
+ size: "default",
199
+ link: "",
200
+ class: "delete-button",
201
+ icon: unref(Delete),
202
+ disabled: __props.disabled,
203
+ onClick: removeHandler
204
+ }, null, 8, ["icon", "disabled"]), [[vShow, showDelete.value]])]),
194
205
  _: 1
195
- })])])]),
196
- _: 1
197
- }, 8, ["visible"])) : createCommentVNode("v-if", true),
198
- itemExtra.value ? (openBlock(), createElementBlock("span", {
199
- key: 3,
200
- innerHTML: itemExtra.value,
201
- class: "m-form-tip"
202
- }, null, 8, _hoisted_4)) : createCommentVNode("v-if", true)
206
+ }, 8, ["content"])) : createCommentVNode("v-if", true),
207
+ itemExtra.value ? (openBlock(), createElementBlock("span", {
208
+ key: 4,
209
+ innerHTML: itemExtra.value,
210
+ class: "m-form-tip"
211
+ }, null, 8, _hoisted_6)) : createCommentVNode("v-if", true)
212
+ ])
203
213
  ])]),
204
214
  default: withCtx(() => [expand.value ? (openBlock(), createBlock(Container_default, {
205
215
  key: 0,
@@ -208,7 +218,8 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
208
218
  lastValues: __props.lastValues,
209
219
  "is-compare": __props.isCompare,
210
220
  labelWidth: __props.labelWidth,
211
- prop: `${__props.prop}${__props.prop ? "." : ""}${String(__props.index)}`,
221
+ labelPosition: __props.labelPosition,
222
+ prop: rowProp.value,
212
223
  size: __props.size,
213
224
  disabled: __props.disabled,
214
225
  onChange: changeHandler,
@@ -219,11 +230,12 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
219
230
  "lastValues",
220
231
  "is-compare",
221
232
  "labelWidth",
233
+ "labelPosition",
222
234
  "prop",
223
235
  "size",
224
236
  "disabled"
225
237
  ])) : createCommentVNode("v-if", true)]),
226
- _: 1
238
+ _: 3
227
239
  }, 8, ["flat", "body-style"]);
228
240
  };
229
241
  }
@@ -26,6 +26,7 @@ var Panel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
26
26
  config: {},
27
27
  name: {},
28
28
  labelWidth: {},
29
+ labelPosition: {},
29
30
  prop: {},
30
31
  size: {},
31
32
  disabled: { type: Boolean },
@@ -88,6 +89,7 @@ var Panel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
88
89
  size: __props.size,
89
90
  disabled: __props.disabled,
90
91
  "label-width": __props.config.labelWidth || __props.labelWidth,
92
+ "label-position": __props.config.labelPosition || __props.labelPosition,
91
93
  onChange: changeHandler,
92
94
  onAddDiffCount: _cache[2] || (_cache[2] = ($event) => onAddDiffCount())
93
95
  }, null, 8, [
@@ -98,7 +100,8 @@ var Panel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
98
100
  "prop",
99
101
  "size",
100
102
  "disabled",
101
- "label-width"
103
+ "label-width",
104
+ "label-position"
102
105
  ]);
103
106
  }), 128))]), createElementVNode("img", {
104
107
  class: "m-form-schematic",
@@ -114,6 +117,7 @@ var Panel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
114
117
  size: __props.size,
115
118
  disabled: __props.disabled,
116
119
  "label-width": __props.config.labelWidth || __props.labelWidth,
120
+ "label-position": __props.config.labelPosition || __props.labelPosition,
117
121
  onChange: changeHandler,
118
122
  onAddDiffCount: _cache[3] || (_cache[3] = ($event) => onAddDiffCount())
119
123
  }, null, 8, [
@@ -124,7 +128,8 @@ var Panel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
124
128
  "prop",
125
129
  "size",
126
130
  "disabled",
127
- "label-width"
131
+ "label-width",
132
+ "label-position"
128
133
  ]);
129
134
  }), 128))])]),
130
135
  _: 3
@@ -12,6 +12,7 @@ var Row_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompon
12
12
  config: {},
13
13
  name: {},
14
14
  labelWidth: {},
15
+ labelPosition: {},
15
16
  prop: {},
16
17
  size: {},
17
18
  expandMore: { type: Boolean },
@@ -34,6 +35,7 @@ var Row_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompon
34
35
  span: col.span || __props.config.span || 24 / __props.config.items.length,
35
36
  config: col,
36
37
  labelWidth: __props.config.labelWidth || __props.labelWidth,
38
+ labelPosition: __props.config.labelPosition || __props.labelPosition,
37
39
  expandMore: __props.expandMore,
38
40
  model: __props.name ? __props.model[__props.name] : __props.model,
39
41
  lastValues: __props.name ? __props.lastValues[__props.name] : __props.lastValues,
@@ -47,6 +49,7 @@ var Row_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompon
47
49
  "span",
48
50
  "config",
49
51
  "labelWidth",
52
+ "labelPosition",
50
53
  "expandMore",
51
54
  "model",
52
55
  "lastValues",
@@ -13,6 +13,7 @@ var Step_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
13
13
  config: {},
14
14
  stepActive: { default: 1 },
15
15
  labelWidth: {},
16
+ labelPosition: {},
16
17
  size: {},
17
18
  disabled: { type: Boolean }
18
19
  },
@@ -64,6 +65,7 @@ var Step_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
64
65
  size: __props.size,
65
66
  disabled: __props.disabled,
66
67
  "label-width": __props.config.labelWidth || __props.labelWidth,
68
+ "label-position": __props.config.labelPosition || __props.labelPosition,
67
69
  onChange: changeHandler,
68
70
  onAddDiffCount: _cache[0] || (_cache[0] = ($event) => onAddDiffCount())
69
71
  }, null, 8, [
@@ -74,7 +76,8 @@ var Step_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
74
76
  "prop",
75
77
  "size",
76
78
  "disabled",
77
- "label-width"
79
+ "label-width",
80
+ "label-position"
78
81
  ])), [[vShow, active.value - 1 === index]]) : createCommentVNode("v-if", true)], 64);
79
82
  }), 256))], 64);
80
83
  }), 256))]);
@@ -1,4 +1,5 @@
1
1
  import { display, filterFunction, initValue } from "../utils/form.js";
2
+ import { applyMountValueEffects } from "../utils/collectFields.js";
2
3
  import Container_default from "./Container.js";
3
4
  import { Fragment, computed, createBlock, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, mergeProps, openBlock, ref, renderList, resolveDynamicComponent, toDisplayString, unref, watch, watchEffect, withCtx } from "vue";
4
5
  import { isEmpty } from "lodash-es";
@@ -18,6 +19,7 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
18
19
  name: {},
19
20
  size: {},
20
21
  labelWidth: {},
22
+ labelPosition: {},
21
23
  prop: { default: "" },
22
24
  expandMore: { type: Boolean },
23
25
  disabled: { type: Boolean }
@@ -94,12 +96,15 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
94
96
  prop: props.prop,
95
97
  config: props.config
96
98
  });
99
+ const tabsModel = props.model[props.name];
100
+ if (Array.isArray(tabsModel) && Array.isArray(props.config.items)) for (const tab of tabsModel) applyMountValueEffects(mForm, props.config.items, tab);
97
101
  emit("change", props.model[props.name]);
98
102
  } else {
99
103
  const newObj = await initValue(mForm, {
100
104
  config: props.config.items,
101
105
  initValues: {}
102
106
  });
107
+ applyMountValueEffects(mForm, props.config.items, newObj);
103
108
  newObj.title = `标签${tabs.value.length + 1}`;
104
109
  props.model[props.name].push(newObj);
105
110
  emit("change", props.model[props.name], { changeRecords: [{
@@ -169,6 +174,7 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
169
174
  prop: __props.config.dynamic ? `${__props.prop}${__props.prop ? "." : ""}${String(tabIndex)}` : tab.name ? `${__props.prop}${__props.prop ? "." : ""}${tab.name}` : __props.prop,
170
175
  size: __props.size,
171
176
  "label-width": tab.labelWidth || __props.labelWidth,
177
+ "label-position": tab.labelPosition || __props.labelPosition,
172
178
  "expand-more": __props.expandMore,
173
179
  onChange: changeHandler,
174
180
  onAddDiffCount: ($event) => onAddDiffCount(Number(tabIndex))
@@ -181,6 +187,7 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
181
187
  "prop",
182
188
  "size",
183
189
  "label-width",
190
+ "label-position",
184
191
  "expand-more",
185
192
  "onAddDiffCount"
186
193
  ]);
@@ -17,7 +17,7 @@ var _hoisted_2 = { style: {
17
17
  } };
18
18
  var _hoisted_3 = { style: { "display": "flex" } };
19
19
  var _hoisted_4 = {
20
- key: 1,
20
+ key: 2,
21
21
  class: "bottom",
22
22
  style: { "text-align": "right" }
23
23
  };
@@ -82,12 +82,14 @@ var Table_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
82
82
  style: { "color": "rgba(0, 0, 0, 0.45)" },
83
83
  innerHTML: __props.config.extra
84
84
  }, null, 8, _hoisted_1)) : createCommentVNode("v-if", true),
85
- createVNode(unref(TMagicTooltip), {
85
+ createCommentVNode(" v-if 必须挂在 Tooltip 上:表格未就绪时 ElOnlyChild 会报 no valid child node found "),
86
+ __props.model[modelName.value] ? (openBlock(), createBlock(unref(TMagicTooltip), {
87
+ key: 1,
86
88
  content: "拖拽可排序",
87
89
  placement: "left-start",
88
90
  disabled: __props.config.dropSort !== true || __props.config.dropSortHandle
89
91
  }, {
90
- default: withCtx(() => [__props.model[modelName.value] ? (openBlock(), createBlock(unref(TMagicTable), {
92
+ default: withCtx(() => [(openBlock(), createBlock(unref(TMagicTable), {
91
93
  ref: "tMagicTable",
92
94
  style: { "width": "100%" },
93
95
  "show-header": "",
@@ -109,9 +111,9 @@ var Table_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
109
111
  "max-height",
110
112
  "onSelect",
111
113
  "empty-text"
112
- ])) : createCommentVNode("v-if", true)]),
114
+ ]))]),
113
115
  _: 1
114
- }, 8, ["disabled"]),
116
+ }, 8, ["disabled"])) : createCommentVNode("v-if", true),
115
117
  renderSlot(_ctx.$slots, "default"),
116
118
  createElementVNode("div", _hoisted_2, [createElementVNode("div", _hoisted_3, [
117
119
  !unref(isFullscreen) ? renderSlot(_ctx.$slots, "toggle-button", {}, void 0, void 0, 0) : createCommentVNode("v-if", true),