@tmagic/table 1.2.0-beta.7 → 1.2.0-beta.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.
@@ -1,11 +1,12 @@
1
- import { defineComponent, openBlock, createBlock, unref, withCtx, createElementBlock, Fragment, renderList, withDirectives, vShow, createVNode, createTextVNode, createCommentVNode, toDisplayString, resolveComponent, createElementVNode, ref, computed, resolveDirective, resolveDynamicComponent } from 'vue';
1
+ import { defineComponent, openBlock, createBlock, unref, withCtx, createElementBlock, Fragment, renderList, withDirectives, createElementVNode, vShow, createVNode, createTextVNode, createCommentVNode, toDisplayString, resolveComponent, ref, computed, resolveDirective, resolveDynamicComponent } from 'vue';
2
2
  import { cloneDeep } from 'lodash-es';
3
- import { TMagicTableColumn, TMagicButton, tMagicMessage, tMagicMessageBox, TMagicPopover, TMagicForm, TMagicTag, getConfig, TMagicTable } from '@tmagic/design';
3
+ import { TMagicTableColumn, TMagicButton, tMagicMessage, TMagicPopover, TMagicForm, TMagicTag, getConfig, TMagicTable } from '@tmagic/design';
4
4
  import { MForm } from '@tmagic/form';
5
5
  import { datetimeFormatter } from '@tmagic/utils';
6
6
 
7
- const _hoisted_1$1 = /* @__PURE__ */ createTextVNode("\u4FDD\u5B58");
8
- const _hoisted_2$1 = /* @__PURE__ */ createTextVNode("\u53D6\u6D88");
7
+ const _hoisted_1$1 = ["innerHTML"];
8
+ const _hoisted_2$1 = /* @__PURE__ */ createTextVNode("\u4FDD\u5B58");
9
+ const _hoisted_3$1 = /* @__PURE__ */ createTextVNode("\u53D6\u6D88");
9
10
  const _sfc_main$4 = /* @__PURE__ */ defineComponent({
10
11
  __name: "ActionsColumn",
11
12
  props: {
@@ -23,48 +24,15 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
23
24
  }
24
25
  return true;
25
26
  };
26
- const success = (msg, action, row) => {
27
- tMagicMessage.success(msg);
28
- action.after?.(row);
29
- };
30
- const error = (msg) => tMagicMessage.error(msg);
31
- const deleteAction = async (action, row) => {
32
- await tMagicMessageBox.confirm(`\u786E\u8BA4\u5220\u9664${row[action.name || "c_name"]}(${row[props.rowkeyName]})?`, "\u63D0\u793A", {
33
- confirmButtonText: "\u786E\u5B9A",
34
- cancelButtonText: "\u53D6\u6D88",
35
- type: "warning"
36
- });
37
- const res = await action.handler?.(row);
38
- if (res.ret === 0) {
39
- success("\u5220\u9664\u6210\u529F!", action, row);
40
- } else {
41
- error(res.msg || "\u5220\u9664\u5931\u8D25");
42
- }
43
- };
44
- const copyHandler = async (action, row) => {
45
- await tMagicMessageBox.confirm(`\u786E\u5B9A\u590D\u5236${row[action.name || "c_name"]}(${row.c_id})?`, "\u63D0\u793A", {
46
- confirmButtonText: "\u786E\u5B9A",
47
- cancelButtonText: "\u53D6\u6D88",
48
- type: "warning"
49
- });
50
- try {
51
- const res = await action.handler?.(row);
52
- if (res.ret === 0) {
53
- success("\u590D\u5236\u6210\u529F!", action, row);
54
- } else {
55
- error(`\u590D\u5236\u5931\u8D25!${res.msg}`);
56
- }
57
- } catch (e) {
58
- error("\u590D\u5236\u5931\u8D25!");
27
+ const formatter = (fuc, row) => {
28
+ if (typeof fuc === "function") {
29
+ return fuc(row);
59
30
  }
31
+ return fuc;
60
32
  };
61
33
  const actionHandler = async (action, row, index) => {
62
34
  await action.before?.(row);
63
- if (action.type === "delete") {
64
- await deleteAction(action, row);
65
- } else if (action.type === "copy") {
66
- await copyHandler(action, row);
67
- } else if (action.type === "edit") {
35
+ if (action.type === "edit") {
68
36
  props.editState[index] = row;
69
37
  } else {
70
38
  await action.handler?.(row);
@@ -105,14 +73,21 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
105
73
  default: withCtx((scope) => [
106
74
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.config.actions, (action, actionIndex) => {
107
75
  return withDirectives((openBlock(), createBlock(unref(TMagicButton), {
108
- innerHTML: action.text,
109
76
  class: "action-btn",
110
77
  text: "",
111
78
  type: "primary",
112
79
  size: "small",
80
+ icon: action.icon,
113
81
  key: actionIndex,
114
82
  onClick: ($event) => actionHandler(action, scope.row, scope.$index)
115
- }, null, 8, ["innerHTML", "onClick"])), [
83
+ }, {
84
+ default: withCtx(() => [
85
+ createElementVNode("span", {
86
+ innerHTML: formatter(action.text, scope.row)
87
+ }, null, 8, _hoisted_1$1)
88
+ ]),
89
+ _: 2
90
+ }, 1032, ["icon", "onClick"])), [
116
91
  [vShow, display(action.display, scope.row) && !__props.editState[scope.$index]]
117
92
  ]);
118
93
  }), 128)),
@@ -124,7 +99,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
124
99
  onClick: ($event) => save(scope.$index, __props.config)
125
100
  }, {
126
101
  default: withCtx(() => [
127
- _hoisted_1$1
102
+ _hoisted_2$1
128
103
  ]),
129
104
  _: 2
130
105
  }, 1032, ["onClick"]), [
@@ -138,7 +113,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
138
113
  onClick: ($event) => __props.editState[scope.$index] = void 0
139
114
  }, {
140
115
  default: withCtx(() => [
141
- _hoisted_2$1
116
+ _hoisted_3$1
142
117
  ]),
143
118
  _: 2
144
119
  }, 1032, ["onClick"]), [
@@ -242,11 +217,12 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
242
217
  }
243
218
  });
244
219
 
245
- const _hoisted_1 = ["href"];
246
- const _hoisted_2 = ["src"];
247
- const _hoisted_3 = ["href"];
248
- const _hoisted_4 = /* @__PURE__ */ createTextVNode("\u6269\u5C55\u914D\u7F6E");
249
- const _hoisted_5 = ["innerHTML"];
220
+ const _hoisted_1 = ["innerHTML"];
221
+ const _hoisted_2 = ["href"];
222
+ const _hoisted_3 = ["src"];
223
+ const _hoisted_4 = ["href"];
224
+ const _hoisted_5 = /* @__PURE__ */ createTextVNode("\u6269\u5C55\u914D\u7F6E");
225
+ const _hoisted_6 = ["innerHTML"];
250
226
  const _sfc_main$1 = /* @__PURE__ */ defineComponent({
251
227
  __name: "TextColumn",
252
228
  props: {
@@ -288,7 +264,9 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
288
264
  onClick: ($event) => __props.config.handler?.(scope.row)
289
265
  }, {
290
266
  default: withCtx(() => [
291
- createTextVNode(toDisplayString(unref(formatter)(__props.config, scope.row)), 1)
267
+ createElementVNode("span", {
268
+ innerHTML: unref(formatter)(__props.config, scope.row)
269
+ }, null, 8, _hoisted_1)
292
270
  ]),
293
271
  _: 2
294
272
  }, 1032, ["onClick"])) : __props.config.action === "img" && __props.config.prop ? (openBlock(), createElementBlock("a", {
@@ -299,13 +277,13 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
299
277
  createElementVNode("img", {
300
278
  src: scope.row[__props.config.prop],
301
279
  height: "50"
302
- }, null, 8, _hoisted_2)
303
- ], 8, _hoisted_1)) : __props.config.action === "link" && __props.config.prop ? (openBlock(), createElementBlock("a", {
280
+ }, null, 8, _hoisted_3)
281
+ ], 8, _hoisted_2)) : __props.config.action === "link" && __props.config.prop ? (openBlock(), createElementBlock("a", {
304
282
  key: 3,
305
283
  target: "_blank",
306
284
  href: scope.row[__props.config.prop],
307
285
  class: "keep-all"
308
- }, toDisplayString(scope.row[__props.config.prop]), 9, _hoisted_3)) : __props.config.action === "tip" ? (openBlock(), createBlock(_component_el_tooltip, {
286
+ }, toDisplayString(scope.row[__props.config.prop]), 9, _hoisted_4)) : __props.config.action === "tip" ? (openBlock(), createBlock(_component_el_tooltip, {
309
287
  key: 4,
310
288
  placement: "left"
311
289
  }, {
@@ -318,7 +296,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
318
296
  type: "primary"
319
297
  }, {
320
298
  default: withCtx(() => [
321
- _hoisted_4
299
+ _hoisted_5
322
300
  ]),
323
301
  _: 1
324
302
  })
@@ -336,7 +314,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
336
314
  }, 1032, ["type"])) : (openBlock(), createElementBlock("div", {
337
315
  key: 6,
338
316
  innerHTML: unref(formatter)(__props.config, scope.row)
339
- }, null, 8, _hoisted_5))
317
+ }, null, 8, _hoisted_6))
340
318
  ]),
341
319
  _: 1
342
320
  }, 8, ["label", "width", "fixed", "sortable", "prop"]);
@@ -1 +1 @@
1
- {"version":3,"file":"tmagic-table.mjs","sources":["../src/ActionsColumn.vue","../src/utils.ts","../src/Table.vue","../src/index.ts"],"sourcesContent":["<template>\n <TMagicTableColumn :label=\"config.label\" :width=\"config.width\" :fixed=\"config.fixed\">\n <template v-slot=\"scope\">\n <TMagicButton\n v-for=\"(action, actionIndex) in config.actions\"\n v-show=\"display(action.display, scope.row) && !editState[scope.$index]\"\n v-html=\"action.text\"\n class=\"action-btn\"\n text\n type=\"primary\"\n size=\"small\"\n :key=\"actionIndex\"\n @click=\"actionHandler(action, scope.row, scope.$index)\"\n ></TMagicButton>\n <TMagicButton\n class=\"action-btn\"\n v-show=\"editState[scope.$index]\"\n text\n type=\"primary\"\n size=\"small\"\n @click=\"save(scope.$index, config)\"\n >保存</TMagicButton\n >\n <TMagicButton\n class=\"action-btn\"\n v-show=\"editState[scope.$index]\"\n text\n type=\"primary\"\n size=\"small\"\n @click=\"editState[scope.$index] = undefined\"\n >取消</TMagicButton\n >\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup>\nimport { TMagicButton, tMagicMessage, tMagicMessageBox, TMagicTableColumn } from '@tmagic/design';\n\nimport { ColumnActionConfig, ColumnConfig } from './schema';\n\nconst props = withDefaults(\n defineProps<{\n columns: any[];\n config: ColumnConfig;\n rowkeyName?: string;\n editState?: any;\n }>(),\n {\n columns: () => [],\n config: () => ({}),\n rowkeyName: 'c_id',\n editState: () => [],\n },\n);\n\nconst emit = defineEmits(['afterAction']);\n\nconst display = (fuc: boolean | Function | undefined, row: any) => {\n if (typeof fuc === 'function') {\n return fuc(row);\n }\n return true;\n};\n\nconst success = (msg: string, action: ColumnActionConfig, row: any) => {\n tMagicMessage.success(msg);\n action.after?.(row);\n};\n\nconst error = (msg: string) => tMagicMessage.error(msg);\n\nconst deleteAction = async (action: ColumnActionConfig, row: any) => {\n await tMagicMessageBox.confirm(`确认删除${row[action.name || 'c_name']}(${row[props.rowkeyName]})?`, '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n });\n\n const res = await action.handler?.(row);\n\n if (res.ret === 0) {\n success('删除成功!', action, row);\n } else {\n error(res.msg || '删除失败');\n }\n};\n\nconst copyHandler = async (action: ColumnActionConfig, row: any) => {\n await tMagicMessageBox.confirm(`确定复制${row[action.name || 'c_name']}(${row.c_id})?`, '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n });\n\n try {\n const res = await action.handler?.(row);\n\n if (res.ret === 0) {\n success('复制成功!', action, row);\n } else {\n error(`复制失败!${res.msg}`);\n }\n } catch (e) {\n error('复制失败!');\n }\n};\n\nconst actionHandler = async (action: ColumnActionConfig, row: any, index: number) => {\n await action.before?.(row);\n if (action.type === 'delete') {\n await deleteAction(action, row);\n } else if (action.type === 'copy') {\n await copyHandler(action, row);\n } else if (action.type === 'edit') {\n props.editState[index] = row;\n } else {\n await action.handler?.(row);\n }\n action.after?.(row);\n};\n\nconst save = async (index: number, config: ColumnConfig) => {\n const action = config.actions?.find((item) => item.type === 'edit')?.action;\n if (!action) return;\n\n const data: any = {};\n const row = props.editState[index];\n props.columns\n .filter((item) => item.type)\n .forEach((column) => {\n data[column.prop] = row[column.prop];\n });\n\n const res: any = await action({\n data,\n });\n\n if (res) {\n if (res.ret === 0) {\n tMagicMessage.success('保存成功');\n props.editState[index] = undefined;\n emit('afterAction');\n } else {\n tMagicMessage.error(res.msg || '保存失败');\n }\n } else {\n props.editState[index] = undefined;\n emit('afterAction');\n }\n};\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport { ColumnConfig } from './schema';\n\nexport const formatter = (item: ColumnConfig, row: any) => {\n if (!item.prop) return '';\n\n if (item.formatter) {\n if (item.formatter === 'datetime') {\n // eslint-disable-next-line no-param-reassign\n item.formatter = (value: string) => datetimeFormatter(value);\n }\n try {\n return item.formatter(row[item.prop], row);\n } catch (e) {\n return row[item.prop];\n }\n } else {\n return row[item.prop];\n }\n};\n","<template>\n <TMagicTable\n tooltip-effect=\"dark\"\n class=\"m-table\"\n ref=\"tMagicTable\"\n v-loading=\"loading\"\n :data=\"tableData\"\n :show-header=\"showHeader\"\n :max-height=\"bodyHeight\"\n :default-expand-all=\"defaultExpandAll\"\n :border=\"hasBorder\"\n :row-key=\"rowkeyName || 'c_id'\"\n :tree-props=\"{ children: 'children' }\"\n :empty-text=\"emptyText || '暂无数据'\"\n :span-method=\"objectSpanMethod\"\n @sort-change=\"sortChange\"\n @select=\"selectHandler\"\n @select-all=\"selectAllHandler\"\n @selection-change=\"selectionChangeHandler\"\n >\n <template v-for=\"(item, columnIndex) in columns\">\n <template v-if=\"item.type === 'expand'\">\n <ExpandColumn :config=\"item\" :key=\"columnIndex\"></ExpandColumn>\n </template>\n\n <template v-else-if=\"item.selection\">\n <component\n width=\"40\"\n type=\"selection\"\n :is=\"tableColumnComponent.component\"\n :key=\"columnIndex\"\n :selectable=\"item.selectable\"\n ></component>\n </template>\n\n <template v-else-if=\"item.actions\">\n <ActionsColumn\n :columns=\"columns\"\n :config=\"item\"\n :rowkey-name=\"rowkeyName\"\n :edit-state=\"editState\"\n :key=\"columnIndex\"\n @afterAction=\"$emit('afterAction')\"\n ></ActionsColumn>\n </template>\n\n <template v-else-if=\"item.type === 'popover'\">\n <PopoverColumn :key=\"columnIndex\" :config=\"item\"></PopoverColumn>\n </template>\n\n <template v-else>\n <TextColumn :key=\"columnIndex\" :config=\"item\" :edit-state=\"editState\"></TextColumn>\n </template>\n </template>\n </TMagicTable>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { getConfig, TMagicTable } from '@tmagic/design';\n\nimport ActionsColumn from './ActionsColumn.vue';\nimport ExpandColumn from './ExpandColumn.vue';\nimport PopoverColumn from './PopoverColumn.vue';\nimport TextColumn from './TextColumn.vue';\n\nconst props = withDefaults(\n defineProps<{\n data: any[];\n columns?: any[];\n /** 合并行或列的计算方法 */\n spanMethod?: (data: { row: any; column: any; rowIndex: number; columnIndex: number }) => [number, number];\n loading?: boolean;\n /** Table 的最大高度。合法的值为数字或者单位为 px 的高度 */\n bodyHeight?: string | number;\n /** 是否显示表头 */\n showHeader?: boolean;\n /** 空数据时显示的文本内容 */\n emptyText?: string;\n /** 是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效 */\n defaultExpandAll?: boolean;\n rowkeyName?: string;\n /** 是否带有纵向边框 */\n border?: boolean;\n }>(),\n {\n columns: () => [],\n loading: false,\n showHeader: true,\n defaultExpandAll: false,\n border: false,\n },\n);\n\nconst emit = defineEmits(['sort-change', 'afterAction', 'select', 'select-all', 'selection-change']);\n\nconst tMagicTable = ref<InstanceType<typeof TMagicTable>>();\n\nconst editState = ref([]);\n\nconst tableColumnComponent = getConfig('components').tableColumn;\nconst selectionColumn = computed(() => {\n const column = props.columns.filter((item) => item.selection);\n return column.length ? column[0] : null;\n});\n\nconst tableData = computed(() => {\n if (selectionColumn.value) {\n return props.data || [];\n }\n\n return cloneDeep(props.data) || [];\n});\n\nconst hasBorder = computed(() => (typeof props.border !== 'undefined' ? props.border : true));\n\nconst sortChange = (data: any) => {\n emit('sort-change', data);\n};\n\nconst selectHandler = (selection: any, row: any) => {\n const column = selectionColumn.value;\n if (!column) {\n return;\n }\n\n if (column.selection === 'single') {\n // this.clearSelection()\n // this.toggleRowSelection(row, true)\n }\n emit('select', selection, row);\n};\n\nconst selectAllHandler = (selection: any) => {\n emit('select-all', selection);\n};\n\nconst selectionChangeHandler = (selection: any) => {\n emit('selection-change', selection);\n};\n\nconst toggleRowSelection = (row: any, selected: boolean) => {\n tMagicTable.value?.toggleRowSelection(row, selected);\n};\n\nconst toggleRowExpansion = (row: any, expanded: boolean) => {\n tMagicTable.value?.toggleRowExpansion(row, expanded);\n};\n\nconst clearSelection = () => {\n tMagicTable.value?.clearSelection();\n};\n\nconst objectSpanMethod = (data: any) => {\n if (typeof props.spanMethod === 'function') {\n return props.spanMethod(data);\n }\n return () => ({\n rowspan: 0,\n colspan: 0,\n });\n};\n\ndefineExpose({\n toggleRowSelection,\n toggleRowExpansion,\n clearSelection,\n});\n</script>\n\n<style lang=\"scss\">\n.m-table {\n .el-button.action-btn + .el-button.action-btn {\n margin-left: 0;\n }\n .keep-all {\n word-break: keep-all;\n }\n .el-table .cell > div {\n display: inline-block;\n vertical-align: middle;\n }\n .el-table__row.el-table__row--level-1 {\n color: #999;\n }\n}\n</style>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { App } from 'vue';\n\nimport Table from './Table.vue';\n\nexport { default as MagicTable } from './Table.vue';\n\nexport default {\n install(app: App) {\n app.component('m-table', Table);\n },\n};\n"],"names":["Table"],"mappings":"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"}
1
+ {"version":3,"file":"tmagic-table.mjs","sources":["../src/ActionsColumn.vue","../src/utils.ts","../src/Table.vue","../src/index.ts"],"sourcesContent":["<template>\n <TMagicTableColumn :label=\"config.label\" :width=\"config.width\" :fixed=\"config.fixed\">\n <template v-slot=\"scope\">\n <TMagicButton\n v-for=\"(action, actionIndex) in config.actions\"\n v-show=\"display(action.display, scope.row) && !editState[scope.$index]\"\n class=\"action-btn\"\n text\n type=\"primary\"\n size=\"small\"\n :icon=\"action.icon\"\n :key=\"actionIndex\"\n @click=\"actionHandler(action, scope.row, scope.$index)\"\n ><span v-html=\"formatter(action.text, scope.row)\"></span\n ></TMagicButton>\n <TMagicButton\n class=\"action-btn\"\n v-show=\"editState[scope.$index]\"\n text\n type=\"primary\"\n size=\"small\"\n @click=\"save(scope.$index, config)\"\n >保存</TMagicButton\n >\n <TMagicButton\n class=\"action-btn\"\n v-show=\"editState[scope.$index]\"\n text\n type=\"primary\"\n size=\"small\"\n @click=\"editState[scope.$index] = undefined\"\n >取消</TMagicButton\n >\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup>\nimport { TMagicButton, tMagicMessage, TMagicTableColumn } from '@tmagic/design';\n\nimport { ColumnActionConfig, ColumnConfig } from './schema';\n\nconst props = withDefaults(\n defineProps<{\n columns: any[];\n config: ColumnConfig;\n rowkeyName?: string;\n editState?: any;\n }>(),\n {\n columns: () => [],\n config: () => ({}),\n rowkeyName: 'c_id',\n editState: () => [],\n },\n);\n\nconst emit = defineEmits(['afterAction']);\n\nconst display = (fuc: boolean | Function | undefined, row: any) => {\n if (typeof fuc === 'function') {\n return fuc(row);\n }\n return true;\n};\n\nconst formatter = (fuc: string | Function | undefined, row: any) => {\n if (typeof fuc === 'function') {\n return fuc(row);\n }\n return fuc;\n};\n\nconst actionHandler = async (action: ColumnActionConfig, row: any, index: number) => {\n await action.before?.(row);\n if (action.type === 'edit') {\n props.editState[index] = row;\n } else {\n await action.handler?.(row);\n }\n action.after?.(row);\n};\n\nconst save = async (index: number, config: ColumnConfig) => {\n const action = config.actions?.find((item) => item.type === 'edit')?.action;\n if (!action) return;\n\n const data: any = {};\n const row = props.editState[index];\n props.columns\n .filter((item) => item.type)\n .forEach((column) => {\n data[column.prop] = row[column.prop];\n });\n\n const res: any = await action({\n data,\n });\n\n if (res) {\n if (res.ret === 0) {\n tMagicMessage.success('保存成功');\n props.editState[index] = undefined;\n emit('afterAction');\n } else {\n tMagicMessage.error(res.msg || '保存失败');\n }\n } else {\n props.editState[index] = undefined;\n emit('afterAction');\n }\n};\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport { ColumnConfig } from './schema';\n\nexport const formatter = (item: ColumnConfig, row: any) => {\n if (!item.prop) return '';\n\n if (item.formatter) {\n if (item.formatter === 'datetime') {\n // eslint-disable-next-line no-param-reassign\n item.formatter = (value: string) => datetimeFormatter(value);\n }\n try {\n return item.formatter(row[item.prop], row);\n } catch (e) {\n return row[item.prop];\n }\n } else {\n return row[item.prop];\n }\n};\n","<template>\n <TMagicTable\n tooltip-effect=\"dark\"\n class=\"m-table\"\n ref=\"tMagicTable\"\n v-loading=\"loading\"\n :data=\"tableData\"\n :show-header=\"showHeader\"\n :max-height=\"bodyHeight\"\n :default-expand-all=\"defaultExpandAll\"\n :border=\"hasBorder\"\n :row-key=\"rowkeyName || 'c_id'\"\n :tree-props=\"{ children: 'children' }\"\n :empty-text=\"emptyText || '暂无数据'\"\n :span-method=\"objectSpanMethod\"\n @sort-change=\"sortChange\"\n @select=\"selectHandler\"\n @select-all=\"selectAllHandler\"\n @selection-change=\"selectionChangeHandler\"\n >\n <template v-for=\"(item, columnIndex) in columns\">\n <template v-if=\"item.type === 'expand'\">\n <ExpandColumn :config=\"item\" :key=\"columnIndex\"></ExpandColumn>\n </template>\n\n <template v-else-if=\"item.selection\">\n <component\n width=\"40\"\n type=\"selection\"\n :is=\"tableColumnComponent.component\"\n :key=\"columnIndex\"\n :selectable=\"item.selectable\"\n ></component>\n </template>\n\n <template v-else-if=\"item.actions\">\n <ActionsColumn\n :columns=\"columns\"\n :config=\"item\"\n :rowkey-name=\"rowkeyName\"\n :edit-state=\"editState\"\n :key=\"columnIndex\"\n @afterAction=\"$emit('afterAction')\"\n ></ActionsColumn>\n </template>\n\n <template v-else-if=\"item.type === 'popover'\">\n <PopoverColumn :key=\"columnIndex\" :config=\"item\"></PopoverColumn>\n </template>\n\n <template v-else>\n <TextColumn :key=\"columnIndex\" :config=\"item\" :edit-state=\"editState\"></TextColumn>\n </template>\n </template>\n </TMagicTable>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { getConfig, TMagicTable } from '@tmagic/design';\n\nimport ActionsColumn from './ActionsColumn.vue';\nimport ExpandColumn from './ExpandColumn.vue';\nimport PopoverColumn from './PopoverColumn.vue';\nimport TextColumn from './TextColumn.vue';\n\nconst props = withDefaults(\n defineProps<{\n data: any[];\n columns?: any[];\n /** 合并行或列的计算方法 */\n spanMethod?: (data: { row: any; column: any; rowIndex: number; columnIndex: number }) => [number, number];\n loading?: boolean;\n /** Table 的最大高度。合法的值为数字或者单位为 px 的高度 */\n bodyHeight?: string | number;\n /** 是否显示表头 */\n showHeader?: boolean;\n /** 空数据时显示的文本内容 */\n emptyText?: string;\n /** 是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效 */\n defaultExpandAll?: boolean;\n rowkeyName?: string;\n /** 是否带有纵向边框 */\n border?: boolean;\n }>(),\n {\n columns: () => [],\n loading: false,\n showHeader: true,\n defaultExpandAll: false,\n border: false,\n },\n);\n\nconst emit = defineEmits(['sort-change', 'afterAction', 'select', 'select-all', 'selection-change']);\n\nconst tMagicTable = ref<InstanceType<typeof TMagicTable>>();\n\nconst editState = ref([]);\n\nconst tableColumnComponent = getConfig('components').tableColumn;\nconst selectionColumn = computed(() => {\n const column = props.columns.filter((item) => item.selection);\n return column.length ? column[0] : null;\n});\n\nconst tableData = computed(() => {\n if (selectionColumn.value) {\n return props.data || [];\n }\n\n return cloneDeep(props.data) || [];\n});\n\nconst hasBorder = computed(() => (typeof props.border !== 'undefined' ? props.border : true));\n\nconst sortChange = (data: any) => {\n emit('sort-change', data);\n};\n\nconst selectHandler = (selection: any, row: any) => {\n const column = selectionColumn.value;\n if (!column) {\n return;\n }\n\n if (column.selection === 'single') {\n // this.clearSelection()\n // this.toggleRowSelection(row, true)\n }\n emit('select', selection, row);\n};\n\nconst selectAllHandler = (selection: any) => {\n emit('select-all', selection);\n};\n\nconst selectionChangeHandler = (selection: any) => {\n emit('selection-change', selection);\n};\n\nconst toggleRowSelection = (row: any, selected: boolean) => {\n tMagicTable.value?.toggleRowSelection(row, selected);\n};\n\nconst toggleRowExpansion = (row: any, expanded: boolean) => {\n tMagicTable.value?.toggleRowExpansion(row, expanded);\n};\n\nconst clearSelection = () => {\n tMagicTable.value?.clearSelection();\n};\n\nconst objectSpanMethod = (data: any) => {\n if (typeof props.spanMethod === 'function') {\n return props.spanMethod(data);\n }\n return () => ({\n rowspan: 0,\n colspan: 0,\n });\n};\n\ndefineExpose({\n toggleRowSelection,\n toggleRowExpansion,\n clearSelection,\n});\n</script>\n\n<style lang=\"scss\">\n.m-table {\n .el-button.action-btn + .el-button.action-btn {\n margin-left: 0;\n }\n .keep-all {\n word-break: keep-all;\n }\n .el-table .cell > div {\n display: inline-block;\n vertical-align: middle;\n }\n .el-table__row.el-table__row--level-1 {\n color: #999;\n }\n}\n</style>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { App } from 'vue';\n\nimport Table from './Table.vue';\n\nexport { default as MagicTable } from './Table.vue';\n\nexport default {\n install(app: App) {\n app.component('m-table', Table);\n },\n};\n"],"names":["Table"],"mappings":"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"}
@@ -4,8 +4,9 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.TMagicTable = {}, global.Vue, global.lodashEs, global.design, global.form, global.utils));
5
5
  })(this, (function (exports, vue, lodashEs, design, form, utils) { 'use strict';
6
6
 
7
- const _hoisted_1$1 = /* @__PURE__ */ vue.createTextVNode("\u4FDD\u5B58");
8
- const _hoisted_2$1 = /* @__PURE__ */ vue.createTextVNode("\u53D6\u6D88");
7
+ const _hoisted_1$1 = ["innerHTML"];
8
+ const _hoisted_2$1 = /* @__PURE__ */ vue.createTextVNode("\u4FDD\u5B58");
9
+ const _hoisted_3$1 = /* @__PURE__ */ vue.createTextVNode("\u53D6\u6D88");
9
10
  const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
10
11
  __name: "ActionsColumn",
11
12
  props: {
@@ -23,48 +24,15 @@
23
24
  }
24
25
  return true;
25
26
  };
26
- const success = (msg, action, row) => {
27
- design.tMagicMessage.success(msg);
28
- action.after?.(row);
29
- };
30
- const error = (msg) => design.tMagicMessage.error(msg);
31
- const deleteAction = async (action, row) => {
32
- await design.tMagicMessageBox.confirm(`\u786E\u8BA4\u5220\u9664${row[action.name || "c_name"]}(${row[props.rowkeyName]})?`, "\u63D0\u793A", {
33
- confirmButtonText: "\u786E\u5B9A",
34
- cancelButtonText: "\u53D6\u6D88",
35
- type: "warning"
36
- });
37
- const res = await action.handler?.(row);
38
- if (res.ret === 0) {
39
- success("\u5220\u9664\u6210\u529F!", action, row);
40
- } else {
41
- error(res.msg || "\u5220\u9664\u5931\u8D25");
42
- }
43
- };
44
- const copyHandler = async (action, row) => {
45
- await design.tMagicMessageBox.confirm(`\u786E\u5B9A\u590D\u5236${row[action.name || "c_name"]}(${row.c_id})?`, "\u63D0\u793A", {
46
- confirmButtonText: "\u786E\u5B9A",
47
- cancelButtonText: "\u53D6\u6D88",
48
- type: "warning"
49
- });
50
- try {
51
- const res = await action.handler?.(row);
52
- if (res.ret === 0) {
53
- success("\u590D\u5236\u6210\u529F!", action, row);
54
- } else {
55
- error(`\u590D\u5236\u5931\u8D25!${res.msg}`);
56
- }
57
- } catch (e) {
58
- error("\u590D\u5236\u5931\u8D25!");
27
+ const formatter = (fuc, row) => {
28
+ if (typeof fuc === "function") {
29
+ return fuc(row);
59
30
  }
31
+ return fuc;
60
32
  };
61
33
  const actionHandler = async (action, row, index) => {
62
34
  await action.before?.(row);
63
- if (action.type === "delete") {
64
- await deleteAction(action, row);
65
- } else if (action.type === "copy") {
66
- await copyHandler(action, row);
67
- } else if (action.type === "edit") {
35
+ if (action.type === "edit") {
68
36
  props.editState[index] = row;
69
37
  } else {
70
38
  await action.handler?.(row);
@@ -105,14 +73,21 @@
105
73
  default: vue.withCtx((scope) => [
106
74
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.config.actions, (action, actionIndex) => {
107
75
  return vue.withDirectives((vue.openBlock(), vue.createBlock(vue.unref(design.TMagicButton), {
108
- innerHTML: action.text,
109
76
  class: "action-btn",
110
77
  text: "",
111
78
  type: "primary",
112
79
  size: "small",
80
+ icon: action.icon,
113
81
  key: actionIndex,
114
82
  onClick: ($event) => actionHandler(action, scope.row, scope.$index)
115
- }, null, 8, ["innerHTML", "onClick"])), [
83
+ }, {
84
+ default: vue.withCtx(() => [
85
+ vue.createElementVNode("span", {
86
+ innerHTML: formatter(action.text, scope.row)
87
+ }, null, 8, _hoisted_1$1)
88
+ ]),
89
+ _: 2
90
+ }, 1032, ["icon", "onClick"])), [
116
91
  [vue.vShow, display(action.display, scope.row) && !__props.editState[scope.$index]]
117
92
  ]);
118
93
  }), 128)),
@@ -124,7 +99,7 @@
124
99
  onClick: ($event) => save(scope.$index, __props.config)
125
100
  }, {
126
101
  default: vue.withCtx(() => [
127
- _hoisted_1$1
102
+ _hoisted_2$1
128
103
  ]),
129
104
  _: 2
130
105
  }, 1032, ["onClick"]), [
@@ -138,7 +113,7 @@
138
113
  onClick: ($event) => __props.editState[scope.$index] = void 0
139
114
  }, {
140
115
  default: vue.withCtx(() => [
141
- _hoisted_2$1
116
+ _hoisted_3$1
142
117
  ]),
143
118
  _: 2
144
119
  }, 1032, ["onClick"]), [
@@ -242,11 +217,12 @@
242
217
  }
243
218
  });
244
219
 
245
- const _hoisted_1 = ["href"];
246
- const _hoisted_2 = ["src"];
247
- const _hoisted_3 = ["href"];
248
- const _hoisted_4 = /* @__PURE__ */ vue.createTextVNode("\u6269\u5C55\u914D\u7F6E");
249
- const _hoisted_5 = ["innerHTML"];
220
+ const _hoisted_1 = ["innerHTML"];
221
+ const _hoisted_2 = ["href"];
222
+ const _hoisted_3 = ["src"];
223
+ const _hoisted_4 = ["href"];
224
+ const _hoisted_5 = /* @__PURE__ */ vue.createTextVNode("\u6269\u5C55\u914D\u7F6E");
225
+ const _hoisted_6 = ["innerHTML"];
250
226
  const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
251
227
  __name: "TextColumn",
252
228
  props: {
@@ -288,7 +264,9 @@
288
264
  onClick: ($event) => __props.config.handler?.(scope.row)
289
265
  }, {
290
266
  default: vue.withCtx(() => [
291
- vue.createTextVNode(vue.toDisplayString(vue.unref(formatter)(__props.config, scope.row)), 1)
267
+ vue.createElementVNode("span", {
268
+ innerHTML: vue.unref(formatter)(__props.config, scope.row)
269
+ }, null, 8, _hoisted_1)
292
270
  ]),
293
271
  _: 2
294
272
  }, 1032, ["onClick"])) : __props.config.action === "img" && __props.config.prop ? (vue.openBlock(), vue.createElementBlock("a", {
@@ -299,13 +277,13 @@
299
277
  vue.createElementVNode("img", {
300
278
  src: scope.row[__props.config.prop],
301
279
  height: "50"
302
- }, null, 8, _hoisted_2)
303
- ], 8, _hoisted_1)) : __props.config.action === "link" && __props.config.prop ? (vue.openBlock(), vue.createElementBlock("a", {
280
+ }, null, 8, _hoisted_3)
281
+ ], 8, _hoisted_2)) : __props.config.action === "link" && __props.config.prop ? (vue.openBlock(), vue.createElementBlock("a", {
304
282
  key: 3,
305
283
  target: "_blank",
306
284
  href: scope.row[__props.config.prop],
307
285
  class: "keep-all"
308
- }, vue.toDisplayString(scope.row[__props.config.prop]), 9, _hoisted_3)) : __props.config.action === "tip" ? (vue.openBlock(), vue.createBlock(_component_el_tooltip, {
286
+ }, vue.toDisplayString(scope.row[__props.config.prop]), 9, _hoisted_4)) : __props.config.action === "tip" ? (vue.openBlock(), vue.createBlock(_component_el_tooltip, {
309
287
  key: 4,
310
288
  placement: "left"
311
289
  }, {
@@ -318,7 +296,7 @@
318
296
  type: "primary"
319
297
  }, {
320
298
  default: vue.withCtx(() => [
321
- _hoisted_4
299
+ _hoisted_5
322
300
  ]),
323
301
  _: 1
324
302
  })
@@ -336,7 +314,7 @@
336
314
  }, 1032, ["type"])) : (vue.openBlock(), vue.createElementBlock("div", {
337
315
  key: 6,
338
316
  innerHTML: vue.unref(formatter)(__props.config, scope.row)
339
- }, null, 8, _hoisted_5))
317
+ }, null, 8, _hoisted_6))
340
318
  ]),
341
319
  _: 1
342
320
  }, 8, ["label", "width", "fixed", "sortable", "prop"]);
@@ -1 +1 @@
1
- {"version":3,"file":"tmagic-table.umd.js","sources":["../src/ActionsColumn.vue","../src/utils.ts","../src/Table.vue","../src/index.ts"],"sourcesContent":["<template>\n <TMagicTableColumn :label=\"config.label\" :width=\"config.width\" :fixed=\"config.fixed\">\n <template v-slot=\"scope\">\n <TMagicButton\n v-for=\"(action, actionIndex) in config.actions\"\n v-show=\"display(action.display, scope.row) && !editState[scope.$index]\"\n v-html=\"action.text\"\n class=\"action-btn\"\n text\n type=\"primary\"\n size=\"small\"\n :key=\"actionIndex\"\n @click=\"actionHandler(action, scope.row, scope.$index)\"\n ></TMagicButton>\n <TMagicButton\n class=\"action-btn\"\n v-show=\"editState[scope.$index]\"\n text\n type=\"primary\"\n size=\"small\"\n @click=\"save(scope.$index, config)\"\n >保存</TMagicButton\n >\n <TMagicButton\n class=\"action-btn\"\n v-show=\"editState[scope.$index]\"\n text\n type=\"primary\"\n size=\"small\"\n @click=\"editState[scope.$index] = undefined\"\n >取消</TMagicButton\n >\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup>\nimport { TMagicButton, tMagicMessage, tMagicMessageBox, TMagicTableColumn } from '@tmagic/design';\n\nimport { ColumnActionConfig, ColumnConfig } from './schema';\n\nconst props = withDefaults(\n defineProps<{\n columns: any[];\n config: ColumnConfig;\n rowkeyName?: string;\n editState?: any;\n }>(),\n {\n columns: () => [],\n config: () => ({}),\n rowkeyName: 'c_id',\n editState: () => [],\n },\n);\n\nconst emit = defineEmits(['afterAction']);\n\nconst display = (fuc: boolean | Function | undefined, row: any) => {\n if (typeof fuc === 'function') {\n return fuc(row);\n }\n return true;\n};\n\nconst success = (msg: string, action: ColumnActionConfig, row: any) => {\n tMagicMessage.success(msg);\n action.after?.(row);\n};\n\nconst error = (msg: string) => tMagicMessage.error(msg);\n\nconst deleteAction = async (action: ColumnActionConfig, row: any) => {\n await tMagicMessageBox.confirm(`确认删除${row[action.name || 'c_name']}(${row[props.rowkeyName]})?`, '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n });\n\n const res = await action.handler?.(row);\n\n if (res.ret === 0) {\n success('删除成功!', action, row);\n } else {\n error(res.msg || '删除失败');\n }\n};\n\nconst copyHandler = async (action: ColumnActionConfig, row: any) => {\n await tMagicMessageBox.confirm(`确定复制${row[action.name || 'c_name']}(${row.c_id})?`, '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n });\n\n try {\n const res = await action.handler?.(row);\n\n if (res.ret === 0) {\n success('复制成功!', action, row);\n } else {\n error(`复制失败!${res.msg}`);\n }\n } catch (e) {\n error('复制失败!');\n }\n};\n\nconst actionHandler = async (action: ColumnActionConfig, row: any, index: number) => {\n await action.before?.(row);\n if (action.type === 'delete') {\n await deleteAction(action, row);\n } else if (action.type === 'copy') {\n await copyHandler(action, row);\n } else if (action.type === 'edit') {\n props.editState[index] = row;\n } else {\n await action.handler?.(row);\n }\n action.after?.(row);\n};\n\nconst save = async (index: number, config: ColumnConfig) => {\n const action = config.actions?.find((item) => item.type === 'edit')?.action;\n if (!action) return;\n\n const data: any = {};\n const row = props.editState[index];\n props.columns\n .filter((item) => item.type)\n .forEach((column) => {\n data[column.prop] = row[column.prop];\n });\n\n const res: any = await action({\n data,\n });\n\n if (res) {\n if (res.ret === 0) {\n tMagicMessage.success('保存成功');\n props.editState[index] = undefined;\n emit('afterAction');\n } else {\n tMagicMessage.error(res.msg || '保存失败');\n }\n } else {\n props.editState[index] = undefined;\n emit('afterAction');\n }\n};\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport { ColumnConfig } from './schema';\n\nexport const formatter = (item: ColumnConfig, row: any) => {\n if (!item.prop) return '';\n\n if (item.formatter) {\n if (item.formatter === 'datetime') {\n // eslint-disable-next-line no-param-reassign\n item.formatter = (value: string) => datetimeFormatter(value);\n }\n try {\n return item.formatter(row[item.prop], row);\n } catch (e) {\n return row[item.prop];\n }\n } else {\n return row[item.prop];\n }\n};\n","<template>\n <TMagicTable\n tooltip-effect=\"dark\"\n class=\"m-table\"\n ref=\"tMagicTable\"\n v-loading=\"loading\"\n :data=\"tableData\"\n :show-header=\"showHeader\"\n :max-height=\"bodyHeight\"\n :default-expand-all=\"defaultExpandAll\"\n :border=\"hasBorder\"\n :row-key=\"rowkeyName || 'c_id'\"\n :tree-props=\"{ children: 'children' }\"\n :empty-text=\"emptyText || '暂无数据'\"\n :span-method=\"objectSpanMethod\"\n @sort-change=\"sortChange\"\n @select=\"selectHandler\"\n @select-all=\"selectAllHandler\"\n @selection-change=\"selectionChangeHandler\"\n >\n <template v-for=\"(item, columnIndex) in columns\">\n <template v-if=\"item.type === 'expand'\">\n <ExpandColumn :config=\"item\" :key=\"columnIndex\"></ExpandColumn>\n </template>\n\n <template v-else-if=\"item.selection\">\n <component\n width=\"40\"\n type=\"selection\"\n :is=\"tableColumnComponent.component\"\n :key=\"columnIndex\"\n :selectable=\"item.selectable\"\n ></component>\n </template>\n\n <template v-else-if=\"item.actions\">\n <ActionsColumn\n :columns=\"columns\"\n :config=\"item\"\n :rowkey-name=\"rowkeyName\"\n :edit-state=\"editState\"\n :key=\"columnIndex\"\n @afterAction=\"$emit('afterAction')\"\n ></ActionsColumn>\n </template>\n\n <template v-else-if=\"item.type === 'popover'\">\n <PopoverColumn :key=\"columnIndex\" :config=\"item\"></PopoverColumn>\n </template>\n\n <template v-else>\n <TextColumn :key=\"columnIndex\" :config=\"item\" :edit-state=\"editState\"></TextColumn>\n </template>\n </template>\n </TMagicTable>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { getConfig, TMagicTable } from '@tmagic/design';\n\nimport ActionsColumn from './ActionsColumn.vue';\nimport ExpandColumn from './ExpandColumn.vue';\nimport PopoverColumn from './PopoverColumn.vue';\nimport TextColumn from './TextColumn.vue';\n\nconst props = withDefaults(\n defineProps<{\n data: any[];\n columns?: any[];\n /** 合并行或列的计算方法 */\n spanMethod?: (data: { row: any; column: any; rowIndex: number; columnIndex: number }) => [number, number];\n loading?: boolean;\n /** Table 的最大高度。合法的值为数字或者单位为 px 的高度 */\n bodyHeight?: string | number;\n /** 是否显示表头 */\n showHeader?: boolean;\n /** 空数据时显示的文本内容 */\n emptyText?: string;\n /** 是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效 */\n defaultExpandAll?: boolean;\n rowkeyName?: string;\n /** 是否带有纵向边框 */\n border?: boolean;\n }>(),\n {\n columns: () => [],\n loading: false,\n showHeader: true,\n defaultExpandAll: false,\n border: false,\n },\n);\n\nconst emit = defineEmits(['sort-change', 'afterAction', 'select', 'select-all', 'selection-change']);\n\nconst tMagicTable = ref<InstanceType<typeof TMagicTable>>();\n\nconst editState = ref([]);\n\nconst tableColumnComponent = getConfig('components').tableColumn;\nconst selectionColumn = computed(() => {\n const column = props.columns.filter((item) => item.selection);\n return column.length ? column[0] : null;\n});\n\nconst tableData = computed(() => {\n if (selectionColumn.value) {\n return props.data || [];\n }\n\n return cloneDeep(props.data) || [];\n});\n\nconst hasBorder = computed(() => (typeof props.border !== 'undefined' ? props.border : true));\n\nconst sortChange = (data: any) => {\n emit('sort-change', data);\n};\n\nconst selectHandler = (selection: any, row: any) => {\n const column = selectionColumn.value;\n if (!column) {\n return;\n }\n\n if (column.selection === 'single') {\n // this.clearSelection()\n // this.toggleRowSelection(row, true)\n }\n emit('select', selection, row);\n};\n\nconst selectAllHandler = (selection: any) => {\n emit('select-all', selection);\n};\n\nconst selectionChangeHandler = (selection: any) => {\n emit('selection-change', selection);\n};\n\nconst toggleRowSelection = (row: any, selected: boolean) => {\n tMagicTable.value?.toggleRowSelection(row, selected);\n};\n\nconst toggleRowExpansion = (row: any, expanded: boolean) => {\n tMagicTable.value?.toggleRowExpansion(row, expanded);\n};\n\nconst clearSelection = () => {\n tMagicTable.value?.clearSelection();\n};\n\nconst objectSpanMethod = (data: any) => {\n if (typeof props.spanMethod === 'function') {\n return props.spanMethod(data);\n }\n return () => ({\n rowspan: 0,\n colspan: 0,\n });\n};\n\ndefineExpose({\n toggleRowSelection,\n toggleRowExpansion,\n clearSelection,\n});\n</script>\n\n<style lang=\"scss\">\n.m-table {\n .el-button.action-btn + .el-button.action-btn {\n margin-left: 0;\n }\n .keep-all {\n word-break: keep-all;\n }\n .el-table .cell > div {\n display: inline-block;\n vertical-align: middle;\n }\n .el-table__row.el-table__row--level-1 {\n color: #999;\n }\n}\n</style>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { App } from 'vue';\n\nimport Table from './Table.vue';\n\nexport { default as MagicTable } from './Table.vue';\n\nexport default {\n install(app: App) {\n app.component('m-table', Table);\n },\n};\n"],"names":["tMagicMessage","tMagicMessageBox","datetimeFormatter","ref","getConfig","computed","cloneDeep","Table"],"mappings":"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"}
1
+ {"version":3,"file":"tmagic-table.umd.js","sources":["../src/ActionsColumn.vue","../src/utils.ts","../src/Table.vue","../src/index.ts"],"sourcesContent":["<template>\n <TMagicTableColumn :label=\"config.label\" :width=\"config.width\" :fixed=\"config.fixed\">\n <template v-slot=\"scope\">\n <TMagicButton\n v-for=\"(action, actionIndex) in config.actions\"\n v-show=\"display(action.display, scope.row) && !editState[scope.$index]\"\n class=\"action-btn\"\n text\n type=\"primary\"\n size=\"small\"\n :icon=\"action.icon\"\n :key=\"actionIndex\"\n @click=\"actionHandler(action, scope.row, scope.$index)\"\n ><span v-html=\"formatter(action.text, scope.row)\"></span\n ></TMagicButton>\n <TMagicButton\n class=\"action-btn\"\n v-show=\"editState[scope.$index]\"\n text\n type=\"primary\"\n size=\"small\"\n @click=\"save(scope.$index, config)\"\n >保存</TMagicButton\n >\n <TMagicButton\n class=\"action-btn\"\n v-show=\"editState[scope.$index]\"\n text\n type=\"primary\"\n size=\"small\"\n @click=\"editState[scope.$index] = undefined\"\n >取消</TMagicButton\n >\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup>\nimport { TMagicButton, tMagicMessage, TMagicTableColumn } from '@tmagic/design';\n\nimport { ColumnActionConfig, ColumnConfig } from './schema';\n\nconst props = withDefaults(\n defineProps<{\n columns: any[];\n config: ColumnConfig;\n rowkeyName?: string;\n editState?: any;\n }>(),\n {\n columns: () => [],\n config: () => ({}),\n rowkeyName: 'c_id',\n editState: () => [],\n },\n);\n\nconst emit = defineEmits(['afterAction']);\n\nconst display = (fuc: boolean | Function | undefined, row: any) => {\n if (typeof fuc === 'function') {\n return fuc(row);\n }\n return true;\n};\n\nconst formatter = (fuc: string | Function | undefined, row: any) => {\n if (typeof fuc === 'function') {\n return fuc(row);\n }\n return fuc;\n};\n\nconst actionHandler = async (action: ColumnActionConfig, row: any, index: number) => {\n await action.before?.(row);\n if (action.type === 'edit') {\n props.editState[index] = row;\n } else {\n await action.handler?.(row);\n }\n action.after?.(row);\n};\n\nconst save = async (index: number, config: ColumnConfig) => {\n const action = config.actions?.find((item) => item.type === 'edit')?.action;\n if (!action) return;\n\n const data: any = {};\n const row = props.editState[index];\n props.columns\n .filter((item) => item.type)\n .forEach((column) => {\n data[column.prop] = row[column.prop];\n });\n\n const res: any = await action({\n data,\n });\n\n if (res) {\n if (res.ret === 0) {\n tMagicMessage.success('保存成功');\n props.editState[index] = undefined;\n emit('afterAction');\n } else {\n tMagicMessage.error(res.msg || '保存失败');\n }\n } else {\n props.editState[index] = undefined;\n emit('afterAction');\n }\n};\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport { ColumnConfig } from './schema';\n\nexport const formatter = (item: ColumnConfig, row: any) => {\n if (!item.prop) return '';\n\n if (item.formatter) {\n if (item.formatter === 'datetime') {\n // eslint-disable-next-line no-param-reassign\n item.formatter = (value: string) => datetimeFormatter(value);\n }\n try {\n return item.formatter(row[item.prop], row);\n } catch (e) {\n return row[item.prop];\n }\n } else {\n return row[item.prop];\n }\n};\n","<template>\n <TMagicTable\n tooltip-effect=\"dark\"\n class=\"m-table\"\n ref=\"tMagicTable\"\n v-loading=\"loading\"\n :data=\"tableData\"\n :show-header=\"showHeader\"\n :max-height=\"bodyHeight\"\n :default-expand-all=\"defaultExpandAll\"\n :border=\"hasBorder\"\n :row-key=\"rowkeyName || 'c_id'\"\n :tree-props=\"{ children: 'children' }\"\n :empty-text=\"emptyText || '暂无数据'\"\n :span-method=\"objectSpanMethod\"\n @sort-change=\"sortChange\"\n @select=\"selectHandler\"\n @select-all=\"selectAllHandler\"\n @selection-change=\"selectionChangeHandler\"\n >\n <template v-for=\"(item, columnIndex) in columns\">\n <template v-if=\"item.type === 'expand'\">\n <ExpandColumn :config=\"item\" :key=\"columnIndex\"></ExpandColumn>\n </template>\n\n <template v-else-if=\"item.selection\">\n <component\n width=\"40\"\n type=\"selection\"\n :is=\"tableColumnComponent.component\"\n :key=\"columnIndex\"\n :selectable=\"item.selectable\"\n ></component>\n </template>\n\n <template v-else-if=\"item.actions\">\n <ActionsColumn\n :columns=\"columns\"\n :config=\"item\"\n :rowkey-name=\"rowkeyName\"\n :edit-state=\"editState\"\n :key=\"columnIndex\"\n @afterAction=\"$emit('afterAction')\"\n ></ActionsColumn>\n </template>\n\n <template v-else-if=\"item.type === 'popover'\">\n <PopoverColumn :key=\"columnIndex\" :config=\"item\"></PopoverColumn>\n </template>\n\n <template v-else>\n <TextColumn :key=\"columnIndex\" :config=\"item\" :edit-state=\"editState\"></TextColumn>\n </template>\n </template>\n </TMagicTable>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { getConfig, TMagicTable } from '@tmagic/design';\n\nimport ActionsColumn from './ActionsColumn.vue';\nimport ExpandColumn from './ExpandColumn.vue';\nimport PopoverColumn from './PopoverColumn.vue';\nimport TextColumn from './TextColumn.vue';\n\nconst props = withDefaults(\n defineProps<{\n data: any[];\n columns?: any[];\n /** 合并行或列的计算方法 */\n spanMethod?: (data: { row: any; column: any; rowIndex: number; columnIndex: number }) => [number, number];\n loading?: boolean;\n /** Table 的最大高度。合法的值为数字或者单位为 px 的高度 */\n bodyHeight?: string | number;\n /** 是否显示表头 */\n showHeader?: boolean;\n /** 空数据时显示的文本内容 */\n emptyText?: string;\n /** 是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效 */\n defaultExpandAll?: boolean;\n rowkeyName?: string;\n /** 是否带有纵向边框 */\n border?: boolean;\n }>(),\n {\n columns: () => [],\n loading: false,\n showHeader: true,\n defaultExpandAll: false,\n border: false,\n },\n);\n\nconst emit = defineEmits(['sort-change', 'afterAction', 'select', 'select-all', 'selection-change']);\n\nconst tMagicTable = ref<InstanceType<typeof TMagicTable>>();\n\nconst editState = ref([]);\n\nconst tableColumnComponent = getConfig('components').tableColumn;\nconst selectionColumn = computed(() => {\n const column = props.columns.filter((item) => item.selection);\n return column.length ? column[0] : null;\n});\n\nconst tableData = computed(() => {\n if (selectionColumn.value) {\n return props.data || [];\n }\n\n return cloneDeep(props.data) || [];\n});\n\nconst hasBorder = computed(() => (typeof props.border !== 'undefined' ? props.border : true));\n\nconst sortChange = (data: any) => {\n emit('sort-change', data);\n};\n\nconst selectHandler = (selection: any, row: any) => {\n const column = selectionColumn.value;\n if (!column) {\n return;\n }\n\n if (column.selection === 'single') {\n // this.clearSelection()\n // this.toggleRowSelection(row, true)\n }\n emit('select', selection, row);\n};\n\nconst selectAllHandler = (selection: any) => {\n emit('select-all', selection);\n};\n\nconst selectionChangeHandler = (selection: any) => {\n emit('selection-change', selection);\n};\n\nconst toggleRowSelection = (row: any, selected: boolean) => {\n tMagicTable.value?.toggleRowSelection(row, selected);\n};\n\nconst toggleRowExpansion = (row: any, expanded: boolean) => {\n tMagicTable.value?.toggleRowExpansion(row, expanded);\n};\n\nconst clearSelection = () => {\n tMagicTable.value?.clearSelection();\n};\n\nconst objectSpanMethod = (data: any) => {\n if (typeof props.spanMethod === 'function') {\n return props.spanMethod(data);\n }\n return () => ({\n rowspan: 0,\n colspan: 0,\n });\n};\n\ndefineExpose({\n toggleRowSelection,\n toggleRowExpansion,\n clearSelection,\n});\n</script>\n\n<style lang=\"scss\">\n.m-table {\n .el-button.action-btn + .el-button.action-btn {\n margin-left: 0;\n }\n .keep-all {\n word-break: keep-all;\n }\n .el-table .cell > div {\n display: inline-block;\n vertical-align: middle;\n }\n .el-table__row.el-table__row--level-1 {\n color: #999;\n }\n}\n</style>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { App } from 'vue';\n\nimport Table from './Table.vue';\n\nexport { default as MagicTable } from './Table.vue';\n\nexport default {\n install(app: App) {\n app.component('m-table', Table);\n },\n};\n"],"names":["tMagicMessage","datetimeFormatter","ref","getConfig","computed","cloneDeep","Table"],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.0-beta.7",
2
+ "version": "1.2.0-beta.9",
3
3
  "name": "@tmagic/table",
4
4
  "sideEffects": [
5
5
  "dist/*"
@@ -32,14 +32,14 @@
32
32
  "url": "https://github.com/Tencent/tmagic-editor.git"
33
33
  },
34
34
  "dependencies": {
35
- "@tmagic/design": "1.2.0-beta.7",
36
- "@tmagic/form": "1.2.0-beta.7",
37
- "@tmagic/utils": "1.2.0-beta.7",
35
+ "@tmagic/design": "1.2.0-beta.9",
36
+ "@tmagic/form": "1.2.0-beta.9",
37
+ "@tmagic/utils": "1.2.0-beta.9",
38
38
  "lodash-es": "^4.17.21",
39
39
  "vue": "^3.2.37"
40
40
  },
41
41
  "peerDependencies": {
42
- "@tmagic/form": "1.2.0-beta.7",
42
+ "@tmagic/form": "1.2.0-beta.9",
43
43
  "vue": "^3.2.37"
44
44
  },
45
45
  "devDependencies": {
@@ -53,6 +53,6 @@
53
53
  "sass": "^1.35.1",
54
54
  "typescript": "^4.7.4",
55
55
  "vite": "^3.1.3",
56
- "vue-tsc": "^0.39.4"
56
+ "vue-tsc": "^1.0.8"
57
57
  }
58
58
  }
@@ -4,13 +4,14 @@
4
4
  <TMagicButton
5
5
  v-for="(action, actionIndex) in config.actions"
6
6
  v-show="display(action.display, scope.row) && !editState[scope.$index]"
7
- v-html="action.text"
8
7
  class="action-btn"
9
8
  text
10
9
  type="primary"
11
10
  size="small"
11
+ :icon="action.icon"
12
12
  :key="actionIndex"
13
13
  @click="actionHandler(action, scope.row, scope.$index)"
14
+ ><span v-html="formatter(action.text, scope.row)"></span
14
15
  ></TMagicButton>
15
16
  <TMagicButton
16
17
  class="action-btn"
@@ -35,7 +36,7 @@
35
36
  </template>
36
37
 
37
38
  <script lang="ts" setup>
38
- import { TMagicButton, tMagicMessage, tMagicMessageBox, TMagicTableColumn } from '@tmagic/design';
39
+ import { TMagicButton, tMagicMessage, TMagicTableColumn } from '@tmagic/design';
39
40
 
40
41
  import { ColumnActionConfig, ColumnConfig } from './schema';
41
42
 
@@ -63,56 +64,16 @@ const display = (fuc: boolean | Function | undefined, row: any) => {
63
64
  return true;
64
65
  };
65
66
 
66
- const success = (msg: string, action: ColumnActionConfig, row: any) => {
67
- tMagicMessage.success(msg);
68
- action.after?.(row);
69
- };
70
-
71
- const error = (msg: string) => tMagicMessage.error(msg);
72
-
73
- const deleteAction = async (action: ColumnActionConfig, row: any) => {
74
- await tMagicMessageBox.confirm(`确认删除${row[action.name || 'c_name']}(${row[props.rowkeyName]})?`, '提示', {
75
- confirmButtonText: '确定',
76
- cancelButtonText: '取消',
77
- type: 'warning',
78
- });
79
-
80
- const res = await action.handler?.(row);
81
-
82
- if (res.ret === 0) {
83
- success('删除成功!', action, row);
84
- } else {
85
- error(res.msg || '删除失败');
86
- }
87
- };
88
-
89
- const copyHandler = async (action: ColumnActionConfig, row: any) => {
90
- await tMagicMessageBox.confirm(`确定复制${row[action.name || 'c_name']}(${row.c_id})?`, '提示', {
91
- confirmButtonText: '确定',
92
- cancelButtonText: '取消',
93
- type: 'warning',
94
- });
95
-
96
- try {
97
- const res = await action.handler?.(row);
98
-
99
- if (res.ret === 0) {
100
- success('复制成功!', action, row);
101
- } else {
102
- error(`复制失败!${res.msg}`);
103
- }
104
- } catch (e) {
105
- error('复制失败!');
67
+ const formatter = (fuc: string | Function | undefined, row: any) => {
68
+ if (typeof fuc === 'function') {
69
+ return fuc(row);
106
70
  }
71
+ return fuc;
107
72
  };
108
73
 
109
74
  const actionHandler = async (action: ColumnActionConfig, row: any, index: number) => {
110
75
  await action.before?.(row);
111
- if (action.type === 'delete') {
112
- await deleteAction(action, row);
113
- } else if (action.type === 'copy') {
114
- await copyHandler(action, row);
115
- } else if (action.type === 'edit') {
76
+ if (action.type === 'edit') {
116
77
  props.editState[index] = row;
117
78
  } else {
118
79
  await action.handler?.(row);
@@ -24,7 +24,7 @@
24
24
  type="primary"
25
25
  @click="config.handler?.(scope.row)"
26
26
  >
27
- {{ formatter(config, scope.row) }}
27
+ <span v-html="formatter(config, scope.row)"></span>
28
28
  </TMagicButton>
29
29
 
30
30
  <a v-else-if="config.action === 'img' && config.prop" target="_blank" :href="scope.row[config.prop]"
package/src/schema.ts CHANGED
@@ -20,9 +20,10 @@ import { FormConfig, FormValue } from '@tmagic/form';
20
20
 
21
21
  export interface ColumnActionConfig {
22
22
  type?: 'delete' | 'copy' | 'edit';
23
- display?: (vm: any, row: any) => boolean;
24
- text: string;
23
+ display?: (row: any) => boolean;
24
+ text: string | ((row: any) => string);
25
25
  name: string;
26
+ icon?: any;
26
27
  handler?: (row: any) => Promise<any> | any;
27
28
  before?: (row: any) => void;
28
29
  after?: (row: any) => void;
@@ -104,9 +104,7 @@ declare const _default: {
104
104
  config: ColumnConfig;
105
105
  rowkeyName: string;
106
106
  editState: any;
107
- }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
108
- $slots: {};
109
- });
107
+ }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
110
108
  export default _default;
111
109
  declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
112
110
  declare type __VLS_TypePropsToRuntimeProps<T> = {
@@ -63,9 +63,7 @@ declare const _default: {
63
63
  config: () => {};
64
64
  }>>>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
65
65
  config: ColumnConfig;
66
- }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
67
- $slots: {};
68
- });
66
+ }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
69
67
  export default _default;
70
68
  declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
71
69
  declare type __VLS_TypePropsToRuntimeProps<T> = {
@@ -63,9 +63,7 @@ declare const _default: {
63
63
  config: () => {};
64
64
  }>>>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
65
65
  config: ColumnConfig;
66
- }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
67
- $slots: {};
68
- });
66
+ }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
69
67
  export default _default;
70
68
  declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
71
69
  declare type __VLS_TypePropsToRuntimeProps<T> = {
@@ -206,9 +206,7 @@ declare const _default: {
206
206
  showHeader: boolean;
207
207
  defaultExpandAll: boolean;
208
208
  border: boolean;
209
- }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
210
- $slots: {};
211
- });
209
+ }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
212
210
  export default _default;
213
211
  declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
214
212
  declare type __VLS_TypePropsToRuntimeProps<T> = {
@@ -74,9 +74,7 @@ declare const _default: {
74
74
  }>>>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
75
75
  config: ColumnConfig;
76
76
  editState: any;
77
- }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
78
- $slots: {};
79
- });
77
+ }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
80
78
  export default _default;
81
79
  declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
82
80
  declare type __VLS_TypePropsToRuntimeProps<T> = {
package/types/schema.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { FormConfig, FormValue } from '@tmagic/form';
2
2
  export interface ColumnActionConfig {
3
3
  type?: 'delete' | 'copy' | 'edit';
4
- display?: (vm: any, row: any) => boolean;
5
- text: string;
4
+ display?: (row: any) => boolean;
5
+ text: string | ((row: any) => string);
6
6
  name: string;
7
+ icon?: any;
7
8
  handler?: (row: any) => Promise<any> | any;
8
9
  before?: (row: any) => void;
9
10
  after?: (row: any) => void;