vxe-table 4.10.6-beta.3 → 4.10.6-beta.30
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/es/grid/src/grid.js +1 -1
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/locale/lang/ar-EG.js +2 -1
- package/es/locale/lang/de-DE.js +2 -1
- package/es/locale/lang/en-US.js +4 -3
- package/es/locale/lang/es-ES.js +2 -1
- package/es/locale/lang/fr-FR.js +2 -1
- package/es/locale/lang/hu-HU.js +2 -1
- package/es/locale/lang/hy-AM.js +2 -1
- package/es/locale/lang/it-IT.js +2 -1
- package/es/locale/lang/ja-JP.js +2 -1
- package/es/locale/lang/ko-KR.js +2 -1
- package/es/locale/lang/nb-NO.js +2 -1
- package/es/locale/lang/pt-BR.js +2 -1
- package/es/locale/lang/ru-RU.js +4 -3
- package/es/locale/lang/th-TH.js +2 -1
- package/es/locale/lang/ug-CN.js +2 -1
- package/es/locale/lang/uk-UA.js +518 -517
- package/es/locale/lang/vi-VN.js +2 -1
- package/es/locale/lang/zh-CHT.js +2 -1
- package/es/locale/lang/zh-CN.js +2 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/edit/hook.js +7 -7
- package/es/table/module/export/hook.js +97 -62
- package/es/table/module/keyboard/hook.js +63 -27
- package/es/table/src/body.js +112 -77
- package/es/table/src/cell.js +28 -46
- package/es/table/src/column.js +13 -1
- package/es/table/src/columnInfo.js +3 -0
- package/es/table/src/emits.js +2 -0
- package/es/table/src/footer.js +32 -8
- package/es/table/src/header.js +73 -158
- package/es/table/src/props.js +6 -2
- package/es/table/src/table.js +1175 -633
- package/es/table/src/util.js +77 -62
- package/es/table/style.css +357 -213
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +24 -11
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +357 -213
- package/es/vxe-table/style.min.css +1 -1
- package/lib/grid/src/grid.js +1 -1
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +1833 -1161
- package/lib/index.umd.min.js +1 -1
- package/lib/locale/lang/ar-EG.js +2 -1
- package/lib/locale/lang/ar-EG.min.js +1 -1
- package/lib/locale/lang/de-DE.js +2 -1
- package/lib/locale/lang/de-DE.min.js +1 -1
- package/lib/locale/lang/en-US.js +4 -3
- package/lib/locale/lang/en-US.min.js +1 -1
- package/lib/locale/lang/en-US.umd.js +4 -3
- package/lib/locale/lang/es-ES.js +2 -1
- package/lib/locale/lang/es-ES.min.js +1 -1
- package/lib/locale/lang/es-ES.umd.js +2 -1
- package/lib/locale/lang/fr-FR.js +2 -1
- package/lib/locale/lang/fr-FR.min.js +1 -1
- package/lib/locale/lang/hu-HU.js +2 -1
- package/lib/locale/lang/hu-HU.min.js +1 -1
- package/lib/locale/lang/hu-HU.umd.js +2 -1
- package/lib/locale/lang/hy-AM.js +2 -1
- package/lib/locale/lang/hy-AM.min.js +1 -1
- package/lib/locale/lang/it-IT.js +2 -1
- package/lib/locale/lang/it-IT.min.js +1 -1
- package/lib/locale/lang/ja-JP.js +2 -1
- package/lib/locale/lang/ja-JP.min.js +1 -1
- package/lib/locale/lang/ja-JP.umd.js +2 -1
- package/lib/locale/lang/ko-KR.js +2 -1
- package/lib/locale/lang/ko-KR.min.js +1 -1
- package/lib/locale/lang/ko-KR.umd.js +2 -1
- package/lib/locale/lang/nb-NO.js +2 -1
- package/lib/locale/lang/nb-NO.min.js +1 -1
- package/lib/locale/lang/pt-BR.js +2 -1
- package/lib/locale/lang/pt-BR.min.js +1 -1
- package/lib/locale/lang/pt-BR.umd.js +2 -1
- package/lib/locale/lang/ru-RU.js +4 -3
- package/lib/locale/lang/ru-RU.min.js +1 -1
- package/lib/locale/lang/ru-RU.umd.js +4 -3
- package/lib/locale/lang/th-TH.js +2 -1
- package/lib/locale/lang/th-TH.min.js +1 -1
- package/lib/locale/lang/ug-CN.js +2 -1
- package/lib/locale/lang/ug-CN.min.js +1 -1
- package/lib/locale/lang/uk-UA.js +518 -517
- package/lib/locale/lang/uk-UA.min.js +1 -1
- package/lib/locale/lang/uk-UA.umd.js +518 -517
- package/lib/locale/lang/vi-VN.js +2 -1
- package/lib/locale/lang/vi-VN.min.js +1 -1
- package/lib/locale/lang/zh-CHT.js +2 -1
- package/lib/locale/lang/zh-CHT.min.js +1 -1
- package/lib/locale/lang/zh-CN.js +2 -1
- package/lib/locale/lang/zh-CN.min.js +1 -1
- package/lib/locale/lang/zh-CN.umd.js +2 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/edit/hook.js +12 -2
- package/lib/table/module/edit/hook.min.js +1 -1
- package/lib/table/module/export/hook.js +97 -57
- package/lib/table/module/export/hook.min.js +1 -1
- package/lib/table/module/keyboard/hook.js +71 -28
- package/lib/table/module/keyboard/hook.min.js +1 -1
- package/lib/table/src/body.js +104 -76
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +27 -38
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/column.js +13 -1
- package/lib/table/src/column.min.js +1 -1
- package/lib/table/src/columnInfo.js +3 -0
- package/lib/table/src/columnInfo.min.js +1 -1
- package/lib/table/src/emits.js +1 -1
- package/lib/table/src/emits.min.js +1 -1
- package/lib/table/src/footer.js +30 -8
- package/lib/table/src/footer.min.js +1 -1
- package/lib/table/src/header.js +57 -169
- package/lib/table/src/header.min.js +1 -1
- package/lib/table/src/props.js +6 -2
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/table.js +1227 -625
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +100 -82
- package/lib/table/src/util.min.js +1 -1
- package/lib/table/style/style.css +357 -213
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +24 -11
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-table/style/style.css +357 -213
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/grid/src/grid.ts +1 -1
- package/packages/locale/lang/ar-EG.ts +2 -1
- package/packages/locale/lang/de-DE.ts +2 -1
- package/packages/locale/lang/en-US.ts +4 -3
- package/packages/locale/lang/es-ES.ts +2 -1
- package/packages/locale/lang/fr-FR.ts +2 -1
- package/packages/locale/lang/hu-HU.ts +2 -1
- package/packages/locale/lang/hy-AM.ts +2 -1
- package/packages/locale/lang/it-IT.ts +2 -1
- package/packages/locale/lang/ja-JP.ts +2 -1
- package/packages/locale/lang/ko-KR.ts +2 -1
- package/packages/locale/lang/nb-NO.ts +2 -1
- package/packages/locale/lang/pt-BR.ts +2 -1
- package/packages/locale/lang/ru-RU.ts +4 -3
- package/packages/locale/lang/th-TH.ts +2 -1
- package/packages/locale/lang/ug-CN.ts +2 -1
- package/packages/locale/lang/uk-UA.ts +518 -517
- package/packages/locale/lang/vi-VN.ts +2 -1
- package/packages/locale/lang/zh-CHT.ts +2 -1
- package/packages/locale/lang/zh-CN.ts +2 -1
- package/packages/table/module/edit/hook.ts +7 -7
- package/packages/table/module/export/hook.ts +118 -65
- package/packages/table/module/keyboard/hook.ts +59 -25
- package/packages/table/src/body.ts +122 -80
- package/packages/table/src/cell.ts +28 -54
- package/packages/table/src/column.ts +13 -1
- package/packages/table/src/columnInfo.ts +3 -0
- package/packages/table/src/emits.ts +5 -1
- package/packages/table/src/footer.ts +32 -8
- package/packages/table/src/header.ts +73 -158
- package/packages/table/src/props.ts +6 -2
- package/packages/table/src/table.ts +1179 -631
- package/packages/table/src/util.ts +81 -62
- package/packages/ui/index.ts +23 -10
- package/styles/components/table.scss +428 -290
- package/styles/theme/base.scss +4 -6
- package/styles/theme/dark.scss +1 -0
- package/styles/theme/light.scss +1 -0
- package/styles/variable.scss +1 -1
- /package/es/{iconfont.1736748534420.ttf → iconfont.1737460213413.ttf} +0 -0
- /package/es/{iconfont.1736748534420.woff → iconfont.1737460213413.woff} +0 -0
- /package/es/{iconfont.1736748534420.woff2 → iconfont.1737460213413.woff2} +0 -0
- /package/lib/{iconfont.1736748534420.ttf → iconfont.1737460213413.ttf} +0 -0
- /package/lib/{iconfont.1736748534420.woff → iconfont.1737460213413.woff} +0 -0
- /package/lib/{iconfont.1736748534420.woff2 → iconfont.1737460213413.woff2} +0 -0
package/es/table/src/footer.js
CHANGED
|
@@ -2,6 +2,7 @@ import { defineComponent, TransitionGroup, h, ref, inject, nextTick, onMounted,
|
|
|
2
2
|
import XEUtils from 'xe-utils';
|
|
3
3
|
import { VxeUI } from '../../ui';
|
|
4
4
|
import { updateCellTitle, getPropClass } from '../../ui/src/dom';
|
|
5
|
+
import { getCellHeight } from './util';
|
|
5
6
|
const { renderer, renderEmptyElement } = VxeUI;
|
|
6
7
|
const renderType = 'footer';
|
|
7
8
|
function mergeFooterMethod(mergeFooterList, _rowIndex, _columnIndex) {
|
|
@@ -40,7 +41,7 @@ export default defineComponent({
|
|
|
40
41
|
setup(props) {
|
|
41
42
|
const $xeTable = inject('$xeTable', {});
|
|
42
43
|
const { xID, props: tableProps, reactData: tableReactData, internalData: tableInternalData } = $xeTable;
|
|
43
|
-
const { computeTooltipOpts, computeColumnOpts, computeColumnDragOpts } = $xeTable.getComputeMaps();
|
|
44
|
+
const { computeTooltipOpts, computeColumnOpts, computeColumnDragOpts, computeCellOpts, computeFooterCellOpts, computeDefaultRowHeight } = $xeTable.getComputeMaps();
|
|
44
45
|
const refElem = ref();
|
|
45
46
|
const refFooterScroll = ref();
|
|
46
47
|
const refFooterTable = ref();
|
|
@@ -54,20 +55,26 @@ export default defineComponent({
|
|
|
54
55
|
const { scrollXStore } = tableInternalData;
|
|
55
56
|
const tooltipOpts = computeTooltipOpts.value;
|
|
56
57
|
const columnOpts = computeColumnOpts.value;
|
|
58
|
+
const defaultRowHeight = computeDefaultRowHeight.value;
|
|
59
|
+
const cellOpts = computeCellOpts.value;
|
|
60
|
+
const footerCellOpts = computeFooterCellOpts.value;
|
|
61
|
+
const currCellHeight = getCellHeight(footerCellOpts.height || cellOpts.height) || defaultRowHeight;
|
|
57
62
|
return tableColumn.map((column, $columnIndex) => {
|
|
58
63
|
const { type, showFooterOverflow, footerAlign, align, footerClassName, editRender, cellRender } = column;
|
|
64
|
+
const colid = column.id;
|
|
59
65
|
const renderOpts = editRender || cellRender;
|
|
60
66
|
const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
|
|
61
67
|
const showAllTip = tooltipOpts.showAll;
|
|
62
68
|
const isColGroup = column.children && column.children.length;
|
|
63
69
|
const fixedHiddenColumn = fixedType ? column.fixed !== fixedType && !isColGroup : column.fixed && overflowX;
|
|
70
|
+
const isPadding = XEUtils.isBoolean(footerCellOpts.padding) ? footerCellOpts.padding : cellOpts.padding;
|
|
64
71
|
const footOverflow = XEUtils.eqNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow;
|
|
65
72
|
const footAlign = footerAlign || (compConf ? compConf.tableFooterCellAlign : '') || allFooterAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign;
|
|
66
73
|
let showEllipsis = footOverflow === 'ellipsis';
|
|
67
74
|
const showTitle = footOverflow === 'title';
|
|
68
75
|
const showTooltip = footOverflow === true || footOverflow === 'tooltip';
|
|
69
76
|
let hasEllipsis = showTitle || showTooltip || showEllipsis;
|
|
70
|
-
const attrs = { colid
|
|
77
|
+
const attrs = { colid };
|
|
71
78
|
const tfOns = {};
|
|
72
79
|
const columnIndex = $xeTable.getColumnIndex(column);
|
|
73
80
|
const _columnIndex = $xeTable.getVTColumnIndex(column);
|
|
@@ -145,17 +152,26 @@ export default defineComponent({
|
|
|
145
152
|
attrs.colspan = colspan;
|
|
146
153
|
}
|
|
147
154
|
}
|
|
155
|
+
const isLastColumn = $columnIndex === tableColumn.length - 1;
|
|
148
156
|
const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
|
|
149
|
-
let
|
|
150
|
-
if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex || _columnIndex > scrollXStore.visibleEndIndex)) {
|
|
151
|
-
|
|
157
|
+
let isVNPreEmptyStatus = false;
|
|
158
|
+
if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
|
|
159
|
+
isVNPreEmptyStatus = true;
|
|
160
|
+
}
|
|
161
|
+
const tcStyle = {};
|
|
162
|
+
if (hasEllipsis) {
|
|
163
|
+
tcStyle.height = `${currCellHeight}px`;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
tcStyle.minHeight = `${currCellHeight}px`;
|
|
152
167
|
}
|
|
153
168
|
return h('td', Object.assign(Object.assign(Object.assign(Object.assign({ class: ['vxe-footer--column', column.id, {
|
|
154
169
|
[`col--${footAlign}`]: footAlign,
|
|
155
170
|
[`col--${type}`]: type,
|
|
156
|
-
'col--last':
|
|
171
|
+
'col--last': isLastColumn,
|
|
157
172
|
'fixed--width': !isAutoCellWidth,
|
|
158
173
|
'fixed--hidden': fixedHiddenColumn,
|
|
174
|
+
'is--padding': isPadding,
|
|
159
175
|
'col--ellipsis': hasEllipsis,
|
|
160
176
|
'col--current': currentColumn === column
|
|
161
177
|
}, getPropClass(footerClassName, cellParams), getPropClass(footerCellClassName, cellParams)] }, attrs), { style: footerCellStyle ? (XEUtils.isFunction(footerCellStyle) ? footerCellStyle(cellParams) : footerCellStyle) : null }), tfOns), { key: columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || columnOpts.drag ? column.id : $columnIndex }), [
|
|
@@ -164,8 +180,16 @@ export default defineComponent({
|
|
|
164
180
|
'c--title': showTitle,
|
|
165
181
|
'c--tooltip': showTooltip,
|
|
166
182
|
'c--ellipsis': showEllipsis
|
|
167
|
-
}]
|
|
168
|
-
|
|
183
|
+
}],
|
|
184
|
+
style: tcStyle
|
|
185
|
+
}, isVNPreEmptyStatus
|
|
186
|
+
? []
|
|
187
|
+
: [
|
|
188
|
+
h('div', {
|
|
189
|
+
colid,
|
|
190
|
+
class: 'vxe-cell--wrapper'
|
|
191
|
+
}, column.renderFooter(cellParams))
|
|
192
|
+
])
|
|
169
193
|
]);
|
|
170
194
|
});
|
|
171
195
|
};
|
package/es/table/src/header.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { defineComponent, TransitionGroup, h, ref, inject, nextTick, watch, onMounted, onUnmounted } from 'vue';
|
|
2
2
|
import XEUtils from 'xe-utils';
|
|
3
3
|
import { VxeUI } from '../../ui';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const { getI18n, renderer, renderEmptyElement } = VxeUI;
|
|
4
|
+
import { getCellHeight, convertHeaderColumnToRows } from './util';
|
|
5
|
+
const { renderer, renderEmptyElement } = VxeUI;
|
|
7
6
|
const renderType = 'header';
|
|
8
7
|
export default defineComponent({
|
|
9
8
|
name: 'VxeTableHeader',
|
|
@@ -20,8 +19,7 @@ export default defineComponent({
|
|
|
20
19
|
setup(props) {
|
|
21
20
|
const $xeTable = inject('$xeTable', {});
|
|
22
21
|
const { xID, props: tableProps, reactData: tableReactData, internalData: tableInternalData } = $xeTable;
|
|
23
|
-
const {
|
|
24
|
-
const { computeColumnOpts, computeColumnDragOpts, computeResizableOpts } = $xeTable.getComputeMaps();
|
|
22
|
+
const { computeColumnOpts, computeColumnDragOpts, computeCellOpts, computeMouseOpts, computeHeaderCellOpts, computeDefaultRowHeight } = $xeTable.getComputeMaps();
|
|
25
23
|
const headerColumn = ref([]);
|
|
26
24
|
const refElem = ref();
|
|
27
25
|
const refHeaderScroll = ref();
|
|
@@ -34,130 +32,6 @@ export default defineComponent({
|
|
|
34
32
|
const { isGroup } = tableReactData;
|
|
35
33
|
headerColumn.value = isGroup ? convertHeaderColumnToRows(props.tableGroupColumn) : [];
|
|
36
34
|
};
|
|
37
|
-
const resizeMousedownEvent = (evnt, params) => {
|
|
38
|
-
const { column } = params;
|
|
39
|
-
const { fixedType } = props;
|
|
40
|
-
const { elemStore, visibleColumn } = tableInternalData;
|
|
41
|
-
const resizableOpts = computeResizableOpts.value;
|
|
42
|
-
const tableEl = tableRefElem.value;
|
|
43
|
-
const leftContainerElem = refLeftContainer.value;
|
|
44
|
-
const rightContainerElem = refRightContainer.value;
|
|
45
|
-
const resizeBarElem = refCellResizeBar.value;
|
|
46
|
-
const resizeTipElem = refCellResizeTip.value;
|
|
47
|
-
const { clientX: dragClientX } = evnt;
|
|
48
|
-
const wrapperElem = refElem.value;
|
|
49
|
-
const dragBtnElem = evnt.target;
|
|
50
|
-
const cell = dragBtnElem.parentNode;
|
|
51
|
-
const cellParams = Object.assign(params, { cell });
|
|
52
|
-
let dragLeft = 0;
|
|
53
|
-
const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
|
|
54
|
-
if (!bodyScrollElem) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const pos = getOffsetPos(dragBtnElem, wrapperElem);
|
|
58
|
-
const dragBtnWidth = dragBtnElem.clientWidth;
|
|
59
|
-
const dragBtnOffsetWidth = Math.floor(dragBtnWidth / 2);
|
|
60
|
-
const minInterval = getColReMinWidth(cellParams) - dragBtnOffsetWidth; // 列之间的最小间距
|
|
61
|
-
let dragMinLeft = pos.left - cell.clientWidth + dragBtnWidth + minInterval;
|
|
62
|
-
let dragPosLeft = pos.left + dragBtnOffsetWidth;
|
|
63
|
-
const domMousemove = document.onmousemove;
|
|
64
|
-
const domMouseup = document.onmouseup;
|
|
65
|
-
const isLeftFixed = fixedType === 'left';
|
|
66
|
-
const isRightFixed = fixedType === 'right';
|
|
67
|
-
// 计算左右侧固定列偏移量
|
|
68
|
-
let fixedOffsetWidth = 0;
|
|
69
|
-
if (isLeftFixed || isRightFixed) {
|
|
70
|
-
const siblingProp = isLeftFixed ? 'nextElementSibling' : 'previousElementSibling';
|
|
71
|
-
let tempCellElem = cell[siblingProp];
|
|
72
|
-
while (tempCellElem) {
|
|
73
|
-
if (hasClass(tempCellElem, 'fixed--hidden')) {
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
else if (!hasClass(tempCellElem, 'col--group')) {
|
|
77
|
-
fixedOffsetWidth += tempCellElem.offsetWidth;
|
|
78
|
-
}
|
|
79
|
-
tempCellElem = tempCellElem[siblingProp];
|
|
80
|
-
}
|
|
81
|
-
if (isRightFixed && rightContainerElem) {
|
|
82
|
-
dragPosLeft = rightContainerElem.offsetLeft + fixedOffsetWidth;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// 处理拖动事件
|
|
86
|
-
const updateEvent = function (evnt) {
|
|
87
|
-
evnt.stopPropagation();
|
|
88
|
-
evnt.preventDefault();
|
|
89
|
-
const offsetX = evnt.clientX - dragClientX;
|
|
90
|
-
let left = dragPosLeft + offsetX;
|
|
91
|
-
const scrollLeft = fixedType ? 0 : bodyScrollElem.scrollLeft;
|
|
92
|
-
if (isLeftFixed) {
|
|
93
|
-
// 左固定列(不允许超过右侧固定列、不允许超过右边距)
|
|
94
|
-
left = Math.min(left, (rightContainerElem ? rightContainerElem.offsetLeft : bodyScrollElem.clientWidth) - fixedOffsetWidth - minInterval);
|
|
95
|
-
}
|
|
96
|
-
else if (isRightFixed) {
|
|
97
|
-
// 右侧固定列(不允许超过左侧固定列、不允许超过左边距)
|
|
98
|
-
dragMinLeft = (leftContainerElem ? leftContainerElem.clientWidth : 0) + fixedOffsetWidth + minInterval;
|
|
99
|
-
left = Math.min(left, dragPosLeft + cell.clientWidth - minInterval);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
dragMinLeft = Math.max(bodyScrollElem.scrollLeft, dragMinLeft);
|
|
103
|
-
// left = Math.min(left, bodyScrollElem.clientWidth + bodyScrollElem.scrollLeft - 40)
|
|
104
|
-
}
|
|
105
|
-
dragLeft = Math.max(left, dragMinLeft);
|
|
106
|
-
const resizeBarLeft = dragLeft - scrollLeft;
|
|
107
|
-
resizeBarElem.style.left = `${resizeBarLeft}px`;
|
|
108
|
-
if (resizableOpts.showDragTip && resizeTipElem) {
|
|
109
|
-
const tableWidth = tableEl.clientWidth;
|
|
110
|
-
const wrapperRect = wrapperElem.getBoundingClientRect();
|
|
111
|
-
const resizeBarWidth = resizeBarElem.clientWidth;
|
|
112
|
-
const resizeTipWidth = resizeTipElem.clientWidth;
|
|
113
|
-
const resizeTipHeight = resizeTipElem.clientHeight;
|
|
114
|
-
let resizeTipLeft = -resizeTipWidth;
|
|
115
|
-
if (resizeBarLeft < resizeTipWidth + resizeBarWidth) {
|
|
116
|
-
resizeTipLeft = resizeTipWidth + resizeBarWidth - resizeBarLeft;
|
|
117
|
-
}
|
|
118
|
-
else if (resizeBarLeft > tableWidth) {
|
|
119
|
-
resizeTipLeft += tableWidth - resizeBarLeft;
|
|
120
|
-
}
|
|
121
|
-
resizeTipElem.style.left = `${resizeTipLeft}px`;
|
|
122
|
-
resizeTipElem.style.top = `${Math.min(tableEl.clientHeight - resizeTipHeight, Math.max(0, evnt.clientY - wrapperRect.y - resizeTipHeight / 2))}px`;
|
|
123
|
-
resizeTipElem.textContent = getI18n('vxe.table.resizeColTip', [column.renderWidth + (isRightFixed ? dragPosLeft - dragLeft : dragLeft - dragPosLeft)]);
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
tableReactData._isResize = true;
|
|
127
|
-
addClass(tableEl, 'drag--resize');
|
|
128
|
-
resizeBarElem.style.display = 'block';
|
|
129
|
-
document.onmousemove = updateEvent;
|
|
130
|
-
document.onmouseup = function (evnt) {
|
|
131
|
-
document.onmousemove = domMousemove;
|
|
132
|
-
document.onmouseup = domMouseup;
|
|
133
|
-
const resizeWidth = column.renderWidth + (isRightFixed ? dragPosLeft - dragLeft : dragLeft - dragPosLeft);
|
|
134
|
-
column.resizeWidth = resizeWidth;
|
|
135
|
-
if (resizableOpts.dragMode === 'fixed') {
|
|
136
|
-
visibleColumn.forEach(item => {
|
|
137
|
-
if (item.id !== column.id) {
|
|
138
|
-
if (!item.resizeWidth) {
|
|
139
|
-
item.resizeWidth = item.renderWidth;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
resizeBarElem.style.display = 'none';
|
|
145
|
-
tableReactData._isResize = false;
|
|
146
|
-
tableInternalData._lastResizeTime = Date.now();
|
|
147
|
-
$xeTable.analyColumnWidth();
|
|
148
|
-
$xeTable.recalculate(true).then(() => {
|
|
149
|
-
$xeTable.saveCustomStore('update:visible');
|
|
150
|
-
$xeTable.updateCellAreas();
|
|
151
|
-
$xeTable.dispatchEvent('resizable-change', Object.assign(Object.assign({}, params), { resizeWidth }), evnt);
|
|
152
|
-
setTimeout(() => $xeTable.recalculate(true), 300);
|
|
153
|
-
});
|
|
154
|
-
removeClass(tableEl, 'drag--resize');
|
|
155
|
-
};
|
|
156
|
-
updateEvent(evnt);
|
|
157
|
-
if ($xeTable.closeMenu) {
|
|
158
|
-
$xeTable.closeMenu();
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
35
|
const renderRows = (isGroup, isOptimizeMode, cols, $rowIndex) => {
|
|
162
36
|
const { fixedType } = props;
|
|
163
37
|
const { resizable: allResizable, border, columnKey, headerCellClassName, headerCellStyle, showHeaderOverflow: allColumnHeaderOverflow, headerAlign: allHeaderAlign, align: allAlign, mouseConfig } = tableProps;
|
|
@@ -165,6 +39,10 @@ export default defineComponent({
|
|
|
165
39
|
const { scrollXStore } = tableInternalData;
|
|
166
40
|
const columnOpts = computeColumnOpts.value;
|
|
167
41
|
const columnDragOpts = computeColumnDragOpts.value;
|
|
42
|
+
const cellOpts = computeCellOpts.value;
|
|
43
|
+
const defaultRowHeight = computeDefaultRowHeight.value;
|
|
44
|
+
const headerCellOpts = computeHeaderCellOpts.value;
|
|
45
|
+
const currCellHeight = getCellHeight(headerCellOpts.height || cellOpts.height) || defaultRowHeight;
|
|
168
46
|
const { disabledMethod: dragDisabledMethod, isCrossDrag, isPeerDrag } = columnDragOpts;
|
|
169
47
|
return cols.map((column, $columnIndex) => {
|
|
170
48
|
const { type, showHeaderOverflow, headerAlign, align, filters, headerClassName, editRender, cellRender } = column;
|
|
@@ -173,6 +51,7 @@ export default defineComponent({
|
|
|
173
51
|
const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
|
|
174
52
|
const isColGroup = column.children && column.children.length;
|
|
175
53
|
const fixedHiddenColumn = fixedType ? (column.fixed !== fixedType && !isColGroup) : !!column.fixed && overflowX;
|
|
54
|
+
const isPadding = XEUtils.isBoolean(headerCellOpts.padding) ? headerCellOpts.padding : cellOpts.padding;
|
|
176
55
|
const headOverflow = XEUtils.eqNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow;
|
|
177
56
|
const headAlign = headerAlign || (compConf ? compConf.tableHeaderCellAlign : '') || allHeaderAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign;
|
|
178
57
|
let showEllipsis = headOverflow === 'ellipsis';
|
|
@@ -187,15 +66,15 @@ export default defineComponent({
|
|
|
187
66
|
}
|
|
188
67
|
const columnIndex = $xeTable.getColumnIndex(column);
|
|
189
68
|
const _columnIndex = $xeTable.getVTColumnIndex(column);
|
|
190
|
-
const
|
|
69
|
+
const cellParams = { $table: $xeTable, $grid: $xeTable.xegrid, $rowIndex, column, columnIndex, $columnIndex, _columnIndex, firstFilterOption, fixed: fixedType, type: renderType, isHidden: fixedHiddenColumn, hasFilter };
|
|
191
70
|
const thAttrs = {
|
|
192
71
|
colid,
|
|
193
72
|
colspan: column.colSpan > 1 ? column.colSpan : null,
|
|
194
73
|
rowspan: column.rowSpan > 1 ? column.rowSpan : null
|
|
195
74
|
};
|
|
196
75
|
const thOns = {
|
|
197
|
-
onClick: (evnt) => $xeTable.triggerHeaderCellClickEvent(evnt,
|
|
198
|
-
onDblclick: (evnt) => $xeTable.triggerHeaderCellDblclickEvent(evnt,
|
|
76
|
+
onClick: (evnt) => $xeTable.triggerHeaderCellClickEvent(evnt, cellParams),
|
|
77
|
+
onDblclick: (evnt) => $xeTable.triggerHeaderCellDblclickEvent(evnt, cellParams)
|
|
199
78
|
};
|
|
200
79
|
// 横向虚拟滚动不支持动态行高
|
|
201
80
|
if (scrollXLoad && !hasEllipsis) {
|
|
@@ -204,11 +83,11 @@ export default defineComponent({
|
|
|
204
83
|
const isColDragCell = columnOpts.drag && columnDragOpts.trigger === 'cell';
|
|
205
84
|
let isDisabledDrag = false;
|
|
206
85
|
if (isColDragCell) {
|
|
207
|
-
isDisabledDrag = !!(dragDisabledMethod && dragDisabledMethod(
|
|
86
|
+
isDisabledDrag = !!(dragDisabledMethod && dragDisabledMethod(cellParams));
|
|
208
87
|
}
|
|
209
88
|
// 按下事件处理
|
|
210
89
|
if (mouseConfig || isColDragCell) {
|
|
211
|
-
thOns.onMousedown = (evnt) => $xeTable.triggerHeaderCellMousedownEvent(evnt,
|
|
90
|
+
thOns.onMousedown = (evnt) => $xeTable.triggerHeaderCellMousedownEvent(evnt, cellParams);
|
|
212
91
|
}
|
|
213
92
|
// 拖拽列事件
|
|
214
93
|
if (columnOpts.drag) {
|
|
@@ -219,20 +98,30 @@ export default defineComponent({
|
|
|
219
98
|
thOns.onMouseup = $xeTable.handleHeaderCellDragMouseupEvent;
|
|
220
99
|
}
|
|
221
100
|
}
|
|
101
|
+
const isLastColumn = $columnIndex === cols.length - 1;
|
|
102
|
+
const showResizable = (XEUtils.isBoolean(column.resizable) ? column.resizable : (columnOpts.resizable || allResizable));
|
|
222
103
|
const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
|
|
223
|
-
let
|
|
224
|
-
if (scrollXLoad && !
|
|
225
|
-
|
|
104
|
+
let isVNPreEmptyStatus = false;
|
|
105
|
+
if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
|
|
106
|
+
isVNPreEmptyStatus = true;
|
|
107
|
+
}
|
|
108
|
+
const tcStyle = {};
|
|
109
|
+
if (hasEllipsis) {
|
|
110
|
+
tcStyle.height = `${currCellHeight}px`;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
tcStyle.minHeight = `${currCellHeight}px`;
|
|
226
114
|
}
|
|
227
115
|
return h('th', Object.assign(Object.assign(Object.assign({ class: ['vxe-header--column', colid, {
|
|
228
116
|
[`col--${headAlign}`]: headAlign,
|
|
229
117
|
[`col--${type}`]: type,
|
|
230
|
-
'col--last':
|
|
118
|
+
'col--last': isLastColumn,
|
|
231
119
|
'col--fixed': column.fixed,
|
|
232
120
|
'col--group': isColGroup,
|
|
233
121
|
'col--ellipsis': hasEllipsis,
|
|
234
122
|
'fixed--width': !isAutoCellWidth,
|
|
235
123
|
'fixed--hidden': fixedHiddenColumn,
|
|
124
|
+
'is--padding': isPadding,
|
|
236
125
|
'is--sortable': column.sortable,
|
|
237
126
|
'col--filter': !!filters,
|
|
238
127
|
'is--filter-active': hasFilter,
|
|
@@ -240,28 +129,36 @@ export default defineComponent({
|
|
|
240
129
|
'is--drag-disabled': isDisabledDrag,
|
|
241
130
|
'col--current': currentColumn === column
|
|
242
131
|
},
|
|
243
|
-
headerClassName ? (XEUtils.isFunction(headerClassName) ? headerClassName(
|
|
244
|
-
headerCellClassName ? (XEUtils.isFunction(headerCellClassName) ? headerCellClassName(
|
|
245
|
-
], style: headerCellStyle ? (XEUtils.isFunction(headerCellStyle) ? headerCellStyle(
|
|
132
|
+
headerClassName ? (XEUtils.isFunction(headerClassName) ? headerClassName(cellParams) : headerClassName) : '',
|
|
133
|
+
headerCellClassName ? (XEUtils.isFunction(headerCellClassName) ? headerCellClassName(cellParams) : headerCellClassName) : ''
|
|
134
|
+
], style: headerCellStyle ? (XEUtils.isFunction(headerCellStyle) ? headerCellStyle(cellParams) : headerCellStyle) : null }, thAttrs), thOns), { key: columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || columnOpts.drag || isColGroup ? colid : $columnIndex }), [
|
|
246
135
|
h('div', {
|
|
247
136
|
class: ['vxe-cell', {
|
|
248
137
|
'c--title': showTitle,
|
|
249
138
|
'c--tooltip': showTooltip,
|
|
250
139
|
'c--ellipsis': showEllipsis
|
|
251
|
-
}]
|
|
252
|
-
|
|
140
|
+
}],
|
|
141
|
+
style: tcStyle
|
|
142
|
+
}, isVNPreEmptyStatus || (isOptimizeMode && fixedHiddenColumn)
|
|
143
|
+
? []
|
|
144
|
+
: [
|
|
145
|
+
h('div', {
|
|
146
|
+
colid,
|
|
147
|
+
class: 'vxe-cell--wrapper'
|
|
148
|
+
}, column.renderHeader(cellParams))
|
|
149
|
+
]),
|
|
253
150
|
/**
|
|
254
151
|
* 列宽拖动
|
|
255
152
|
*/
|
|
256
|
-
!fixedHiddenColumn &&
|
|
153
|
+
!fixedHiddenColumn && showResizable
|
|
257
154
|
? h('div', {
|
|
258
|
-
class: ['vxe-resizable', {
|
|
155
|
+
class: ['vxe-cell--col-resizable', {
|
|
259
156
|
'is--line': !border || border === 'none'
|
|
260
157
|
}],
|
|
261
|
-
onMousedown: (evnt) =>
|
|
262
|
-
onDblclick: (evnt) => $xeTable.
|
|
158
|
+
onMousedown: (evnt) => $xeTable.handleColResizeMousedownEvent(evnt, fixedType, cellParams),
|
|
159
|
+
onDblclick: (evnt) => $xeTable.handleColResizeDblclickEvent(evnt, cellParams)
|
|
263
160
|
})
|
|
264
|
-
:
|
|
161
|
+
: renderEmptyElement($xeTable)
|
|
265
162
|
]);
|
|
266
163
|
});
|
|
267
164
|
};
|
|
@@ -299,9 +196,10 @@ export default defineComponent({
|
|
|
299
196
|
};
|
|
300
197
|
const renderVN = () => {
|
|
301
198
|
const { fixedType, fixedColumn, tableColumn } = props;
|
|
302
|
-
const { showHeaderOverflow: allColumnHeaderOverflow, spanMethod, footerSpanMethod } = tableProps;
|
|
199
|
+
const { mouseConfig, showHeaderOverflow: allColumnHeaderOverflow, spanMethod, footerSpanMethod } = tableProps;
|
|
303
200
|
const { isGroup, scrollXLoad, scrollYLoad, dragCol } = tableReactData;
|
|
304
201
|
const { visibleColumn, fullColumnIdData } = tableInternalData;
|
|
202
|
+
const mouseOpts = computeMouseOpts.value;
|
|
305
203
|
let renderHeaderList = headerColumn.value;
|
|
306
204
|
let renderColumnList = tableColumn;
|
|
307
205
|
let isOptimizeMode = false;
|
|
@@ -397,15 +295,32 @@ export default defineComponent({
|
|
|
397
295
|
h('thead', {
|
|
398
296
|
ref: refHeaderTHead
|
|
399
297
|
}, renderHeads(isGroup, isOptimizeMode, renderHeaderList))
|
|
400
|
-
])
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
298
|
+
]),
|
|
299
|
+
mouseConfig && mouseOpts.area
|
|
300
|
+
? h('div', {
|
|
301
|
+
class: 'vxe-table--cell-area'
|
|
302
|
+
}, [
|
|
303
|
+
h('span', {
|
|
304
|
+
class: 'vxe-table--cell-main-area'
|
|
305
|
+
}),
|
|
306
|
+
h('span', {
|
|
307
|
+
class: 'vxe-table--cell-copy-area'
|
|
308
|
+
}),
|
|
309
|
+
h('span', {
|
|
310
|
+
class: 'vxe-table--cell-extend-area'
|
|
311
|
+
}),
|
|
312
|
+
h('span', {
|
|
313
|
+
class: 'vxe-table--cell-multi-area'
|
|
314
|
+
}),
|
|
315
|
+
h('span', {
|
|
316
|
+
class: 'vxe-table--cell-active-area'
|
|
317
|
+
}),
|
|
318
|
+
h('span', {
|
|
319
|
+
class: 'vxe-table--cell-col-status-area'
|
|
320
|
+
})
|
|
321
|
+
])
|
|
322
|
+
: renderEmptyElement($xeTable)
|
|
323
|
+
])
|
|
409
324
|
]);
|
|
410
325
|
};
|
|
411
326
|
watch(() => props.tableColumn, uploadColumn);
|
package/es/table/src/props.js
CHANGED
|
@@ -29,10 +29,10 @@ export default {
|
|
|
29
29
|
type: [Boolean, String],
|
|
30
30
|
default: () => getConfig().table.border
|
|
31
31
|
},
|
|
32
|
-
//
|
|
32
|
+
// 已废弃,被 cell-config.padding 替换
|
|
33
33
|
padding: {
|
|
34
34
|
type: Boolean,
|
|
35
|
-
default:
|
|
35
|
+
default: null
|
|
36
36
|
},
|
|
37
37
|
// 是否圆角边框
|
|
38
38
|
round: {
|
|
@@ -178,6 +178,10 @@ export default {
|
|
|
178
178
|
columnConfig: Object,
|
|
179
179
|
// 单元格配置信息
|
|
180
180
|
cellConfig: Object,
|
|
181
|
+
// 表头单元格配置信息
|
|
182
|
+
headerCellConfig: Object,
|
|
183
|
+
// 表尾单元格配置信息
|
|
184
|
+
footerCellConfig: Object,
|
|
181
185
|
// 行配置信息
|
|
182
186
|
rowConfig: Object,
|
|
183
187
|
// 已废弃,被 rowDragConfig 替换
|