vxe-table 4.1.2 → 4.1.5
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/README.en.md +3 -3
- package/README.md +3 -3
- package/README.zh-TW.md +2 -3
- package/es/edit/src/hook.js +189 -69
- package/es/input/src/input.js +8 -2
- package/es/table/src/body.js +6 -3
- package/es/table/src/cell.js +70 -54
- package/es/table/src/table.js +36 -30
- package/es/v-x-e-table/src/conf.js +2 -2
- package/lib/edit/src/hook.js +243 -70
- package/lib/edit/src/hook.min.js +1 -1
- package/lib/index.umd.js +853 -140
- package/lib/index.umd.min.js +1 -1
- package/lib/input/src/input.js +10 -2
- package/lib/input/src/input.min.js +1 -1
- package/lib/table/src/body.js +6 -3
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +92 -35
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/table.js +38 -30
- package/lib/table/src/table.min.js +1 -1
- package/lib/v-x-e-table/src/conf.js +2 -2
- package/lib/v-x-e-table/src/conf.min.js +1 -1
- package/package.json +3 -3
- package/packages/edit/src/hook.ts +183 -69
- package/packages/input/src/input.ts +9 -2
- package/packages/table/src/body.ts +6 -3
- package/packages/table/src/cell.ts +77 -44
- package/packages/table/src/table.ts +36 -29
- package/packages/v-x-e-table/src/conf.ts +2 -2
- package/types/edit.d.ts +6 -3
- package/types/index.d.ts +1 -1
- package/types/plugins/pro.d.ts +6 -6
- package/types/table.d.ts +18 -4
package/README.en.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
[](https://github.com/x-extends/vxe-table/pulls?q=is%3Apr+is%3Aclosed)
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
|
|
15
|
-
A [vue](https://www.npmjs.com/package/vue) based PC form component, support add, delete, change, virtual
|
|
15
|
+
A [vue](https://www.npmjs.com/package/vue) based PC form component, support add, delete, change, virtual list, virtual tree, lazy load, shortcut menu, data validation, print export, form rendering, data paging, modal window, custom template, renderer, flexible configuration items, extension interface, etc...
|
|
16
16
|
|
|
17
17
|
* Design concept
|
|
18
18
|
* Efficient and concise API design for modern browsers.
|
|
@@ -66,9 +66,9 @@ Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 8+ ✔ |
|
|
|
66
66
|
* [x] Form
|
|
67
67
|
* [x] Toolbar
|
|
68
68
|
* [x] Pulldown
|
|
69
|
-
* [x]
|
|
69
|
+
* [x] Virtual list
|
|
70
|
+
* [x] Virtual tree
|
|
70
71
|
* [x] Editable CRUD
|
|
71
|
-
* [x] Tree table
|
|
72
72
|
* [x] Validate
|
|
73
73
|
* [x] Data Proxy
|
|
74
74
|
* [x] Keyboard navigation
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
[](https://github.com/x-extends/vxe-table/pulls?q=is%3Apr+is%3Aclosed)
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
|
|
15
|
-
一个基于 [vue](https://www.npmjs.com/package/vue) 的 PC
|
|
15
|
+
一个基于 [vue](https://www.npmjs.com/package/vue) 的 PC 端表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、贼灵活的配置项、扩展接口等...
|
|
16
16
|
|
|
17
17
|
* 设计理念
|
|
18
18
|
* 面向现代浏览器,高效的简洁 API 设计
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* [x] v2.0 基于 vue2.6+,支持所有主流的浏览器,同时兼具功能与性能
|
|
25
25
|
* [x] v3.0 基于 vue2.6+,支持现代浏览器并保留兼容 IE11,提升渲染性能
|
|
26
26
|
* [x] v4.0 基于 vue3.0+,只支持现代浏览器,不支持 IE
|
|
27
|
-
* [] 下一阶段:sticky
|
|
27
|
+
* [ ] 下一阶段:sticky 表格、css 变量、虚拟滚动与动态行高、数据可视化
|
|
28
28
|
|
|
29
29
|
## QQ 交流群
|
|
30
30
|
|
|
@@ -72,8 +72,8 @@ Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 8+ ✔ |
|
|
|
72
72
|
* [x] 工具栏
|
|
73
73
|
* [x] 下拉容器
|
|
74
74
|
* [x] 虚拟列表
|
|
75
|
+
* [x] 虚拟树
|
|
75
76
|
* [x] 增删改查
|
|
76
|
-
* [x] 树表格
|
|
77
77
|
* [x] 数据校验
|
|
78
78
|
* [x] 数据代理
|
|
79
79
|
* [x] 键盘导航
|
package/README.zh-TW.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
[](https://github.com/x-extends/vxe-table/pulls?q=is%3Apr+is%3Aclosed)
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
|
|
15
|
-
一個基於 [vue](https://www.npmjs.com/package/vue) 的PC
|
|
15
|
+
一個基於 [vue](https://www.npmjs.com/package/vue) 的PC端表格組件,支持增删改查、虛擬清單、虛擬樹、懶加載、快捷選單、數據校驗、列印匯出、表單渲染、數據分頁、彈窗、自定義範本、渲染器、賊靈活的配寘項、擴展接口等…
|
|
16
16
|
|
|
17
17
|
* 設計理念
|
|
18
18
|
* 面向現代瀏覽器,高效的簡潔 API 設計
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* [x] v2.0 基於 vue2.6+,支持所有主流的瀏覽器,同時兼具功能與效能
|
|
25
25
|
* [x] v3.0 基於 vue2.6+,支持現代瀏覽器並保留相容IE11,提升渲染效能
|
|
26
26
|
* [x] v4.0 基于 vue3.0+,只支持現代瀏覽器,不支持IE
|
|
27
|
-
* [] 下一阶段:sticky
|
|
27
|
+
* [ ] 下一阶段:sticky 表格、css 变量、虚拟滚动与动态行高、数据可视化
|
|
28
28
|
|
|
29
29
|
## QQ 交流群
|
|
30
30
|
|
|
@@ -73,7 +73,6 @@ Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 8+ ✔ |
|
|
|
73
73
|
* [x] 下拉容器
|
|
74
74
|
* [x] 虛擬清單
|
|
75
75
|
* [x] 增删改查
|
|
76
|
-
* [x] 樹表格
|
|
77
76
|
* [x] 數據校驗
|
|
78
77
|
* [x] 數據代理
|
|
79
78
|
* [x] 鍵盤導航
|
package/es/edit/src/hook.js
CHANGED
|
@@ -17,8 +17,8 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
|
17
17
|
import { nextTick } from 'vue';
|
|
18
18
|
import XEUtils from 'xe-utils';
|
|
19
19
|
import { renderer } from '../../v-x-e-table';
|
|
20
|
-
import { errLog, getLog, isEnableConf } from '../../tools/utils';
|
|
21
|
-
import { getCellValue, setCellValue } from '../../table/src/util';
|
|
20
|
+
import { errLog, getLog, isEnableConf, warnLog } from '../../tools/utils';
|
|
21
|
+
import { getCellValue, setCellValue, getRowid } from '../../table/src/util';
|
|
22
22
|
import { browse, removeClass, addClass } from '../../tools/dom';
|
|
23
23
|
var tableEditMethodKeys = ['insert', 'insertAt', 'remove', 'removeCheckboxRow', 'removeRadioRow', 'removeCurrentRow', 'getRecordset', 'getInsertRecords', 'getRemoveRecords', 'getUpdateRecords', 'getActiveRecord', 'getSelectedCell', 'clearActived', 'clearSelected', 'isActiveByRow', 'setActiveRow', 'setActiveCell', 'setSelectCell'];
|
|
24
24
|
var editHook = {
|
|
@@ -66,6 +66,42 @@ var editHook = {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
+
function insertTreeRow(newRecords, isAppend) {
|
|
70
|
+
var treeFullData = internalData.treeFullData, afterFullData = internalData.afterFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
|
|
71
|
+
var treeOpts = computeTreeOpts.value;
|
|
72
|
+
var funcName = isAppend ? 'push' : 'unshift';
|
|
73
|
+
newRecords.forEach(function (item) {
|
|
74
|
+
var parentRowId = item[treeOpts.parentField];
|
|
75
|
+
var rowid = getRowid($xetable, item);
|
|
76
|
+
var matchObj = parentRowId ? XEUtils.findTree(treeFullData, function (item) { return parentRowId === item[treeOpts.rowField]; }, treeOpts) : null;
|
|
77
|
+
if (matchObj) {
|
|
78
|
+
var parentRow = matchObj.item;
|
|
79
|
+
var parentRest = fullAllDataRowIdData[getRowid($xetable, parentRow)];
|
|
80
|
+
var parentLevel = parentRest ? parentRest.level : 0;
|
|
81
|
+
var parentChilds = parentRow[treeOpts.children];
|
|
82
|
+
if (!XEUtils.isArray(parentChilds)) {
|
|
83
|
+
parentChilds = parentRow[treeOpts.children] = [];
|
|
84
|
+
}
|
|
85
|
+
parentChilds[funcName](item);
|
|
86
|
+
var rest = { row: item, rowid: rowid, index: -1, _index: -1, $index: -1, items: parentChilds, parent: parent, level: parentLevel + 1 };
|
|
87
|
+
fullDataRowIdData[rowid] = rest;
|
|
88
|
+
fullAllDataRowIdData[rowid] = rest;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (process.env.NODE_ENV === 'development') {
|
|
92
|
+
if (parentRowId) {
|
|
93
|
+
warnLog('vxe.error.unableInsert');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
afterFullData[funcName](item);
|
|
97
|
+
treeFullData[funcName](item);
|
|
98
|
+
var rest = { row: item, rowid: rowid, index: -1, _index: -1, $index: -1, items: treeFullData, parent: null, level: 0 };
|
|
99
|
+
fullDataRowIdData[rowid] = rest;
|
|
100
|
+
fullAllDataRowIdData[rowid] = rest;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
$xetable.updateVirtualTreeData();
|
|
104
|
+
}
|
|
69
105
|
editMethods = {
|
|
70
106
|
/**
|
|
71
107
|
* 往表格中插入临时数据
|
|
@@ -77,9 +113,9 @@ var editHook = {
|
|
|
77
113
|
},
|
|
78
114
|
/**
|
|
79
115
|
* 往表格指定行中插入临时数据
|
|
80
|
-
* 如果 row
|
|
81
|
-
* 如果 row 为 -1
|
|
82
|
-
* 如果 row
|
|
116
|
+
* 如果 row 为空则从插入到顶部,如果为树结构,则插入到目标节点顶部
|
|
117
|
+
* 如果 row 为 -1 则从插入到底部,如果为树结构,则插入到目标节点底部
|
|
118
|
+
* 如果 row 为有效行则插入到该行的位置,如果为树结构,则有插入到效的目标节点该行的位置
|
|
83
119
|
* @param {Object/Array} records 新的数据
|
|
84
120
|
* @param {Row} row 指定行
|
|
85
121
|
*/
|
|
@@ -87,62 +123,112 @@ var editHook = {
|
|
|
87
123
|
var _a;
|
|
88
124
|
var treeConfig = props.treeConfig;
|
|
89
125
|
var mergeList = reactData.mergeList, editStore = reactData.editStore, scrollYLoad = reactData.scrollYLoad;
|
|
90
|
-
var afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData;
|
|
126
|
+
var treeFullData = internalData.treeFullData, afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
|
|
91
127
|
var sYOpts = computeSYOpts.value;
|
|
128
|
+
var treeOpts = computeTreeOpts.value;
|
|
129
|
+
var transform = treeOpts.transform;
|
|
92
130
|
if (!XEUtils.isArray(records)) {
|
|
93
131
|
records = [records];
|
|
94
132
|
}
|
|
95
133
|
var newRecords = records.map(function (record) { return $xetable.defineField(Object.assign({}, record)); });
|
|
96
134
|
if (!row) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
if (row === -1) {
|
|
109
|
-
afterFullData.push.apply(afterFullData, newRecords);
|
|
110
|
-
tableFullData.push.apply(tableFullData, newRecords);
|
|
135
|
+
// 如果为虚拟树
|
|
136
|
+
if (treeConfig && transform) {
|
|
137
|
+
insertTreeRow(newRecords, false);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
afterFullData.unshift.apply(afterFullData, newRecords);
|
|
141
|
+
tableFullData.unshift.apply(tableFullData, newRecords);
|
|
111
142
|
// 刷新单元格合并
|
|
112
143
|
mergeList.forEach(function (mergeItem) {
|
|
113
|
-
var mergeRowIndex = mergeItem.row
|
|
114
|
-
if (mergeRowIndex
|
|
115
|
-
mergeItem.
|
|
144
|
+
var mergeRowIndex = mergeItem.row;
|
|
145
|
+
if (mergeRowIndex > 0) {
|
|
146
|
+
mergeItem.row = mergeRowIndex + newRecords.length;
|
|
116
147
|
}
|
|
117
148
|
});
|
|
118
149
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
if (row === -1) {
|
|
153
|
+
// 如果为虚拟树
|
|
154
|
+
if (treeConfig && transform) {
|
|
155
|
+
insertTreeRow(newRecords, true);
|
|
122
156
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
157
|
+
else {
|
|
158
|
+
afterFullData.push.apply(afterFullData, newRecords);
|
|
159
|
+
tableFullData.push.apply(tableFullData, newRecords);
|
|
160
|
+
// 刷新单元格合并
|
|
161
|
+
mergeList.forEach(function (mergeItem) {
|
|
162
|
+
var mergeRowIndex = mergeItem.row, mergeRowspan = mergeItem.rowspan;
|
|
163
|
+
if (mergeRowIndex + mergeRowspan > afterFullData.length) {
|
|
164
|
+
mergeItem.rowspan = mergeRowspan + newRecords.length;
|
|
165
|
+
}
|
|
166
|
+
});
|
|
126
167
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
var
|
|
132
|
-
if (
|
|
133
|
-
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
// 如果为虚拟树
|
|
171
|
+
if (treeConfig && transform) {
|
|
172
|
+
var matchObj_1 = XEUtils.findTree(treeFullData, function (item) { return row[treeOpts.rowField] === item[treeOpts.rowField]; }, treeOpts);
|
|
173
|
+
if (matchObj_1) {
|
|
174
|
+
var parentRow_1 = matchObj_1.parent;
|
|
175
|
+
var parentChilds_1 = matchObj_1.items;
|
|
176
|
+
var parentRest = fullAllDataRowIdData[getRowid($xetable, parentRow_1)];
|
|
177
|
+
var parentLevel_1 = parentRest ? parentRest.level : 0;
|
|
178
|
+
newRecords.forEach(function (item, i) {
|
|
179
|
+
var rowid = getRowid($xetable, item);
|
|
180
|
+
if (process.env.NODE_ENV === 'development') {
|
|
181
|
+
if (item[treeOpts.parentField]) {
|
|
182
|
+
if (parentRow_1 && item[treeOpts.parentField] !== parentRow_1[treeOpts.rowField]) {
|
|
183
|
+
errLog('vxe.error.errProp', [treeOpts.parentField + "=" + item[treeOpts.parentField], treeOpts.parentField + "=" + parentRow_1[treeOpts.rowField]]);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (parentRow_1) {
|
|
188
|
+
item[treeOpts.parentField] = parentRow_1[treeOpts.rowField];
|
|
189
|
+
}
|
|
190
|
+
parentChilds_1.splice(matchObj_1.index + i, 0, item);
|
|
191
|
+
var rest = { row: item, rowid: rowid, index: -1, _index: -1, $index: -1, items: parentChilds_1, parent: parentRow_1, level: parentLevel_1 + 1 };
|
|
192
|
+
fullDataRowIdData[rowid] = rest;
|
|
193
|
+
fullAllDataRowIdData[rowid] = rest;
|
|
194
|
+
});
|
|
195
|
+
$xetable.updateVirtualTreeData();
|
|
134
196
|
}
|
|
135
|
-
else
|
|
136
|
-
|
|
197
|
+
else {
|
|
198
|
+
if (process.env.NODE_ENV === 'development') {
|
|
199
|
+
warnLog('vxe.error.unableInsert');
|
|
200
|
+
}
|
|
201
|
+
insertTreeRow(newRecords, true);
|
|
137
202
|
}
|
|
138
|
-
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
if (treeConfig) {
|
|
206
|
+
throw new Error(getLog('vxe.error.noTree', ['insert']));
|
|
207
|
+
}
|
|
208
|
+
var afIndex_1 = $xetable.findRowIndexOf(afterFullData, row);
|
|
209
|
+
if (afIndex_1 === -1) {
|
|
210
|
+
throw new Error(errLog('vxe.error.unableInsert'));
|
|
211
|
+
}
|
|
212
|
+
afterFullData.splice.apply(afterFullData, __spreadArray([afIndex_1, 0], newRecords));
|
|
213
|
+
tableFullData.splice.apply(tableFullData, __spreadArray([$xetable.findRowIndexOf(tableFullData, row), 0], newRecords));
|
|
214
|
+
// 刷新单元格合并
|
|
215
|
+
mergeList.forEach(function (mergeItem) {
|
|
216
|
+
var mergeRowIndex = mergeItem.row, mergeRowspan = mergeItem.rowspan;
|
|
217
|
+
if (mergeRowIndex > afIndex_1) {
|
|
218
|
+
mergeItem.row = mergeRowIndex + newRecords.length;
|
|
219
|
+
}
|
|
220
|
+
else if (mergeRowIndex + mergeRowspan > afIndex_1) {
|
|
221
|
+
mergeItem.rowspan = mergeRowspan + newRecords.length;
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}
|
|
139
225
|
}
|
|
140
226
|
}
|
|
141
227
|
(_a = editStore.insertList).unshift.apply(_a, newRecords);
|
|
142
228
|
reactData.scrollYLoad = !treeConfig && sYOpts.gt > -1 && sYOpts.gt < tableFullData.length;
|
|
143
229
|
$xetable.updateFooter();
|
|
144
230
|
$xetable.cacheRowMap();
|
|
145
|
-
$xetable.handleTableData();
|
|
231
|
+
$xetable.handleTableData(transform);
|
|
146
232
|
$xetable.updateAfterDataIndex();
|
|
147
233
|
$xetable.checkSelectionStatus();
|
|
148
234
|
if (scrollYLoad) {
|
|
@@ -167,9 +253,11 @@ var editHook = {
|
|
|
167
253
|
remove: function (rows) {
|
|
168
254
|
var treeConfig = props.treeConfig;
|
|
169
255
|
var mergeList = reactData.mergeList, editStore = reactData.editStore, selection = reactData.selection, scrollYLoad = reactData.scrollYLoad;
|
|
170
|
-
var afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData;
|
|
256
|
+
var treeFullData = internalData.treeFullData, afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData;
|
|
171
257
|
var checkboxOpts = computeCheckboxOpts.value;
|
|
172
258
|
var sYOpts = computeSYOpts.value;
|
|
259
|
+
var treeOpts = computeTreeOpts.value;
|
|
260
|
+
var transform = treeOpts.transform;
|
|
173
261
|
var actived = editStore.actived, removeList = editStore.removeList, insertList = editStore.insertList;
|
|
174
262
|
var property = checkboxOpts.checkField;
|
|
175
263
|
var rest = [];
|
|
@@ -202,27 +290,45 @@ var editHook = {
|
|
|
202
290
|
$xetable.clearMergeCells();
|
|
203
291
|
}
|
|
204
292
|
else {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
var
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
293
|
+
// 如果为虚拟树
|
|
294
|
+
if (treeConfig && transform) {
|
|
295
|
+
rows.forEach(function (row) {
|
|
296
|
+
var rowid = getRowid($xetable, row);
|
|
297
|
+
var matchObj = XEUtils.findTree(treeFullData, function (item) { return rowid === getRowid($xetable, item); }, treeOpts);
|
|
298
|
+
if (matchObj) {
|
|
299
|
+
var rItems = matchObj.items.splice(matchObj.index, 1);
|
|
300
|
+
rest.push(rItems[0]);
|
|
301
|
+
}
|
|
302
|
+
var afIndex = $xetable.findRowIndexOf(afterFullData, row);
|
|
303
|
+
if (afIndex > -1) {
|
|
304
|
+
afterFullData.splice(afIndex, 1);
|
|
305
|
+
}
|
|
306
|
+
$xetable.updateVirtualTreeData();
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
rows.forEach(function (row) {
|
|
311
|
+
var tfIndex = $xetable.findRowIndexOf(tableFullData, row);
|
|
312
|
+
if (tfIndex > -1) {
|
|
313
|
+
var rItems = tableFullData.splice(tfIndex, 1);
|
|
314
|
+
rest.push(rItems[0]);
|
|
315
|
+
}
|
|
316
|
+
var afIndex = $xetable.findRowIndexOf(afterFullData, row);
|
|
317
|
+
if (afIndex > -1) {
|
|
318
|
+
// 刷新单元格合并
|
|
319
|
+
mergeList.forEach(function (mergeItem) {
|
|
320
|
+
var mergeRowIndex = mergeItem.row, mergeRowspan = mergeItem.rowspan;
|
|
321
|
+
if (mergeRowIndex > afIndex) {
|
|
322
|
+
mergeItem.row = mergeRowIndex - 1;
|
|
323
|
+
}
|
|
324
|
+
else if (mergeRowIndex + mergeRowspan > afIndex) {
|
|
325
|
+
mergeItem.rowspan = mergeRowspan - 1;
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
afterFullData.splice(afIndex, 1);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
226
332
|
}
|
|
227
333
|
// 如果当前行被激活编辑,则清除激活状态
|
|
228
334
|
if (actived.row && $xetable.findRowIndexOf(rows, actived.row) > -1) {
|
|
@@ -238,7 +344,7 @@ var editHook = {
|
|
|
238
344
|
reactData.scrollYLoad = !treeConfig && sYOpts.gt > -1 && sYOpts.gt < tableFullData.length;
|
|
239
345
|
$xetable.updateFooter();
|
|
240
346
|
$xetable.cacheRowMap();
|
|
241
|
-
$xetable.handleTableData();
|
|
347
|
+
$xetable.handleTableData(transform);
|
|
242
348
|
$xetable.updateAfterDataIndex();
|
|
243
349
|
$xetable.checkSelectionStatus();
|
|
244
350
|
if (scrollYLoad) {
|
|
@@ -294,16 +400,30 @@ var editHook = {
|
|
|
294
400
|
* 获取新增的临时数据
|
|
295
401
|
*/
|
|
296
402
|
getInsertRecords: function () {
|
|
403
|
+
var treeConfig = props.treeConfig;
|
|
297
404
|
var editStore = reactData.editStore;
|
|
298
|
-
var tableFullData = internalData.tableFullData;
|
|
405
|
+
var treeFullData = internalData.treeFullData, tableFullData = internalData.tableFullData;
|
|
406
|
+
var treeOpts = computeTreeOpts.value;
|
|
299
407
|
var insertList = editStore.insertList;
|
|
300
408
|
var insertRecords = [];
|
|
301
409
|
if (insertList.length) {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
410
|
+
// 如果为虚拟树
|
|
411
|
+
if (treeConfig && treeOpts.transform) {
|
|
412
|
+
insertList.forEach(function (row) {
|
|
413
|
+
var rowid = getRowid($xetable, row);
|
|
414
|
+
var matchObj = XEUtils.findTree(treeFullData, function (item) { return rowid === getRowid($xetable, item); }, treeOpts);
|
|
415
|
+
if (matchObj) {
|
|
416
|
+
insertRecords.push(row);
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
insertList.forEach(function (row) {
|
|
422
|
+
if ($xetable.findRowIndexOf(tableFullData, row) > -1) {
|
|
423
|
+
insertRecords.push(row);
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
}
|
|
307
427
|
}
|
|
308
428
|
return insertRecords;
|
|
309
429
|
},
|
package/es/input/src/input.js
CHANGED
|
@@ -511,11 +511,17 @@ export default defineComponent({
|
|
|
511
511
|
var type = props.type, immediate = props.immediate;
|
|
512
512
|
return immediate || !(type === 'text' || type === 'number' || type === 'integer' || type === 'float');
|
|
513
513
|
});
|
|
514
|
+
function toFloatValueFixed(inputValue, digitsValue) {
|
|
515
|
+
if (/^-/.test('' + inputValue)) {
|
|
516
|
+
return XEUtils.toFixed(XEUtils.ceil(inputValue, digitsValue), digitsValue);
|
|
517
|
+
}
|
|
518
|
+
return XEUtils.toFixed(XEUtils.floor(inputValue, digitsValue), digitsValue);
|
|
519
|
+
}
|
|
514
520
|
function getNumberValue(val) {
|
|
515
521
|
var type = props.type, exponential = props.exponential;
|
|
516
522
|
var inpMaxlength = computeInpMaxlength.value;
|
|
517
523
|
var digitsValue = computeDigitsValue.value;
|
|
518
|
-
var restVal = (type === 'float' ?
|
|
524
|
+
var restVal = (type === 'float' ? toFloatValueFixed(val, digitsValue) : XEUtils.toValueString(val));
|
|
519
525
|
if (exponential && (val === restVal || XEUtils.toValueString(val).toLowerCase() === XEUtils.toNumber(restVal).toExponential())) {
|
|
520
526
|
return val;
|
|
521
527
|
}
|
|
@@ -647,7 +653,7 @@ export default defineComponent({
|
|
|
647
653
|
}
|
|
648
654
|
else if (type === 'float') {
|
|
649
655
|
if (inputValue) {
|
|
650
|
-
var validValue =
|
|
656
|
+
var validValue = toFloatValueFixed(inputValue, digitsValue);
|
|
651
657
|
if (inputValue !== validValue) {
|
|
652
658
|
emitModel(validValue, { type: 'init' });
|
|
653
659
|
}
|
package/es/table/src/body.js
CHANGED
|
@@ -290,6 +290,7 @@ export default defineComponent({
|
|
|
290
290
|
var radioOpts = computeRadioOpts.value;
|
|
291
291
|
var treeOpts = computeTreeOpts.value;
|
|
292
292
|
var editOpts = computeEditOpts.value;
|
|
293
|
+
var rowOpts = computeRowOpts.value;
|
|
293
294
|
var rows = [];
|
|
294
295
|
tableData.forEach(function (row, $rowIndex) {
|
|
295
296
|
var trOn = {};
|
|
@@ -302,7 +303,7 @@ export default defineComponent({
|
|
|
302
303
|
// 确保任何情况下 rowIndex 都精准指向真实 data 索引
|
|
303
304
|
rowIndex = $xetable.getRowIndex(row);
|
|
304
305
|
// 事件绑定
|
|
305
|
-
if (highlightHoverRow) {
|
|
306
|
+
if (rowOpts.isHover || highlightHoverRow) {
|
|
306
307
|
trOn.onMouseenter = function (evnt) {
|
|
307
308
|
if (isOperateMouse()) {
|
|
308
309
|
return;
|
|
@@ -402,6 +403,7 @@ export default defineComponent({
|
|
|
402
403
|
var highlightHoverRow = tableProps.highlightHoverRow;
|
|
403
404
|
var scrollXLoad = tableReactData.scrollXLoad, scrollYLoad = tableReactData.scrollYLoad;
|
|
404
405
|
var elemStore = tableInternalData.elemStore, lastScrollTop = tableInternalData.lastScrollTop, lastScrollLeft = tableInternalData.lastScrollLeft;
|
|
406
|
+
var rowOpts = computeRowOpts.value;
|
|
405
407
|
var tableHeader = refTableHeader.value;
|
|
406
408
|
var tableBody = refTableBody.value;
|
|
407
409
|
var tableFooter = refTableFooter.value;
|
|
@@ -425,7 +427,7 @@ export default defineComponent({
|
|
|
425
427
|
tableInternalData.lastScrollTop = scrollTop;
|
|
426
428
|
tableInternalData.lastScrollLeft = scrollLeft;
|
|
427
429
|
tableInternalData.lastScrollTime = Date.now();
|
|
428
|
-
if (highlightHoverRow) {
|
|
430
|
+
if (rowOpts.isHover || highlightHoverRow) {
|
|
429
431
|
$xetable.clearHoverRow();
|
|
430
432
|
}
|
|
431
433
|
if (leftElem && fixedType === 'left') {
|
|
@@ -519,6 +521,7 @@ export default defineComponent({
|
|
|
519
521
|
var highlightHoverRow = tableProps.highlightHoverRow;
|
|
520
522
|
var scrollYLoad = tableReactData.scrollYLoad;
|
|
521
523
|
var lastScrollTop = tableInternalData.lastScrollTop, lastScrollLeft = tableInternalData.lastScrollLeft;
|
|
524
|
+
var rowOpts = computeRowOpts.value;
|
|
522
525
|
var tableBody = refTableBody.value;
|
|
523
526
|
var scrollBodyElem = refElem.value;
|
|
524
527
|
var bodyElem = tableBody.$el;
|
|
@@ -539,7 +542,7 @@ export default defineComponent({
|
|
|
539
542
|
tableInternalData.lastScrollTop = scrollTop;
|
|
540
543
|
tableInternalData.lastScrollLeft = scrollLeft;
|
|
541
544
|
tableInternalData.lastScrollTime = Date.now();
|
|
542
|
-
if (highlightHoverRow) {
|
|
545
|
+
if (rowOpts.isHover || highlightHoverRow) {
|
|
543
546
|
$xetable.clearHoverRow();
|
|
544
547
|
}
|
|
545
548
|
handleWheel(evnt, isTopWheel, deltaTop, isRollX, isRollY);
|