mortise-tenon-design 0.1.2 → 0.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.
@@ -0,0 +1,10 @@
1
+ import e from "./src/table.vue.mjs";
2
+ e.install = (n) => {
3
+ e.name && n.component(e.name, e);
4
+ };
5
+ const t = e;
6
+ export {
7
+ t as MtTable
8
+ };
9
+ //# sourceMappingURL=index.mjs.map
10
+ import './src/table.css';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/table/index.ts"],"sourcesContent":["import type { App } from 'vue';\r\nimport Table from './src/table.vue';\r\n\r\nTable.install = (app: App): void => {\r\n if (Table.name) {\r\n app.component(Table.name, Table);\r\n }\r\n};\r\n\r\nexport const MtTable = Table;\r\n\r\nexport * from './src/table';\r\n"],"names":["Table","app","MtTable"],"mappings":";AAGAA,EAAM,UAAU,CAACC,MAAmB;AAClC,EAAID,EAAM,QACJC,EAAA,UAAUD,EAAM,MAAMA,CAAK;AAEnC;AAEO,MAAME,IAAUF;"}
@@ -0,0 +1 @@
1
+ .mt-table[data-v-46d3894f]{width:100%;max-width:100%;border-spacing:0;border-collapse:collapse}.mt-table thead tr th[data-v-46d3894f]{padding:8px 16px;border:1px #f0f0f0 solid}.mt-table tbody tr td[data-v-46d3894f]{padding:16px;border:1px #f0f0f0 solid}
@@ -0,0 +1,8 @@
1
+ import o from "./table.vue2.mjs";
2
+ /* empty css */
3
+ import t from "../../../_virtual/_plugin-vue_export-helper.mjs";
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-46d3894f"]]);
5
+ export {
6
+ m as default
7
+ };
8
+ //# sourceMappingURL=table.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,100 @@
1
+ import { defineComponent as M, computed as i, openBlock as o, createElementBlock as u, createElementVNode as v, Fragment as p, renderList as d, normalizeStyle as m, renderSlot as _, createTextVNode as k, toDisplayString as b } from "vue";
2
+ const D = { class: "mt-table" }, E = ["colspan", "rowspan"], N = ["colspan", "rowspan"], T = /* @__PURE__ */ M({
3
+ name: "MtTable",
4
+ __name: "table",
5
+ props: {
6
+ data: { default: () => [] },
7
+ config: { default: () => [] }
8
+ },
9
+ setup($) {
10
+ const S = $, h = i(() => S.config.map((t) => ({ ...t, columns: t.columns.filter((s) => s.title) }))), y = i(() => S.config.map((t) => ({ ...t, columns: t.columns.filter((s) => s.dataKey) }))), B = i(() => {
11
+ const t = h.value.map((a) => a.columns.reduce((e, n) => {
12
+ var l;
13
+ return e + (((l = n.head) == null ? void 0 : l.colSpan) || 1);
14
+ }, 0)), s = y.value.map((a) => a.columns.reduce((e, n) => {
15
+ var l;
16
+ return e + (((l = n.cell) == null ? void 0 : l.colSpan) || 1);
17
+ }, 0));
18
+ return Math.max(...t, ...s);
19
+ }), K = i(() => {
20
+ const t = h.value.map((s) => s.columns.map((a) => {
21
+ var e;
22
+ return ((e = a.head) == null ? void 0 : e.colSpan) || 0;
23
+ }));
24
+ return f(t);
25
+ }), L = i(() => {
26
+ const t = y.value.map((s) => s.columns.map((a) => {
27
+ var e;
28
+ return ((e = a.cell) == null ? void 0 : e.colSpan) || 0;
29
+ }));
30
+ return f(t);
31
+ });
32
+ function f(t) {
33
+ return t.map((s) => {
34
+ const a = s.filter(Boolean), e = a.reduce((r, c) => r + c, 0);
35
+ let n = s.length - a.length, l = B.value - e;
36
+ return s.map((r) => (!r && l > 0 && (r = Math.ceil(l / n), n--, l -= r), r));
37
+ });
38
+ }
39
+ return (t, s) => (o(), u("table", D, [
40
+ v("thead", null, [
41
+ (o(!0), u(p, null, d(h.value, (a, e) => (o(), u("tr", {
42
+ key: e,
43
+ style: m(a.headStyle)
44
+ }, [
45
+ (o(!0), u(p, null, d(a.columns, (n, l) => {
46
+ var r, c;
47
+ return o(), u("th", {
48
+ key: `${n.title}-${l}`,
49
+ colspan: K.value[e][l],
50
+ rowspan: (r = n.head) == null ? void 0 : r.rowSpan,
51
+ style: m((c = n.head) == null ? void 0 : c.style)
52
+ }, [
53
+ _(t.$slots, "header", {
54
+ column: n,
55
+ columnIndex: l,
56
+ row: a,
57
+ rowIndex: e
58
+ }, () => [
59
+ k(b(n.title), 1)
60
+ ], !0)
61
+ ], 12, E);
62
+ }), 128))
63
+ ], 4))), 128))
64
+ ]),
65
+ v("tbody", null, [
66
+ (o(!0), u(p, null, d(t.data, (a, e) => (o(), u(p, { key: e }, [
67
+ (o(!0), u(p, null, d(y.value, (n, l) => (o(), u("tr", {
68
+ key: l,
69
+ style: m(n.rowStyle)
70
+ }, [
71
+ (o(!0), u(p, null, d(n.columns, (r, c) => {
72
+ var C, g;
73
+ return o(), u("td", {
74
+ key: `${r.dataKey}-${c}`,
75
+ colspan: L.value[l][c],
76
+ rowspan: (C = r.cell) == null ? void 0 : C.rowSpan,
77
+ style: m((g = r.cell) == null ? void 0 : g.style)
78
+ }, [
79
+ _(t.$slots, "cell", {
80
+ column: r,
81
+ columnIndex: c,
82
+ dataIndex: e,
83
+ record: a,
84
+ row: n,
85
+ rowIndex: l
86
+ }, () => [
87
+ k(b(a[r.dataKey]), 1)
88
+ ], !0)
89
+ ], 12, N);
90
+ }), 128))
91
+ ], 4))), 128))
92
+ ], 64))), 128))
93
+ ])
94
+ ]));
95
+ }
96
+ });
97
+ export {
98
+ T as default
99
+ };
100
+ //# sourceMappingURL=table.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.vue2.mjs","sources":["../../../../../../packages/components/table/src/table.vue"],"sourcesContent":["<script lang=\"ts\" setup>\r\nimport type { TableProps } from './table';\r\nimport { computed } from 'vue';\r\n\r\ndefineOptions({ name: 'MtTable' });\r\n\r\nconst props = withDefaults(defineProps<TableProps>(), {\r\n data: () => [],\r\n config: () => [],\r\n});\r\n\r\n/** 表头配置 */\r\nconst headConfig = computed(() => {\r\n return props.config.map(rowItem => ({ ...rowItem, columns: rowItem.columns.filter(column => column.title) }));\r\n});\r\n\r\n/** 数据配置 */\r\nconst dataConfig = computed(() => {\r\n return props.config.map(rowItem => ({ ...rowItem, columns: rowItem.columns.filter(column => column.dataKey) }));\r\n});\r\n\r\n/** 最大列数 */\r\nconst maxColSpan = computed(() => {\r\n const handReduce = headConfig.value.map(item => item.columns.reduce((pre, cur) => pre + (cur.head?.colSpan || 1), 0));\r\n const cellReduce = dataConfig.value.map(item => item.columns.reduce((pre, cur) => pre + (cur.cell?.colSpan || 1), 0));\r\n return Math.max(...handReduce, ...cellReduce);\r\n});\r\n\r\n/** 表头列合并 */\r\nconst headColSpan = computed(() => {\r\n const colSpanList = headConfig.value.map(item => item.columns.map(column => column.head?.colSpan || 0));\r\n return getColSpanData(colSpanList);\r\n});\r\n\r\n/** 数据列合并 */\r\nconst dataColSpan = computed(() => {\r\n const colSpanList = dataConfig.value.map(item => item.columns.map(column => column.cell?.colSpan || 0));\r\n return getColSpanData(colSpanList);\r\n});\r\n\r\n/** 获取合并列数组 */\r\nfunction getColSpanData(colSpanList: number[][]) {\r\n return colSpanList.map((columns) => {\r\n const colSpanColumns = columns.filter(Boolean); // 已分配colSpan的列\r\n const beenColSpan = colSpanColumns.reduce((pur, cur) => pur + cur, 0); // 总colSpan\r\n let remainCount = columns.length - colSpanColumns.length; // 剩余未配置colSpan的列数\r\n let remainColSpan = maxColSpan.value - beenColSpan; // 剩余可分配的colSpan\r\n return columns.map((colSpan) => {\r\n if (!colSpan && remainColSpan > 0) {\r\n colSpan = Math.ceil(remainColSpan / remainCount); // 每列平均分配colSpan\r\n remainCount--;\r\n remainColSpan -= colSpan;\r\n }\r\n return colSpan;\r\n });\r\n });\r\n}\r\n</script>\r\n\r\n<template>\r\n <table class=\"mt-table\">\r\n <!-- 表头 -->\r\n <thead>\r\n <tr\r\n v-for=\"(row, rowIndex) in headConfig\"\r\n :key=\"rowIndex\"\r\n :style=\"row.headStyle\"\r\n >\r\n <template v-for=\"(column, columnIndex) in row.columns\" :key=\"`${column.title}-${columnIndex}`\">\r\n <th\r\n :colspan=\"headColSpan[rowIndex][columnIndex]\"\r\n :rowspan=\"column.head?.rowSpan\"\r\n :style=\"column.head?.style\"\r\n >\r\n <slot\r\n :column=\"column\"\r\n :column-index=\"columnIndex\"\r\n :row=\"row\"\r\n :row-index=\"rowIndex\"\r\n name=\"header\"\r\n >\r\n {{ column.title }}\r\n </slot>\r\n </th>\r\n </template>\r\n </tr>\r\n </thead>\r\n <!-- 表体 -->\r\n <tbody>\r\n <template\r\n v-for=\"(record, dataIndex) in data\"\r\n :key=\"dataIndex\"\r\n >\r\n <tr\r\n v-for=\"(row, rowIndex) in dataConfig\"\r\n :key=\"rowIndex\"\r\n :style=\"row.rowStyle\"\r\n >\r\n <template v-for=\"(column, columnIndex) in row.columns\" :key=\"`${column.dataKey}-${columnIndex}`\">\r\n <td\r\n :colspan=\"dataColSpan[rowIndex][columnIndex]\"\r\n :rowspan=\"column.cell?.rowSpan\"\r\n :style=\"column.cell?.style\"\r\n >\r\n <slot\r\n :column=\"column\"\r\n :column-index=\"columnIndex\"\r\n :data-index=\"dataIndex\"\r\n name=\"cell\"\r\n :record=\"record\"\r\n :row=\"row\"\r\n :row-index=\"rowIndex\"\r\n >\r\n {{ record[column.dataKey!] }}\r\n </slot>\r\n </td>\r\n </template>\r\n </tr>\r\n </template>\r\n </tbody>\r\n </table>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.mt-table {\r\n width: 100%;\r\n max-width: 100%;\r\n border-spacing: 0;\r\n border-collapse: collapse;\r\n\r\n thead {\r\n tr {\r\n th {\r\n padding: 8px 16px;\r\n border: 1px #f0f0f0 solid;\r\n }\r\n }\r\n }\r\n\r\n tbody {\r\n tr {\r\n td {\r\n padding: 16px;\r\n border: 1px #f0f0f0 solid;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n"],"names":["props","__props","headConfig","computed","rowItem","column","dataConfig","maxColSpan","handReduce","item","pre","cur","_a","cellReduce","headColSpan","colSpanList","getColSpanData","dataColSpan","columns","colSpanColumns","beenColSpan","pur","remainCount","remainColSpan","colSpan"],"mappings":";;;;;;;;;AAMA,UAAMA,IAAQC,GAMRC,IAAaC,EAAS,MACnBH,EAAM,OAAO,IAAI,CAAAI,OAAY,EAAE,GAAGA,GAAS,SAASA,EAAQ,QAAQ,OAAO,CAAAC,MAAUA,EAAO,KAAK,IAAI,CAC7G,GAGKC,IAAaH,EAAS,MACnBH,EAAM,OAAO,IAAI,CAAAI,OAAY,EAAE,GAAGA,GAAS,SAASA,EAAQ,QAAQ,OAAO,CAAAC,MAAUA,EAAO,OAAO,IAAI,CAC/G,GAGKE,IAAaJ,EAAS,MAAM;AAChC,YAAMK,IAAaN,EAAW,MAAM,IAAI,CAAAO,MAAQA,EAAK,QAAQ,OAAO,CAACC,GAAKC;;AAAQ,eAAAD,OAAOE,IAAAD,EAAI,SAAJ,gBAAAC,EAAU,YAAW;AAAA,SAAI,CAAC,CAAC,GAC9GC,IAAaP,EAAW,MAAM,IAAI,CAAAG,MAAQA,EAAK,QAAQ,OAAO,CAACC,GAAKC;;AAAQ,eAAAD,OAAOE,IAAAD,EAAI,SAAJ,gBAAAC,EAAU,YAAW;AAAA,SAAI,CAAC,CAAC;AACpH,aAAO,KAAK,IAAI,GAAGJ,GAAY,GAAGK,CAAU;AAAA,IAAA,CAC7C,GAGKC,IAAcX,EAAS,MAAM;AACjC,YAAMY,IAAcb,EAAW,MAAM,IAAI,CAAQO,MAAAA,EAAK,QAAQ,IAAI,CAAUJ,MAAA;;AAAA,iBAAAO,IAAAP,EAAO,SAAP,gBAAAO,EAAa,YAAW;AAAA,OAAC,CAAC;AACtG,aAAOI,EAAeD,CAAW;AAAA,IAAA,CAClC,GAGKE,IAAcd,EAAS,MAAM;AACjC,YAAMY,IAAcT,EAAW,MAAM,IAAI,CAAQG,MAAAA,EAAK,QAAQ,IAAI,CAAUJ,MAAA;;AAAA,iBAAAO,IAAAP,EAAO,SAAP,gBAAAO,EAAa,YAAW;AAAA,OAAC,CAAC;AACtG,aAAOI,EAAeD,CAAW;AAAA,IAAA,CAClC;AAGD,aAASC,EAAeD,GAAyB;AACxC,aAAAA,EAAY,IAAI,CAACG,MAAY;AAC5B,cAAAC,IAAiBD,EAAQ,OAAO,OAAO,GACvCE,IAAcD,EAAe,OAAO,CAACE,GAAKV,MAAQU,IAAMV,GAAK,CAAC;AAChE,YAAAW,IAAcJ,EAAQ,SAASC,EAAe,QAC9CI,IAAgBhB,EAAW,QAAQa;AAChC,eAAAF,EAAQ,IAAI,CAACM,OACd,CAACA,KAAWD,IAAgB,MACpBC,IAAA,KAAK,KAAKD,IAAgBD,CAAW,GAC/CA,KACiBC,KAAAC,IAEZA,EACR;AAAA,MAAA,CACF;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/es/index.mjs CHANGED
@@ -1,7 +1,9 @@
1
1
  import { MtExpand as t } from "./components/expand/index.mjs";
2
- import { MtSort as x } from "./components/sort/index.mjs";
2
+ import { MtSort as p } from "./components/sort/index.mjs";
3
+ import { MtTable as f } from "./components/table/index.mjs";
3
4
  export {
4
5
  t as MtExpand,
5
- x as MtSort
6
+ p as MtSort,
7
+ f as MtTable
6
8
  };
7
9
  //# sourceMappingURL=index.mjs.map
package/es/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,3 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./src/table.vue.js");e.default.install=t=>{e.default.name&&t.component(e.default.name,e.default)};const a=e.default;exports.MtTable=a;
2
+ //# sourceMappingURL=index.js.map
3
+ require('./src/table.css');
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../packages/components/table/index.ts"],"sourcesContent":["import type { App } from 'vue';\r\nimport Table from './src/table.vue';\r\n\r\nTable.install = (app: App): void => {\r\n if (Table.name) {\r\n app.component(Table.name, Table);\r\n }\r\n};\r\n\r\nexport const MtTable = Table;\r\n\r\nexport * from './src/table';\r\n"],"names":["Table","app","MtTable"],"mappings":"sHAGAA,EAAAA,QAAM,QAAWC,GAAmB,CAC9BD,EAAAA,QAAM,MACJC,EAAA,UAAUD,UAAM,KAAMA,EAAAA,OAAK,CAEnC,EAEO,MAAME,EAAUF,EAAAA"}
@@ -0,0 +1 @@
1
+ .mt-table[data-v-46d3894f]{width:100%;max-width:100%;border-spacing:0;border-collapse:collapse}.mt-table thead tr th[data-v-46d3894f]{padding:8px 16px;border:1px #f0f0f0 solid}.mt-table tbody tr td[data-v-46d3894f]{padding:16px;border:1px #f0f0f0 solid}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./table.vue2.js");;/* empty css */const t=require("../../../_virtual/_plugin-vue_export-helper.js"),u=t.default(e.default,[["__scopeId","data-v-46d3894f"]]);exports.default=u;
2
+ //# sourceMappingURL=table.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),g={class:"mt-table"},f=["colspan","rowspan"],E=["colspan","rowspan"],v=e.defineComponent({name:"MtTable",__name:"table",props:{data:{default:()=>[]},config:{default:()=>[]}},setup(y){const m=y,u=e.computed(()=>m.config.map(l=>({...l,columns:l.columns.filter(c=>c.title)}))),p=e.computed(()=>m.config.map(l=>({...l,columns:l.columns.filter(c=>c.dataKey)}))),S=e.computed(()=>{const l=u.value.map(n=>n.columns.reduce((t,o)=>{var a;return t+(((a=o.head)==null?void 0:a.colSpan)||1)},0)),c=p.value.map(n=>n.columns.reduce((t,o)=>{var a;return t+(((a=o.cell)==null?void 0:a.colSpan)||1)},0));return Math.max(...l,...c)}),B=e.computed(()=>{const l=u.value.map(c=>c.columns.map(n=>{var t;return((t=n.head)==null?void 0:t.colSpan)||0}));return i(l)}),h=e.computed(()=>{const l=p.value.map(c=>c.columns.map(n=>{var t;return((t=n.cell)==null?void 0:t.colSpan)||0}));return i(l)});function i(l){return l.map(c=>{const n=c.filter(Boolean),t=n.reduce((r,s)=>r+s,0);let o=c.length-n.length,a=S.value-t;return c.map(r=>(!r&&a>0&&(r=Math.ceil(a/o),o--,a-=r),r))})}return(l,c)=>(e.openBlock(),e.createElementBlock("table",g,[e.createElementVNode("thead",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(n,t)=>(e.openBlock(),e.createElementBlock("tr",{key:t,style:e.normalizeStyle(n.headStyle)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.columns,(o,a)=>{var r,s;return e.openBlock(),e.createElementBlock("th",{key:`${o.title}-${a}`,colspan:B.value[t][a],rowspan:(r=o.head)==null?void 0:r.rowSpan,style:e.normalizeStyle((s=o.head)==null?void 0:s.style)},[e.renderSlot(l.$slots,"header",{column:o,columnIndex:a,row:n,rowIndex:t},()=>[e.createTextVNode(e.toDisplayString(o.title),1)],!0)],12,f)}),128))],4))),128))]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.data,(n,t)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:t},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(o,a)=>(e.openBlock(),e.createElementBlock("tr",{key:a,style:e.normalizeStyle(o.rowStyle)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.columns,(r,s)=>{var d,k;return e.openBlock(),e.createElementBlock("td",{key:`${r.dataKey}-${s}`,colspan:h.value[a][s],rowspan:(d=r.cell)==null?void 0:d.rowSpan,style:e.normalizeStyle((k=r.cell)==null?void 0:k.style)},[e.renderSlot(l.$slots,"cell",{column:r,columnIndex:s,dataIndex:t,record:n,row:o,rowIndex:a},()=>[e.createTextVNode(e.toDisplayString(n[r.dataKey]),1)],!0)],12,E)}),128))],4))),128))],64))),128))])]))}});exports.default=v;
2
+ //# sourceMappingURL=table.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.vue2.js","sources":["../../../../../../packages/components/table/src/table.vue"],"sourcesContent":["<script lang=\"ts\" setup>\r\nimport type { TableProps } from './table';\r\nimport { computed } from 'vue';\r\n\r\ndefineOptions({ name: 'MtTable' });\r\n\r\nconst props = withDefaults(defineProps<TableProps>(), {\r\n data: () => [],\r\n config: () => [],\r\n});\r\n\r\n/** 表头配置 */\r\nconst headConfig = computed(() => {\r\n return props.config.map(rowItem => ({ ...rowItem, columns: rowItem.columns.filter(column => column.title) }));\r\n});\r\n\r\n/** 数据配置 */\r\nconst dataConfig = computed(() => {\r\n return props.config.map(rowItem => ({ ...rowItem, columns: rowItem.columns.filter(column => column.dataKey) }));\r\n});\r\n\r\n/** 最大列数 */\r\nconst maxColSpan = computed(() => {\r\n const handReduce = headConfig.value.map(item => item.columns.reduce((pre, cur) => pre + (cur.head?.colSpan || 1), 0));\r\n const cellReduce = dataConfig.value.map(item => item.columns.reduce((pre, cur) => pre + (cur.cell?.colSpan || 1), 0));\r\n return Math.max(...handReduce, ...cellReduce);\r\n});\r\n\r\n/** 表头列合并 */\r\nconst headColSpan = computed(() => {\r\n const colSpanList = headConfig.value.map(item => item.columns.map(column => column.head?.colSpan || 0));\r\n return getColSpanData(colSpanList);\r\n});\r\n\r\n/** 数据列合并 */\r\nconst dataColSpan = computed(() => {\r\n const colSpanList = dataConfig.value.map(item => item.columns.map(column => column.cell?.colSpan || 0));\r\n return getColSpanData(colSpanList);\r\n});\r\n\r\n/** 获取合并列数组 */\r\nfunction getColSpanData(colSpanList: number[][]) {\r\n return colSpanList.map((columns) => {\r\n const colSpanColumns = columns.filter(Boolean); // 已分配colSpan的列\r\n const beenColSpan = colSpanColumns.reduce((pur, cur) => pur + cur, 0); // 总colSpan\r\n let remainCount = columns.length - colSpanColumns.length; // 剩余未配置colSpan的列数\r\n let remainColSpan = maxColSpan.value - beenColSpan; // 剩余可分配的colSpan\r\n return columns.map((colSpan) => {\r\n if (!colSpan && remainColSpan > 0) {\r\n colSpan = Math.ceil(remainColSpan / remainCount); // 每列平均分配colSpan\r\n remainCount--;\r\n remainColSpan -= colSpan;\r\n }\r\n return colSpan;\r\n });\r\n });\r\n}\r\n</script>\r\n\r\n<template>\r\n <table class=\"mt-table\">\r\n <!-- 表头 -->\r\n <thead>\r\n <tr\r\n v-for=\"(row, rowIndex) in headConfig\"\r\n :key=\"rowIndex\"\r\n :style=\"row.headStyle\"\r\n >\r\n <template v-for=\"(column, columnIndex) in row.columns\" :key=\"`${column.title}-${columnIndex}`\">\r\n <th\r\n :colspan=\"headColSpan[rowIndex][columnIndex]\"\r\n :rowspan=\"column.head?.rowSpan\"\r\n :style=\"column.head?.style\"\r\n >\r\n <slot\r\n :column=\"column\"\r\n :column-index=\"columnIndex\"\r\n :row=\"row\"\r\n :row-index=\"rowIndex\"\r\n name=\"header\"\r\n >\r\n {{ column.title }}\r\n </slot>\r\n </th>\r\n </template>\r\n </tr>\r\n </thead>\r\n <!-- 表体 -->\r\n <tbody>\r\n <template\r\n v-for=\"(record, dataIndex) in data\"\r\n :key=\"dataIndex\"\r\n >\r\n <tr\r\n v-for=\"(row, rowIndex) in dataConfig\"\r\n :key=\"rowIndex\"\r\n :style=\"row.rowStyle\"\r\n >\r\n <template v-for=\"(column, columnIndex) in row.columns\" :key=\"`${column.dataKey}-${columnIndex}`\">\r\n <td\r\n :colspan=\"dataColSpan[rowIndex][columnIndex]\"\r\n :rowspan=\"column.cell?.rowSpan\"\r\n :style=\"column.cell?.style\"\r\n >\r\n <slot\r\n :column=\"column\"\r\n :column-index=\"columnIndex\"\r\n :data-index=\"dataIndex\"\r\n name=\"cell\"\r\n :record=\"record\"\r\n :row=\"row\"\r\n :row-index=\"rowIndex\"\r\n >\r\n {{ record[column.dataKey!] }}\r\n </slot>\r\n </td>\r\n </template>\r\n </tr>\r\n </template>\r\n </tbody>\r\n </table>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.mt-table {\r\n width: 100%;\r\n max-width: 100%;\r\n border-spacing: 0;\r\n border-collapse: collapse;\r\n\r\n thead {\r\n tr {\r\n th {\r\n padding: 8px 16px;\r\n border: 1px #f0f0f0 solid;\r\n }\r\n }\r\n }\r\n\r\n tbody {\r\n tr {\r\n td {\r\n padding: 16px;\r\n border: 1px #f0f0f0 solid;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n"],"names":["props","__props","headConfig","computed","rowItem","column","dataConfig","maxColSpan","handReduce","item","pre","cur","_a","cellReduce","headColSpan","colSpanList","getColSpanData","dataColSpan","columns","colSpanColumns","beenColSpan","pur","remainCount","remainColSpan","colSpan"],"mappings":"0TAMA,MAAMA,EAAQC,EAMRC,EAAaC,EAAAA,SAAS,IACnBH,EAAM,OAAO,IAAII,IAAY,CAAE,GAAGA,EAAS,QAASA,EAAQ,QAAQ,OAAOC,GAAUA,EAAO,KAAK,GAAI,CAC7G,EAGKC,EAAaH,EAAAA,SAAS,IACnBH,EAAM,OAAO,IAAII,IAAY,CAAE,GAAGA,EAAS,QAASA,EAAQ,QAAQ,OAAOC,GAAUA,EAAO,OAAO,GAAI,CAC/G,EAGKE,EAAaJ,EAAAA,SAAS,IAAM,CAChC,MAAMK,EAAaN,EAAW,MAAM,IAAIO,GAAQA,EAAK,QAAQ,OAAO,CAACC,EAAKC,WAAQ,OAAAD,KAAOE,EAAAD,EAAI,OAAJ,YAAAC,EAAU,UAAW,IAAI,CAAC,CAAC,EAC9GC,EAAaP,EAAW,MAAM,IAAIG,GAAQA,EAAK,QAAQ,OAAO,CAACC,EAAKC,WAAQ,OAAAD,KAAOE,EAAAD,EAAI,OAAJ,YAAAC,EAAU,UAAW,IAAI,CAAC,CAAC,EACpH,OAAO,KAAK,IAAI,GAAGJ,EAAY,GAAGK,CAAU,CAAA,CAC7C,EAGKC,EAAcX,EAAAA,SAAS,IAAM,CACjC,MAAMY,EAAcb,EAAW,MAAM,IAAYO,GAAAA,EAAK,QAAQ,IAAcJ,GAAA,OAAA,QAAAO,EAAAP,EAAO,OAAP,YAAAO,EAAa,UAAW,EAAC,CAAC,EACtG,OAAOI,EAAeD,CAAW,CAAA,CAClC,EAGKE,EAAcd,EAAAA,SAAS,IAAM,CACjC,MAAMY,EAAcT,EAAW,MAAM,IAAYG,GAAAA,EAAK,QAAQ,IAAcJ,GAAA,OAAA,QAAAO,EAAAP,EAAO,OAAP,YAAAO,EAAa,UAAW,EAAC,CAAC,EACtG,OAAOI,EAAeD,CAAW,CAAA,CAClC,EAGD,SAASC,EAAeD,EAAyB,CACxC,OAAAA,EAAY,IAAKG,GAAY,CAC5B,MAAAC,EAAiBD,EAAQ,OAAO,OAAO,EACvCE,EAAcD,EAAe,OAAO,CAACE,EAAKV,IAAQU,EAAMV,EAAK,CAAC,EAChE,IAAAW,EAAcJ,EAAQ,OAASC,EAAe,OAC9CI,EAAgBhB,EAAW,MAAQa,EAChC,OAAAF,EAAQ,IAAKM,IACd,CAACA,GAAWD,EAAgB,IACpBC,EAAA,KAAK,KAAKD,EAAgBD,CAAW,EAC/CA,IACiBC,GAAAC,GAEZA,EACR,CAAA,CACF,CAAA"}
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./components/expand/index.js"),e=require("./components/sort/index.js");exports.MtExpand=t.MtExpand;exports.MtSort=e.MtSort;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./components/expand/index.js"),t=require("./components/sort/index.js"),r=require("./components/table/index.js");exports.MtExpand=e.MtExpand;exports.MtSort=t.MtSort;exports.MtTable=r.MtTable;
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mortise-tenon-design",
3
3
  "type": "module",
4
- "version": "0.1.2",
4
+ "version": "0.2.0",
5
5
  "description": "榫卯组件库",
6
6
  "author": "nixwai",
7
7
  "license": "ISC",
package/types/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './expand';
2
2
  export * from './sort';
3
+ export * from './table';
@@ -0,0 +1,48 @@
1
+ export declare const MtTable: {
2
+ new (...args: any[]): import('vue').CreateComponentPublicInstanceWithMixins<Readonly<import('.').TableProps> & Readonly<{}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, import('vue').PublicProps, {
3
+ data: any[];
4
+ config: import('.').TableConfig[];
5
+ }, false, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {}, any, import('vue').ComponentProvideOptions, {
6
+ P: {};
7
+ B: {};
8
+ D: {};
9
+ C: {};
10
+ M: {};
11
+ Defaults: {};
12
+ }, Readonly<import('.').TableProps> & Readonly<{}>, {}, {}, {}, {}, {
13
+ data: any[];
14
+ config: import('.').TableConfig[];
15
+ }>;
16
+ __isFragment?: never;
17
+ __isTeleport?: never;
18
+ __isSuspense?: never;
19
+ } & import('vue').ComponentOptionsBase<Readonly<import('.').TableProps> & Readonly<{}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, {
20
+ data: any[];
21
+ config: import('.').TableConfig[];
22
+ }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & (new () => {
23
+ $slots: {
24
+ header?(_: {
25
+ column: import('.').Column;
26
+ columnIndex: number;
27
+ row: {
28
+ columns: import('.').Column[];
29
+ rowStyle?: import('vue').CSSProperties;
30
+ headStyle?: import('vue').CSSProperties;
31
+ };
32
+ rowIndex: number;
33
+ }): any;
34
+ cell?(_: {
35
+ column: import('.').Column;
36
+ columnIndex: number;
37
+ dataIndex: number;
38
+ record: any;
39
+ row: {
40
+ columns: import('.').Column[];
41
+ rowStyle?: import('vue').CSSProperties;
42
+ headStyle?: import('vue').CSSProperties;
43
+ };
44
+ rowIndex: number;
45
+ }): any;
46
+ };
47
+ });
48
+ export * from './src/table';
@@ -0,0 +1,38 @@
1
+ import { CSSProperties } from 'vue';
2
+ export interface TableProps {
3
+ /** 表格数据 */
4
+ data?: any[];
5
+ /** 表格配置 */
6
+ config?: TableConfig[];
7
+ }
8
+ /** 表体行 */
9
+ export interface TableConfig {
10
+ /** 行体样式 */
11
+ rowStyle?: CSSProperties;
12
+ /** 表头样式 */
13
+ headStyle?: CSSProperties;
14
+ /** 列配置 */
15
+ columns: Column[];
16
+ }
17
+ /** 标体列 */
18
+ export interface Column {
19
+ /** 唯一标识key */
20
+ key?: string;
21
+ /** 单元格数据字段(配置了才会显示对应数据列) */
22
+ dataKey?: string;
23
+ /** 表头名称(配置了才会显示对应列表头) */
24
+ title?: string;
25
+ /** 表头格配置 */
26
+ head?: CellProps;
27
+ /** 数据格配置 */
28
+ cell?: CellProps;
29
+ }
30
+ /** 单元格属性 */
31
+ export interface CellProps {
32
+ /** 样式 */
33
+ style?: CSSProperties;
34
+ /** 占用列数 */
35
+ colSpan?: number;
36
+ /** 占用行数 */
37
+ rowSpan?: number;
38
+ }
@@ -0,0 +1,41 @@
1
+ import { TableProps } from './table';
2
+ declare function __VLS_template(): {
3
+ slots: {
4
+ header?(_: {
5
+ column: import('./table').Column;
6
+ columnIndex: number;
7
+ row: {
8
+ columns: import('./table').Column[];
9
+ rowStyle?: import('vue').CSSProperties;
10
+ headStyle?: import('vue').CSSProperties;
11
+ };
12
+ rowIndex: number;
13
+ }): any;
14
+ cell?(_: {
15
+ column: import('./table').Column;
16
+ columnIndex: number;
17
+ dataIndex: number;
18
+ record: any;
19
+ row: {
20
+ columns: import('./table').Column[];
21
+ rowStyle?: import('vue').CSSProperties;
22
+ headStyle?: import('vue').CSSProperties;
23
+ };
24
+ rowIndex: number;
25
+ }): any;
26
+ };
27
+ refs: {};
28
+ attrs: Partial<{}>;
29
+ };
30
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
31
+ declare const __VLS_component: import('vue').DefineComponent<TableProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TableProps> & Readonly<{}>, {
32
+ data: any[];
33
+ config: import('./table').TableConfig[];
34
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
35
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
36
+ export default _default;
37
+ type __VLS_WithTemplateSlots<T, S> = T & {
38
+ new (): {
39
+ $slots: S;
40
+ };
41
+ };