@tmagic/table 1.2.0-beta.2 → 1.2.0-beta.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.
@@ -0,0 +1,507 @@
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';
2
+ import { cloneDeep } from 'lodash-es';
3
+ import { TMagicTableColumn, TMagicButton, tMagicMessage, TMagicPopover, TMagicForm, TMagicTag, getConfig, TMagicTable } from '@tmagic/design';
4
+ import { MForm } from '@tmagic/form';
5
+ import { datetimeFormatter } from '@tmagic/utils';
6
+
7
+ const _hoisted_1$2 = ["innerHTML"];
8
+ const _hoisted_2$1 = /* @__PURE__ */ createTextVNode("\u4FDD\u5B58");
9
+ const _hoisted_3$1 = /* @__PURE__ */ createTextVNode("\u53D6\u6D88");
10
+ const __default__$4 = defineComponent({
11
+ name: "MTableActionsColumn"
12
+ });
13
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
14
+ ...__default__$4,
15
+ props: {
16
+ columns: { default: () => [] },
17
+ config: { default: () => ({}) },
18
+ rowkeyName: { default: "c_id" },
19
+ editState: { default: () => [] }
20
+ },
21
+ emits: ["after-action"],
22
+ setup(__props, { emit }) {
23
+ const props = __props;
24
+ const display = (fuc, row) => {
25
+ if (typeof fuc === "function") {
26
+ return fuc(row);
27
+ }
28
+ return true;
29
+ };
30
+ const formatter = (fuc, row) => {
31
+ if (typeof fuc === "function") {
32
+ return fuc(row);
33
+ }
34
+ return fuc;
35
+ };
36
+ const actionHandler = async (action, row, index) => {
37
+ await action.before?.(row);
38
+ if (action.type === "edit") {
39
+ props.editState[index] = row;
40
+ } else {
41
+ await action.handler?.(row);
42
+ }
43
+ action.after?.(row);
44
+ };
45
+ const save = async (index, config) => {
46
+ const action = config.actions?.find((item) => item.type === "edit")?.action;
47
+ if (!action)
48
+ return;
49
+ const data = {};
50
+ const row = props.editState[index];
51
+ props.columns.filter((item) => item.type).forEach((column) => {
52
+ data[column.prop] = row[column.prop];
53
+ });
54
+ const res = await action({
55
+ data
56
+ });
57
+ if (res) {
58
+ if (res.ret === 0) {
59
+ tMagicMessage.success("\u4FDD\u5B58\u6210\u529F");
60
+ props.editState[index] = void 0;
61
+ emit("after-action");
62
+ } else {
63
+ tMagicMessage.error(res.msg || "\u4FDD\u5B58\u5931\u8D25");
64
+ }
65
+ } else {
66
+ props.editState[index] = void 0;
67
+ emit("after-action");
68
+ }
69
+ };
70
+ return (_ctx, _cache) => {
71
+ return openBlock(), createBlock(unref(TMagicTableColumn), {
72
+ label: __props.config.label,
73
+ width: __props.config.width,
74
+ fixed: __props.config.fixed
75
+ }, {
76
+ 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: "primary",
82
+ size: "small",
83
+ icon: action.icon,
84
+ key: actionIndex,
85
+ onClick: ($event) => actionHandler(action, scope.row, scope.$index)
86
+ }, {
87
+ default: withCtx(() => [
88
+ createElementVNode("span", {
89
+ innerHTML: formatter(action.text, scope.row)
90
+ }, null, 8, _hoisted_1$2)
91
+ ]),
92
+ _: 2
93
+ }, 1032, ["icon", "onClick"])), [
94
+ [vShow, display(action.display, scope.row) && !__props.editState[scope.$index]]
95
+ ]);
96
+ }), 128)),
97
+ withDirectives(createVNode(unref(TMagicButton), {
98
+ class: "action-btn",
99
+ text: "",
100
+ type: "primary",
101
+ size: "small",
102
+ onClick: ($event) => save(scope.$index, __props.config)
103
+ }, {
104
+ default: withCtx(() => [
105
+ _hoisted_2$1
106
+ ]),
107
+ _: 2
108
+ }, 1032, ["onClick"]), [
109
+ [vShow, __props.editState[scope.$index]]
110
+ ]),
111
+ withDirectives(createVNode(unref(TMagicButton), {
112
+ class: "action-btn",
113
+ text: "",
114
+ type: "primary",
115
+ size: "small",
116
+ onClick: ($event) => __props.editState[scope.$index] = void 0
117
+ }, {
118
+ default: withCtx(() => [
119
+ _hoisted_3$1
120
+ ]),
121
+ _: 2
122
+ }, 1032, ["onClick"]), [
123
+ [vShow, __props.editState[scope.$index]]
124
+ ])
125
+ ]),
126
+ _: 1
127
+ }, 8, ["label", "width", "fixed"]);
128
+ };
129
+ }
130
+ });
131
+
132
+ const _hoisted_1$1 = ["innerHTML"];
133
+ const __default__$3 = defineComponent({
134
+ name: "MTableExpandColumn"
135
+ });
136
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
137
+ ...__default__$3,
138
+ props: {
139
+ config: { default: () => ({}) }
140
+ },
141
+ setup(__props) {
142
+ const props = __props;
143
+ const componentProps = (row) => {
144
+ if (typeof props.config.props === "function") {
145
+ return props.config.props(row) || {};
146
+ }
147
+ return props.config.props || {};
148
+ };
149
+ return (_ctx, _cache) => {
150
+ return openBlock(), createBlock(unref(TMagicTableColumn), { type: "expand" }, {
151
+ default: withCtx((scope) => [
152
+ __props.config.table ? (openBlock(), createBlock(_sfc_main, {
153
+ key: 0,
154
+ "show-header": false,
155
+ columns: __props.config.table,
156
+ data: __props.config.prop && scope.row[__props.config.prop] || []
157
+ }, null, 8, ["columns", "data"])) : createCommentVNode("", true),
158
+ __props.config.form ? (openBlock(), createBlock(unref(MForm), {
159
+ key: 1,
160
+ config: __props.config.form,
161
+ "init-values": __props.config.values || __props.config.prop && scope.row[__props.config.prop] || {}
162
+ }, null, 8, ["config", "init-values"])) : createCommentVNode("", true),
163
+ __props.config.expandContent ? (openBlock(), createElementBlock("div", {
164
+ key: 2,
165
+ innerHTML: __props.config.expandContent(scope.row, __props.config.prop)
166
+ }, 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)
168
+ ]),
169
+ _: 1
170
+ });
171
+ };
172
+ }
173
+ });
174
+
175
+ const formatter = (item, row) => {
176
+ if (!item.prop)
177
+ return "";
178
+ if (item.formatter) {
179
+ if (item.formatter === "datetime") {
180
+ item.formatter = (value) => datetimeFormatter(value);
181
+ }
182
+ try {
183
+ return item.formatter(row[item.prop], row);
184
+ } catch (e) {
185
+ return row[item.prop];
186
+ }
187
+ } else {
188
+ return row[item.prop];
189
+ }
190
+ };
191
+
192
+ const __default__$2 = defineComponent({
193
+ name: "MTablePopoverColumn"
194
+ });
195
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
196
+ ...__default__$2,
197
+ props: {
198
+ config: { default: () => ({}) }
199
+ },
200
+ setup(__props) {
201
+ return (_ctx, _cache) => {
202
+ return openBlock(), createBlock(unref(TMagicTableColumn), {
203
+ label: __props.config.label,
204
+ width: __props.config.width,
205
+ fixed: __props.config.fixed
206
+ }, {
207
+ default: withCtx((scope) => [
208
+ __props.config.popover ? (openBlock(), createBlock(unref(TMagicPopover), {
209
+ key: 0,
210
+ placement: __props.config.popover.placement,
211
+ width: __props.config.popover.width,
212
+ trigger: __props.config.popover.trigger
213
+ }, {
214
+ reference: withCtx(() => [
215
+ createVNode(unref(TMagicButton), {
216
+ text: "",
217
+ type: "primary"
218
+ }, {
219
+ default: withCtx(() => [
220
+ createTextVNode(toDisplayString(__props.config.text || unref(formatter)(__props.config, scope.row)), 1)
221
+ ]),
222
+ _: 2
223
+ }, 1024)
224
+ ]),
225
+ default: withCtx(() => [
226
+ __props.config.popover.tableEmbed ? (openBlock(), createBlock(_sfc_main, {
227
+ key: 0,
228
+ "show-header": __props.config.showHeader,
229
+ columns: __props.config.table,
230
+ data: __props.config.prop && scope.row[__props.config.prop] || []
231
+ }, null, 8, ["show-header", "columns", "data"])) : createCommentVNode("", true)
232
+ ]),
233
+ _: 2
234
+ }, 1032, ["placement", "width", "trigger"])) : createCommentVNode("", true)
235
+ ]),
236
+ _: 1
237
+ }, 8, ["label", "width", "fixed"]);
238
+ };
239
+ }
240
+ });
241
+
242
+ const _hoisted_1 = ["innerHTML"];
243
+ const _hoisted_2 = ["href"];
244
+ const _hoisted_3 = ["src"];
245
+ const _hoisted_4 = ["href"];
246
+ const _hoisted_5 = /* @__PURE__ */ createTextVNode("\u6269\u5C55\u914D\u7F6E");
247
+ const _hoisted_6 = ["innerHTML"];
248
+ const __default__$1 = defineComponent({
249
+ name: "MTableColumn"
250
+ });
251
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
252
+ ...__default__$1,
253
+ props: {
254
+ config: { default: () => ({}) },
255
+ editState: { default: () => ({}) }
256
+ },
257
+ setup(__props) {
258
+ return (_ctx, _cache) => {
259
+ const _component_m_form_container = resolveComponent("m-form-container");
260
+ const _component_el_tooltip = resolveComponent("el-tooltip");
261
+ return openBlock(), createBlock(unref(TMagicTableColumn), {
262
+ "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
268
+ }, {
269
+ default: withCtx((scope) => [
270
+ __props.config.type && __props.editState[scope.$index] ? (openBlock(), createBlock(unref(TMagicForm), {
271
+ key: 0,
272
+ "label-width": "0",
273
+ model: __props.editState[scope.$index]
274
+ }, {
275
+ default: withCtx(() => [
276
+ 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]
282
+ }, null, 8, ["prop", "rules", "config", "name", "model"])
283
+ ]),
284
+ _: 2
285
+ }, 1032, ["model"])) : __props.config.action === "actionLink" && __props.config.prop ? (openBlock(), createBlock(unref(TMagicButton), {
286
+ key: 1,
287
+ text: "",
288
+ type: "primary",
289
+ onClick: ($event) => __props.config.handler?.(scope.row)
290
+ }, {
291
+ default: withCtx(() => [
292
+ createElementVNode("span", {
293
+ innerHTML: unref(formatter)(__props.config, scope.row)
294
+ }, null, 8, _hoisted_1)
295
+ ]),
296
+ _: 2
297
+ }, 1032, ["onClick"])) : __props.config.action === "img" && __props.config.prop ? (openBlock(), createElementBlock("a", {
298
+ key: 2,
299
+ target: "_blank",
300
+ href: scope.row[__props.config.prop]
301
+ }, [
302
+ createElementVNode("img", {
303
+ src: scope.row[__props.config.prop],
304
+ height: "50"
305
+ }, null, 8, _hoisted_3)
306
+ ], 8, _hoisted_2)) : __props.config.action === "link" && __props.config.prop ? (openBlock(), createElementBlock("a", {
307
+ key: 3,
308
+ target: "_blank",
309
+ href: scope.row[__props.config.prop],
310
+ class: "keep-all"
311
+ }, toDisplayString(scope.row[__props.config.prop]), 9, _hoisted_4)) : __props.config.action === "tip" ? (openBlock(), createBlock(_component_el_tooltip, {
312
+ key: 4,
313
+ placement: "left"
314
+ }, {
315
+ content: withCtx(() => [
316
+ createElementVNode("div", null, toDisplayString(unref(formatter)(__props.config, scope.row)), 1)
317
+ ]),
318
+ default: withCtx(() => [
319
+ createVNode(unref(TMagicButton), {
320
+ text: "",
321
+ type: "primary"
322
+ }, {
323
+ default: withCtx(() => [
324
+ _hoisted_5
325
+ ]),
326
+ _: 1
327
+ })
328
+ ]),
329
+ _: 2
330
+ }, 1024)) : __props.config.action === "tag" && __props.config.prop ? (openBlock(), createBlock(unref(TMagicTag), {
331
+ key: 5,
332
+ type: typeof __props.config.type === "function" ? __props.config.type(scope.row[__props.config.prop], scope.row) : __props.config.type,
333
+ "close-transition": ""
334
+ }, {
335
+ default: withCtx(() => [
336
+ createTextVNode(toDisplayString(unref(formatter)(__props.config, scope.row)), 1)
337
+ ]),
338
+ _: 2
339
+ }, 1032, ["type"])) : (openBlock(), createElementBlock("div", {
340
+ key: 6,
341
+ innerHTML: unref(formatter)(__props.config, scope.row)
342
+ }, null, 8, _hoisted_6))
343
+ ]),
344
+ _: 1
345
+ }, 8, ["label", "width", "fixed", "sortable", "prop"]);
346
+ };
347
+ }
348
+ });
349
+
350
+ const __default__ = defineComponent({
351
+ name: "MTable"
352
+ });
353
+ const _sfc_main = /* @__PURE__ */ defineComponent({
354
+ ...__default__,
355
+ props: {
356
+ data: null,
357
+ columns: { default: () => [] },
358
+ spanMethod: null,
359
+ loading: { type: Boolean, default: false },
360
+ bodyHeight: null,
361
+ showHeader: { type: Boolean, default: true },
362
+ emptyText: null,
363
+ defaultExpandAll: { type: Boolean, default: false },
364
+ rowkeyName: null,
365
+ border: { type: Boolean, default: false }
366
+ },
367
+ emits: [
368
+ "sort-change",
369
+ "after-action",
370
+ "select",
371
+ "select-all",
372
+ "selection-change",
373
+ "expand-change",
374
+ "cell-click"
375
+ ],
376
+ setup(__props, { expose, emit }) {
377
+ const props = __props;
378
+ const tMagicTable = ref();
379
+ const editState = ref([]);
380
+ const tableColumnComponent = getConfig("components").tableColumn;
381
+ const selectionColumn = computed(() => {
382
+ const column = props.columns.filter((item) => item.selection);
383
+ return column.length ? column[0] : null;
384
+ });
385
+ const tableData = computed(() => {
386
+ if (selectionColumn.value) {
387
+ return props.data || [];
388
+ }
389
+ return cloneDeep(props.data) || [];
390
+ });
391
+ const hasBorder = computed(() => typeof props.border !== "undefined" ? props.border : true);
392
+ const sortChange = (data) => {
393
+ emit("sort-change", data);
394
+ };
395
+ const selectHandler = (selection, row) => {
396
+ const column = selectionColumn.value;
397
+ if (!column) {
398
+ return;
399
+ }
400
+ if (column.selection === "single") ;
401
+ emit("select", selection, row);
402
+ };
403
+ const selectAllHandler = (selection) => {
404
+ emit("select-all", selection);
405
+ };
406
+ const selectionChangeHandler = (selection) => {
407
+ emit("selection-change", selection);
408
+ };
409
+ const cellClickHandler = (...args) => {
410
+ emit("cell-click", ...args);
411
+ };
412
+ const expandChange = (...args) => {
413
+ emit("expand-change", ...args);
414
+ };
415
+ const toggleRowSelection = (row, selected) => {
416
+ tMagicTable.value?.toggleRowSelection(row, selected);
417
+ };
418
+ const toggleRowExpansion = (row, expanded) => {
419
+ tMagicTable.value?.toggleRowExpansion(row, expanded);
420
+ };
421
+ const clearSelection = () => {
422
+ tMagicTable.value?.clearSelection();
423
+ };
424
+ const objectSpanMethod = (data) => {
425
+ if (typeof props.spanMethod === "function") {
426
+ return props.spanMethod(data);
427
+ }
428
+ return () => ({
429
+ rowspan: 0,
430
+ colspan: 0
431
+ });
432
+ };
433
+ expose({
434
+ toggleRowSelection,
435
+ toggleRowExpansion,
436
+ clearSelection
437
+ });
438
+ return (_ctx, _cache) => {
439
+ const _directive_loading = resolveDirective("loading");
440
+ return withDirectives((openBlock(), createBlock(unref(TMagicTable), {
441
+ "tooltip-effect": "dark",
442
+ class: "m-table",
443
+ ref_key: "tMagicTable",
444
+ 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",
451
+ "tree-props": { children: "children" },
452
+ "empty-text": __props.emptyText || "\u6682\u65E0\u6570\u636E",
453
+ "span-method": objectSpanMethod,
454
+ onSortChange: sortChange,
455
+ onSelect: selectHandler,
456
+ onSelectAll: selectAllHandler,
457
+ onSelectionChange: selectionChangeHandler,
458
+ onCellClick: cellClickHandler,
459
+ onExpandChange: expandChange
460
+ }, {
461
+ default: withCtx(() => [
462
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (item, columnIndex) => {
463
+ return openBlock(), createElementBlock(Fragment, null, [
464
+ item.type === "expand" ? (openBlock(), createBlock(_sfc_main$3, {
465
+ config: item,
466
+ key: columnIndex
467
+ }, null, 8, ["config"])) : item.selection ? (openBlock(), createBlock(resolveDynamicComponent(unref(tableColumnComponent).component), {
468
+ width: "40",
469
+ type: "selection",
470
+ key: columnIndex,
471
+ selectable: item.selectable
472
+ }, null, 8, ["selectable"])) : item.actions ? (openBlock(), createBlock(_sfc_main$4, {
473
+ columns: __props.columns,
474
+ config: item,
475
+ "rowkey-name": __props.rowkeyName,
476
+ "edit-state": editState.value,
477
+ key: columnIndex,
478
+ onAfterAction: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("after-action"))
479
+ }, null, 8, ["columns", "config", "rowkey-name", "edit-state"])) : item.type === "popover" ? (openBlock(), createBlock(_sfc_main$2, {
480
+ key: columnIndex,
481
+ config: item
482
+ }, null, 8, ["config"])) : (openBlock(), createBlock(_sfc_main$1, {
483
+ key: columnIndex,
484
+ config: item,
485
+ "edit-state": editState.value
486
+ }, null, 8, ["config", "edit-state"]))
487
+ ], 64);
488
+ }), 256))
489
+ ]),
490
+ _: 1
491
+ }, 8, ["data", "show-header", "max-height", "default-expand-all", "border", "row-key", "empty-text"])), [
492
+ [_directive_loading, __props.loading]
493
+ ]);
494
+ };
495
+ }
496
+ });
497
+
498
+ const Table_vue_vue_type_style_index_0_lang = '';
499
+
500
+ const index = {
501
+ install(app) {
502
+ app.component("m-table", _sfc_main);
503
+ }
504
+ };
505
+
506
+ export { _sfc_main as MagicTable, index as default };
507
+ //# sourceMappingURL=tmagic-table.js.map
@@ -0,0 +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=\"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);\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('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) 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","<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) 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":["__default__","Table"],"mappings":"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"}