@tmagic/table 1.2.0-beta.9 → 1.2.0
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.
- package/dist/{tmagic-table.mjs → tmagic-table.js} +61 -17
- package/dist/tmagic-table.js.map +1 -0
- package/dist/{tmagic-table.umd.js → tmagic-table.umd.cjs} +60 -16
- package/dist/tmagic-table.umd.cjs.map +1 -0
- package/package.json +12 -10
- package/src/ActionsColumn.vue +4 -4
- package/src/ExpandColumn.vue +11 -2
- package/src/PopoverColumn.vue +1 -1
- package/src/Table.vue +22 -4
- package/src/TextColumn.vue +1 -1
- package/src/schema.ts +6 -0
- package/types/ActionsColumn.vue.d.ts +14 -92
- package/types/ExpandColumn.vue.d.ts +7 -61
- package/types/PopoverColumn.vue.d.ts +7 -61
- package/types/Table.vue.d.ts +37 -171
- package/types/TextColumn.vue.d.ts +9 -69
- package/types/schema.d.ts +6 -0
- package/dist/tmagic-table.mjs.map +0 -1
- package/dist/tmagic-table.umd.js.map +0 -1
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import { defineComponent, openBlock, createBlock, unref, withCtx, createElementBlock, Fragment, renderList, withDirectives, createElementVNode, vShow, createVNode, createTextVNode, createCommentVNode, toDisplayString, resolveComponent, ref, computed, resolveDirective
|
|
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
2
|
import { cloneDeep } from 'lodash-es';
|
|
3
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$
|
|
7
|
+
const _hoisted_1$2 = ["innerHTML"];
|
|
8
8
|
const _hoisted_2$1 = /* @__PURE__ */ createTextVNode("\u4FDD\u5B58");
|
|
9
9
|
const _hoisted_3$1 = /* @__PURE__ */ createTextVNode("\u53D6\u6D88");
|
|
10
|
+
const __default__$4 = defineComponent({
|
|
11
|
+
name: "MTableActionsColumn"
|
|
12
|
+
});
|
|
10
13
|
const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
11
|
-
|
|
14
|
+
...__default__$4,
|
|
12
15
|
props: {
|
|
13
16
|
columns: { default: () => [] },
|
|
14
17
|
config: { default: () => ({}) },
|
|
15
18
|
rowkeyName: { default: "c_id" },
|
|
16
19
|
editState: { default: () => [] }
|
|
17
20
|
},
|
|
18
|
-
emits: ["
|
|
21
|
+
emits: ["after-action"],
|
|
19
22
|
setup(__props, { emit }) {
|
|
20
23
|
const props = __props;
|
|
21
24
|
const display = (fuc, row) => {
|
|
@@ -55,13 +58,13 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
55
58
|
if (res.ret === 0) {
|
|
56
59
|
tMagicMessage.success("\u4FDD\u5B58\u6210\u529F");
|
|
57
60
|
props.editState[index] = void 0;
|
|
58
|
-
emit("
|
|
61
|
+
emit("after-action");
|
|
59
62
|
} else {
|
|
60
63
|
tMagicMessage.error(res.msg || "\u4FDD\u5B58\u5931\u8D25");
|
|
61
64
|
}
|
|
62
65
|
} else {
|
|
63
66
|
props.editState[index] = void 0;
|
|
64
|
-
emit("
|
|
67
|
+
emit("after-action");
|
|
65
68
|
}
|
|
66
69
|
};
|
|
67
70
|
return (_ctx, _cache) => {
|
|
@@ -84,7 +87,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
84
87
|
default: withCtx(() => [
|
|
85
88
|
createElementVNode("span", {
|
|
86
89
|
innerHTML: formatter(action.text, scope.row)
|
|
87
|
-
}, null, 8, _hoisted_1$
|
|
90
|
+
}, null, 8, _hoisted_1$2)
|
|
88
91
|
]),
|
|
89
92
|
_: 2
|
|
90
93
|
}, 1032, ["icon", "onClick"])), [
|
|
@@ -126,12 +129,23 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
126
129
|
}
|
|
127
130
|
});
|
|
128
131
|
|
|
132
|
+
const _hoisted_1$1 = ["innerHTML"];
|
|
133
|
+
const __default__$3 = defineComponent({
|
|
134
|
+
name: "MTableExpandColumn"
|
|
135
|
+
});
|
|
129
136
|
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
130
|
-
|
|
137
|
+
...__default__$3,
|
|
131
138
|
props: {
|
|
132
139
|
config: { default: () => ({}) }
|
|
133
140
|
},
|
|
134
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
|
+
};
|
|
135
149
|
return (_ctx, _cache) => {
|
|
136
150
|
return openBlock(), createBlock(unref(TMagicTableColumn), { type: "expand" }, {
|
|
137
151
|
default: withCtx((scope) => [
|
|
@@ -145,7 +159,12 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
145
159
|
key: 1,
|
|
146
160
|
config: __props.config.form,
|
|
147
161
|
"init-values": __props.config.values || __props.config.prop && scope.row[__props.config.prop] || {}
|
|
148
|
-
}, null, 8, ["config", "init-values"])) : createCommentVNode("", true)
|
|
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)
|
|
149
168
|
]),
|
|
150
169
|
_: 1
|
|
151
170
|
});
|
|
@@ -170,8 +189,11 @@ const formatter = (item, row) => {
|
|
|
170
189
|
}
|
|
171
190
|
};
|
|
172
191
|
|
|
192
|
+
const __default__$2 = defineComponent({
|
|
193
|
+
name: "MTablePopoverColumn"
|
|
194
|
+
});
|
|
173
195
|
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
174
|
-
|
|
196
|
+
...__default__$2,
|
|
175
197
|
props: {
|
|
176
198
|
config: { default: () => ({}) }
|
|
177
199
|
},
|
|
@@ -223,8 +245,11 @@ const _hoisted_3 = ["src"];
|
|
|
223
245
|
const _hoisted_4 = ["href"];
|
|
224
246
|
const _hoisted_5 = /* @__PURE__ */ createTextVNode("\u6269\u5C55\u914D\u7F6E");
|
|
225
247
|
const _hoisted_6 = ["innerHTML"];
|
|
248
|
+
const __default__$1 = defineComponent({
|
|
249
|
+
name: "MTableColumn"
|
|
250
|
+
});
|
|
226
251
|
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
227
|
-
|
|
252
|
+
...__default__$1,
|
|
228
253
|
props: {
|
|
229
254
|
config: { default: () => ({}) },
|
|
230
255
|
editState: { default: () => ({}) }
|
|
@@ -322,8 +347,11 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
322
347
|
}
|
|
323
348
|
});
|
|
324
349
|
|
|
350
|
+
const __default__ = defineComponent({
|
|
351
|
+
name: "MTable"
|
|
352
|
+
});
|
|
325
353
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
326
|
-
|
|
354
|
+
...__default__,
|
|
327
355
|
props: {
|
|
328
356
|
data: null,
|
|
329
357
|
columns: { default: () => [] },
|
|
@@ -336,7 +364,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
336
364
|
rowkeyName: null,
|
|
337
365
|
border: { type: Boolean, default: false }
|
|
338
366
|
},
|
|
339
|
-
emits: [
|
|
367
|
+
emits: [
|
|
368
|
+
"sort-change",
|
|
369
|
+
"after-action",
|
|
370
|
+
"select",
|
|
371
|
+
"select-all",
|
|
372
|
+
"selection-change",
|
|
373
|
+
"expand-change",
|
|
374
|
+
"cell-click"
|
|
375
|
+
],
|
|
340
376
|
setup(__props, { expose, emit }) {
|
|
341
377
|
const props = __props;
|
|
342
378
|
const tMagicTable = ref();
|
|
@@ -370,6 +406,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
370
406
|
const selectionChangeHandler = (selection) => {
|
|
371
407
|
emit("selection-change", selection);
|
|
372
408
|
};
|
|
409
|
+
const cellClickHandler = (...args) => {
|
|
410
|
+
emit("cell-click", ...args);
|
|
411
|
+
};
|
|
412
|
+
const expandChange = (...args) => {
|
|
413
|
+
emit("expand-change", ...args);
|
|
414
|
+
};
|
|
373
415
|
const toggleRowSelection = (row, selected) => {
|
|
374
416
|
tMagicTable.value?.toggleRowSelection(row, selected);
|
|
375
417
|
};
|
|
@@ -405,14 +447,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
405
447
|
"max-height": __props.bodyHeight,
|
|
406
448
|
"default-expand-all": __props.defaultExpandAll,
|
|
407
449
|
border: unref(hasBorder),
|
|
408
|
-
"row-key": __props.rowkeyName || "
|
|
450
|
+
"row-key": __props.rowkeyName || "id",
|
|
409
451
|
"tree-props": { children: "children" },
|
|
410
452
|
"empty-text": __props.emptyText || "\u6682\u65E0\u6570\u636E",
|
|
411
453
|
"span-method": objectSpanMethod,
|
|
412
454
|
onSortChange: sortChange,
|
|
413
455
|
onSelect: selectHandler,
|
|
414
456
|
onSelectAll: selectAllHandler,
|
|
415
|
-
onSelectionChange: selectionChangeHandler
|
|
457
|
+
onSelectionChange: selectionChangeHandler,
|
|
458
|
+
onCellClick: cellClickHandler,
|
|
459
|
+
onExpandChange: expandChange
|
|
416
460
|
}, {
|
|
417
461
|
default: withCtx(() => [
|
|
418
462
|
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (item, columnIndex) => {
|
|
@@ -431,7 +475,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
431
475
|
"rowkey-name": __props.rowkeyName,
|
|
432
476
|
"edit-state": editState.value,
|
|
433
477
|
key: columnIndex,
|
|
434
|
-
onAfterAction: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("
|
|
478
|
+
onAfterAction: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("after-action"))
|
|
435
479
|
}, null, 8, ["columns", "config", "rowkey-name", "edit-state"])) : item.type === "popover" ? (openBlock(), createBlock(_sfc_main$2, {
|
|
436
480
|
key: columnIndex,
|
|
437
481
|
config: item
|
|
@@ -460,4 +504,4 @@ const index = {
|
|
|
460
504
|
};
|
|
461
505
|
|
|
462
506
|
export { _sfc_main as MagicTable, index as default };
|
|
463
|
-
//# sourceMappingURL=tmagic-table.
|
|
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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"}
|
|
@@ -4,18 +4,21 @@
|
|
|
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$
|
|
7
|
+
const _hoisted_1$2 = ["innerHTML"];
|
|
8
8
|
const _hoisted_2$1 = /* @__PURE__ */ vue.createTextVNode("\u4FDD\u5B58");
|
|
9
9
|
const _hoisted_3$1 = /* @__PURE__ */ vue.createTextVNode("\u53D6\u6D88");
|
|
10
|
+
const __default__$4 = vue.defineComponent({
|
|
11
|
+
name: "MTableActionsColumn"
|
|
12
|
+
});
|
|
10
13
|
const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
11
|
-
|
|
14
|
+
...__default__$4,
|
|
12
15
|
props: {
|
|
13
16
|
columns: { default: () => [] },
|
|
14
17
|
config: { default: () => ({}) },
|
|
15
18
|
rowkeyName: { default: "c_id" },
|
|
16
19
|
editState: { default: () => [] }
|
|
17
20
|
},
|
|
18
|
-
emits: ["
|
|
21
|
+
emits: ["after-action"],
|
|
19
22
|
setup(__props, { emit }) {
|
|
20
23
|
const props = __props;
|
|
21
24
|
const display = (fuc, row) => {
|
|
@@ -55,13 +58,13 @@
|
|
|
55
58
|
if (res.ret === 0) {
|
|
56
59
|
design.tMagicMessage.success("\u4FDD\u5B58\u6210\u529F");
|
|
57
60
|
props.editState[index] = void 0;
|
|
58
|
-
emit("
|
|
61
|
+
emit("after-action");
|
|
59
62
|
} else {
|
|
60
63
|
design.tMagicMessage.error(res.msg || "\u4FDD\u5B58\u5931\u8D25");
|
|
61
64
|
}
|
|
62
65
|
} else {
|
|
63
66
|
props.editState[index] = void 0;
|
|
64
|
-
emit("
|
|
67
|
+
emit("after-action");
|
|
65
68
|
}
|
|
66
69
|
};
|
|
67
70
|
return (_ctx, _cache) => {
|
|
@@ -84,7 +87,7 @@
|
|
|
84
87
|
default: vue.withCtx(() => [
|
|
85
88
|
vue.createElementVNode("span", {
|
|
86
89
|
innerHTML: formatter(action.text, scope.row)
|
|
87
|
-
}, null, 8, _hoisted_1$
|
|
90
|
+
}, null, 8, _hoisted_1$2)
|
|
88
91
|
]),
|
|
89
92
|
_: 2
|
|
90
93
|
}, 1032, ["icon", "onClick"])), [
|
|
@@ -126,12 +129,23 @@
|
|
|
126
129
|
}
|
|
127
130
|
});
|
|
128
131
|
|
|
132
|
+
const _hoisted_1$1 = ["innerHTML"];
|
|
133
|
+
const __default__$3 = vue.defineComponent({
|
|
134
|
+
name: "MTableExpandColumn"
|
|
135
|
+
});
|
|
129
136
|
const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
130
|
-
|
|
137
|
+
...__default__$3,
|
|
131
138
|
props: {
|
|
132
139
|
config: { default: () => ({}) }
|
|
133
140
|
},
|
|
134
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
|
+
};
|
|
135
149
|
return (_ctx, _cache) => {
|
|
136
150
|
return vue.openBlock(), vue.createBlock(vue.unref(design.TMagicTableColumn), { type: "expand" }, {
|
|
137
151
|
default: vue.withCtx((scope) => [
|
|
@@ -145,7 +159,12 @@
|
|
|
145
159
|
key: 1,
|
|
146
160
|
config: __props.config.form,
|
|
147
161
|
"init-values": __props.config.values || __props.config.prop && scope.row[__props.config.prop] || {}
|
|
148
|
-
}, null, 8, ["config", "init-values"])) : vue.createCommentVNode("", true)
|
|
162
|
+
}, null, 8, ["config", "init-values"])) : vue.createCommentVNode("", true),
|
|
163
|
+
__props.config.expandContent ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
164
|
+
key: 2,
|
|
165
|
+
innerHTML: __props.config.expandContent(scope.row, __props.config.prop)
|
|
166
|
+
}, null, 8, _hoisted_1$1)) : vue.createCommentVNode("", true),
|
|
167
|
+
__props.config.component ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(__props.config.component), vue.normalizeProps(vue.mergeProps({ key: 3 }, componentProps(scope.row))), null, 16)) : vue.createCommentVNode("", true)
|
|
149
168
|
]),
|
|
150
169
|
_: 1
|
|
151
170
|
});
|
|
@@ -170,8 +189,11 @@
|
|
|
170
189
|
}
|
|
171
190
|
};
|
|
172
191
|
|
|
192
|
+
const __default__$2 = vue.defineComponent({
|
|
193
|
+
name: "MTablePopoverColumn"
|
|
194
|
+
});
|
|
173
195
|
const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
174
|
-
|
|
196
|
+
...__default__$2,
|
|
175
197
|
props: {
|
|
176
198
|
config: { default: () => ({}) }
|
|
177
199
|
},
|
|
@@ -223,8 +245,11 @@
|
|
|
223
245
|
const _hoisted_4 = ["href"];
|
|
224
246
|
const _hoisted_5 = /* @__PURE__ */ vue.createTextVNode("\u6269\u5C55\u914D\u7F6E");
|
|
225
247
|
const _hoisted_6 = ["innerHTML"];
|
|
248
|
+
const __default__$1 = vue.defineComponent({
|
|
249
|
+
name: "MTableColumn"
|
|
250
|
+
});
|
|
226
251
|
const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
227
|
-
|
|
252
|
+
...__default__$1,
|
|
228
253
|
props: {
|
|
229
254
|
config: { default: () => ({}) },
|
|
230
255
|
editState: { default: () => ({}) }
|
|
@@ -322,8 +347,11 @@
|
|
|
322
347
|
}
|
|
323
348
|
});
|
|
324
349
|
|
|
350
|
+
const __default__ = vue.defineComponent({
|
|
351
|
+
name: "MTable"
|
|
352
|
+
});
|
|
325
353
|
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
326
|
-
|
|
354
|
+
...__default__,
|
|
327
355
|
props: {
|
|
328
356
|
data: null,
|
|
329
357
|
columns: { default: () => [] },
|
|
@@ -336,7 +364,15 @@
|
|
|
336
364
|
rowkeyName: null,
|
|
337
365
|
border: { type: Boolean, default: false }
|
|
338
366
|
},
|
|
339
|
-
emits: [
|
|
367
|
+
emits: [
|
|
368
|
+
"sort-change",
|
|
369
|
+
"after-action",
|
|
370
|
+
"select",
|
|
371
|
+
"select-all",
|
|
372
|
+
"selection-change",
|
|
373
|
+
"expand-change",
|
|
374
|
+
"cell-click"
|
|
375
|
+
],
|
|
340
376
|
setup(__props, { expose, emit }) {
|
|
341
377
|
const props = __props;
|
|
342
378
|
const tMagicTable = vue.ref();
|
|
@@ -370,6 +406,12 @@
|
|
|
370
406
|
const selectionChangeHandler = (selection) => {
|
|
371
407
|
emit("selection-change", selection);
|
|
372
408
|
};
|
|
409
|
+
const cellClickHandler = (...args) => {
|
|
410
|
+
emit("cell-click", ...args);
|
|
411
|
+
};
|
|
412
|
+
const expandChange = (...args) => {
|
|
413
|
+
emit("expand-change", ...args);
|
|
414
|
+
};
|
|
373
415
|
const toggleRowSelection = (row, selected) => {
|
|
374
416
|
tMagicTable.value?.toggleRowSelection(row, selected);
|
|
375
417
|
};
|
|
@@ -405,14 +447,16 @@
|
|
|
405
447
|
"max-height": __props.bodyHeight,
|
|
406
448
|
"default-expand-all": __props.defaultExpandAll,
|
|
407
449
|
border: vue.unref(hasBorder),
|
|
408
|
-
"row-key": __props.rowkeyName || "
|
|
450
|
+
"row-key": __props.rowkeyName || "id",
|
|
409
451
|
"tree-props": { children: "children" },
|
|
410
452
|
"empty-text": __props.emptyText || "\u6682\u65E0\u6570\u636E",
|
|
411
453
|
"span-method": objectSpanMethod,
|
|
412
454
|
onSortChange: sortChange,
|
|
413
455
|
onSelect: selectHandler,
|
|
414
456
|
onSelectAll: selectAllHandler,
|
|
415
|
-
onSelectionChange: selectionChangeHandler
|
|
457
|
+
onSelectionChange: selectionChangeHandler,
|
|
458
|
+
onCellClick: cellClickHandler,
|
|
459
|
+
onExpandChange: expandChange
|
|
416
460
|
}, {
|
|
417
461
|
default: vue.withCtx(() => [
|
|
418
462
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.columns, (item, columnIndex) => {
|
|
@@ -431,7 +475,7 @@
|
|
|
431
475
|
"rowkey-name": __props.rowkeyName,
|
|
432
476
|
"edit-state": editState.value,
|
|
433
477
|
key: columnIndex,
|
|
434
|
-
onAfterAction: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("
|
|
478
|
+
onAfterAction: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("after-action"))
|
|
435
479
|
}, null, 8, ["columns", "config", "rowkey-name", "edit-state"])) : item.type === "popover" ? (vue.openBlock(), vue.createBlock(_sfc_main$2, {
|
|
436
480
|
key: columnIndex,
|
|
437
481
|
config: item
|
|
@@ -465,4 +509,4 @@
|
|
|
465
509
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
466
510
|
|
|
467
511
|
}));
|
|
468
|
-
//# sourceMappingURL=tmagic-table.umd.
|
|
512
|
+
//# sourceMappingURL=tmagic-table.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmagic-table.umd.cjs","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__","defineComponent","tMagicMessage","datetimeFormatter","ref","getConfig","computed","cloneDeep","Table"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.2.0
|
|
2
|
+
"version": "1.2.0",
|
|
3
3
|
"name": "@tmagic/table",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"sideEffects": [
|
|
5
6
|
"dist/*"
|
|
6
7
|
],
|
|
7
|
-
"main": "dist/tmagic-table.umd.
|
|
8
|
-
"module": "dist/tmagic-table.
|
|
8
|
+
"main": "dist/tmagic-table.umd.cjs",
|
|
9
|
+
"module": "dist/tmagic-table.js",
|
|
9
10
|
"types": "types/index.d.ts",
|
|
10
11
|
"exports": {
|
|
11
12
|
".": {
|
|
12
|
-
"import": "./dist/tmagic-table.
|
|
13
|
-
"require": "./dist/tmagic-table.umd.
|
|
13
|
+
"import": "./dist/tmagic-table.js",
|
|
14
|
+
"require": "./dist/tmagic-table.umd.cjs"
|
|
14
15
|
},
|
|
15
16
|
"./dist/style.css": {
|
|
16
17
|
"import": "./dist/style.css",
|
|
@@ -32,14 +33,14 @@
|
|
|
32
33
|
"url": "https://github.com/Tencent/tmagic-editor.git"
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|
|
35
|
-
"@tmagic/design": "1.2.0
|
|
36
|
-
"@tmagic/form": "1.2.0
|
|
37
|
-
"@tmagic/utils": "1.2.0
|
|
36
|
+
"@tmagic/design": "1.2.0",
|
|
37
|
+
"@tmagic/form": "1.2.0",
|
|
38
|
+
"@tmagic/utils": "1.2.0",
|
|
38
39
|
"lodash-es": "^4.17.21",
|
|
39
40
|
"vue": "^3.2.37"
|
|
40
41
|
},
|
|
41
42
|
"peerDependencies": {
|
|
42
|
-
"@tmagic/form": "1.2.0
|
|
43
|
+
"@tmagic/form": "1.2.0",
|
|
43
44
|
"vue": "^3.2.37"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
@@ -53,6 +54,7 @@
|
|
|
53
54
|
"sass": "^1.35.1",
|
|
54
55
|
"typescript": "^4.7.4",
|
|
55
56
|
"vite": "^3.1.3",
|
|
56
|
-
"vue-
|
|
57
|
+
"vite-plugin-vue-setup-extend": "^0.4.0",
|
|
58
|
+
"vue-tsc": "^1.0.11"
|
|
57
59
|
}
|
|
58
60
|
}
|
package/src/ActionsColumn.vue
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</TMagicTableColumn>
|
|
36
36
|
</template>
|
|
37
37
|
|
|
38
|
-
<script lang="ts" setup>
|
|
38
|
+
<script lang="ts" setup name="MTableActionsColumn">
|
|
39
39
|
import { TMagicButton, tMagicMessage, TMagicTableColumn } from '@tmagic/design';
|
|
40
40
|
|
|
41
41
|
import { ColumnActionConfig, ColumnConfig } from './schema';
|
|
@@ -55,7 +55,7 @@ const props = withDefaults(
|
|
|
55
55
|
},
|
|
56
56
|
);
|
|
57
57
|
|
|
58
|
-
const emit = defineEmits(['
|
|
58
|
+
const emit = defineEmits(['after-action']);
|
|
59
59
|
|
|
60
60
|
const display = (fuc: boolean | Function | undefined, row: any) => {
|
|
61
61
|
if (typeof fuc === 'function') {
|
|
@@ -101,13 +101,13 @@ const save = async (index: number, config: ColumnConfig) => {
|
|
|
101
101
|
if (res.ret === 0) {
|
|
102
102
|
tMagicMessage.success('保存成功');
|
|
103
103
|
props.editState[index] = undefined;
|
|
104
|
-
emit('
|
|
104
|
+
emit('after-action');
|
|
105
105
|
} else {
|
|
106
106
|
tMagicMessage.error(res.msg || '保存失败');
|
|
107
107
|
}
|
|
108
108
|
} else {
|
|
109
109
|
props.editState[index] = undefined;
|
|
110
|
-
emit('
|
|
110
|
+
emit('after-action');
|
|
111
111
|
}
|
|
112
112
|
};
|
|
113
113
|
</script>
|
package/src/ExpandColumn.vue
CHANGED
|
@@ -12,18 +12,20 @@
|
|
|
12
12
|
:config="config.form"
|
|
13
13
|
:init-values="config.values || (config.prop && scope.row[config.prop]) || {}"
|
|
14
14
|
></MForm>
|
|
15
|
+
<div v-if="config.expandContent" v-html="config.expandContent(scope.row, config.prop)"></div>
|
|
16
|
+
<component v-if="config.component" :is="config.component" v-bind="componentProps(scope.row)"></component>
|
|
15
17
|
</template>
|
|
16
18
|
</TMagicTableColumn>
|
|
17
19
|
</template>
|
|
18
20
|
|
|
19
|
-
<script lang="ts" setup>
|
|
21
|
+
<script lang="ts" setup name="MTableExpandColumn">
|
|
20
22
|
import { TMagicTableColumn } from '@tmagic/design';
|
|
21
23
|
import { MForm } from '@tmagic/form';
|
|
22
24
|
|
|
23
25
|
import { ColumnConfig } from './schema';
|
|
24
26
|
import MTable from './Table.vue';
|
|
25
27
|
|
|
26
|
-
withDefaults(
|
|
28
|
+
const props = withDefaults(
|
|
27
29
|
defineProps<{
|
|
28
30
|
config: ColumnConfig;
|
|
29
31
|
}>(),
|
|
@@ -31,4 +33,11 @@ withDefaults(
|
|
|
31
33
|
config: () => ({}),
|
|
32
34
|
},
|
|
33
35
|
);
|
|
36
|
+
|
|
37
|
+
const componentProps = (row: any) => {
|
|
38
|
+
if (typeof props.config.props === 'function') {
|
|
39
|
+
return props.config.props(row) || {};
|
|
40
|
+
}
|
|
41
|
+
return props.config.props || {};
|
|
42
|
+
};
|
|
34
43
|
</script>
|
package/src/PopoverColumn.vue
CHANGED