@tmagic/form 1.8.0-beta.1 → 1.8.0-beta.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.
Files changed (61) hide show
  1. package/dist/es/Form.vue_vue_type_script_setup_true_lang.js +25 -6
  2. package/dist/es/FormBox.vue_vue_type_script_setup_true_lang.js +7 -1
  3. package/dist/es/FormDialog.vue_vue_type_script_setup_true_lang.js +7 -1
  4. package/dist/es/FormDrawer.vue_vue_type_script_setup_true_lang.js +7 -1
  5. package/dist/es/containers/Col.vue_vue_type_script_setup_true_lang.js +1 -1
  6. package/dist/es/containers/Container.vue_vue_type_script_setup_true_lang.js +195 -78
  7. package/dist/es/containers/Fieldset.vue_vue_type_script_setup_true_lang.js +5 -3
  8. package/dist/es/containers/FlexLayout.vue_vue_type_script_setup_true_lang.js +1 -1
  9. package/dist/es/containers/FormLabel.vue_vue_type_script_setup_true_lang.js +1 -1
  10. package/dist/es/containers/GroupList.vue_vue_type_script_setup_true_lang.js +6 -3
  11. package/dist/es/containers/GroupListItem.vue_vue_type_script_setup_true_lang.js +10 -9
  12. package/dist/es/containers/Panel.vue_vue_type_script_setup_true_lang.js +1 -1
  13. package/dist/es/containers/Row.vue_vue_type_script_setup_true_lang.js +1 -1
  14. package/dist/es/containers/Step.vue_vue_type_script_setup_true_lang.js +1 -1
  15. package/dist/es/containers/Tabs.vue_vue_type_script_setup_true_lang.js +6 -3
  16. package/dist/es/containers/table/ActionsColumn.vue_vue_type_script_setup_true_lang.js +1 -1
  17. package/dist/es/containers/table/SortColumn.vue_vue_type_script_setup_true_lang.js +1 -1
  18. package/dist/es/containers/table/Table.vue_vue_type_script_setup_true_lang.js +4 -4
  19. package/dist/es/containers/table-group-list/TableGroupList.vue_vue_type_script_setup_true_lang.js +1 -1
  20. package/dist/es/fields/Cascader.vue_vue_type_script_setup_true_lang.js +1 -1
  21. package/dist/es/fields/Checkbox.vue_vue_type_script_setup_true_lang.js +1 -1
  22. package/dist/es/fields/CheckboxGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  23. package/dist/es/fields/ColorPicker.vue_vue_type_script_setup_true_lang.js +1 -1
  24. package/dist/es/fields/Date.vue_vue_type_script_setup_true_lang.js +1 -1
  25. package/dist/es/fields/DateTime.vue_vue_type_script_setup_true_lang.js +1 -1
  26. package/dist/es/fields/Daterange.vue_vue_type_script_setup_true_lang.js +1 -1
  27. package/dist/es/fields/Display.vue_vue_type_script_setup_true_lang.js +1 -1
  28. package/dist/es/fields/DynamicField.vue_vue_type_script_setup_true_lang.js +1 -1
  29. package/dist/es/fields/Hidden.vue_vue_type_script_setup_true_lang.js +1 -1
  30. package/dist/es/fields/Link.vue_vue_type_script_setup_true_lang.js +1 -1
  31. package/dist/es/fields/Number.vue_vue_type_script_setup_true_lang.js +1 -1
  32. package/dist/es/fields/NumberRange.vue_vue_type_script_setup_true_lang.js +1 -1
  33. package/dist/es/fields/RadioGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  34. package/dist/es/fields/Select.vue_vue_type_script_setup_true_lang.js +1 -1
  35. package/dist/es/fields/Switch.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/es/fields/Text.vue_vue_type_script_setup_true_lang.js +1 -1
  37. package/dist/es/fields/Textarea.vue_vue_type_script_setup_true_lang.js +1 -1
  38. package/dist/es/fields/Time.vue_vue_type_script_setup_true_lang.js +1 -1
  39. package/dist/es/fields/Timerange.vue_vue_type_script_setup_true_lang.js +1 -1
  40. package/dist/es/index.js +2 -1
  41. package/dist/es/schema.js +4 -0
  42. package/dist/es/style.css +4 -1
  43. package/dist/es/submitForm.js +111 -8
  44. package/dist/es/utils/form.js +2 -2
  45. package/dist/style.css +4 -1
  46. package/dist/tmagic-form.umd.cjs +1865 -1598
  47. package/package.json +5 -5
  48. package/src/Form.vue +64 -3
  49. package/src/FormBox.vue +4 -0
  50. package/src/FormDialog.vue +4 -0
  51. package/src/FormDrawer.vue +4 -0
  52. package/src/containers/Container.vue +178 -54
  53. package/src/containers/Fieldset.vue +5 -2
  54. package/src/containers/GroupList.vue +1 -1
  55. package/src/containers/GroupListItem.vue +4 -3
  56. package/src/containers/Tabs.vue +10 -2
  57. package/src/containers/table/Table.vue +9 -3
  58. package/src/schema.ts +47 -0
  59. package/src/submitForm.ts +196 -16
  60. package/src/theme/container.scss +4 -1
  61. package/types/index.d.ts +1021 -421
@@ -10,7 +10,7 @@ var _hoisted_2 = { style: {
10
10
  "margin-top": "20px"
11
11
  } };
12
12
  var _hoisted_3 = ["innerHTML"];
13
- var GroupListItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
13
+ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
14
14
  name: "MFormGroupListItem",
15
15
  __name: "GroupListItem",
16
16
  props: {
@@ -99,16 +99,17 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
99
99
  }), createElementVNode("span", { innerHTML: title.value }, null, 8, _hoisted_1)]),
100
100
  _: 1
101
101
  }, 8, ["disabled"]),
102
- withDirectives(createVNode(unref(TMagicButton), {
102
+ !__props.isCompare ? withDirectives((openBlock(), createBlock(unref(TMagicButton), {
103
+ key: 0,
103
104
  type: "danger",
104
105
  size: "small",
105
106
  link: "",
106
107
  icon: unref(Delete),
107
108
  disabled: __props.disabled,
108
109
  onClick: removeHandler
109
- }, null, 8, ["icon", "disabled"]), [[vShow, showDelete.value]]),
110
- copyable.value ? (openBlock(), createBlock(unref(TMagicButton), {
111
- key: 0,
110
+ }, null, 8, ["icon", "disabled"])), [[vShow, showDelete.value]]) : createCommentVNode("v-if", true),
111
+ copyable.value && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicButton), {
112
+ key: 1,
112
113
  link: "",
113
114
  size: "small",
114
115
  type: "primary",
@@ -119,7 +120,7 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
119
120
  default: withCtx(() => [..._cache[6] || (_cache[6] = [createTextVNode("复制", -1)])]),
120
121
  _: 1
121
122
  }, 8, ["icon", "disabled"])) : createCommentVNode("v-if", true),
122
- movable.value ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [withDirectives(createVNode(unref(TMagicButton), {
123
+ movable.value && !__props.isCompare ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [withDirectives(createVNode(unref(TMagicButton), {
123
124
  link: "",
124
125
  size: "small",
125
126
  disabled: __props.disabled,
@@ -138,8 +139,8 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
138
139
  default: withCtx(() => [..._cache[8] || (_cache[8] = [createTextVNode("下移", -1)])]),
139
140
  _: 1
140
141
  }, 8, ["disabled", "icon"]), [[vShow, __props.index !== length.value - 1]])], 64)) : createCommentVNode("v-if", true),
141
- __props.config.moveSpecifyLocation ? (openBlock(), createBlock(unref(TMagicPopover), {
142
- key: 2,
142
+ __props.config.moveSpecifyLocation && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicPopover), {
143
+ key: 3,
143
144
  trigger: "click",
144
145
  placement: "top",
145
146
  width: "200",
@@ -185,7 +186,7 @@ var GroupListItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
185
186
  _: 1
186
187
  }, 8, ["visible"])) : createCommentVNode("v-if", true),
187
188
  itemExtra.value ? (openBlock(), createElementBlock("span", {
188
- key: 3,
189
+ key: 4,
189
190
  innerHTML: itemExtra.value,
190
191
  class: "m-form-tip"
191
192
  }, null, 8, _hoisted_3)) : createCommentVNode("v-if", true)
@@ -16,7 +16,7 @@ var _hoisted_3 = {
16
16
  };
17
17
  var _hoisted_4 = { style: { "flex": "1" } };
18
18
  var _hoisted_5 = ["src"];
19
- var Panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
19
+ var Panel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
20
20
  name: "MFormPanel",
21
21
  __name: "Panel",
22
22
  props: {
@@ -2,7 +2,7 @@ import Col_default from "./Col.js";
2
2
  import { Fragment, createBlock, createElementBlock, defineComponent, inject, openBlock, renderList, unref, withCtx } from "vue";
3
3
  import { TMagicRow } from "@tmagic/design";
4
4
  //#region packages/form/src/containers/Row.vue?vue&type=script&setup=true&lang.ts
5
- var Row_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Row_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormRow",
7
7
  __name: "Row",
8
8
  props: {
@@ -2,7 +2,7 @@ import Container_default from "./Container.js";
2
2
  import { Fragment, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, inject, openBlock, ref, renderList, unref, vShow, watchEffect, withCtx, withDirectives } from "vue";
3
3
  import { TMagicStep, TMagicSteps } from "@tmagic/design";
4
4
  //#region packages/form/src/containers/Step.vue?vue&type=script&setup=true&lang.ts
5
- var Step_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Step_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormStep",
7
7
  __name: "Step",
8
8
  props: {
@@ -1,10 +1,10 @@
1
1
  import { display, filterFunction, initValue } from "../utils/form.js";
2
2
  import Container_default from "./Container.js";
3
- import { Fragment, computed, createBlock, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, mergeProps, openBlock, ref, renderList, resolveDynamicComponent, toDisplayString, unref, watchEffect, withCtx } from "vue";
3
+ import { Fragment, computed, createBlock, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, mergeProps, openBlock, ref, renderList, resolveDynamicComponent, toDisplayString, unref, watch, watchEffect, withCtx } from "vue";
4
4
  import { isEmpty } from "lodash-es";
5
5
  import { TMagicBadge, getDesignConfig } from "@tmagic/design";
6
6
  //#region packages/form/src/containers/Tabs.vue?vue&type=script&setup=true&lang.ts
7
- var Tabs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var Tabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  name: "MFormTabs",
9
9
  __name: "Tabs",
10
10
  props: {
@@ -74,6 +74,9 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
74
74
  prop: props.prop
75
75
  });
76
76
  });
77
+ watch([() => props.model, () => props.lastValues], () => {
78
+ diffCount.value = {};
79
+ });
77
80
  const tabItems = (tab) => props.config.dynamic ? props.config.items : tab.items;
78
81
  const tabClickHandler = (tab) => {
79
82
  if (typeof tab === "object") tabClick(mForm, tab, props);
@@ -148,7 +151,7 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
148
151
  default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(tabs.value, (tab, tabIndex) => {
149
152
  return openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), mergeProps({ key: tab[unref(mForm)?.keyProp || "__key"] ?? tabIndex }, { ref_for: true }, unref(tabPaneComponent)?.props({
150
153
  name: filter(tab.status) || tabIndex.toString(),
151
- lazy: tab.lazy || false
154
+ lazy: __props.isCompare ? false : tab.lazy || false
152
155
  }) || {}), {
153
156
  label: withCtx(() => [createElementVNode("span", null, [createTextVNode(toDisplayString(filter(tab.title)), 1), createVNode(unref(TMagicBadge), {
154
157
  hidden: !diffCount.value[Number(tabIndex)],
@@ -3,7 +3,7 @@ import { cloneDeep } from "lodash-es";
3
3
  import { TMagicButton, TMagicTooltip } from "@tmagic/design";
4
4
  import { Delete, DocumentCopy, Sort } from "@element-plus/icons-vue";
5
5
  //#region packages/form/src/containers/table/ActionsColumn.vue?vue&type=script&setup=true&lang.ts
6
- var ActionsColumn_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var ActionsColumn_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  __name: "ActionsColumn",
8
8
  props: {
9
9
  config: {},
@@ -2,7 +2,7 @@ import { Fragment, createBlock, createCommentVNode, createElementBlock, createVN
2
2
  import { TMagicButton, TMagicTooltip } from "@tmagic/design";
3
3
  import { ArrowDown, ArrowUp } from "@element-plus/icons-vue";
4
4
  //#region packages/form/src/containers/table/SortColumn.vue?vue&type=script&setup=true&lang.ts
5
- var SortColumn_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var SortColumn_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  __name: "SortColumn",
7
7
  props: {
8
8
  index: {},
@@ -21,7 +21,7 @@ var _hoisted_4 = {
21
21
  class: "bottom",
22
22
  style: { "text-align": "right" }
23
23
  };
24
- var Table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
24
+ var Table_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
25
25
  name: "MFormTable",
26
26
  __name: "Table",
27
27
  props: {
@@ -122,7 +122,7 @@ var Table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
122
122
  default: withCtx(() => [createTextVNode(toDisplayString(unref(isFullscreen) ? "退出全屏" : "全屏编辑"), 1)]),
123
123
  _: 1
124
124
  }, 8, ["icon", "onClick"])) : createCommentVNode("v-if", true),
125
- unref(importable) ? (openBlock(), createBlock(unref(TMagicUpload), {
125
+ unref(importable) && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicUpload), {
126
126
  key: 2,
127
127
  style: { "display": "inline-block" },
128
128
  ref: "excelBtn",
@@ -142,7 +142,7 @@ var Table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
142
142
  }, 8, ["disabled"])]),
143
143
  _: 1
144
144
  }, 8, ["disabled", "on-change"])) : createCommentVNode("v-if", true),
145
- unref(importable) ? (openBlock(), createBlock(unref(TMagicButton), {
145
+ unref(importable) && !__props.isCompare ? (openBlock(), createBlock(unref(TMagicButton), {
146
146
  key: 3,
147
147
  size: "small",
148
148
  type: "warning",
@@ -153,7 +153,7 @@ var Table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
153
153
  default: withCtx(() => [..._cache[1] || (_cache[1] = [createTextVNode("清空", -1)])]),
154
154
  _: 1
155
155
  }, 8, ["disabled", "onClick"])) : createCommentVNode("v-if", true)
156
- ]), renderSlot(_ctx.$slots, "add-button")]),
156
+ ]), !__props.isCompare ? renderSlot(_ctx.$slots, "add-button", { key: 0 }) : createCommentVNode("v-if", true)]),
157
157
  __props.config.pagination ? (openBlock(), createElementBlock("div", _hoisted_4, [createVNode(unref(TMagicPagination), {
158
158
  layout: "total, sizes, prev, pager, next, jumper",
159
159
  "hide-on-single-page": __props.model[modelName.value].length < unref(pageSize),
@@ -5,7 +5,7 @@ import { computed, createBlock, createCommentVNode, createSlots, createTextVNode
5
5
  import { TMagicButton } from "@tmagic/design";
6
6
  import { Grid, Plus } from "@element-plus/icons-vue";
7
7
  //#region packages/form/src/containers/table-group-list/TableGroupList.vue?vue&type=script&setup=true&lang.ts
8
- var TableGroupList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
8
+ var TableGroupList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
9
  name: "MFormTableGroupList",
10
10
  inheritAttrs: false,
11
11
  __name: "TableGroupList",
@@ -4,7 +4,7 @@ import { filterFunction } from "../utils/form.js";
4
4
  import { computed, createBlock, defineComponent, inject, openBlock, ref, unref, watchEffect } from "vue";
5
5
  import { TMagicCascader } from "@tmagic/design";
6
6
  //#region packages/form/src/fields/Cascader.vue?vue&type=script&setup=true&lang.ts
7
- var Cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var Cascader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  name: "MFormCascader",
9
9
  __name: "Cascader",
10
10
  props: {
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { computed, createBlock, createSlots, createTextVNode, defineComponent, openBlock, toDisplayString, unref, withCtx } from "vue";
3
3
  import { TMagicCheckbox } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/Checkbox.vue?vue&type=script&setup=true&lang.ts
5
- var Checkbox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Checkbox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormCheckbox",
7
7
  __name: "Checkbox",
8
8
  props: {
@@ -3,7 +3,7 @@ import { filterFunction } from "../utils/form.js";
3
3
  import { Fragment, computed, createBlock, createElementBlock, createTextVNode, defineComponent, inject, openBlock, renderList, toDisplayString, unref, withCtx } from "vue";
4
4
  import { TMagicCheckbox, TMagicCheckboxGroup } from "@tmagic/design";
5
5
  //#region packages/form/src/fields/CheckboxGroup.vue?vue&type=script&setup=true&lang.ts
6
- var CheckboxGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var CheckboxGroup_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MFormCheckGroup",
8
8
  __name: "CheckboxGroup",
9
9
  props: {
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { createBlock, defineComponent, openBlock, unref } from "vue";
3
3
  import { TMagicColorPicker } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/ColorPicker.vue?vue&type=script&setup=true&lang.ts
5
- var ColorPicker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var ColorPicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormColorPicker",
7
7
  __name: "ColorPicker",
8
8
  props: {
@@ -3,7 +3,7 @@ import { datetimeFormatter } from "../utils/form.js";
3
3
  import { createBlock, defineComponent, openBlock, unref } from "vue";
4
4
  import { TMagicDatePicker } from "@tmagic/design";
5
5
  //#region packages/form/src/fields/Date.vue?vue&type=script&setup=true&lang.ts
6
- var Date_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var Date_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MFormDate",
8
8
  __name: "Date",
9
9
  props: {
@@ -3,7 +3,7 @@ import { datetimeFormatter } from "../utils/form.js";
3
3
  import { createBlock, defineComponent, openBlock, unref } from "vue";
4
4
  import { TMagicDatePicker } from "@tmagic/design";
5
5
  //#region packages/form/src/fields/DateTime.vue?vue&type=script&setup=true&lang.ts
6
- var DateTime_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var DateTime_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MFormDateTime",
8
8
  __name: "DateTime",
9
9
  props: {
@@ -3,7 +3,7 @@ import { datetimeFormatter } from "../utils/form.js";
3
3
  import { createBlock, defineComponent, onUnmounted, openBlock, ref, unref, watch } from "vue";
4
4
  import { TMagicDatePicker } from "@tmagic/design";
5
5
  //#region packages/form/src/fields/Daterange.vue?vue&type=script&setup=true&lang.ts
6
- var Daterange_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var Daterange_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MFormDateRange",
8
8
  __name: "Daterange",
9
9
  props: {
@@ -3,7 +3,7 @@ import { filterFunction } from "../utils/form.js";
3
3
  import { computed, createCommentVNode, createElementBlock, defineComponent, inject, openBlock, toDisplayString } from "vue";
4
4
  //#region packages/form/src/fields/Display.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = { key: 0 };
6
- var Display_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var Display_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MFormDisplay",
8
8
  __name: "Display",
9
9
  props: {
@@ -4,7 +4,7 @@ import { Fragment, createBlock, createElementBlock, createVNode, defineComponent
4
4
  import { TMagicForm, TMagicFormItem, TMagicInput } from "@tmagic/design";
5
5
  //#region packages/form/src/fields/DynamicField.vue?vue&type=script&setup=true&lang.ts
6
6
  var _hoisted_1 = { class: "m-fields-dynamic-field" };
7
- var DynamicField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var DynamicField_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  name: "MFormDynamicField",
9
9
  __name: "DynamicField",
10
10
  props: {
@@ -1,7 +1,7 @@
1
1
  import { useAddField } from "../utils/useAddField.js";
2
2
  import { createCommentVNode, createElementBlock, defineComponent, openBlock, vModelText, withDirectives } from "vue";
3
3
  //#region packages/form/src/fields/Hidden.vue?vue&type=script&setup=true&lang.ts
4
- var Hidden_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
4
+ var Hidden_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
5
5
  name: "MFormHidden",
6
6
  __name: "Hidden",
7
7
  props: {
@@ -8,7 +8,7 @@ var _hoisted_2 = {
8
8
  key: 2,
9
9
  class: "m-fields-link"
10
10
  };
11
- var Link_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
11
+ var Link_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
12
  name: "MFormLink",
13
13
  __name: "Link",
14
14
  props: {
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { createBlock, createCommentVNode, defineComponent, inject, openBlock, ref, unref, watch } from "vue";
3
3
  import { TMagicInputNumber } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/Number.vue?vue&type=script&setup=true&lang.ts
5
- var Number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Number_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormNumber",
7
7
  __name: "Number",
8
8
  props: {
@@ -3,7 +3,7 @@ import { createElementBlock, createElementVNode, createVNode, defineComponent, o
3
3
  import { TMagicInput } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/NumberRange.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = { class: "m-fields-number-range" };
6
- var NumberRange_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var NumberRange_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MFormNumberRange",
8
8
  __name: "NumberRange",
9
9
  props: {
@@ -3,7 +3,7 @@ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock
3
3
  import { TMagicIcon, TMagicRadio, TMagicRadioButton, TMagicRadioGroup, TMagicTooltip } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/RadioGroup.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = { key: 1 };
6
- var RadioGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var RadioGroup_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MFormRadioGroup",
8
8
  __name: "RadioGroup",
9
9
  props: {
@@ -5,7 +5,7 @@ import { TMagicSelect, getDesignConfig } from "@tmagic/design";
5
5
  import { getValueByKeyPath } from "@tmagic/utils";
6
6
  //#region packages/form/src/fields/Select.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = { key: 2 };
8
- var Select_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
8
+ var Select_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
9
  name: "MFormSelect",
10
10
  __name: "Select",
11
11
  props: {
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { computed, createBlock, defineComponent, openBlock, unref } from "vue";
3
3
  import { TMagicSwitch } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/Switch.vue?vue&type=script&setup=true&lang.ts
5
- var Switch_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Switch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormSwitch",
7
7
  __name: "Switch",
8
8
  props: {
@@ -11,7 +11,7 @@ var _hoisted_3 = { style: {
11
11
  "display": "flex",
12
12
  "justify-content": "flex-end"
13
13
  } };
14
- var Text_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
14
+ var Text_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
15
15
  name: "MFormText",
16
16
  __name: "Text",
17
17
  props: {
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { createBlock, defineComponent, inject, openBlock, ref, unref, watch } from "vue";
3
3
  import { TMagicInput } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/Textarea.vue?vue&type=script&setup=true&lang.ts
5
- var Textarea_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Textarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormTextarea",
7
7
  __name: "Textarea",
8
8
  props: {
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { createBlock, defineComponent, openBlock, unref } from "vue";
3
3
  import { TMagicTimePicker } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/Time.vue?vue&type=script&setup=true&lang.ts
5
- var Time_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Time_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormTime",
7
7
  __name: "Time",
8
8
  props: {
@@ -4,7 +4,7 @@ import { createBlock, defineComponent, onUnmounted, openBlock, ref, unref, watch
4
4
  import { TMagicTimePicker } from "@tmagic/design";
5
5
  import dayjs from "dayjs";
6
6
  //#region packages/form/src/fields/Timerange.vue?vue&type=script&setup=true&lang.ts
7
- var Timerange_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var Timerange_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  name: "MFormTimeRange",
9
9
  __name: "Timerange",
10
10
  props: {
package/dist/es/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import "./_virtual/_rolldown/runtime.js";
2
+ import { FORM_DIFF_CONFIG_KEY } from "./schema.js";
2
3
  import { useAddField } from "./utils/useAddField.js";
3
4
  import Hidden_default from "./fields/Hidden.js";
4
5
  import { deleteField, getField, registerField } from "./utils/config.js";
@@ -38,4 +39,4 @@ import plugin_default from "./plugin.js";
38
39
  export * from "@tmagic/form-schema";
39
40
  var createForm = (config) => config;
40
41
  //#endregion
41
- export { Cascader_default as MCascader, Checkbox_default as MCheckbox, CheckboxGroup_default as MCheckboxGroup, ColorPicker_default as MColorPicker, Container_default as MContainer, Date_default as MDate, DateTime_default as MDateTime, Daterange_default as MDaterange, Display_default as MDisplay, DynamicField_default as MDynamicField, Fieldset_default as MFieldset, FlexLayout_default as MFlexLayout, Form_default as MForm, FormBox_default as MFormBox, FormDialog_default as MFormDialog, FormDrawer_default as MFormDrawer, TableGroupList_default as MGroupList, Hidden_default as MHidden, Link_default as MLink, Number_default as MNumber, NumberRange_default as MNumberRange, Panel_default as MPanel, RadioGroup_default as MRadioGroup, Row_default as MRow, Select_default as MSelect, Switch_default as MSwitch, TableGroupList_default as MTable, TableGroupList_default as MTableGroupList, Tabs_default as MTabs, Text_default as MText, Textarea_default as MTextarea, Time_default as MTime, Timerange_default as MTimerange, createForm, createObjectProp, createValues, datetimeFormatter, plugin_default as default, deleteField as deleteFormField, display, filterFunction, getDataByPage, getField as getFormField, getRules, initValue, registerField as registerFormField, sortArray, sortChange, submitForm, useAddField };
42
+ export { FORM_DIFF_CONFIG_KEY, Cascader_default as MCascader, Checkbox_default as MCheckbox, CheckboxGroup_default as MCheckboxGroup, ColorPicker_default as MColorPicker, Container_default as MContainer, Date_default as MDate, DateTime_default as MDateTime, Daterange_default as MDaterange, Display_default as MDisplay, DynamicField_default as MDynamicField, Fieldset_default as MFieldset, FlexLayout_default as MFlexLayout, Form_default as MForm, FormBox_default as MFormBox, FormDialog_default as MFormDialog, FormDrawer_default as MFormDrawer, TableGroupList_default as MGroupList, Hidden_default as MHidden, Link_default as MLink, Number_default as MNumber, NumberRange_default as MNumberRange, Panel_default as MPanel, RadioGroup_default as MRadioGroup, Row_default as MRow, Select_default as MSelect, Switch_default as MSwitch, TableGroupList_default as MTable, TableGroupList_default as MTableGroupList, Tabs_default as MTabs, Text_default as MText, Textarea_default as MTextarea, Time_default as MTime, Timerange_default as MTimerange, createForm, createObjectProp, createValues, datetimeFormatter, plugin_default as default, deleteField as deleteFormField, display, filterFunction, getDataByPage, getField as getFormField, getRules, initValue, registerField as registerFormField, sortArray, sortChange, submitForm, useAddField };
package/dist/es/schema.js CHANGED
@@ -1,2 +1,6 @@
1
1
  import "./_virtual/_rolldown/runtime.js";
2
2
  export * from "@tmagic/form-schema";
3
+ //#region packages/form/src/schema.ts
4
+ var FORM_DIFF_CONFIG_KEY = Symbol("mFormDiffConfig");
5
+ //#endregion
6
+ export { FORM_DIFF_CONFIG_KEY };
package/dist/es/style.css CHANGED
@@ -10,7 +10,10 @@
10
10
  .m-form-container.has-tip .tmagic-design-form-item {
11
11
  flex: 1;
12
12
  }
13
- .m-form-container .tmagic-design-form-item.show-diff {
13
+ .m-form-container .tmagic-design-form-item.show-after-diff {
14
+ background: rgb(225, 243, 216);
15
+ }
16
+ .m-form-container .tmagic-design-form-item.show-before-diff {
14
17
  background: #f7dadd;
15
18
  }
16
19
 
@@ -21,13 +21,27 @@ import { createApp, defineComponent, h, nextTick, ref, watch } from "vue";
21
21
  * } catch (e) {
22
22
  * console.error(e);
23
23
  * }
24
+ *
25
+ * // 需要同时获取变更记录时:
26
+ * const { values, changeRecords } = await submitForm({
27
+ * config: [...],
28
+ * initValues: { name: 'foo' },
29
+ * returnChangeRecords: true,
30
+ * });
31
+ *
32
+ * // 调试模式:可见地渲染表单,点击「确定」才提交:
33
+ * const values = await submitForm({
34
+ * config: [...],
35
+ * initValues: { name: 'foo' },
36
+ * debug: true,
37
+ * });
24
38
  * ```
25
39
  */
26
40
  var submitForm = (options) => {
27
- const { native, appContext, timeout = 1e4, ...formProps } = options;
41
+ const { native, appContext, timeout = 1e4, returnChangeRecords, debug = false, ...formProps } = options;
28
42
  return new Promise((resolve, reject) => {
29
43
  const container = document.createElement("div");
30
- container.style.display = "none";
44
+ if (!debug) container.style.display = "none";
31
45
  document.body.appendChild(container);
32
46
  let cleaned = false;
33
47
  let timer = null;
@@ -35,17 +49,106 @@ var submitForm = (options) => {
35
49
  name: "MFormSubmitWrapper",
36
50
  setup() {
37
51
  const formRef = ref(null);
38
- const stop = watch(() => formRef.value?.initialized, async (initialized) => {
39
- if (!initialized) return;
40
- stop();
52
+ const errorMsg = ref("");
53
+ const doSubmit = async () => {
41
54
  try {
42
55
  await nextTick();
43
- resolve(await formRef.value.submitForm(native));
56
+ const changeRecords = [...formRef.value?.changeRecords ?? []];
57
+ const result = await formRef.value.submitForm(native);
58
+ resolve(returnChangeRecords ? {
59
+ values: result,
60
+ changeRecords
61
+ } : result);
62
+ cleanup();
44
63
  } catch (err) {
64
+ if (debug) {
65
+ errorMsg.value = err instanceof Error ? err.message : String(err);
66
+ return;
67
+ }
45
68
  reject(err);
46
- } finally {
47
69
  cleanup();
48
70
  }
71
+ };
72
+ if (debug) {
73
+ const handleCancel = () => {
74
+ reject(/* @__PURE__ */ new Error("submitForm canceled in debug mode."));
75
+ cleanup();
76
+ };
77
+ const btnBase = {
78
+ padding: "8px 20px",
79
+ fontSize: "14px",
80
+ lineHeight: "1",
81
+ border: "1px solid #dcdfe6",
82
+ borderRadius: "4px",
83
+ cursor: "pointer"
84
+ };
85
+ return () => h("div", { style: {
86
+ position: "fixed",
87
+ inset: "0",
88
+ zIndex: "10000",
89
+ display: "flex",
90
+ alignItems: "center",
91
+ justifyContent: "center",
92
+ background: "rgba(0, 0, 0, 0.5)"
93
+ } }, [h("div", { style: {
94
+ display: "flex",
95
+ flexDirection: "column",
96
+ width: "600px",
97
+ maxWidth: "90vw",
98
+ maxHeight: "85vh",
99
+ background: "#fff",
100
+ borderRadius: "8px",
101
+ boxShadow: "0 8px 24px rgba(0, 0, 0, 0.2)",
102
+ overflow: "hidden"
103
+ } }, [
104
+ h("div", { style: {
105
+ padding: "16px 20px",
106
+ fontSize: "16px",
107
+ fontWeight: "600",
108
+ borderBottom: "1px solid #ebeef5"
109
+ } }, "submitForm 调试"),
110
+ h("div", { style: {
111
+ flex: "1",
112
+ padding: "20px",
113
+ overflow: "auto"
114
+ } }, [h(Form_default, {
115
+ ...formProps,
116
+ ref: formRef
117
+ }), errorMsg.value ? h("div", {
118
+ style: {
119
+ marginTop: "12px",
120
+ color: "#f56c6c",
121
+ fontSize: "13px",
122
+ lineHeight: "1.5"
123
+ },
124
+ innerHTML: errorMsg.value
125
+ }) : null]),
126
+ h("div", { style: {
127
+ display: "flex",
128
+ justifyContent: "flex-end",
129
+ gap: "12px",
130
+ padding: "12px 20px",
131
+ borderTop: "1px solid #ebeef5"
132
+ } }, [h("button", {
133
+ type: "button",
134
+ onClick: handleCancel,
135
+ style: { ...btnBase }
136
+ }, "取消"), h("button", {
137
+ type: "button",
138
+ onClick: doSubmit,
139
+ style: {
140
+ ...btnBase,
141
+ color: "#fff",
142
+ background: "#409eff",
143
+ borderColor: "#409eff"
144
+ }
145
+ }, "确定")])
146
+ ])]);
147
+ }
148
+ const stop = watch(() => formRef.value?.initialized, (initialized) => {
149
+ if (!initialized) return;
150
+ stop();
151
+ doSubmit();
49
152
  }, {
50
153
  flush: "post",
51
154
  immediate: true
@@ -69,7 +172,7 @@ var submitForm = (options) => {
69
172
  } catch {}
70
173
  container.parentNode?.removeChild(container);
71
174
  };
72
- if (timeout > 0) timer = setTimeout(() => {
175
+ if (timeout > 0 && !debug) timer = setTimeout(() => {
73
176
  if (!cleaned) {
74
177
  reject(/* @__PURE__ */ new Error(`submitForm timeout after ${timeout}ms: form is not initialized.`));
75
178
  cleanup();
@@ -4,7 +4,7 @@ import { getValueByKeyPath } from "@tmagic/utils";
4
4
  import dayjs from "dayjs";
5
5
  import utc from "dayjs/plugin/utc";
6
6
  //#region packages/form/src/utils/form.ts
7
- var TABLE_SELECT_TYPES = new Set(["table-select", "tableSelect"]);
7
+ var TABLE_SELECT_TYPES = /* @__PURE__ */ new Set(["table-select", "tableSelect"]);
8
8
  var isTableSelect = (type) => typeof type === "string" && TABLE_SELECT_TYPES.has(type);
9
9
  var asyncLoadConfig = (value, initValue, { asyncLoad, name, type }) => {
10
10
  if (type === "html" && typeof asyncLoad === "object" && typeof name !== "undefined") {
@@ -12,7 +12,7 @@ var asyncLoadConfig = (value, initValue, { asyncLoad, name, type }) => {
12
12
  value.asyncLoad = typeof initValue.asyncLoad === "object" ? initValue.asyncLoad : asyncLoad;
13
13
  }
14
14
  };
15
- var MULTIPLE_VALUE_TYPES = new Set([
15
+ var MULTIPLE_VALUE_TYPES = /* @__PURE__ */ new Set([
16
16
  "checkbox-group",
17
17
  "checkboxGroup",
18
18
  "table",
package/dist/style.css CHANGED
@@ -10,7 +10,10 @@
10
10
  .m-form-container.has-tip .tmagic-design-form-item {
11
11
  flex: 1;
12
12
  }
13
- .m-form-container .tmagic-design-form-item.show-diff {
13
+ .m-form-container .tmagic-design-form-item.show-after-diff {
14
+ background: rgb(225, 243, 216);
15
+ }
16
+ .m-form-container .tmagic-design-form-item.show-before-diff {
14
17
  background: #f7dadd;
15
18
  }
16
19