@tmagic/table 1.3.0-alpha.2 → 1.3.0-alpha.21

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,17 +1,15 @@
1
- import { defineComponent, openBlock, createBlock, unref, withCtx, createElementBlock, Fragment, renderList, withDirectives, createElementVNode, vShow, createVNode, createTextVNode, createCommentVNode, resolveDynamicComponent, normalizeProps, mergeProps, toDisplayString, resolveComponent, ref, computed, resolveDirective } from 'vue';
1
+ import { defineComponent, openBlock, createBlock, unref, withCtx, createElementBlock, Fragment, renderList, withDirectives, createVNode, createElementVNode, vShow, createTextVNode, resolveDynamicComponent, normalizeProps, guardReactiveProps, createCommentVNode, mergeProps, toDisplayString, resolveComponent, ref, computed, resolveDirective } from 'vue';
2
2
  import { cloneDeep } from 'lodash-es';
3
- import { TMagicTableColumn, TMagicButton, tMagicMessage, TMagicPopover, TMagicForm, TMagicTag, getConfig, TMagicTable } from '@tmagic/design';
3
+ import { TMagicTableColumn, TMagicTooltip, 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
7
  const _hoisted_1$2 = ["innerHTML"];
8
- const _hoisted_2$1 = /* @__PURE__ */ createTextVNode("保存");
9
- const _hoisted_3$1 = /* @__PURE__ */ createTextVNode("取消");
10
- const __default__$4 = defineComponent({
11
- name: "MTableActionsColumn"
12
- });
13
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
14
- ...__default__$4,
8
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
9
+ ...{
10
+ name: "MTableActionsColumn"
11
+ },
12
+ __name: "ActionsColumn",
15
13
  props: {
16
14
  columns: { default: () => [] },
17
15
  config: { default: () => ({}) },
@@ -69,58 +67,67 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
69
67
  };
70
68
  return (_ctx, _cache) => {
71
69
  return openBlock(), createBlock(unref(TMagicTableColumn), {
72
- label: __props.config.label,
73
- width: __props.config.width,
74
- fixed: __props.config.fixed
70
+ label: _ctx.config.label,
71
+ width: _ctx.config.width,
72
+ fixed: _ctx.config.fixed
75
73
  }, {
76
74
  default: withCtx((scope) => [
77
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.config.actions, (action, actionIndex) => {
78
- return withDirectives((openBlock(), createBlock(unref(TMagicButton), {
79
- class: "action-btn",
80
- text: "",
81
- type: action.buttonType || "primary",
82
- size: "small",
83
- icon: action.icon,
75
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.config.actions, (action, actionIndex) => {
76
+ return openBlock(), createBlock(unref(TMagicTooltip), {
77
+ placement: action.tooltipPlacement || "top",
84
78
  key: actionIndex,
85
- onClick: ($event) => actionHandler(action, scope.row, scope.$index)
79
+ disabled: !Boolean(action.tooltip),
80
+ content: action.tooltip
86
81
  }, {
87
82
  default: withCtx(() => [
88
- createElementVNode("span", {
89
- innerHTML: formatter(action.text, scope.row)
90
- }, null, 8, _hoisted_1$2)
83
+ withDirectives(createVNode(unref(TMagicButton), {
84
+ class: "action-btn",
85
+ text: "",
86
+ size: "small",
87
+ type: action.buttonType || "primary",
88
+ icon: action.icon,
89
+ onClick: ($event) => actionHandler(action, scope.row, scope.$index)
90
+ }, {
91
+ default: withCtx(() => [
92
+ createElementVNode("span", {
93
+ innerHTML: formatter(action.text, scope.row)
94
+ }, null, 8, _hoisted_1$2)
95
+ ]),
96
+ _: 2
97
+ }, 1032, ["type", "icon", "onClick"]), [
98
+ [vShow, display(action.display, scope.row) && !_ctx.editState[scope.$index]]
99
+ ])
91
100
  ]),
92
101
  _: 2
93
- }, 1032, ["type", "icon", "onClick"])), [
94
- [vShow, display(action.display, scope.row) && !__props.editState[scope.$index]]
95
- ]);
102
+ }, 1032, ["placement", "disabled", "content"]);
96
103
  }), 128)),
97
104
  withDirectives(createVNode(unref(TMagicButton), {
98
105
  class: "action-btn",
99
106
  text: "",
100
107
  type: "primary",
101
108
  size: "small",
102
- onClick: ($event) => save(scope.$index, __props.config)
109
+ onClick: ($event) => save(scope.$index, _ctx.config)
103
110
  }, {
104
111
  default: withCtx(() => [
105
- _hoisted_2$1
112
+ createTextVNode("保存")
106
113
  ]),
107
114
  _: 2
108
115
  }, 1032, ["onClick"]), [
109
- [vShow, __props.editState[scope.$index]]
116
+ [vShow, _ctx.editState[scope.$index]]
110
117
  ]),
111
118
  withDirectives(createVNode(unref(TMagicButton), {
112
119
  class: "action-btn",
113
120
  text: "",
114
121
  type: "primary",
115
122
  size: "small",
116
- onClick: ($event) => __props.editState[scope.$index] = void 0
123
+ onClick: ($event) => _ctx.editState[scope.$index] = void 0
117
124
  }, {
118
125
  default: withCtx(() => [
119
- _hoisted_3$1
126
+ createTextVNode("取消")
120
127
  ]),
121
128
  _: 2
122
129
  }, 1032, ["onClick"]), [
123
- [vShow, __props.editState[scope.$index]]
130
+ [vShow, _ctx.editState[scope.$index]]
124
131
  ])
125
132
  ]),
126
133
  _: 1
@@ -129,12 +136,46 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
129
136
  }
130
137
  });
131
138
 
132
- const _hoisted_1$1 = ["innerHTML"];
133
- const __default__$3 = defineComponent({
134
- name: "MTableExpandColumn"
139
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
140
+ ...{
141
+ name: "MTableColumn"
142
+ },
143
+ __name: "ComponentColumn",
144
+ props: {
145
+ config: { default: () => ({}) }
146
+ },
147
+ setup(__props) {
148
+ const props = __props;
149
+ const componentProps = (row) => {
150
+ if (typeof props.config.props === "function") {
151
+ return props.config.props(row) || {};
152
+ }
153
+ return props.config.props || {};
154
+ };
155
+ return (_ctx, _cache) => {
156
+ return openBlock(), createBlock(unref(TMagicTableColumn), {
157
+ "show-overflow-tooltip": "",
158
+ label: _ctx.config.label,
159
+ width: _ctx.config.width,
160
+ fixed: _ctx.config.fixed,
161
+ sortable: _ctx.config.sortable,
162
+ prop: _ctx.config.prop
163
+ }, {
164
+ default: withCtx((scope) => [
165
+ (openBlock(), createBlock(resolveDynamicComponent(_ctx.config.component), normalizeProps(guardReactiveProps(componentProps(scope.row))), null, 16))
166
+ ]),
167
+ _: 1
168
+ }, 8, ["label", "width", "fixed", "sortable", "prop"]);
169
+ };
170
+ }
135
171
  });
172
+
173
+ const _hoisted_1$1 = ["innerHTML"];
136
174
  const _sfc_main$3 = /* @__PURE__ */ defineComponent({
137
- ...__default__$3,
175
+ ...{
176
+ name: "MTableExpandColumn"
177
+ },
178
+ __name: "ExpandColumn",
138
179
  props: {
139
180
  config: { default: () => ({}) }
140
181
  },
@@ -149,22 +190,22 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
149
190
  return (_ctx, _cache) => {
150
191
  return openBlock(), createBlock(unref(TMagicTableColumn), { type: "expand" }, {
151
192
  default: withCtx((scope) => [
152
- __props.config.table ? (openBlock(), createBlock(_sfc_main, {
193
+ _ctx.config.table ? (openBlock(), createBlock(_sfc_main, {
153
194
  key: 0,
154
195
  "show-header": false,
155
- columns: __props.config.table,
156
- data: __props.config.prop && scope.row[__props.config.prop] || []
196
+ columns: _ctx.config.table,
197
+ data: _ctx.config.prop && scope.row[_ctx.config.prop] || []
157
198
  }, null, 8, ["columns", "data"])) : createCommentVNode("", true),
158
- __props.config.form ? (openBlock(), createBlock(unref(MForm), {
199
+ _ctx.config.form ? (openBlock(), createBlock(unref(MForm), {
159
200
  key: 1,
160
- config: __props.config.form,
161
- "init-values": __props.config.values || __props.config.prop && scope.row[__props.config.prop] || {}
201
+ config: _ctx.config.form,
202
+ "init-values": _ctx.config.values || _ctx.config.prop && scope.row[_ctx.config.prop] || {}
162
203
  }, null, 8, ["config", "init-values"])) : createCommentVNode("", true),
163
- __props.config.expandContent ? (openBlock(), createElementBlock("div", {
204
+ _ctx.config.expandContent ? (openBlock(), createElementBlock("div", {
164
205
  key: 2,
165
- innerHTML: __props.config.expandContent(scope.row, __props.config.prop)
206
+ innerHTML: _ctx.config.expandContent(scope.row, _ctx.config.prop)
166
207
  }, null, 8, _hoisted_1$1)) : createCommentVNode("", true),
167
- __props.config.component ? (openBlock(), createBlock(resolveDynamicComponent(__props.config.component), normalizeProps(mergeProps({ key: 3 }, componentProps(scope.row))), null, 16)) : createCommentVNode("", true)
208
+ _ctx.config.component ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.config.component), normalizeProps(mergeProps({ key: 3 }, componentProps(scope.row))), null, 16)) : createCommentVNode("", true)
168
209
  ]),
169
210
  _: 1
170
211
  });
@@ -189,27 +230,27 @@ const formatter = (item, row) => {
189
230
  }
190
231
  };
191
232
 
192
- const __default__$2 = defineComponent({
193
- name: "MTablePopoverColumn"
194
- });
195
233
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
196
- ...__default__$2,
234
+ ...{
235
+ name: "MTablePopoverColumn"
236
+ },
237
+ __name: "PopoverColumn",
197
238
  props: {
198
239
  config: { default: () => ({}) }
199
240
  },
200
241
  setup(__props) {
201
242
  return (_ctx, _cache) => {
202
243
  return openBlock(), createBlock(unref(TMagicTableColumn), {
203
- label: __props.config.label,
204
- width: __props.config.width,
205
- fixed: __props.config.fixed
244
+ label: _ctx.config.label,
245
+ width: _ctx.config.width,
246
+ fixed: _ctx.config.fixed
206
247
  }, {
207
248
  default: withCtx((scope) => [
208
- __props.config.popover ? (openBlock(), createBlock(unref(TMagicPopover), {
249
+ _ctx.config.popover ? (openBlock(), createBlock(unref(TMagicPopover), {
209
250
  key: 0,
210
- placement: __props.config.popover.placement,
211
- width: __props.config.popover.width,
212
- trigger: __props.config.popover.trigger
251
+ placement: _ctx.config.popover.placement,
252
+ width: _ctx.config.popover.width,
253
+ trigger: _ctx.config.popover.trigger
213
254
  }, {
214
255
  reference: withCtx(() => [
215
256
  createVNode(unref(TMagicButton), {
@@ -217,17 +258,17 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
217
258
  type: "primary"
218
259
  }, {
219
260
  default: withCtx(() => [
220
- createTextVNode(toDisplayString(__props.config.text || unref(formatter)(__props.config, scope.row)), 1)
261
+ createTextVNode(toDisplayString(_ctx.config.text || unref(formatter)(_ctx.config, scope.row)), 1)
221
262
  ]),
222
263
  _: 2
223
264
  }, 1024)
224
265
  ]),
225
266
  default: withCtx(() => [
226
- __props.config.popover.tableEmbed ? (openBlock(), createBlock(_sfc_main, {
267
+ _ctx.config.popover.tableEmbed ? (openBlock(), createBlock(_sfc_main, {
227
268
  key: 0,
228
- "show-header": __props.config.showHeader,
229
- columns: __props.config.table,
230
- data: __props.config.prop && scope.row[__props.config.prop] || []
269
+ "show-header": _ctx.config.showHeader,
270
+ columns: _ctx.config.table,
271
+ data: _ctx.config.prop && scope.row[_ctx.config.prop] || []
231
272
  }, null, 8, ["show-header", "columns", "data"])) : createCommentVNode("", true)
232
273
  ]),
233
274
  _: 2
@@ -243,13 +284,12 @@ const _hoisted_1 = ["innerHTML"];
243
284
  const _hoisted_2 = ["href"];
244
285
  const _hoisted_3 = ["src"];
245
286
  const _hoisted_4 = ["href"];
246
- const _hoisted_5 = /* @__PURE__ */ createTextVNode("扩展配置");
247
- const _hoisted_6 = ["innerHTML"];
248
- const __default__$1 = defineComponent({
249
- name: "MTableColumn"
250
- });
287
+ const _hoisted_5 = ["innerHTML"];
251
288
  const _sfc_main$1 = /* @__PURE__ */ defineComponent({
252
- ...__default__$1,
289
+ ...{
290
+ name: "MTableColumn"
291
+ },
292
+ __name: "TextColumn",
253
293
  props: {
254
294
  config: { default: () => ({}) },
255
295
  editState: { default: () => ({}) }
@@ -260,60 +300,60 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
260
300
  const _component_el_tooltip = resolveComponent("el-tooltip");
261
301
  return openBlock(), createBlock(unref(TMagicTableColumn), {
262
302
  "show-overflow-tooltip": "",
263
- label: __props.config.label,
264
- width: __props.config.width,
265
- fixed: __props.config.fixed,
266
- sortable: __props.config.sortable,
267
- prop: __props.config.prop
303
+ label: _ctx.config.label,
304
+ width: _ctx.config.width,
305
+ fixed: _ctx.config.fixed,
306
+ sortable: _ctx.config.sortable,
307
+ prop: _ctx.config.prop
268
308
  }, {
269
309
  default: withCtx((scope) => [
270
- __props.config.type && __props.editState[scope.$index] ? (openBlock(), createBlock(unref(TMagicForm), {
310
+ _ctx.config.type && _ctx.editState[scope.$index] ? (openBlock(), createBlock(unref(TMagicForm), {
271
311
  key: 0,
272
312
  "label-width": "0",
273
- model: __props.editState[scope.$index]
313
+ model: _ctx.editState[scope.$index]
274
314
  }, {
275
315
  default: withCtx(() => [
276
316
  createVNode(_component_m_form_container, {
277
- prop: __props.config.prop,
278
- rules: __props.config.rules,
279
- config: __props.config,
280
- name: __props.config.prop,
281
- model: __props.editState[scope.$index]
317
+ prop: _ctx.config.prop,
318
+ rules: _ctx.config.rules,
319
+ config: _ctx.config,
320
+ name: _ctx.config.prop,
321
+ model: _ctx.editState[scope.$index]
282
322
  }, null, 8, ["prop", "rules", "config", "name", "model"])
283
323
  ]),
284
324
  _: 2
285
- }, 1032, ["model"])) : __props.config.action === "actionLink" && __props.config.prop ? (openBlock(), createBlock(unref(TMagicButton), {
325
+ }, 1032, ["model"])) : _ctx.config.action === "actionLink" && _ctx.config.prop ? (openBlock(), createBlock(unref(TMagicButton), {
286
326
  key: 1,
287
327
  text: "",
288
328
  type: "primary",
289
- onClick: ($event) => __props.config.handler?.(scope.row)
329
+ onClick: ($event) => _ctx.config.handler?.(scope.row)
290
330
  }, {
291
331
  default: withCtx(() => [
292
332
  createElementVNode("span", {
293
- innerHTML: unref(formatter)(__props.config, scope.row)
333
+ innerHTML: unref(formatter)(_ctx.config, scope.row)
294
334
  }, null, 8, _hoisted_1)
295
335
  ]),
296
336
  _: 2
297
- }, 1032, ["onClick"])) : __props.config.action === "img" && __props.config.prop ? (openBlock(), createElementBlock("a", {
337
+ }, 1032, ["onClick"])) : _ctx.config.action === "img" && _ctx.config.prop ? (openBlock(), createElementBlock("a", {
298
338
  key: 2,
299
339
  target: "_blank",
300
- href: scope.row[__props.config.prop]
340
+ href: scope.row[_ctx.config.prop]
301
341
  }, [
302
342
  createElementVNode("img", {
303
- src: scope.row[__props.config.prop],
343
+ src: scope.row[_ctx.config.prop],
304
344
  height: "50"
305
345
  }, null, 8, _hoisted_3)
306
- ], 8, _hoisted_2)) : __props.config.action === "link" && __props.config.prop ? (openBlock(), createElementBlock("a", {
346
+ ], 8, _hoisted_2)) : _ctx.config.action === "link" && _ctx.config.prop ? (openBlock(), createElementBlock("a", {
307
347
  key: 3,
308
348
  target: "_blank",
309
- href: scope.row[__props.config.prop],
349
+ href: scope.row[_ctx.config.prop],
310
350
  class: "keep-all"
311
- }, toDisplayString(scope.row[__props.config.prop]), 9, _hoisted_4)) : __props.config.action === "tip" ? (openBlock(), createBlock(_component_el_tooltip, {
351
+ }, toDisplayString(scope.row[_ctx.config.prop]), 9, _hoisted_4)) : _ctx.config.action === "tip" ? (openBlock(), createBlock(_component_el_tooltip, {
312
352
  key: 4,
313
353
  placement: "left"
314
354
  }, {
315
355
  content: withCtx(() => [
316
- createElementVNode("div", null, toDisplayString(unref(formatter)(__props.config, scope.row)), 1)
356
+ createElementVNode("div", null, toDisplayString(unref(formatter)(_ctx.config, scope.row)), 1)
317
357
  ]),
318
358
  default: withCtx(() => [
319
359
  createVNode(unref(TMagicButton), {
@@ -321,25 +361,25 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
321
361
  type: "primary"
322
362
  }, {
323
363
  default: withCtx(() => [
324
- _hoisted_5
364
+ createTextVNode(toDisplayString(_ctx.config.buttonText || "扩展配置"), 1)
325
365
  ]),
326
366
  _: 1
327
367
  })
328
368
  ]),
329
369
  _: 2
330
- }, 1024)) : __props.config.action === "tag" && __props.config.prop ? (openBlock(), createBlock(unref(TMagicTag), {
370
+ }, 1024)) : _ctx.config.action === "tag" && _ctx.config.prop ? (openBlock(), createBlock(unref(TMagicTag), {
331
371
  key: 5,
332
- type: typeof __props.config.type === "function" ? __props.config.type(scope.row[__props.config.prop], scope.row) : __props.config.type,
372
+ type: typeof _ctx.config.type === "function" ? _ctx.config.type(scope.row[_ctx.config.prop], scope.row) : _ctx.config.type,
333
373
  "close-transition": ""
334
374
  }, {
335
375
  default: withCtx(() => [
336
- createTextVNode(toDisplayString(unref(formatter)(__props.config, scope.row)), 1)
376
+ createTextVNode(toDisplayString(unref(formatter)(_ctx.config, scope.row)), 1)
337
377
  ]),
338
378
  _: 2
339
379
  }, 1032, ["type"])) : (openBlock(), createElementBlock("div", {
340
380
  key: 6,
341
- innerHTML: unref(formatter)(__props.config, scope.row)
342
- }, null, 8, _hoisted_6))
381
+ innerHTML: unref(formatter)(_ctx.config, scope.row)
382
+ }, null, 8, _hoisted_5))
343
383
  ]),
344
384
  _: 1
345
385
  }, 8, ["label", "width", "fixed", "sortable", "prop"]);
@@ -347,21 +387,21 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
347
387
  }
348
388
  });
349
389
 
350
- const __default__ = defineComponent({
351
- name: "MTable"
352
- });
353
390
  const _sfc_main = /* @__PURE__ */ defineComponent({
354
- ...__default__,
391
+ ...{
392
+ name: "MTable"
393
+ },
394
+ __name: "Table",
355
395
  props: {
356
- data: null,
396
+ data: {},
357
397
  columns: { default: () => [] },
358
- spanMethod: null,
398
+ spanMethod: {},
359
399
  loading: { type: Boolean, default: false },
360
- bodyHeight: null,
400
+ bodyHeight: {},
361
401
  showHeader: { type: Boolean, default: true },
362
- emptyText: null,
402
+ emptyText: {},
363
403
  defaultExpandAll: { type: Boolean, default: false },
364
- rowkeyName: null,
404
+ rowkeyName: {},
365
405
  border: { type: Boolean, default: false }
366
406
  },
367
407
  emits: [
@@ -373,11 +413,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
373
413
  "expand-change",
374
414
  "cell-click"
375
415
  ],
376
- setup(__props, { expose, emit }) {
416
+ setup(__props, { expose: __expose, emit }) {
377
417
  const props = __props;
378
418
  const tMagicTable = ref();
379
419
  const editState = ref([]);
380
- const tableColumnComponent = getConfig("components").tableColumn;
420
+ const tableColumnComponent = getConfig("components")?.tableColumn;
381
421
  const selectionColumn = computed(() => {
382
422
  const column = props.columns.filter((item) => item.selection);
383
423
  return column.length ? column[0] : null;
@@ -430,7 +470,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
430
470
  colspan: 0
431
471
  });
432
472
  };
433
- expose({
473
+ __expose({
434
474
  toggleRowSelection,
435
475
  toggleRowExpansion,
436
476
  clearSelection
@@ -442,14 +482,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
442
482
  class: "m-table",
443
483
  ref_key: "tMagicTable",
444
484
  ref: tMagicTable,
445
- data: unref(tableData),
446
- "show-header": __props.showHeader,
447
- "max-height": __props.bodyHeight,
448
- "default-expand-all": __props.defaultExpandAll,
449
- border: unref(hasBorder),
450
- "row-key": __props.rowkeyName || "id",
485
+ data: tableData.value,
486
+ "show-header": _ctx.showHeader,
487
+ "max-height": _ctx.bodyHeight,
488
+ "default-expand-all": _ctx.defaultExpandAll,
489
+ border: hasBorder.value,
490
+ "row-key": _ctx.rowkeyName || "id",
451
491
  "tree-props": { children: "children" },
452
- "empty-text": __props.emptyText || "暂无数据",
492
+ "empty-text": _ctx.emptyText || "暂无数据",
453
493
  "span-method": objectSpanMethod,
454
494
  onSortChange: sortChange,
455
495
  onSelect: selectHandler,
@@ -459,20 +499,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
459
499
  onExpandChange: expandChange
460
500
  }, {
461
501
  default: withCtx(() => [
462
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (item, columnIndex) => {
502
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.columns, (item, columnIndex) => {
463
503
  return openBlock(), createElementBlock(Fragment, null, [
464
504
  item.type === "expand" ? (openBlock(), createBlock(_sfc_main$3, {
465
505
  config: item,
466
506
  key: columnIndex
467
- }, null, 8, ["config"])) : item.selection ? (openBlock(), createBlock(resolveDynamicComponent(unref(tableColumnComponent).component), {
507
+ }, null, 8, ["config"])) : item.type === "component" ? (openBlock(), createBlock(_sfc_main$4, {
508
+ config: item,
509
+ key: columnIndex
510
+ }, null, 8, ["config"])) : item.selection ? (openBlock(), createBlock(resolveDynamicComponent(unref(tableColumnComponent)?.component || "el-table-column"), {
468
511
  width: "40",
469
512
  type: "selection",
470
513
  key: columnIndex,
471
514
  selectable: item.selectable
472
- }, null, 8, ["selectable"])) : item.actions ? (openBlock(), createBlock(_sfc_main$4, {
473
- columns: __props.columns,
515
+ }, null, 8, ["selectable"])) : item.actions ? (openBlock(), createBlock(_sfc_main$5, {
516
+ columns: _ctx.columns,
474
517
  config: item,
475
- "rowkey-name": __props.rowkeyName,
518
+ "rowkey-name": _ctx.rowkeyName,
476
519
  "edit-state": editState.value,
477
520
  key: columnIndex,
478
521
  onAfterAction: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("after-action"))
@@ -489,7 +532,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
489
532
  ]),
490
533
  _: 1
491
534
  }, 8, ["data", "show-header", "max-height", "default-expand-all", "border", "row-key", "empty-text"])), [
492
- [_directive_loading, __props.loading]
535
+ [_directive_loading, _ctx.loading]
493
536
  ]);
494
537
  };
495
538
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tmagic-table.js","sources":["../src/ActionsColumn.vue","../src/ExpandColumn.vue","../src/utils.ts","../src/PopoverColumn.vue","../src/TextColumn.vue","../src/Table.vue","../src/index.ts"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MTableActionsColumn',\n})\n</script>\n<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=\"action.buttonType || '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 name=\"MTableActionsColumn\">\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(['after-action']);\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, index);\n if (action.type === 'edit') {\n props.editState[index] = row;\n } else {\n await action.handler?.(row, index);\n }\n action.after?.(row, index);\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('after-action');\n } else {\n tMagicMessage.error(res.msg || '保存失败');\n }\n } else {\n props.editState[index] = undefined;\n emit('after-action');\n }\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MTableExpandColumn',\n})\n</script>\n<template>\n <TMagicTableColumn type=\"expand\">\n <template #default=\"scope\">\n <MTable\n v-if=\"config.table\"\n :show-header=\"false\"\n :columns=\"config.table\"\n :data=\"(config.prop && scope.row[config.prop]) || []\"\n ></MTable>\n <MForm\n v-if=\"config.form\"\n :config=\"config.form\"\n :init-values=\"config.values || (config.prop && scope.row[config.prop]) || {}\"\n ></MForm>\n <div v-if=\"config.expandContent\" v-html=\"config.expandContent(scope.row, config.prop)\"></div>\n <component v-if=\"config.component\" :is=\"config.component\" v-bind=\"componentProps(scope.row)\"></component>\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup name=\"MTableExpandColumn\">\nimport { TMagicTableColumn } from '@tmagic/design';\nimport { MForm } from '@tmagic/form';\n\nimport { ColumnConfig } from './schema';\nimport MTable from './Table.vue';\n\nconst props = withDefaults(\n defineProps<{\n config: ColumnConfig;\n }>(),\n {\n config: () => ({}),\n },\n);\n\nconst componentProps = (row: any) => {\n if (typeof props.config.props === 'function') {\n return props.config.props(row) || {};\n }\n return props.config.props || {};\n};\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MTablePopoverColumn',\n})\n</script>\n<template>\n <TMagicTableColumn :label=\"config.label\" :width=\"config.width\" :fixed=\"config.fixed\">\n <template v-slot=\"scope\">\n <TMagicPopover\n v-if=\"config.popover\"\n :placement=\"config.popover.placement\"\n :width=\"config.popover.width\"\n :trigger=\"config.popover.trigger\"\n >\n <MTable\n v-if=\"config.popover.tableEmbed\"\n :show-header=\"config.showHeader\"\n :columns=\"config.table\"\n :data=\"(config.prop && scope.row[config.prop]) || []\"\n ></MTable>\n <template #reference>\n <TMagicButton text type=\"primary\"> {{ config.text || formatter(config, scope.row) }}</TMagicButton>\n </template>\n </TMagicPopover>\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup name=\"MTablePopoverColumn\">\nimport { TMagicButton, TMagicPopover, TMagicTableColumn } from '@tmagic/design';\n\nimport { ColumnConfig } from './schema';\nimport MTable from './Table.vue';\nimport { formatter } from './utils';\n\nwithDefaults(\n defineProps<{\n config: ColumnConfig;\n }>(),\n {\n config: () => ({}),\n },\n);\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MTableColumn',\n})\n</script>\n<template>\n <TMagicTableColumn\n show-overflow-tooltip\n :label=\"config.label\"\n :width=\"config.width\"\n :fixed=\"config.fixed\"\n :sortable=\"config.sortable\"\n :prop=\"config.prop\"\n >\n <template v-slot=\"scope\">\n <TMagicForm v-if=\"config.type && editState[scope.$index]\" label-width=\"0\" :model=\"editState[scope.$index]\">\n <m-form-container\n :prop=\"config.prop\"\n :rules=\"config.rules\"\n :config=\"config\"\n :name=\"config.prop\"\n :model=\"editState[scope.$index]\"\n ></m-form-container>\n </TMagicForm>\n\n <TMagicButton\n v-else-if=\"config.action === 'actionLink' && config.prop\"\n text\n type=\"primary\"\n @click=\"config.handler?.(scope.row)\"\n >\n <span v-html=\"formatter(config, scope.row)\"></span>\n </TMagicButton>\n\n <a v-else-if=\"config.action === 'img' && config.prop\" target=\"_blank\" :href=\"scope.row[config.prop]\"\n ><img :src=\"scope.row[config.prop]\" height=\"50\"\n /></a>\n\n <a\n v-else-if=\"config.action === 'link' && config.prop\"\n target=\"_blank\"\n :href=\"scope.row[config.prop]\"\n class=\"keep-all\"\n >{{ scope.row[config.prop] }}</a\n >\n\n <el-tooltip v-else-if=\"config.action === 'tip'\" placement=\"left\">\n <template #content>\n <div>{{ formatter(config, scope.row) }}</div>\n </template>\n <TMagicButton text type=\"primary\">扩展配置</TMagicButton>\n </el-tooltip>\n\n <TMagicTag\n v-else-if=\"config.action === 'tag' && config.prop\"\n :type=\"typeof config.type === 'function' ? config.type(scope.row[config.prop], scope.row) : config.type\"\n close-transition\n >{{ formatter(config, scope.row) }}</TMagicTag\n >\n <div v-else v-html=\"formatter(config, scope.row)\"></div>\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup name=\"MTableColumn\">\nimport { TMagicButton, TMagicForm, TMagicTableColumn, TMagicTag } from '@tmagic/design';\n\nimport { ColumnConfig } from './schema';\nimport { formatter } from './utils';\n\nwithDefaults(\n defineProps<{\n config: ColumnConfig;\n editState?: any;\n }>(),\n {\n config: () => ({}),\n editState: () => ({}),\n },\n);\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MTable',\n})\n</script>\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 || '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 @cell-click=\"cellClickHandler\"\n @expand-change=\"expandChange\"\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 @after-action=\"$emit('after-action')\"\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 name=\"MTable\">\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([\n 'sort-change',\n 'after-action',\n 'select',\n 'select-all',\n 'selection-change',\n 'expand-change',\n 'cell-click',\n]);\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 cellClickHandler = (...args: any[]) => {\n emit('cell-click', ...args);\n};\n\nconst expandChange = (...args: any[]) => {\n emit('expand-change', ...args);\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) 2023 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":["__default__","Table"],"mappings":"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"}
1
+ {"version":3,"file":"tmagic-table.js","sources":["../src/ActionsColumn.vue","../src/ComponentColumn.vue","../src/ExpandColumn.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 <TMagicTooltip\n v-for=\"(action, actionIndex) in config.actions\"\n :placement=\"action.tooltipPlacement || 'top'\"\n :key=\"actionIndex\"\n :disabled=\"!Boolean(action.tooltip)\"\n :content=\"action.tooltip\"\n >\n <TMagicButton\n v-show=\"display(action.display, scope.row) && !editState[scope.$index]\"\n class=\"action-btn\"\n text\n size=\"small\"\n :type=\"action.buttonType || 'primary'\"\n :icon=\"action.icon\"\n @click=\"actionHandler(action, scope.row, scope.$index)\"\n ><span v-html=\"formatter(action.text, scope.row)\"></span\n ></TMagicButton>\n </TMagicTooltip>\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, TMagicTooltip } from '@tmagic/design';\n\nimport { ColumnActionConfig, ColumnConfig } from './schema';\n\ndefineOptions({\n name: 'MTableActionsColumn',\n});\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(['after-action']);\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, index);\n if (action.type === 'edit') {\n props.editState[index] = row;\n } else {\n await action.handler?.(row, index);\n }\n action.after?.(row, index);\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('after-action');\n } else {\n tMagicMessage.error(res.msg || '保存失败');\n }\n } else {\n props.editState[index] = undefined;\n emit('after-action');\n }\n};\n</script>\n","<template>\n <TMagicTableColumn\n show-overflow-tooltip\n :label=\"config.label\"\n :width=\"config.width\"\n :fixed=\"config.fixed\"\n :sortable=\"config.sortable\"\n :prop=\"config.prop\"\n >\n <template v-slot=\"scope\">\n <component :is=\"config.component\" v-bind=\"componentProps(scope.row)\"></component>\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup>\nimport { TMagicTableColumn } from '@tmagic/design';\n\nimport { ColumnConfig } from './schema';\n\ndefineOptions({\n name: 'MTableColumn',\n});\n\nconst props = withDefaults(\n defineProps<{\n config: ColumnConfig;\n }>(),\n {\n config: () => ({}),\n },\n);\n\nconst componentProps = (row: any) => {\n if (typeof props.config.props === 'function') {\n return props.config.props(row) || {};\n }\n return props.config.props || {};\n};\n</script>\n","<template>\n <TMagicTableColumn type=\"expand\">\n <template #default=\"scope\">\n <MTable\n v-if=\"config.table\"\n :show-header=\"false\"\n :columns=\"config.table\"\n :data=\"(config.prop && scope.row[config.prop]) || []\"\n ></MTable>\n <MForm\n v-if=\"config.form\"\n :config=\"config.form\"\n :init-values=\"config.values || (config.prop && scope.row[config.prop]) || {}\"\n ></MForm>\n <div v-if=\"config.expandContent\" v-html=\"config.expandContent(scope.row, config.prop)\"></div>\n <component v-if=\"config.component\" :is=\"config.component\" v-bind=\"componentProps(scope.row)\"></component>\n </template>\n </TMagicTableColumn>\n</template>\n\n<script lang=\"ts\" setup>\nimport { TMagicTableColumn } from '@tmagic/design';\nimport { MForm } from '@tmagic/form';\n\nimport { ColumnConfig } from './schema';\nimport MTable from './Table.vue';\n\ndefineOptions({\n name: 'MTableExpandColumn',\n});\n\nconst props = withDefaults(\n defineProps<{\n config: ColumnConfig;\n }>(),\n {\n config: () => ({}),\n },\n);\n\nconst componentProps = (row: any) => {\n if (typeof props.config.props === 'function') {\n return props.config.props(row) || {};\n }\n return props.config.props || {};\n};\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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 || '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 @cell-click=\"cellClickHandler\"\n @expand-change=\"expandChange\"\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.type === 'component'\">\n <ComponentColumn :config=\"item\" :key=\"columnIndex\"></ComponentColumn>\n </template>\n\n <template v-else-if=\"item.selection\">\n <component\n width=\"40\"\n type=\"selection\"\n :is=\"tableColumnComponent?.component || 'el-table-column'\"\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 @after-action=\"$emit('after-action')\"\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 ComponentColumn from './ComponentColumn.vue';\nimport ExpandColumn from './ExpandColumn.vue';\nimport PopoverColumn from './PopoverColumn.vue';\nimport TextColumn from './TextColumn.vue';\n\ndefineOptions({\n name: 'MTable',\n});\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([\n 'sort-change',\n 'after-action',\n 'select',\n 'select-all',\n 'selection-change',\n 'expand-change',\n 'cell-click',\n]);\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 cellClickHandler = (...args: any[]) => {\n emit('cell-click', ...args);\n};\n\nconst expandChange = (...args: any[]) => {\n emit('expand-change', ...args);\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) 2023 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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"}