vxe-table 3.19.39 → 3.20.0-beta.1
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/index.css +1 -1
- package/es/index.esm.js +2 -1
- package/es/index.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/custom/mixin.js +6 -4
- package/es/table/module/custom/panel.js +806 -799
- package/es/table/module/edit/mixin.js +43 -31
- package/es/table/module/export/export-panel.js +511 -458
- package/es/table/module/export/import-panel.js +224 -192
- package/es/table/module/keyboard/mixin.js +2 -2
- package/es/table/module/menu/panel.js +165 -161
- package/es/table/module/validator/mixin.js +255 -236
- package/es/table/src/body.js +2 -1
- package/es/table/src/cell.js +2 -2
- package/es/table/src/methods.js +33 -43
- package/es/table/src/table.js +13 -249
- package/es/table/src/util.js +242 -0
- package/es/table/style.css +23 -50
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +2 -2
- package/es/ui/src/dom.js +22 -0
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +23 -50
- package/es/vxe-table/style.min.css +1 -1
- package/lib/index.common.js +2 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +3640 -4790
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/custom/mixin.js +6 -4
- package/lib/table/module/custom/mixin.min.js +1 -1
- package/lib/table/module/custom/panel.js +693 -685
- package/lib/table/module/custom/panel.min.js +1 -1
- package/lib/table/module/edit/mixin.js +47 -31
- package/lib/table/module/edit/mixin.min.js +1 -1
- package/lib/table/module/export/export-panel.js +450 -384
- package/lib/table/module/export/export-panel.min.js +1 -1
- package/lib/table/module/export/import-panel.js +200 -159
- package/lib/table/module/export/import-panel.min.js +1 -1
- package/lib/table/module/keyboard/mixin.js +2 -2
- package/lib/table/module/keyboard/mixin.min.js +1 -1
- package/lib/table/module/menu/panel.js +119 -114
- package/lib/table/module/menu/panel.min.js +1 -1
- package/lib/table/module/validator/mixin.js +271 -259
- package/lib/table/module/validator/mixin.min.js +1 -1
- package/lib/table/src/body.js +2 -1
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +2 -2
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/methods.js +33 -45
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/src/table.js +12 -248
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +243 -0
- package/lib/table/src/util.min.js +1 -1
- package/lib/table/style/style.css +23 -50
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +2 -2
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +22 -0
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/v-x-e-table/index.js +2 -1
- package/lib/v-x-e-table/index.min.js +1 -1
- package/lib/vxe-colgroup/index.js +2 -1
- package/lib/vxe-colgroup/index.min.js +1 -1
- package/lib/vxe-column/index.js +2 -1
- package/lib/vxe-column/index.min.js +1 -1
- package/lib/vxe-grid/index.js +2 -1
- package/lib/vxe-grid/index.min.js +1 -1
- package/lib/vxe-table/index.js +2 -1
- package/lib/vxe-table/index.min.js +1 -1
- package/lib/vxe-table/style/style.css +23 -50
- package/lib/vxe-table/style/style.min.css +1 -1
- package/lib/vxe-toolbar/index.js +2 -1
- package/lib/vxe-toolbar/index.min.js +1 -1
- package/lib/vxe-ui/index.js +2 -1
- package/lib/vxe-ui/index.min.js +1 -1
- package/lib/vxe-v-x-e-table/index.js +2 -1
- package/lib/vxe-v-x-e-table/index.min.js +1 -1
- package/package.json +1 -1
- package/packages/table/module/custom/mixin.ts +7 -4
- package/packages/table/module/custom/panel.ts +846 -839
- package/packages/table/module/edit/mixin.ts +55 -35
- package/packages/table/module/export/export-panel.ts +545 -469
- package/packages/table/module/export/import-panel.ts +245 -202
- package/packages/table/module/filter/panel.ts +4 -18
- package/packages/table/module/keyboard/mixin.ts +2 -2
- package/packages/table/module/menu/panel.ts +171 -163
- package/packages/table/module/validator/mixin.ts +279 -240
- package/packages/table/src/body.ts +2 -1
- package/packages/table/src/cell.ts +2 -2
- package/packages/table/src/methods.ts +43 -45
- package/packages/table/src/table.ts +14 -260
- package/packages/table/src/util.ts +254 -0
- package/packages/ui/index.ts +1 -1
- package/packages/ui/src/dom.ts +22 -0
- package/styles/components/table.scss +5 -2
- package/styles/theme/base.scss +2 -1
- /package/es/{iconfont.1767145426781.ttf → iconfont.1767492234857.ttf} +0 -0
- /package/es/{iconfont.1767145426781.woff → iconfont.1767492234857.woff} +0 -0
- /package/es/{iconfont.1767145426781.woff2 → iconfont.1767492234857.woff2} +0 -0
- /package/lib/{iconfont.1767145426781.ttf → iconfont.1767492234857.ttf} +0 -0
- /package/lib/{iconfont.1767145426781.woff → iconfont.1767492234857.woff} +0 -0
- /package/lib/{iconfont.1767145426781.woff2 → iconfont.1767492234857.woff2} +0 -0
|
@@ -151,253 +151,252 @@ function checkRuleStatus(rule, val) {
|
|
|
151
151
|
}
|
|
152
152
|
return true;
|
|
153
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* 聚焦到校验通过的单元格并弹出校验错误提示
|
|
156
|
+
*/
|
|
157
|
+
function handleValidError($xeTable, params) {
|
|
158
|
+
return new Promise(resolve => {
|
|
159
|
+
const validOpts = $xeTable.computeValidOpts;
|
|
160
|
+
if (validOpts.autoPos === false) {
|
|
161
|
+
$xeTable.dispatchEvent('valid-error', params, null);
|
|
162
|
+
resolve();
|
|
163
|
+
} else {
|
|
164
|
+
$xeTable.handleEdit(params, {
|
|
165
|
+
type: 'valid-error',
|
|
166
|
+
trigger: 'call'
|
|
167
|
+
}).then(() => {
|
|
168
|
+
setTimeout(() => {
|
|
169
|
+
resolve($xeTable.showValidTooltip(params));
|
|
170
|
+
}, 10);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
function handleErrMsgMode($xeTable, validErrMaps) {
|
|
176
|
+
const validOpts = $xeTable.computeValidOpts;
|
|
177
|
+
if (validOpts.msgMode === 'single') {
|
|
178
|
+
const keys = Object.keys(validErrMaps);
|
|
179
|
+
const resMaps = {};
|
|
180
|
+
if (keys.length) {
|
|
181
|
+
const firstKey = keys[0];
|
|
182
|
+
resMaps[firstKey] = validErrMaps[firstKey];
|
|
183
|
+
}
|
|
184
|
+
return resMaps;
|
|
185
|
+
}
|
|
186
|
+
return validErrMaps;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* 对表格数据进行校验
|
|
190
|
+
* 如果不指定数据,则默认只校验临时变动的数据,例如新增或修改
|
|
191
|
+
* 如果传 true 则校验当前表格数据
|
|
192
|
+
* 如果传 row 指定行记录,则只验证传入的行
|
|
193
|
+
* 如果传 rows 为多行记录,则只验证传入的行
|
|
194
|
+
* 如果只传 callback 否则默认验证整个表格数据
|
|
195
|
+
* 返回 Promise 对象,或者使用回调方式
|
|
196
|
+
*/
|
|
197
|
+
function beginValidate($xeTable, rows, cols, cb, isFull) {
|
|
198
|
+
const props = $xeTable;
|
|
199
|
+
const reactData = $xeTable;
|
|
200
|
+
const internalData = $xeTable;
|
|
201
|
+
const validRest = {};
|
|
202
|
+
const {
|
|
203
|
+
editRules,
|
|
204
|
+
treeConfig
|
|
205
|
+
} = props;
|
|
206
|
+
const {
|
|
207
|
+
isRowGroupStatus
|
|
208
|
+
} = reactData;
|
|
209
|
+
const {
|
|
210
|
+
afterFullData,
|
|
211
|
+
pendingRowMaps,
|
|
212
|
+
removeRowMaps
|
|
213
|
+
} = internalData;
|
|
214
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
215
|
+
const aggregateOpts = $xeTable.computeAggregateOpts;
|
|
216
|
+
const validOpts = $xeTable.computeValidOpts;
|
|
217
|
+
let validList;
|
|
218
|
+
if (rows === true) {
|
|
219
|
+
validList = afterFullData;
|
|
220
|
+
} else if (rows) {
|
|
221
|
+
if (_xeUtils.default.isFunction(rows)) {
|
|
222
|
+
cb = rows;
|
|
223
|
+
} else {
|
|
224
|
+
validList = _xeUtils.default.isArray(rows) ? rows : [rows];
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (!validList) {
|
|
228
|
+
validList = $xeTable.getInsertRecords().concat($xeTable.getUpdateRecords());
|
|
229
|
+
}
|
|
230
|
+
const rowValidErrs = [];
|
|
231
|
+
internalData._lastCallTime = Date.now();
|
|
232
|
+
internalData.validRuleErr = false; // 如果为快速校验,当存在某列校验不通过时将终止执行
|
|
233
|
+
$xeTable.clearValidate();
|
|
234
|
+
const validErrMaps = {};
|
|
235
|
+
if (editRules) {
|
|
236
|
+
const columns = cols && cols.length ? cols : $xeTable.getColumns();
|
|
237
|
+
const handleVaild = row => {
|
|
238
|
+
const rowid = (0, _util.getRowid)($xeTable, row);
|
|
239
|
+
// 是否删除
|
|
240
|
+
if (removeRowMaps[rowid]) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
// 是否标记删除
|
|
244
|
+
if (pendingRowMaps[rowid]) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if ($xeTable.isAggregateRecord(row)) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (isFull || !internalData.validRuleErr) {
|
|
251
|
+
const colVailds = [];
|
|
252
|
+
columns.forEach(column => {
|
|
253
|
+
const field = _xeUtils.default.isString(column) ? column : column.field;
|
|
254
|
+
if ((isFull || !internalData.validRuleErr) && _xeUtils.default.has(editRules, field)) {
|
|
255
|
+
colVailds.push($xeTable.validCellRules('all', row, column).catch(({
|
|
256
|
+
rule,
|
|
257
|
+
rules
|
|
258
|
+
}) => {
|
|
259
|
+
const rest = {
|
|
260
|
+
rule,
|
|
261
|
+
rules,
|
|
262
|
+
rowIndex: $xeTable.getRowIndex(row),
|
|
263
|
+
row,
|
|
264
|
+
columnIndex: $xeTable.getColumnIndex(column),
|
|
265
|
+
column,
|
|
266
|
+
field,
|
|
267
|
+
$table: $xeTable
|
|
268
|
+
};
|
|
269
|
+
if (!validRest[field]) {
|
|
270
|
+
validRest[field] = [];
|
|
271
|
+
}
|
|
272
|
+
validErrMaps[`${(0, _util.getRowid)($xeTable, row)}:${column.id}`] = {
|
|
273
|
+
column,
|
|
274
|
+
row,
|
|
275
|
+
rule,
|
|
276
|
+
content: rule.content
|
|
277
|
+
};
|
|
278
|
+
validRest[field].push(rest);
|
|
279
|
+
if (!isFull) {
|
|
280
|
+
internalData.validRuleErr = true;
|
|
281
|
+
return Promise.reject(rest);
|
|
282
|
+
}
|
|
283
|
+
}));
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
rowValidErrs.push(Promise.all(colVailds));
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
if (isRowGroupStatus) {
|
|
290
|
+
_xeUtils.default.eachTree(validList, handleVaild, {
|
|
291
|
+
children: aggregateOpts.mapChildrenField
|
|
292
|
+
});
|
|
293
|
+
} else if (treeConfig) {
|
|
294
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
295
|
+
_xeUtils.default.eachTree(validList, handleVaild, {
|
|
296
|
+
children: childrenField
|
|
297
|
+
});
|
|
298
|
+
} else {
|
|
299
|
+
validList.forEach(handleVaild);
|
|
300
|
+
}
|
|
301
|
+
return Promise.all(rowValidErrs).then(() => {
|
|
302
|
+
const ruleProps = Object.keys(validRest);
|
|
303
|
+
reactData.validErrorMaps = handleErrMsgMode($xeTable, validErrMaps);
|
|
304
|
+
return $xeTable.$nextTick().then(() => {
|
|
305
|
+
if (ruleProps.length) {
|
|
306
|
+
return Promise.reject(validRest[ruleProps[0]][0]);
|
|
307
|
+
}
|
|
308
|
+
if (cb) {
|
|
309
|
+
cb();
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
}).catch(firstErrParams => {
|
|
313
|
+
return new Promise((resolve, reject) => {
|
|
314
|
+
const finish = () => {
|
|
315
|
+
$xeTable.$nextTick(() => {
|
|
316
|
+
if (cb) {
|
|
317
|
+
cb(validRest);
|
|
318
|
+
resolve();
|
|
319
|
+
} else {
|
|
320
|
+
if (getConfig().validToReject === 'obsolete') {
|
|
321
|
+
// 已废弃,校验失败将不会执行catch
|
|
322
|
+
reject(validRest);
|
|
323
|
+
} else {
|
|
324
|
+
resolve(validRest);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
};
|
|
329
|
+
const posAndFinish = () => {
|
|
330
|
+
firstErrParams.cell = $xeTable.getCellElement(firstErrParams.row, firstErrParams.column);
|
|
331
|
+
(0, _dom.scrollToView)(firstErrParams.cell);
|
|
332
|
+
handleValidError($xeTable, firstErrParams).then(finish);
|
|
333
|
+
};
|
|
334
|
+
/**
|
|
335
|
+
* 当校验不通过时
|
|
336
|
+
* 将表格滚动到可视区
|
|
337
|
+
* 由于提示信息至少需要占一行,定位向上偏移一行
|
|
338
|
+
*/
|
|
339
|
+
if (validOpts.autoPos === false) {
|
|
340
|
+
finish();
|
|
341
|
+
} else {
|
|
342
|
+
const row = firstErrParams.row;
|
|
343
|
+
const column = firstErrParams.column;
|
|
344
|
+
$xeTable.scrollToRow(row, column).then(posAndFinish);
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
} else {
|
|
349
|
+
reactData.validErrorMaps = {};
|
|
350
|
+
}
|
|
351
|
+
return $xeTable.$nextTick().then(() => {
|
|
352
|
+
if (cb) {
|
|
353
|
+
cb();
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
}
|
|
154
357
|
var _default = exports.default = {
|
|
155
358
|
methods: {
|
|
156
359
|
/**
|
|
157
360
|
* 完整校验,和 validate 的区别就是会给有效数据中的每一行进行校验
|
|
158
361
|
*/
|
|
159
362
|
_fullValidate(rows, cb) {
|
|
363
|
+
const $xeTable = this;
|
|
160
364
|
if (_xeUtils.default.isFunction(cb)) {
|
|
161
365
|
(0, _log.warnLog)('vxe.error.notValidators', ['fullValidate(rows, callback)', 'fullValidate(rows)']);
|
|
162
366
|
}
|
|
163
|
-
return
|
|
367
|
+
return beginValidate($xeTable, rows, null, cb, true);
|
|
164
368
|
},
|
|
165
369
|
/**
|
|
166
370
|
* 快速校验,如果存在记录不通过的记录,则返回不再继续校验(异步校验除外)
|
|
167
371
|
*/
|
|
168
372
|
_validate(rows, cb) {
|
|
373
|
+
const $xeTable = this;
|
|
169
374
|
if (_xeUtils.default.isFunction(cb)) {
|
|
170
375
|
(0, _log.warnLog)('vxe.error.notValidators', ['validate(rows, callback)', 'validate(rows)']);
|
|
171
376
|
}
|
|
172
|
-
return
|
|
377
|
+
return beginValidate($xeTable, rows, null, cb);
|
|
173
378
|
},
|
|
174
379
|
/**
|
|
175
380
|
* 完整校验单元格,和 validateField 的区别就是会给有效数据中的每一行进行校验
|
|
176
381
|
*/
|
|
177
382
|
_fullValidateField(rows, fieldOrColumn) {
|
|
383
|
+
const $xeTable = this;
|
|
178
384
|
const colList = (_xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : fieldOrColumn ? [fieldOrColumn] : []).map(column => (0, _util.handleFieldOrColumn)(this, column));
|
|
179
385
|
if (colList.length) {
|
|
180
|
-
return
|
|
386
|
+
return beginValidate($xeTable, rows, colList, null, true);
|
|
181
387
|
}
|
|
182
|
-
return
|
|
388
|
+
return $xeTable.$nextTick();
|
|
183
389
|
},
|
|
184
390
|
/**
|
|
185
391
|
* 快速校验单元格,如果存在记录不通过的记录,则返回不再继续校验(异步校验除外)
|
|
186
392
|
*/
|
|
187
393
|
_validateField(rows, fieldOrColumn) {
|
|
394
|
+
const $xeTable = this;
|
|
188
395
|
const colList = (_xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : fieldOrColumn ? [fieldOrColumn] : []).map(column => (0, _util.handleFieldOrColumn)(this, column));
|
|
189
396
|
if (colList.length) {
|
|
190
|
-
return
|
|
397
|
+
return beginValidate($xeTable, rows, colList, null);
|
|
191
398
|
}
|
|
192
|
-
return
|
|
193
|
-
},
|
|
194
|
-
/**
|
|
195
|
-
* 聚焦到校验通过的单元格并弹出校验错误提示
|
|
196
|
-
*/
|
|
197
|
-
handleValidError(params) {
|
|
198
|
-
const $xeTable = this;
|
|
199
|
-
const {
|
|
200
|
-
validOpts
|
|
201
|
-
} = this;
|
|
202
|
-
return new Promise(resolve => {
|
|
203
|
-
if (validOpts.autoPos === false) {
|
|
204
|
-
$xeTable.dispatchEvent('valid-error', params, null);
|
|
205
|
-
resolve();
|
|
206
|
-
} else {
|
|
207
|
-
this.handleEdit(params, {
|
|
208
|
-
type: 'valid-error',
|
|
209
|
-
trigger: 'call'
|
|
210
|
-
}).then(() => {
|
|
211
|
-
setTimeout(() => {
|
|
212
|
-
resolve(this.showValidTooltip(params));
|
|
213
|
-
}, 10);
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
},
|
|
218
|
-
handleErrMsgMode(validErrMaps) {
|
|
219
|
-
const {
|
|
220
|
-
validOpts
|
|
221
|
-
} = this;
|
|
222
|
-
if (validOpts.msgMode === 'single') {
|
|
223
|
-
const keys = Object.keys(validErrMaps);
|
|
224
|
-
const resMaps = {};
|
|
225
|
-
if (keys.length) {
|
|
226
|
-
const firstKey = keys[0];
|
|
227
|
-
resMaps[firstKey] = validErrMaps[firstKey];
|
|
228
|
-
}
|
|
229
|
-
return resMaps;
|
|
230
|
-
}
|
|
231
|
-
return validErrMaps;
|
|
232
|
-
},
|
|
233
|
-
/**
|
|
234
|
-
* 对表格数据进行校验
|
|
235
|
-
* 如果不指定数据,则默认只校验临时变动的数据,例如新增或修改
|
|
236
|
-
* 如果传 true 则校验当前表格数据
|
|
237
|
-
* 如果传 row 指定行记录,则只验证传入的行
|
|
238
|
-
* 如果传 rows 为多行记录,则只验证传入的行
|
|
239
|
-
* 如果只传 callback 否则默认验证整个表格数据
|
|
240
|
-
* 返回 Promise 对象,或者使用回调方式
|
|
241
|
-
*/
|
|
242
|
-
beginValidate(rows, cols, cb, isFull) {
|
|
243
|
-
const $xeTable = this;
|
|
244
|
-
const props = $xeTable;
|
|
245
|
-
const reactData = $xeTable;
|
|
246
|
-
const internalData = $xeTable;
|
|
247
|
-
const validRest = {};
|
|
248
|
-
const {
|
|
249
|
-
editRules,
|
|
250
|
-
treeConfig
|
|
251
|
-
} = props;
|
|
252
|
-
const {
|
|
253
|
-
isRowGroupStatus
|
|
254
|
-
} = reactData;
|
|
255
|
-
const {
|
|
256
|
-
afterFullData,
|
|
257
|
-
pendingRowMaps,
|
|
258
|
-
removeRowMaps
|
|
259
|
-
} = internalData;
|
|
260
|
-
const treeOpts = $xeTable.computeTreeOpts;
|
|
261
|
-
const aggregateOpts = $xeTable.computeAggregateOpts;
|
|
262
|
-
let validList;
|
|
263
|
-
if (rows === true) {
|
|
264
|
-
validList = afterFullData;
|
|
265
|
-
} else if (rows) {
|
|
266
|
-
if (_xeUtils.default.isFunction(rows)) {
|
|
267
|
-
cb = rows;
|
|
268
|
-
} else {
|
|
269
|
-
validList = _xeUtils.default.isArray(rows) ? rows : [rows];
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
if (!validList) {
|
|
273
|
-
validList = this.getInsertRecords().concat(this.getUpdateRecords());
|
|
274
|
-
}
|
|
275
|
-
const rowValidErrs = [];
|
|
276
|
-
this.lastCallTime = Date.now();
|
|
277
|
-
this.validRuleErr = false; // 如果为快速校验,当存在某列校验不通过时将终止执行
|
|
278
|
-
this.clearValidate();
|
|
279
|
-
const validErrMaps = {};
|
|
280
|
-
if (editRules) {
|
|
281
|
-
const columns = cols && cols.length ? cols : this.getColumns();
|
|
282
|
-
const handleVaild = row => {
|
|
283
|
-
const rowid = (0, _util.getRowid)($xeTable, row);
|
|
284
|
-
// 是否删除
|
|
285
|
-
if (removeRowMaps[rowid]) {
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
// 是否标记删除
|
|
289
|
-
if (pendingRowMaps[rowid]) {
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
if ($xeTable.isAggregateRecord(row)) {
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
if (isFull || !this.validRuleErr) {
|
|
296
|
-
const colVailds = [];
|
|
297
|
-
columns.forEach(column => {
|
|
298
|
-
const field = _xeUtils.default.isString(column) ? column : column.field;
|
|
299
|
-
if ((isFull || !this.validRuleErr) && _xeUtils.default.has(editRules, field)) {
|
|
300
|
-
colVailds.push(this.validCellRules('all', row, column).catch(({
|
|
301
|
-
rule,
|
|
302
|
-
rules
|
|
303
|
-
}) => {
|
|
304
|
-
const rest = {
|
|
305
|
-
rule,
|
|
306
|
-
rules,
|
|
307
|
-
rowIndex: this.getRowIndex(row),
|
|
308
|
-
row,
|
|
309
|
-
columnIndex: this.getColumnIndex(column),
|
|
310
|
-
column,
|
|
311
|
-
field,
|
|
312
|
-
$table: this
|
|
313
|
-
};
|
|
314
|
-
if (!validRest[field]) {
|
|
315
|
-
validRest[field] = [];
|
|
316
|
-
}
|
|
317
|
-
validErrMaps[`${(0, _util.getRowid)(this, row)}:${column.id}`] = {
|
|
318
|
-
column,
|
|
319
|
-
row,
|
|
320
|
-
rule,
|
|
321
|
-
content: rule.content
|
|
322
|
-
};
|
|
323
|
-
validRest[field].push(rest);
|
|
324
|
-
if (!isFull) {
|
|
325
|
-
this.validRuleErr = true;
|
|
326
|
-
return Promise.reject(rest);
|
|
327
|
-
}
|
|
328
|
-
}));
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
rowValidErrs.push(Promise.all(colVailds));
|
|
332
|
-
}
|
|
333
|
-
};
|
|
334
|
-
if (isRowGroupStatus) {
|
|
335
|
-
_xeUtils.default.eachTree(validList, handleVaild, {
|
|
336
|
-
children: aggregateOpts.mapChildrenField
|
|
337
|
-
});
|
|
338
|
-
} else if (treeConfig) {
|
|
339
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
340
|
-
_xeUtils.default.eachTree(validList, handleVaild, {
|
|
341
|
-
children: childrenField
|
|
342
|
-
});
|
|
343
|
-
} else {
|
|
344
|
-
validList.forEach(handleVaild);
|
|
345
|
-
}
|
|
346
|
-
return Promise.all(rowValidErrs).then(() => {
|
|
347
|
-
const ruleProps = Object.keys(validRest);
|
|
348
|
-
this.validErrorMaps = this.handleErrMsgMode(validErrMaps);
|
|
349
|
-
return this.$nextTick().then(() => {
|
|
350
|
-
if (ruleProps.length) {
|
|
351
|
-
return Promise.reject(validRest[ruleProps[0]][0]);
|
|
352
|
-
}
|
|
353
|
-
if (cb) {
|
|
354
|
-
cb();
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
}).catch(firstErrParams => {
|
|
358
|
-
return new Promise((resolve, reject) => {
|
|
359
|
-
const finish = () => {
|
|
360
|
-
this.$nextTick(() => {
|
|
361
|
-
if (cb) {
|
|
362
|
-
cb(validRest);
|
|
363
|
-
resolve();
|
|
364
|
-
} else {
|
|
365
|
-
if (getConfig().validToReject === 'obsolete') {
|
|
366
|
-
// 已废弃,校验失败将不会执行catch
|
|
367
|
-
reject(validRest);
|
|
368
|
-
} else {
|
|
369
|
-
resolve(validRest);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
});
|
|
373
|
-
};
|
|
374
|
-
const posAndFinish = () => {
|
|
375
|
-
firstErrParams.cell = this.getCellElement(firstErrParams.row, firstErrParams.column);
|
|
376
|
-
(0, _dom.scrollToView)(firstErrParams.cell);
|
|
377
|
-
this.handleValidError(firstErrParams).then(finish);
|
|
378
|
-
};
|
|
379
|
-
/**
|
|
380
|
-
* 当校验不通过时
|
|
381
|
-
* 将表格滚动到可视区
|
|
382
|
-
* 由于提示信息至少需要占一行,定位向上偏移一行
|
|
383
|
-
*/
|
|
384
|
-
if (this.validOpts.autoPos === false) {
|
|
385
|
-
finish();
|
|
386
|
-
} else {
|
|
387
|
-
const row = firstErrParams.row;
|
|
388
|
-
const column = firstErrParams.column;
|
|
389
|
-
this.scrollToRow(row, column).then(posAndFinish);
|
|
390
|
-
}
|
|
391
|
-
});
|
|
392
|
-
});
|
|
393
|
-
} else {
|
|
394
|
-
this.validErrorMaps = {};
|
|
395
|
-
}
|
|
396
|
-
return this.$nextTick().then(() => {
|
|
397
|
-
if (cb) {
|
|
398
|
-
cb();
|
|
399
|
-
}
|
|
400
|
-
});
|
|
399
|
+
return $xeTable.$nextTick();
|
|
401
400
|
},
|
|
402
401
|
hasCellRules(type, row, column) {
|
|
403
402
|
const {
|
|
@@ -427,18 +426,21 @@ var _default = exports.default = {
|
|
|
427
426
|
* trigger=blur|change 触发方式(除非特殊场景,否则默认为空就行)
|
|
428
427
|
*/
|
|
429
428
|
validCellRules(validType, row, column, val) {
|
|
429
|
+
const $xeTable = this;
|
|
430
|
+
const props = $xeTable;
|
|
431
|
+
const internalData = $xeTable;
|
|
430
432
|
const {
|
|
431
433
|
editRules
|
|
432
|
-
} =
|
|
434
|
+
} = props;
|
|
433
435
|
const {
|
|
434
|
-
|
|
436
|
+
field
|
|
435
437
|
} = column;
|
|
436
438
|
const errorRules = [];
|
|
437
439
|
const syncValidList = [];
|
|
438
|
-
if (
|
|
439
|
-
const rules = _xeUtils.default.get(editRules,
|
|
440
|
+
if (field && editRules) {
|
|
441
|
+
const rules = _xeUtils.default.get(editRules, field);
|
|
440
442
|
if (rules) {
|
|
441
|
-
const cellValue = _xeUtils.default.isUndefined(val) ? _xeUtils.default.get(row,
|
|
443
|
+
const cellValue = _xeUtils.default.isUndefined(val) ? _xeUtils.default.get(row, field) : val;
|
|
442
444
|
rules.forEach(rule => {
|
|
443
445
|
const {
|
|
444
446
|
trigger,
|
|
@@ -451,11 +453,11 @@ var _default = exports.default = {
|
|
|
451
453
|
rule,
|
|
452
454
|
rules,
|
|
453
455
|
row,
|
|
454
|
-
rowIndex:
|
|
456
|
+
rowIndex: $xeTable.getRowIndex(row),
|
|
455
457
|
column,
|
|
456
|
-
columnIndex:
|
|
457
|
-
field: column.
|
|
458
|
-
$table:
|
|
458
|
+
columnIndex: $xeTable.getColumnIndex(column),
|
|
459
|
+
field: column.field,
|
|
460
|
+
$table: $xeTable
|
|
459
461
|
};
|
|
460
462
|
let customValid;
|
|
461
463
|
if (_xeUtils.default.isString(validator)) {
|
|
@@ -475,7 +477,7 @@ var _default = exports.default = {
|
|
|
475
477
|
}
|
|
476
478
|
if (customValid) {
|
|
477
479
|
if (_xeUtils.default.isError(customValid)) {
|
|
478
|
-
|
|
480
|
+
internalData.validRuleErr = true;
|
|
479
481
|
errorRules.push(new Rule({
|
|
480
482
|
type: 'custom',
|
|
481
483
|
trigger,
|
|
@@ -485,7 +487,7 @@ var _default = exports.default = {
|
|
|
485
487
|
} else if (customValid.catch) {
|
|
486
488
|
// 如果为异步校验(注:异步校验是并发无序的)
|
|
487
489
|
syncValidList.push(customValid.catch(e => {
|
|
488
|
-
|
|
490
|
+
internalData.validRuleErr = true;
|
|
489
491
|
errorRules.push(new Rule({
|
|
490
492
|
type: 'custom',
|
|
491
493
|
trigger,
|
|
@@ -497,7 +499,7 @@ var _default = exports.default = {
|
|
|
497
499
|
}
|
|
498
500
|
} else {
|
|
499
501
|
if (!checkRuleStatus(rule, cellValue)) {
|
|
500
|
-
|
|
502
|
+
internalData.validRuleErr = true;
|
|
501
503
|
errorRules.push(new Rule(rule));
|
|
502
504
|
}
|
|
503
505
|
}
|
|
@@ -516,34 +518,36 @@ var _default = exports.default = {
|
|
|
516
518
|
});
|
|
517
519
|
},
|
|
518
520
|
_clearValidate(rows, fieldOrColumn) {
|
|
521
|
+
const $xeTable = this;
|
|
522
|
+
const reactData = $xeTable;
|
|
519
523
|
const {
|
|
520
|
-
validOpts,
|
|
521
524
|
validErrorMaps
|
|
522
|
-
} =
|
|
523
|
-
const validTip =
|
|
525
|
+
} = reactData;
|
|
526
|
+
const validTip = $xeTable.$refs.refValidTooltip;
|
|
527
|
+
const validOpts = $xeTable.computeValidOpts;
|
|
524
528
|
const rowList = _xeUtils.default.isArray(rows) ? rows : rows ? [rows] : [];
|
|
525
|
-
const colList = (_xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : fieldOrColumn ? [fieldOrColumn] : []).map(column => (0, _util.handleFieldOrColumn)(
|
|
529
|
+
const colList = (_xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : fieldOrColumn ? [fieldOrColumn] : []).map(column => (0, _util.handleFieldOrColumn)($xeTable, column));
|
|
526
530
|
let validErrMaps = {};
|
|
527
|
-
if (validTip && validTip.visible) {
|
|
531
|
+
if (validTip && validTip.reactData.visible) {
|
|
528
532
|
validTip.close();
|
|
529
533
|
}
|
|
530
534
|
// 如果是单个提示模式
|
|
531
535
|
if (validOpts.msgMode === 'single') {
|
|
532
|
-
|
|
533
|
-
return
|
|
536
|
+
reactData.validErrorMaps = {};
|
|
537
|
+
return $xeTable.$nextTick();
|
|
534
538
|
}
|
|
535
539
|
if (rowList.length && colList.length) {
|
|
536
540
|
validErrMaps = Object.assign({}, validErrorMaps);
|
|
537
541
|
rowList.forEach(row => {
|
|
538
542
|
colList.forEach(column => {
|
|
539
|
-
const validKey = `${(0, _util.getRowid)(
|
|
543
|
+
const validKey = `${(0, _util.getRowid)($xeTable, row)}:${column.id}`;
|
|
540
544
|
if (validErrMaps[validKey]) {
|
|
541
545
|
delete validErrMaps[validKey];
|
|
542
546
|
}
|
|
543
547
|
});
|
|
544
548
|
});
|
|
545
549
|
} else if (rowList.length) {
|
|
546
|
-
const rowIdList = rowList.map(row => `${(0, _util.getRowid)(
|
|
550
|
+
const rowIdList = rowList.map(row => `${(0, _util.getRowid)($xeTable, row)}`);
|
|
547
551
|
_xeUtils.default.each(validErrorMaps, (item, key) => {
|
|
548
552
|
if (rowIdList.indexOf(key.split(':')[0]) > -1) {
|
|
549
553
|
validErrMaps[key] = item;
|
|
@@ -557,26 +561,31 @@ var _default = exports.default = {
|
|
|
557
561
|
}
|
|
558
562
|
});
|
|
559
563
|
}
|
|
560
|
-
|
|
561
|
-
return
|
|
564
|
+
reactData.validErrorMaps = validErrMaps;
|
|
565
|
+
return $xeTable.$nextTick();
|
|
562
566
|
},
|
|
563
567
|
/**
|
|
564
568
|
* 触发校验
|
|
565
569
|
*/
|
|
566
570
|
triggerValidate(type) {
|
|
571
|
+
const $xeTable = this;
|
|
572
|
+
const props = $xeTable;
|
|
573
|
+
const reactData = $xeTable;
|
|
567
574
|
const {
|
|
568
575
|
editConfig,
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
} =
|
|
576
|
+
editRules
|
|
577
|
+
} = props;
|
|
578
|
+
const {
|
|
579
|
+
editStore
|
|
580
|
+
} = reactData;
|
|
574
581
|
const {
|
|
575
582
|
actived
|
|
576
583
|
} = editStore;
|
|
584
|
+
const editOpts = $xeTable.computeEditOpts;
|
|
585
|
+
const validOpts = $xeTable.computeValidOpts;
|
|
577
586
|
// 检查清除校验消息
|
|
578
587
|
if (editRules && validOpts.msgMode === 'single') {
|
|
579
|
-
|
|
588
|
+
reactData.validErrorMaps = {};
|
|
580
589
|
}
|
|
581
590
|
// 校验单元格
|
|
582
591
|
if (editConfig && editRules && actived.row) {
|
|
@@ -585,10 +594,10 @@ var _default = exports.default = {
|
|
|
585
594
|
column,
|
|
586
595
|
cell
|
|
587
596
|
} = actived.args;
|
|
588
|
-
if (
|
|
589
|
-
return
|
|
597
|
+
if ($xeTable.hasCellRules(type, row, column)) {
|
|
598
|
+
return $xeTable.validCellRules(type, row, column).then(() => {
|
|
590
599
|
if (editOpts.mode === 'row') {
|
|
591
|
-
|
|
600
|
+
$xeTable.clearValidate(row, column);
|
|
592
601
|
}
|
|
593
602
|
}).catch(({
|
|
594
603
|
rule
|
|
@@ -601,7 +610,7 @@ var _default = exports.default = {
|
|
|
601
610
|
column,
|
|
602
611
|
cell
|
|
603
612
|
};
|
|
604
|
-
|
|
613
|
+
$xeTable.showValidTooltip(rest);
|
|
605
614
|
return Promise.reject(rest);
|
|
606
615
|
}
|
|
607
616
|
return Promise.resolve();
|
|
@@ -615,26 +624,29 @@ var _default = exports.default = {
|
|
|
615
624
|
*/
|
|
616
625
|
showValidTooltip(params) {
|
|
617
626
|
const $xeTable = this;
|
|
627
|
+
const props = $xeTable;
|
|
628
|
+
const reactData = $xeTable;
|
|
629
|
+
const {
|
|
630
|
+
height
|
|
631
|
+
} = props;
|
|
618
632
|
const {
|
|
619
|
-
$refs,
|
|
620
|
-
height,
|
|
621
|
-
validStore,
|
|
622
|
-
validErrorMaps,
|
|
623
633
|
tableData,
|
|
624
|
-
|
|
625
|
-
|
|
634
|
+
validStore,
|
|
635
|
+
validErrorMaps
|
|
636
|
+
} = reactData;
|
|
626
637
|
const {
|
|
627
638
|
rule,
|
|
628
639
|
row,
|
|
629
640
|
column,
|
|
630
641
|
cell
|
|
631
642
|
} = params;
|
|
632
|
-
const
|
|
643
|
+
const validOpts = $xeTable.computeValidOpts;
|
|
644
|
+
const validTip = $xeTable.$refs.refValidTooltip;
|
|
633
645
|
const content = rule.content;
|
|
634
646
|
validStore.visible = true;
|
|
635
647
|
if (validOpts.msgMode === 'single') {
|
|
636
|
-
|
|
637
|
-
[`${(0, _util.getRowid)(
|
|
648
|
+
reactData.validErrorMaps = {
|
|
649
|
+
[`${(0, _util.getRowid)($xeTable, row)}:${column.id}`]: {
|
|
638
650
|
column,
|
|
639
651
|
row,
|
|
640
652
|
rule,
|
|
@@ -642,8 +654,8 @@ var _default = exports.default = {
|
|
|
642
654
|
}
|
|
643
655
|
};
|
|
644
656
|
} else {
|
|
645
|
-
|
|
646
|
-
[`${(0, _util.getRowid)(
|
|
657
|
+
reactData.validErrorMaps = Object.assign({}, validErrorMaps, {
|
|
658
|
+
[`${(0, _util.getRowid)($xeTable, row)}:${column.id}`]: {
|
|
647
659
|
column,
|
|
648
660
|
row,
|
|
649
661
|
rule,
|
|
@@ -657,7 +669,7 @@ var _default = exports.default = {
|
|
|
657
669
|
return validTip.open(cell, content);
|
|
658
670
|
}
|
|
659
671
|
}
|
|
660
|
-
return
|
|
672
|
+
return $xeTable.$nextTick();
|
|
661
673
|
}
|
|
662
674
|
}
|
|
663
675
|
};
|