@tmagic/form 1.3.7 → 1.3.9

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.
@@ -1432,6 +1432,15 @@
1432
1432
  design.tMagicMessage.error(`最多新增配置不能超过${props.config.max}条`);
1433
1433
  return;
1434
1434
  }
1435
+ if (typeof props.config.beforeAddRow === "function") {
1436
+ const beforeCheckRes = props.config.beforeAddRow(mForm, {
1437
+ model: props.model[modelName.value],
1438
+ formValue: mForm?.values,
1439
+ prop: props.prop
1440
+ });
1441
+ if (!beforeCheckRes)
1442
+ return;
1443
+ }
1435
1444
  const columns = props.config.items;
1436
1445
  const enumValues = props.config.enum || [];
1437
1446
  let enumV = [];
@@ -1681,272 +1690,274 @@
1681
1690
  toggleRowSelection
1682
1691
  });
1683
1692
  return (_ctx, _cache) => {
1684
- return vue.openBlock(), vue.createBlock(vue.Teleport, {
1685
- to: "body",
1686
- disabled: !isFullscreen.value
1687
- }, [
1688
- vue.createElementVNode("div", {
1689
- ref_key: "mTable",
1690
- ref: mTable,
1691
- class: vue.normalizeClass(["m-fields-table", { "m-fields-table-item-extra": _ctx.config.itemExtra }])
1693
+ return vue.openBlock(), vue.createElementBlock("div", null, [
1694
+ (vue.openBlock(), vue.createBlock(vue.Teleport, {
1695
+ to: "body",
1696
+ disabled: !isFullscreen.value
1692
1697
  }, [
1693
- _ctx.config.extra ? (vue.openBlock(), vue.createElementBlock("span", {
1694
- key: 0,
1695
- style: { "color": "rgba(0, 0, 0, 0.45)" },
1696
- innerHTML: _ctx.config.extra
1697
- }, null, 8, _hoisted_1$9)) : vue.createCommentVNode("", true),
1698
- vue.createVNode(vue.unref(design.TMagicTooltip), {
1699
- content: "拖拽可排序",
1700
- placement: "left-start",
1701
- disabled: _ctx.config.dropSort !== true
1702
- }, {
1703
- default: vue.withCtx(() => [
1704
- _ctx.model[modelName.value] ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTable), {
1705
- ref_key: "tMagicTable",
1706
- ref: tMagicTable,
1707
- style: { "width": "100%" },
1708
- "row-key": _ctx.config.rowKey || "id",
1709
- data: data.value,
1710
- lastData: lastData.value,
1711
- border: _ctx.config.border,
1712
- "max-height": _ctx.config.maxHeight,
1713
- "default-expand-all": true,
1714
- key: updateKey.value,
1715
- onSelect: selectHandle,
1716
- onSortChange: sortChange
1717
- }, {
1718
- default: vue.withCtx(() => [
1719
- _ctx.config.itemExtra ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1720
- key: 0,
1721
- fixed: "left",
1722
- width: "30",
1723
- type: "expand"
1724
- }, {
1725
- default: vue.withCtx((scope) => [
1726
- vue.createElementVNode("span", {
1727
- innerHTML: itemExtra(_ctx.config.itemExtra, scope.$index),
1728
- class: "m-form-tip"
1729
- }, null, 8, _hoisted_2$3)
1730
- ]),
1731
- _: 1
1732
- })) : vue.createCommentVNode("", true),
1733
- vue.createVNode(vue.unref(design.TMagicTableColumn), {
1734
- label: "操作",
1735
- width: _ctx.config.operateColWidth || 55,
1736
- align: "center",
1737
- fixed: _ctx.config.fixed === false ? void 0 : "left"
1738
- }, {
1739
- default: vue.withCtx((scope) => [
1740
- vue.renderSlot(_ctx.$slots, "operateCol", { scope }),
1741
- vue.withDirectives(vue.createVNode(vue.unref(design.TMagicIcon), {
1742
- class: "m-table-delete-icon",
1743
- onClick: ($event) => removeHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1)
1744
- }, {
1745
- default: vue.withCtx(() => [
1746
- vue.createVNode(vue.unref(iconsVue.Delete))
1747
- ]),
1748
- _: 2
1749
- }, 1032, ["onClick"]), [
1750
- [vue.vShow, showDelete(scope.$index + 1 + pagecontext.value * pagesize.value - 1)]
1751
- ])
1752
- ]),
1753
- _: 3
1754
- }, 8, ["width", "fixed"]),
1755
- _ctx.sort && _ctx.model[modelName.value] && _ctx.model[modelName.value].length > 1 ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1756
- key: 1,
1757
- label: "排序",
1758
- width: "60"
1759
- }, {
1760
- default: vue.withCtx((scope) => [
1761
- scope.$index + 1 + pagecontext.value * pagesize.value - 1 !== 0 ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTooltip), {
1762
- key: 0,
1763
- content: "点击上移,双击置顶",
1764
- placement: "top"
1765
- }, {
1766
- default: vue.withCtx(() => [
1767
- vue.createVNode(vue.unref(design.TMagicButton), {
1768
- plain: "",
1769
- size: "small",
1770
- type: "primary",
1771
- icon: vue.unref(iconsVue.ArrowUp),
1772
- disabled: _ctx.disabled,
1773
- text: "",
1774
- onClick: ($event) => upHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1),
1775
- onDblclick: ($event) => topHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1)
1776
- }, null, 8, ["icon", "disabled", "onClick", "onDblclick"])
1777
- ]),
1778
- _: 2
1779
- }, 1024)) : vue.createCommentVNode("", true),
1780
- scope.$index + 1 + pagecontext.value * pagesize.value - 1 !== _ctx.model[modelName.value].length - 1 ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTooltip), {
1781
- key: 1,
1782
- content: "点击下移,双击置底",
1783
- placement: "top"
1784
- }, {
1785
- default: vue.withCtx(() => [
1786
- vue.createVNode(vue.unref(design.TMagicButton), {
1787
- plain: "",
1788
- size: "small",
1789
- type: "primary",
1790
- icon: vue.unref(iconsVue.ArrowDown),
1791
- disabled: _ctx.disabled,
1792
- text: "",
1793
- onClick: ($event) => downHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1),
1794
- onDblclick: ($event) => bottomHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1)
1795
- }, null, 8, ["icon", "disabled", "onClick", "onDblclick"])
1796
- ]),
1797
- _: 2
1798
- }, 1024)) : vue.createCommentVNode("", true)
1799
- ]),
1800
- _: 1
1801
- })) : vue.createCommentVNode("", true),
1802
- selection.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1803
- key: 2,
1804
- align: "center",
1805
- "header-align": "center",
1806
- type: "selection",
1807
- width: "45"
1808
- })) : vue.createCommentVNode("", true),
1809
- _ctx.showIndex && _ctx.config.showIndex ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1810
- key: 3,
1811
- width: "60",
1812
- label: "序号"
1813
- }, {
1814
- default: vue.withCtx((scope) => [
1815
- vue.createTextVNode(vue.toDisplayString(scope.$index + 1 + pagecontext.value * pagesize.value), 1)
1816
- ]),
1817
- _: 1
1818
- })) : vue.createCommentVNode("", true),
1819
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.config.items, (column, index) => {
1820
- return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
1821
- column.type !== "hidden" && display$1(column.display) ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1822
- prop: column.name,
1823
- width: column.width,
1824
- label: column.label,
1825
- sortable: column.sortable,
1826
- "sort-orders": ["ascending", "descending"],
1827
- key: column[vue.unref(mForm)?.keyProp || "__key"] ?? index,
1828
- "class-name": _ctx.config.dropSort === true ? "el-table__column--dropable" : ""
1829
- }, {
1830
- default: vue.withCtx((scope) => [
1831
- scope.$index > -1 ? (vue.openBlock(), vue.createBlock(_sfc_main$z, {
1832
- key: 0,
1833
- labelWidth: "0",
1834
- disabled: _ctx.disabled,
1835
- prop: getProp(scope.$index),
1836
- rules: column.rules,
1837
- config: makeConfig(column, scope.row),
1838
- model: scope.row,
1839
- lastValues: lastData.value[scope.$index],
1840
- "is-compare": _ctx.isCompare,
1841
- size: _ctx.size,
1842
- onChange: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("change", _ctx.model[modelName.value])),
1843
- onAddDiffCount: _cache[1] || (_cache[1] = ($event) => onAddDiffCount())
1844
- }, null, 8, ["disabled", "prop", "rules", "config", "model", "lastValues", "is-compare", "size"])) : vue.createCommentVNode("", true)
1845
- ]),
1846
- _: 2
1847
- }, 1032, ["prop", "width", "label", "sortable", "class-name"])) : vue.createCommentVNode("", true)
1848
- ], 64);
1849
- }), 256))
1850
- ]),
1851
- _: 3
1852
- }, 8, ["row-key", "data", "lastData", "border", "max-height"])) : vue.createCommentVNode("", true)
1853
- ]),
1854
- _: 3
1855
- }, 8, ["disabled"]),
1856
- vue.renderSlot(_ctx.$slots, "default"),
1857
- vue.createElementVNode("div", _hoisted_3, [
1858
- addable.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
1698
+ vue.createElementVNode("div", {
1699
+ ref_key: "mTable",
1700
+ ref: mTable,
1701
+ class: vue.normalizeClass(["m-fields-table", { "m-fields-table-item-extra": _ctx.config.itemExtra }])
1702
+ }, [
1703
+ _ctx.config.extra ? (vue.openBlock(), vue.createElementBlock("span", {
1859
1704
  key: 0,
1860
- size: "small",
1861
- type: "primary",
1862
- disabled: _ctx.disabled,
1863
- plain: "",
1864
- onClick: _cache[2] || (_cache[2] = ($event) => newHandler())
1705
+ style: { "color": "rgba(0, 0, 0, 0.45)" },
1706
+ innerHTML: _ctx.config.extra
1707
+ }, null, 8, _hoisted_1$9)) : vue.createCommentVNode("", true),
1708
+ vue.createVNode(vue.unref(design.TMagicTooltip), {
1709
+ content: "拖拽可排序",
1710
+ placement: "left-start",
1711
+ disabled: _ctx.config.dropSort !== true
1865
1712
  }, {
1866
1713
  default: vue.withCtx(() => [
1867
- vue.createTextVNode("新增一行")
1714
+ _ctx.model[modelName.value] ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTable), {
1715
+ ref_key: "tMagicTable",
1716
+ ref: tMagicTable,
1717
+ style: { "width": "100%" },
1718
+ "row-key": _ctx.config.rowKey || "id",
1719
+ data: data.value,
1720
+ lastData: lastData.value,
1721
+ border: _ctx.config.border,
1722
+ "max-height": _ctx.config.maxHeight,
1723
+ "default-expand-all": true,
1724
+ key: updateKey.value,
1725
+ onSelect: selectHandle,
1726
+ onSortChange: sortChange
1727
+ }, {
1728
+ default: vue.withCtx(() => [
1729
+ _ctx.config.itemExtra ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1730
+ key: 0,
1731
+ fixed: "left",
1732
+ width: "30",
1733
+ type: "expand"
1734
+ }, {
1735
+ default: vue.withCtx((scope) => [
1736
+ vue.createElementVNode("span", {
1737
+ innerHTML: itemExtra(_ctx.config.itemExtra, scope.$index),
1738
+ class: "m-form-tip"
1739
+ }, null, 8, _hoisted_2$3)
1740
+ ]),
1741
+ _: 1
1742
+ })) : vue.createCommentVNode("", true),
1743
+ vue.createVNode(vue.unref(design.TMagicTableColumn), {
1744
+ label: "操作",
1745
+ width: _ctx.config.operateColWidth || 55,
1746
+ align: "center",
1747
+ fixed: _ctx.config.fixed === false ? void 0 : "left"
1748
+ }, {
1749
+ default: vue.withCtx((scope) => [
1750
+ vue.renderSlot(_ctx.$slots, "operateCol", { scope }),
1751
+ vue.withDirectives(vue.createVNode(vue.unref(design.TMagicIcon), {
1752
+ class: "m-table-delete-icon",
1753
+ onClick: ($event) => removeHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1)
1754
+ }, {
1755
+ default: vue.withCtx(() => [
1756
+ vue.createVNode(vue.unref(iconsVue.Delete))
1757
+ ]),
1758
+ _: 2
1759
+ }, 1032, ["onClick"]), [
1760
+ [vue.vShow, showDelete(scope.$index + 1 + pagecontext.value * pagesize.value - 1)]
1761
+ ])
1762
+ ]),
1763
+ _: 3
1764
+ }, 8, ["width", "fixed"]),
1765
+ _ctx.sort && _ctx.model[modelName.value] && _ctx.model[modelName.value].length > 1 ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1766
+ key: 1,
1767
+ label: "排序",
1768
+ width: "60"
1769
+ }, {
1770
+ default: vue.withCtx((scope) => [
1771
+ scope.$index + 1 + pagecontext.value * pagesize.value - 1 !== 0 ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTooltip), {
1772
+ key: 0,
1773
+ content: "点击上移,双击置顶",
1774
+ placement: "top"
1775
+ }, {
1776
+ default: vue.withCtx(() => [
1777
+ vue.createVNode(vue.unref(design.TMagicButton), {
1778
+ plain: "",
1779
+ size: "small",
1780
+ type: "primary",
1781
+ icon: vue.unref(iconsVue.ArrowUp),
1782
+ disabled: _ctx.disabled,
1783
+ text: "",
1784
+ onClick: ($event) => upHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1),
1785
+ onDblclick: ($event) => topHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1)
1786
+ }, null, 8, ["icon", "disabled", "onClick", "onDblclick"])
1787
+ ]),
1788
+ _: 2
1789
+ }, 1024)) : vue.createCommentVNode("", true),
1790
+ scope.$index + 1 + pagecontext.value * pagesize.value - 1 !== _ctx.model[modelName.value].length - 1 ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTooltip), {
1791
+ key: 1,
1792
+ content: "点击下移,双击置底",
1793
+ placement: "top"
1794
+ }, {
1795
+ default: vue.withCtx(() => [
1796
+ vue.createVNode(vue.unref(design.TMagicButton), {
1797
+ plain: "",
1798
+ size: "small",
1799
+ type: "primary",
1800
+ icon: vue.unref(iconsVue.ArrowDown),
1801
+ disabled: _ctx.disabled,
1802
+ text: "",
1803
+ onClick: ($event) => downHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1),
1804
+ onDblclick: ($event) => bottomHandler(scope.$index + 1 + pagecontext.value * pagesize.value - 1)
1805
+ }, null, 8, ["icon", "disabled", "onClick", "onDblclick"])
1806
+ ]),
1807
+ _: 2
1808
+ }, 1024)) : vue.createCommentVNode("", true)
1809
+ ]),
1810
+ _: 1
1811
+ })) : vue.createCommentVNode("", true),
1812
+ selection.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1813
+ key: 2,
1814
+ align: "center",
1815
+ "header-align": "center",
1816
+ type: "selection",
1817
+ width: "45"
1818
+ })) : vue.createCommentVNode("", true),
1819
+ _ctx.showIndex && _ctx.config.showIndex ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1820
+ key: 3,
1821
+ width: "60",
1822
+ label: "序号"
1823
+ }, {
1824
+ default: vue.withCtx((scope) => [
1825
+ vue.createTextVNode(vue.toDisplayString(scope.$index + 1 + pagecontext.value * pagesize.value), 1)
1826
+ ]),
1827
+ _: 1
1828
+ })) : vue.createCommentVNode("", true),
1829
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.config.items, (column, index) => {
1830
+ return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
1831
+ column.type !== "hidden" && display$1(column.display) ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), {
1832
+ prop: column.name,
1833
+ width: column.width,
1834
+ label: column.label,
1835
+ sortable: column.sortable,
1836
+ "sort-orders": ["ascending", "descending"],
1837
+ key: column[vue.unref(mForm)?.keyProp || "__key"] ?? index,
1838
+ "class-name": _ctx.config.dropSort === true ? "el-table__column--dropable" : ""
1839
+ }, {
1840
+ default: vue.withCtx((scope) => [
1841
+ scope.$index > -1 ? (vue.openBlock(), vue.createBlock(_sfc_main$z, {
1842
+ key: 0,
1843
+ labelWidth: "0",
1844
+ disabled: _ctx.disabled,
1845
+ prop: getProp(scope.$index),
1846
+ rules: column.rules,
1847
+ config: makeConfig(column, scope.row),
1848
+ model: scope.row,
1849
+ lastValues: lastData.value[scope.$index],
1850
+ "is-compare": _ctx.isCompare,
1851
+ size: _ctx.size,
1852
+ onChange: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("change", _ctx.model[modelName.value])),
1853
+ onAddDiffCount: _cache[1] || (_cache[1] = ($event) => onAddDiffCount())
1854
+ }, null, 8, ["disabled", "prop", "rules", "config", "model", "lastValues", "is-compare", "size"])) : vue.createCommentVNode("", true)
1855
+ ]),
1856
+ _: 2
1857
+ }, 1032, ["prop", "width", "label", "sortable", "class-name"])) : vue.createCommentVNode("", true)
1858
+ ], 64);
1859
+ }), 256))
1860
+ ]),
1861
+ _: 3
1862
+ }, 8, ["row-key", "data", "lastData", "border", "max-height"])) : vue.createCommentVNode("", true)
1868
1863
  ]),
1869
- _: 1
1870
- }, 8, ["disabled"])) : vue.createCommentVNode("", true),
1871
- vue.createElementVNode("div", _hoisted_4, [
1872
- _ctx.enableToggleMode && _ctx.config.enableToggleMode !== false && !isFullscreen.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
1864
+ _: 3
1865
+ }, 8, ["disabled"]),
1866
+ vue.renderSlot(_ctx.$slots, "default"),
1867
+ vue.createElementVNode("div", _hoisted_3, [
1868
+ addable.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
1873
1869
  key: 0,
1874
- icon: vue.unref(iconsVue.Grid),
1875
- size: "small",
1876
- type: "primary",
1877
- onClick: toggleMode
1878
- }, {
1879
- default: vue.withCtx(() => [
1880
- vue.createTextVNode("展开配置")
1881
- ]),
1882
- _: 1
1883
- }, 8, ["icon"])) : vue.createCommentVNode("", true),
1884
- _ctx.config.enableFullscreen !== false ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
1885
- key: 1,
1886
- icon: vue.unref(iconsVue.FullScreen),
1887
1870
  size: "small",
1888
1871
  type: "primary",
1889
- onClick: toggleFullscreen
1890
- }, {
1891
- default: vue.withCtx(() => [
1892
- vue.createTextVNode(vue.toDisplayString(isFullscreen.value ? "退出全屏" : "全屏编辑"), 1)
1893
- ]),
1894
- _: 1
1895
- }, 8, ["icon"])) : vue.createCommentVNode("", true),
1896
- importable.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicUpload), {
1897
- key: 2,
1898
- style: { "display": "inline-block" },
1899
- ref_key: "excelBtn",
1900
- ref: excelBtn,
1901
- action: "/noop",
1902
- disabled: _ctx.disabled,
1903
- "on-change": excelHandler,
1904
- "auto-upload": false
1905
- }, {
1906
- default: vue.withCtx(() => [
1907
- vue.createVNode(vue.unref(design.TMagicButton), {
1908
- size: "small",
1909
- type: "success",
1910
- disabled: _ctx.disabled,
1911
- plain: ""
1912
- }, {
1913
- default: vue.withCtx(() => [
1914
- vue.createTextVNode("导入EXCEL")
1915
- ]),
1916
- _: 1
1917
- }, 8, ["disabled"])
1918
- ]),
1919
- _: 1
1920
- }, 8, ["disabled"])) : vue.createCommentVNode("", true),
1921
- importable.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
1922
- key: 3,
1923
- size: "small",
1924
- type: "warning",
1925
1872
  disabled: _ctx.disabled,
1926
1873
  plain: "",
1927
- onClick: _cache[3] || (_cache[3] = ($event) => clearHandler())
1874
+ onClick: _cache[2] || (_cache[2] = ($event) => newHandler())
1928
1875
  }, {
1929
1876
  default: vue.withCtx(() => [
1930
- vue.createTextVNode("清空")
1877
+ vue.createTextVNode("新增一行")
1931
1878
  ]),
1932
1879
  _: 1
1933
- }, 8, ["disabled"])) : vue.createCommentVNode("", true)
1934
- ])
1935
- ]),
1936
- _ctx.config.pagination ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, [
1937
- vue.createVNode(vue.unref(design.TMagicPagination), {
1938
- layout: "total, sizes, prev, pager, next, jumper",
1939
- "hide-on-single-page": _ctx.model[modelName.value].length < pagesize.value,
1940
- "current-page": pagecontext.value + 1,
1941
- "page-sizes": [pagesize.value, 60, 120, 300],
1942
- "page-size": pagesize.value,
1943
- total: _ctx.model[modelName.value].length,
1944
- onSizeChange: handleSizeChange,
1945
- onCurrentChange: handleCurrentChange
1946
- }, null, 8, ["hide-on-single-page", "current-page", "page-sizes", "page-size", "total"])
1947
- ])) : vue.createCommentVNode("", true)
1948
- ], 2)
1949
- ], 8, ["disabled"]);
1880
+ }, 8, ["disabled"])) : vue.createCommentVNode("", true),
1881
+ vue.createElementVNode("div", _hoisted_4, [
1882
+ _ctx.enableToggleMode && _ctx.config.enableToggleMode !== false && !isFullscreen.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
1883
+ key: 0,
1884
+ icon: vue.unref(iconsVue.Grid),
1885
+ size: "small",
1886
+ type: "primary",
1887
+ onClick: toggleMode
1888
+ }, {
1889
+ default: vue.withCtx(() => [
1890
+ vue.createTextVNode("展开配置")
1891
+ ]),
1892
+ _: 1
1893
+ }, 8, ["icon"])) : vue.createCommentVNode("", true),
1894
+ _ctx.config.enableFullscreen !== false ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
1895
+ key: 1,
1896
+ icon: vue.unref(iconsVue.FullScreen),
1897
+ size: "small",
1898
+ type: "primary",
1899
+ onClick: toggleFullscreen
1900
+ }, {
1901
+ default: vue.withCtx(() => [
1902
+ vue.createTextVNode(vue.toDisplayString(isFullscreen.value ? "退出全屏" : "全屏编辑"), 1)
1903
+ ]),
1904
+ _: 1
1905
+ }, 8, ["icon"])) : vue.createCommentVNode("", true),
1906
+ importable.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicUpload), {
1907
+ key: 2,
1908
+ style: { "display": "inline-block" },
1909
+ ref_key: "excelBtn",
1910
+ ref: excelBtn,
1911
+ action: "/noop",
1912
+ disabled: _ctx.disabled,
1913
+ "on-change": excelHandler,
1914
+ "auto-upload": false
1915
+ }, {
1916
+ default: vue.withCtx(() => [
1917
+ vue.createVNode(vue.unref(design.TMagicButton), {
1918
+ size: "small",
1919
+ type: "success",
1920
+ disabled: _ctx.disabled,
1921
+ plain: ""
1922
+ }, {
1923
+ default: vue.withCtx(() => [
1924
+ vue.createTextVNode("导入EXCEL")
1925
+ ]),
1926
+ _: 1
1927
+ }, 8, ["disabled"])
1928
+ ]),
1929
+ _: 1
1930
+ }, 8, ["disabled"])) : vue.createCommentVNode("", true),
1931
+ importable.value ? (vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
1932
+ key: 3,
1933
+ size: "small",
1934
+ type: "warning",
1935
+ disabled: _ctx.disabled,
1936
+ plain: "",
1937
+ onClick: _cache[3] || (_cache[3] = ($event) => clearHandler())
1938
+ }, {
1939
+ default: vue.withCtx(() => [
1940
+ vue.createTextVNode("清空")
1941
+ ]),
1942
+ _: 1
1943
+ }, 8, ["disabled"])) : vue.createCommentVNode("", true)
1944
+ ])
1945
+ ]),
1946
+ _ctx.config.pagination ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, [
1947
+ vue.createVNode(vue.unref(design.TMagicPagination), {
1948
+ layout: "total, sizes, prev, pager, next, jumper",
1949
+ "hide-on-single-page": _ctx.model[modelName.value].length < pagesize.value,
1950
+ "current-page": pagecontext.value + 1,
1951
+ "page-sizes": [pagesize.value, 60, 120, 300],
1952
+ "page-size": pagesize.value,
1953
+ total: _ctx.model[modelName.value].length,
1954
+ onSizeChange: handleSizeChange,
1955
+ onCurrentChange: handleCurrentChange
1956
+ }, null, 8, ["hide-on-single-page", "current-page", "page-sizes", "page-size", "total"])
1957
+ ])) : vue.createCommentVNode("", true)
1958
+ ], 2)
1959
+ ], 8, ["disabled"]))
1960
+ ]);
1950
1961
  };
1951
1962
  }
1952
1963
  });
@@ -2787,7 +2798,7 @@
2787
2798
  popperClass: {},
2788
2799
  extendState: {}
2789
2800
  },
2790
- emits: ["change", "field-input", "field-change"],
2801
+ emits: ["change", "error", "field-input", "field-change"],
2791
2802
  setup(__props, { expose: __expose, emit: __emit }) {
2792
2803
  const props = __props;
2793
2804
  const emit = __emit;
@@ -2877,6 +2888,7 @@
2877
2888
  await tMagicForm.value?.validate();
2878
2889
  return native ? values.value : lodashEs.cloneDeep(vue.toRaw(values.value));
2879
2890
  } catch (invalidFields) {
2891
+ emit("error", invalidFields);
2880
2892
  const error = [];
2881
2893
  Object.entries(invalidFields).forEach(([, ValidateError]) => {
2882
2894
  ValidateError.forEach(({ field, message }) => {