@tmagic/form 1.0.0-beta.1 → 1.0.0-beta.10

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 (43) hide show
  1. package/LICENSE +5432 -0
  2. package/dist/style.css +0 -1
  3. package/dist/tmagic-form.es.js +62 -40
  4. package/dist/tmagic-form.es.js.map +1 -1
  5. package/dist/tmagic-form.umd.js +62 -40
  6. package/dist/tmagic-form.umd.js.map +1 -1
  7. package/dist/types/src/containers/Container.vue.d.ts +1 -1
  8. package/dist/types/src/containers/Fieldset.vue.d.ts +1 -1
  9. package/dist/types/src/containers/GroupList.vue.d.ts +1 -1
  10. package/dist/types/src/containers/GroupListItem.vue.d.ts +1 -1
  11. package/dist/types/src/containers/Panel.vue.d.ts +1 -1
  12. package/dist/types/src/containers/Row.vue.d.ts +1 -1
  13. package/dist/types/src/containers/Step.vue.d.ts +1 -1
  14. package/dist/types/src/containers/Tabs.vue.d.ts +2 -2
  15. package/dist/types/src/fields/Checkbox.vue.d.ts +2 -2
  16. package/dist/types/src/fields/CheckboxGroup.vue.d.ts +2 -2
  17. package/dist/types/src/fields/Date.vue.d.ts +2 -2
  18. package/dist/types/src/fields/DateTime.vue.d.ts +2 -2
  19. package/dist/types/src/fields/Daterange.vue.d.ts +2 -2
  20. package/dist/types/src/fields/DynamicField.vue.d.ts +2 -2
  21. package/dist/types/src/fields/Number.vue.d.ts +2 -2
  22. package/dist/types/src/fields/RadioGroup.vue.d.ts +2 -2
  23. package/dist/types/src/fields/Switch.vue.d.ts +2 -2
  24. package/dist/types/src/fields/Text.vue.d.ts +2 -2
  25. package/dist/types/src/fields/Textarea.vue.d.ts +2 -2
  26. package/dist/types/src/fields/Time.vue.d.ts +2 -2
  27. package/dist/types/src/schema.d.ts +2 -0
  28. package/package.json +10 -8
  29. package/src/Form.vue +38 -29
  30. package/src/FormDialog.vue +3 -0
  31. package/src/containers/Container.vue +20 -7
  32. package/src/containers/Table.vue +8 -6
  33. package/src/containers/Tabs.vue +4 -0
  34. package/src/fields/Select.vue +3 -0
  35. package/src/fields/Text.vue +1 -1
  36. package/src/schema.ts +2 -0
  37. package/src/theme/table.scss +0 -1
  38. package/dist/types/src/Form.vue.d.ts +0 -304
  39. package/dist/types/src/FormDialog.vue.d.ts +0 -641
  40. package/dist/types/src/containers/Table.vue.d.ts +0 -1401
  41. package/dist/types/src/fields/Cascader.vue.d.ts +0 -1748
  42. package/dist/types/src/fields/Link.vue.d.ts +0 -1365
  43. package/dist/types/src/fields/Select.vue.d.ts +0 -975
package/dist/style.css CHANGED
@@ -136,7 +136,6 @@ fieldset.m-fieldset .m-form-tip {
136
136
  background-color: #f2f2f2 !important;
137
137
  color: #333 !important;
138
138
  }
139
- .m-fields-table .el-table td,
140
139
  .m-fields-table .el-table th {
141
140
  padding: 0 !important;
142
141
  }
@@ -1,7 +1,7 @@
1
- import { toRaw, defineComponent, inject, ref, computed, resolveComponent, watchEffect, openBlock, createElementBlock, normalizeStyle, normalizeClass, createBlock, resolveDynamicComponent, Fragment, createVNode, withCtx, createElementVNode, createCommentVNode, renderList, createTextVNode, toDisplayString, withDirectives, vShow, renderSlot, onMounted, toRefs, getCurrentInstance, watch, unref, reactive, onBeforeUnmount, vModelText, onBeforeMount, resolveDirective, createSlots, provide } from 'vue';
2
- import { cloneDeep } from 'lodash-es';
3
- import { CaretRight, CaretBottom, Delete, ArrowDown, ArrowUp } from '@element-plus/icons';
4
- import { ElMessage, ElForm } from 'element-plus';
1
+ import { toRaw, defineComponent, inject, ref, computed, resolveComponent, watchEffect, openBlock, createElementBlock, normalizeStyle, normalizeClass, createBlock, resolveDynamicComponent, Fragment, createVNode, withCtx, createElementVNode, createCommentVNode, renderList, createTextVNode, toDisplayString, withDirectives, vShow, renderSlot, onMounted, toRefs, getCurrentInstance, watch, unref, reactive, onBeforeUnmount, vModelText, onBeforeMount, resolveDirective, createSlots, withModifiers, provide } from 'vue';
2
+ import { WarningFilled, CaretRight, CaretBottom, Delete, ArrowDown, ArrowUp, FullScreen, Grid } from '@element-plus/icons';
3
+ import { cloneDeep, isEqual } from 'lodash-es';
4
+ import { ElMessage } from 'element-plus';
5
5
  import Sortable from 'sortablejs';
6
6
  import { asyncLoadJs, sleep, datetimeFormatter } from '@tmagic/utils';
7
7
 
@@ -171,6 +171,7 @@ var _export_sfc = (sfc, props) => {
171
171
 
172
172
  const _sfc_main$s = defineComponent({
173
173
  name: "m-form-container",
174
+ components: { WarningFilled },
174
175
  props: {
175
176
  labelWidth: String,
176
177
  expandMore: Boolean,
@@ -264,9 +265,14 @@ const _sfc_main$s = defineComponent({
264
265
  };
265
266
  const onChangeHandler = async function(v, key2) {
266
267
  const { filter, onChange, trim, name: name2, dynamicKey } = props.config;
267
- let value = filterHandler(filter, v);
268
- value = await changeHandler(onChange, value) ?? value;
269
- value = trimHandler(trim, value) ?? value;
268
+ let value = v;
269
+ try {
270
+ value = filterHandler(filter, v);
271
+ value = await changeHandler(onChange, value) ?? value;
272
+ value = trimHandler(trim, value) ?? value;
273
+ } catch (e) {
274
+ console.error(e);
275
+ }
270
276
  if ((name2 || name2 === 0) && props.model !== value && (v !== value || props.model[name2] !== value)) {
271
277
  props.model[name2] = value;
272
278
  }
@@ -296,9 +302,8 @@ const _sfc_main$s = defineComponent({
296
302
  const _hoisted_1$g = ["innerHTML"];
297
303
  const _hoisted_2$7 = ["innerHTML"];
298
304
  const _hoisted_3$7 = ["innerHTML"];
299
- const _hoisted_4$6 = /* @__PURE__ */ createElementVNode("i", { class: "el-icon-warning" }, null, -1);
300
- const _hoisted_5$4 = ["innerHTML"];
301
- const _hoisted_6$3 = {
305
+ const _hoisted_4$6 = ["innerHTML"];
306
+ const _hoisted_5$4 = {
302
307
  key: 4,
303
308
  style: { "text-align": "center" }
304
309
  };
@@ -306,11 +311,13 @@ function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) {
306
311
  const _component_m_fields_hidden = resolveComponent("m-fields-hidden");
307
312
  const _component_el_tooltip = resolveComponent("el-tooltip");
308
313
  const _component_el_form_item = resolveComponent("el-form-item");
314
+ const _component_warning_filled = resolveComponent("warning-filled");
315
+ const _component_el_icon = resolveComponent("el-icon");
309
316
  const _component_m_form_container = resolveComponent("m-form-container");
310
317
  const _component_el_button = resolveComponent("el-button");
311
318
  return _ctx.config ? (openBlock(), createElementBlock("div", {
312
319
  key: 0,
313
- style: normalizeStyle(_ctx.config.tip ? "display: flex" : ""),
320
+ style: normalizeStyle(_ctx.config.tip ? "display: flex;align-items: baseline;" : ""),
314
321
  class: normalizeClass([_ctx.config.className, "m-form-container"])
315
322
  }, [
316
323
  _ctx.type === "hidden" ? (openBlock(), createBlock(_component_m_fields_hidden, {
@@ -381,16 +388,20 @@ function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) {
381
388
  }, 8, ["style", "prop", "label-width", "rules"]),
382
389
  _ctx.config.tip ? (openBlock(), createBlock(_component_el_tooltip, {
383
390
  key: 0,
384
- placement: "top",
385
- style: { "line-height": "40px", "margin-left": "5px" }
391
+ placement: "top"
386
392
  }, {
387
393
  content: withCtx(() => [
388
394
  createElementVNode("div", {
389
395
  innerHTML: _ctx.config.tip
390
- }, null, 8, _hoisted_5$4)
396
+ }, null, 8, _hoisted_4$6)
391
397
  ]),
392
398
  default: withCtx(() => [
393
- _hoisted_4$6
399
+ createVNode(_component_el_icon, { style: { "line-height": "40px", "margin-left": "5px" } }, {
400
+ default: withCtx(() => [
401
+ createVNode(_component_warning_filled)
402
+ ]),
403
+ _: 1
404
+ })
394
405
  ]),
395
406
  _: 1
396
407
  })) : createCommentVNode("", true)
@@ -409,7 +420,7 @@ function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) {
409
420
  }, null, 8, ["model", "config", "size", "step-active", "expand-more", "label-width", "prop", "onChange"]);
410
421
  }), 128)) : createCommentVNode("", true)
411
422
  ], 64)) : createCommentVNode("", true),
412
- _ctx.config.expand && _ctx.type !== "fieldset" ? (openBlock(), createElementBlock("div", _hoisted_6$3, [
423
+ _ctx.config.expand && _ctx.type !== "fieldset" ? (openBlock(), createElementBlock("div", _hoisted_5$4, [
413
424
  createVNode(_component_el_button, {
414
425
  type: "text",
415
426
  onClick: _ctx.expandHandler
@@ -1359,6 +1370,8 @@ const _sfc_main$l = defineComponent({
1359
1370
  ArrowDown,
1360
1371
  ArrowUp,
1361
1372
  Delete,
1373
+ FullScreen,
1374
+ Grid,
1362
1375
  data: computed(() => props.model[modelName.value].filter((item, index) => index >= pagecontext.value * pagesize.value && index + 1 <= (pagecontext.value + 1) * pagesize.value)),
1363
1376
  addable: computed(() => {
1364
1377
  if (!props.model[modelName.value].length) {
@@ -1607,7 +1620,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1607
1620
  })) : createCommentVNode("", true),
1608
1621
  createVNode(_component_el_table_column, {
1609
1622
  label: "\u64CD\u4F5C",
1610
- width: "50",
1623
+ width: "60",
1611
1624
  fixed: _ctx.config.fixed === false ? void 0 : "left"
1612
1625
  }, {
1613
1626
  default: withCtx((scope) => [
@@ -1625,7 +1638,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1625
1638
  _ctx.sort && _ctx.model[_ctx.modelName] && _ctx.model[_ctx.modelName].length > 1 ? (openBlock(), createBlock(_component_el_table_column, {
1626
1639
  key: 1,
1627
1640
  label: "\u6392\u5E8F",
1628
- width: "70"
1641
+ width: "60"
1629
1642
  }, {
1630
1643
  default: withCtx((scope) => [
1631
1644
  scope.$index + 1 + _ctx.pagecontext * _ctx.pagesize - 1 !== 0 ? (openBlock(), createBlock(_component_el_tooltip, {
@@ -1673,7 +1686,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1673
1686
  width: "45"
1674
1687
  })) : createCommentVNode("", true),
1675
1688
  createVNode(_component_el_table_column, {
1676
- width: "50",
1689
+ width: "60",
1677
1690
  label: "\u5E8F\u53F7"
1678
1691
  }, {
1679
1692
  default: withCtx((scope) => [
@@ -1730,7 +1743,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1730
1743
  _hoisted_5,
1731
1744
  _ctx.enableToggleMode && !_ctx.isFullscreen ? (openBlock(), createBlock(_component_el_button, {
1732
1745
  key: 1,
1733
- icon: "el-icon-s-grid",
1746
+ icon: _ctx.Grid,
1734
1747
  size: "small",
1735
1748
  onClick: _ctx.toggleMode
1736
1749
  }, {
@@ -1738,10 +1751,10 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1738
1751
  _hoisted_6
1739
1752
  ]),
1740
1753
  _: 1
1741
- }, 8, ["onClick"])) : createCommentVNode("", true),
1754
+ }, 8, ["icon", "onClick"])) : createCommentVNode("", true),
1742
1755
  _ctx.config.enableFullscreen !== false ? (openBlock(), createBlock(_component_el_button, {
1743
1756
  key: 2,
1744
- icon: "el-icon-s-grid",
1757
+ icon: _ctx.FullScreen,
1745
1758
  size: "small",
1746
1759
  onClick: _ctx.toggleFullscreen
1747
1760
  }, {
@@ -1749,7 +1762,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1749
1762
  createTextVNode(toDisplayString(_ctx.isFullscreen ? "\u9000\u51FA\u5168\u5C4F" : "\u5168\u5C4F\u7F16\u8F91"), 1)
1750
1763
  ]),
1751
1764
  _: 1
1752
- }, 8, ["onClick"])) : createCommentVNode("", true),
1765
+ }, 8, ["icon", "onClick"])) : createCommentVNode("", true),
1753
1766
  _ctx.importable ? (openBlock(), createBlock(_component_el_upload, {
1754
1767
  key: 3,
1755
1768
  ref: "excelBtn",
@@ -1815,6 +1828,7 @@ const getActive = (mForm, props, activeTabName) => {
1815
1828
  };
1816
1829
  const tabClickHandler = (mForm, tab, props) => {
1817
1830
  const { config, model, prop } = props;
1831
+ tab.name = tab.paneName;
1818
1832
  if (typeof config.onTabClick === "function") {
1819
1833
  config.onTabClick(mForm, tab, { model, formValue: mForm?.values, prop });
1820
1834
  }
@@ -2934,6 +2948,7 @@ const _sfc_main$6 = defineComponent({
2934
2948
  watch(() => mForm?.values, () => {
2935
2949
  typeof props.config.options === "function" && Promise.resolve(props.config.options(mForm, {
2936
2950
  model: props.model,
2951
+ prop: props.prop,
2937
2952
  formValues: mForm?.values,
2938
2953
  formValue: mForm?.values
2939
2954
  })).then((data) => {
@@ -2983,6 +2998,7 @@ const _sfc_main$6 = defineComponent({
2983
2998
  remote,
2984
2999
  options,
2985
3000
  moreLoadingVisible,
3001
+ popperClass: mForm?.popperClass,
2986
3002
  getRequestFuc() {
2987
3003
  return getConfig("request");
2988
3004
  },
@@ -3036,6 +3052,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
3036
3052
  ref: "select",
3037
3053
  clearable: "",
3038
3054
  filterable: "",
3055
+ "popper-class": `m-select-popper ${_ctx.popperClass}`,
3039
3056
  size: _ctx.size,
3040
3057
  remote: _ctx.remote,
3041
3058
  placeholder: _ctx.config.placeholder,
@@ -3079,7 +3096,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
3079
3096
  ]) : createCommentVNode("", true)
3080
3097
  ]),
3081
3098
  _: 1
3082
- }, 8, ["modelValue", "size", "remote", "placeholder", "multiple", "value-key", "allow-create", "disabled", "remote-method", "onChange", "onVisibleChange"])), [
3099
+ }, 8, ["modelValue", "popper-class", "size", "remote", "placeholder", "multiple", "value-key", "allow-create", "disabled", "remote-method", "onChange", "onVisibleChange"])), [
3083
3100
  [_directive_loading, _ctx.loading]
3084
3101
  ]) : createCommentVNode("", true);
3085
3102
  }
@@ -3250,7 +3267,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
3250
3267
  typeof _ctx.config.append === "object" && _ctx.config.append.type === "button" ? (openBlock(), createBlock(_component_el_button, {
3251
3268
  key: 1,
3252
3269
  style: { "color": "#409eff" },
3253
- onClick: _ctx.buttonClickHandler
3270
+ onClick: withModifiers(_ctx.buttonClickHandler, ["prevent"])
3254
3271
  }, {
3255
3272
  default: withCtx(() => [
3256
3273
  createTextVNode(toDisplayString(_ctx.config.append.text), 1)
@@ -3355,7 +3372,6 @@ var Time = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2]])
3355
3372
 
3356
3373
  const _sfc_main$1 = defineComponent({
3357
3374
  name: "m-form",
3358
- components: { ElForm, MContainer: Container },
3359
3375
  props: {
3360
3376
  initValues: {
3361
3377
  type: Object,
@@ -3388,8 +3404,7 @@ const _sfc_main$1 = defineComponent({
3388
3404
  default: () => 1
3389
3405
  },
3390
3406
  size: {
3391
- type: String,
3392
- default: "small"
3407
+ type: String
3393
3408
  },
3394
3409
  inline: {
3395
3410
  type: Boolean,
@@ -3402,6 +3417,9 @@ const _sfc_main$1 = defineComponent({
3402
3417
  keyProp: {
3403
3418
  type: String,
3404
3419
  default: "__key"
3420
+ },
3421
+ popperClass: {
3422
+ type: String
3405
3423
  }
3406
3424
  },
3407
3425
  emits: ["change", "field-input", "field-change"],
@@ -3413,6 +3431,7 @@ const _sfc_main$1 = defineComponent({
3413
3431
  const requestFuc = getConfig("request");
3414
3432
  const formState = reactive({
3415
3433
  keyProp: props.keyProp,
3434
+ popperClass: props.popperClass,
3416
3435
  config: props.config,
3417
3436
  initValues: props.initValues,
3418
3437
  parentValues: props.parentValues,
@@ -3432,8 +3451,10 @@ const _sfc_main$1 = defineComponent({
3432
3451
  }
3433
3452
  });
3434
3453
  provide("mForm", formState);
3435
- watchEffect(() => {
3436
- initialized.value = false;
3454
+ watch([() => props.config, () => props.initValues], ([config], [preConfig]) => {
3455
+ if (!isEqual(toRaw(config), toRaw(preConfig))) {
3456
+ initialized.value = false;
3457
+ }
3437
3458
  initValue(formState, {
3438
3459
  initValues: props.initValues,
3439
3460
  config: props.config
@@ -3441,7 +3462,7 @@ const _sfc_main$1 = defineComponent({
3441
3462
  values.value = value;
3442
3463
  initialized.value = true;
3443
3464
  });
3444
- });
3465
+ }, { immediate: true });
3445
3466
  return {
3446
3467
  initialized,
3447
3468
  values,
@@ -3474,10 +3495,9 @@ const _sfc_main$1 = defineComponent({
3474
3495
  }
3475
3496
  });
3476
3497
  function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
3477
- const _component_MContainer = resolveComponent("MContainer");
3478
- const _component_ElForm = resolveComponent("ElForm");
3479
- return _ctx.initialized && Array.isArray(_ctx.config) ? (openBlock(), createBlock(_component_ElForm, {
3480
- key: 0,
3498
+ const _component_m_form_container = resolveComponent("m-form-container");
3499
+ const _component_el_form = resolveComponent("el-form");
3500
+ return openBlock(), createBlock(_component_el_form, {
3481
3501
  class: "m-form",
3482
3502
  ref: "elForm",
3483
3503
  model: _ctx.values,
@@ -3488,8 +3508,8 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
3488
3508
  "label-position": _ctx.labelPosition
3489
3509
  }, {
3490
3510
  default: withCtx(() => [
3491
- (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.config, (item, index) => {
3492
- return openBlock(), createBlock(_component_MContainer, {
3511
+ _ctx.initialized && Array.isArray(_ctx.config) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(_ctx.config, (item, index) => {
3512
+ return openBlock(), createBlock(_component_m_form_container, {
3493
3513
  key: item[_ctx.keyProp] ?? index,
3494
3514
  config: item,
3495
3515
  model: _ctx.values,
@@ -3498,10 +3518,10 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
3498
3518
  size: _ctx.size,
3499
3519
  onChange: _ctx.changeHandler
3500
3520
  }, null, 8, ["config", "model", "label-width", "step-active", "size", "onChange"]);
3501
- }), 128))
3521
+ }), 128)) : createCommentVNode("", true)
3502
3522
  ]),
3503
3523
  _: 1
3504
- }, 8, ["model", "label-width", "disabled", "style", "inline", "label-position"])) : createCommentVNode("", true);
3524
+ }, 8, ["model", "label-width", "disabled", "style", "inline", "label-position"]);
3505
3525
  }
3506
3526
  var Form = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1]]);
3507
3527
 
@@ -3521,6 +3541,7 @@ const _sfc_main = defineComponent({
3521
3541
  default: () => []
3522
3542
  },
3523
3543
  labelWidth: [Number, String],
3544
+ size: String,
3524
3545
  confirmText: {
3525
3546
  type: String,
3526
3547
  default: "\u786E\u5B9A"
@@ -3691,11 +3712,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
3691
3712
  modelValue: _ctx.stepActive,
3692
3713
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.stepActive = $event),
3693
3714
  ref: "form",
3715
+ size: _ctx.size,
3694
3716
  config: _ctx.config,
3695
3717
  "init-values": _ctx.values,
3696
3718
  "label-width": _ctx.labelWidth,
3697
3719
  onChange: _ctx.changeHandler
3698
- }, null, 8, ["modelValue", "config", "init-values", "label-width", "onChange"]),
3720
+ }, null, 8, ["modelValue", "size", "config", "init-values", "label-width", "onChange"]),
3699
3721
  renderSlot(_ctx.$slots, "default")
3700
3722
  ], 4)
3701
3723
  ]),