vxe-table 4.5.0-beta.11 → 4.5.0-beta.13
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 +1 -1
- package/README.md +1 -1
- package/README.zh-TW.md +1 -1
- package/es/footer/src/footer.js +5 -1
- package/es/form/src/form.js +27 -5
- package/es/icon/style.css +1 -1
- package/es/input/src/input.js +4 -1
- package/es/locale/lang/en-US.js +4 -0
- package/es/locale/lang/es-ES.js +5 -0
- package/es/locale/lang/ja-JP.js +5 -0
- package/es/locale/lang/zh-CN.js +5 -0
- package/es/locale/lang/zh-TC.js +5 -0
- package/es/menu/src/hooks.js +3 -3
- package/es/select/src/select.js +4 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/src/body.js +7 -3
- package/es/table/src/table.js +30 -7
- package/es/table/style.css +14 -3
- package/es/textarea/src/textarea.js +4 -1
- package/es/tools/log.js +1 -1
- package/es/tooltip/style.css +0 -6
- package/es/v-x-e-table/index.js +4 -1
- package/es/v-x-e-table/src/conf.js +4 -1
- package/es/v-x-e-table/src/menus.js +48 -2
- package/es/v-x-e-table/src/store.js +4 -1
- package/es/v-x-e-table/src/validators.js +5 -0
- package/es/validator/src/hook.js +100 -22
- package/es/vxe-table/style.css +14 -3
- package/es/vxe-tooltip/style.css +0 -6
- package/lib/footer/src/footer.js +6 -1
- package/lib/footer/src/footer.min.js +1 -1
- package/lib/form/src/form.js +24 -4
- package/lib/form/src/form.min.js +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +271 -48
- package/lib/index.umd.min.js +1 -1
- package/lib/input/src/input.js +6 -1
- package/lib/input/src/input.min.js +1 -1
- package/lib/locale/lang/en-US.js +4 -0
- package/lib/locale/lang/en-US.min.js +1 -1
- package/lib/locale/lang/en-US.umd.js +4 -0
- package/lib/locale/lang/es-ES.js +5 -0
- package/lib/locale/lang/es-ES.min.js +1 -1
- package/lib/locale/lang/es-ES.umd.js +5 -0
- package/lib/locale/lang/ja-JP.js +5 -0
- package/lib/locale/lang/ja-JP.min.js +1 -1
- package/lib/locale/lang/ja-JP.umd.js +5 -0
- package/lib/locale/lang/zh-CN.js +5 -0
- package/lib/locale/lang/zh-CN.min.js +1 -1
- package/lib/locale/lang/zh-CN.umd.js +5 -0
- package/lib/locale/lang/zh-HK.min.js +1 -1
- package/lib/locale/lang/zh-HK.umd.js +5 -0
- package/lib/locale/lang/zh-MO.min.js +1 -1
- package/lib/locale/lang/zh-MO.umd.js +5 -0
- package/lib/locale/lang/zh-TC.js +5 -0
- package/lib/locale/lang/zh-TC.min.js +1 -1
- package/lib/locale/lang/zh-TC.umd.js +5 -0
- package/lib/locale/lang/zh-TW.min.js +1 -1
- package/lib/locale/lang/zh-TW.umd.js +5 -0
- package/lib/menu/src/hooks.js +3 -3
- package/lib/menu/src/hooks.min.js +1 -1
- package/lib/select/src/select.js +6 -1
- package/lib/select/src/select.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/src/body.js +8 -2
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/table.js +38 -9
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/style/style.css +14 -3
- package/lib/table/style/style.min.css +1 -1
- package/lib/textarea/src/textarea.js +6 -1
- package/lib/textarea/src/textarea.min.js +1 -1
- package/lib/tools/log.js +1 -1
- package/lib/tools/log.min.js +1 -1
- package/lib/tooltip/style/style.css +0 -6
- package/lib/tooltip/style/style.min.css +1 -1
- package/lib/v-x-e-table/index.js +14 -1
- package/lib/v-x-e-table/index.min.js +1 -1
- package/lib/v-x-e-table/src/conf.js +4 -1
- package/lib/v-x-e-table/src/conf.min.js +1 -1
- package/lib/v-x-e-table/src/menus.js +48 -2
- package/lib/v-x-e-table/src/menus.min.js +1 -1
- package/lib/v-x-e-table/src/store.js +4 -1
- package/lib/v-x-e-table/src/store.min.js +1 -1
- package/lib/v-x-e-table/src/validators.js +15 -0
- package/lib/v-x-e-table/src/validators.min.js +1 -0
- package/lib/validator/src/hook.js +94 -20
- package/lib/validator/src/hook.min.js +1 -1
- package/lib/vxe-table/style/style.css +14 -3
- package/lib/vxe-table/style/style.min.css +1 -1
- package/lib/vxe-tooltip/style/style.css +0 -6
- package/lib/vxe-tooltip/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/footer/src/footer.ts +5 -1
- package/packages/form/src/form.ts +24 -5
- package/packages/input/src/input.ts +4 -1
- package/packages/locale/lang/en-US.ts +4 -0
- package/packages/locale/lang/es-ES.ts +5 -0
- package/packages/locale/lang/ja-JP.ts +5 -0
- package/packages/locale/lang/zh-CN.ts +5 -0
- package/packages/locale/lang/zh-TC.ts +5 -0
- package/packages/menu/src/hooks.ts +3 -3
- package/packages/select/src/select.ts +4 -1
- package/packages/table/src/body.ts +7 -3
- package/packages/table/src/table.ts +34 -7
- package/packages/textarea/src/textarea.ts +4 -1
- package/packages/v-x-e-table/index.ts +3 -0
- package/packages/v-x-e-table/src/conf.ts +4 -1
- package/packages/v-x-e-table/src/menus.ts +52 -2
- package/packages/v-x-e-table/src/store.ts +3 -1
- package/packages/v-x-e-table/src/validators.ts +9 -0
- package/packages/validator/src/hook.ts +117 -36
- package/styles/cssvar.scss +1 -2
- package/styles/table.scss +27 -6
- package/styles/tooltip.scss +0 -8
- package/styles/variable.scss +1 -2
- package/types/form.d.ts +9 -12
- package/types/table.d.ts +20 -1
- package/types/v-x-e-table/index.d.ts +8 -1
- package/types/v-x-e-table/menus.d.ts +19 -7
- package/types/v-x-e-table/validators.d.ts +30 -0
- package/types/validator.d.ts +14 -1
- /package/es/icon/style/{iconfont.1689813279210.ttf → iconfont.1690032028705.ttf} +0 -0
- /package/es/icon/style/{iconfont.1689813279210.woff → iconfont.1690032028705.woff} +0 -0
- /package/es/icon/style/{iconfont.1689813279210.woff2 → iconfont.1690032028705.woff2} +0 -0
- /package/es/{iconfont.1689813279210.ttf → iconfont.1690032028705.ttf} +0 -0
- /package/es/{iconfont.1689813279210.woff → iconfont.1690032028705.woff} +0 -0
- /package/es/{iconfont.1689813279210.woff2 → iconfont.1690032028705.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1689813279210.ttf → iconfont.1690032028705.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1689813279210.woff → iconfont.1690032028705.woff} +0 -0
- /package/lib/icon/style/{iconfont.1689813279210.woff2 → iconfont.1690032028705.woff2} +0 -0
- /package/lib/{iconfont.1689813279210.ttf → iconfont.1690032028705.ttf} +0 -0
- /package/lib/{iconfont.1689813279210.woff → iconfont.1690032028705.woff} +0 -0
- /package/lib/{iconfont.1689813279210.woff2 → iconfont.1690032028705.woff2} +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { nextTick } from 'vue'
|
|
2
2
|
import GlobalConfig from '../../v-x-e-table/src/conf'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
|
+
import { VXETable } from '../../v-x-e-table'
|
|
4
5
|
import { getFuncText, eqEmptyValue } from '../../tools/utils'
|
|
5
6
|
import { scrollToView } from '../../tools/dom'
|
|
7
|
+
import { errLog, warnLog } from '../../tools/log'
|
|
6
8
|
import { handleFieldOrColumn, getRowid } from '../../table/src/util'
|
|
7
9
|
|
|
8
10
|
import { VxeGlobalHooksHandles, TableValidatorMethods, TableValidatorPrivateMethods, VxeTableDefines } from '../../../types/all'
|
|
@@ -45,6 +47,7 @@ const tableValidatorMethodKeys: (keyof TableValidatorMethods)[] = ['fullValidate
|
|
|
45
47
|
const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
46
48
|
setupTable ($xetable) {
|
|
47
49
|
const { props, reactData, internalData } = $xetable
|
|
50
|
+
const { refValidTooltip } = $xetable.getRefMaps()
|
|
48
51
|
const { computeValidOpts, computeTreeOpts, computeEditOpts } = $xetable.getComputeMaps()
|
|
49
52
|
|
|
50
53
|
let validatorMethods = {} as TableValidatorMethods
|
|
@@ -69,6 +72,30 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
69
72
|
})
|
|
70
73
|
}
|
|
71
74
|
|
|
75
|
+
const handleErrMsgMode = (validErrMaps: Record<string, {
|
|
76
|
+
row: any;
|
|
77
|
+
column: any;
|
|
78
|
+
rule: any;
|
|
79
|
+
content: any;
|
|
80
|
+
}>) => {
|
|
81
|
+
const validOpts = computeValidOpts.value
|
|
82
|
+
if (validOpts.msgMode === 'single') {
|
|
83
|
+
const keys = Object.keys(validErrMaps)
|
|
84
|
+
const resMaps: Record<string, {
|
|
85
|
+
row: any;
|
|
86
|
+
column: any;
|
|
87
|
+
rule: any;
|
|
88
|
+
content: any;
|
|
89
|
+
}> = validErrMaps
|
|
90
|
+
if (keys.length) {
|
|
91
|
+
const firstKey = keys[0]
|
|
92
|
+
resMaps[firstKey] = validErrMaps[firstKey]
|
|
93
|
+
}
|
|
94
|
+
return resMaps
|
|
95
|
+
}
|
|
96
|
+
return validErrMaps
|
|
97
|
+
}
|
|
98
|
+
|
|
72
99
|
/**
|
|
73
100
|
* 对表格数据进行校验
|
|
74
101
|
* 如果不指定数据,则默认只校验临时变动的数据,例如新增或修改
|
|
@@ -105,14 +132,12 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
105
132
|
internalData._lastCallTime = Date.now()
|
|
106
133
|
validRuleErr = false // 如果为快速校验,当存在某列校验不通过时将终止执行
|
|
107
134
|
validatorMethods.clearValidate()
|
|
108
|
-
const validErrMaps: {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
} = {}
|
|
135
|
+
const validErrMaps: Record<string, {
|
|
136
|
+
row: any;
|
|
137
|
+
column: any;
|
|
138
|
+
rule: any;
|
|
139
|
+
content: any;
|
|
140
|
+
}> = {}
|
|
116
141
|
if (editRules) {
|
|
117
142
|
const columns = $xetable.getColumns()
|
|
118
143
|
const handleVaild = (row: any) => {
|
|
@@ -161,7 +186,7 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
161
186
|
}
|
|
162
187
|
return Promise.all(rowValids).then(() => {
|
|
163
188
|
const ruleProps = Object.keys(validRest)
|
|
164
|
-
reactData.validErrorMaps = validErrMaps
|
|
189
|
+
reactData.validErrorMaps = handleErrMsgMode(validErrMaps)
|
|
165
190
|
return nextTick().then(() => {
|
|
166
191
|
if (ruleProps.length) {
|
|
167
192
|
return Promise.reject(validRest[ruleProps[0]][0])
|
|
@@ -200,7 +225,6 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
200
225
|
const row = firstErrParams.row
|
|
201
226
|
const rowIndex = afterFullData.indexOf(row)
|
|
202
227
|
const locatRow = rowIndex > 0 ? afterFullData[rowIndex - 1] : row
|
|
203
|
-
reactData.validErrorMaps = validErrMaps
|
|
204
228
|
if (validOpts.autoPos === false) {
|
|
205
229
|
finish()
|
|
206
230
|
} else {
|
|
@@ -212,8 +236,9 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
212
236
|
}
|
|
213
237
|
})
|
|
214
238
|
})
|
|
239
|
+
} else {
|
|
240
|
+
reactData.validErrorMaps = {}
|
|
215
241
|
}
|
|
216
|
-
// reactData.validErrorMaps = validErrMaps
|
|
217
242
|
return nextTick().then(() => {
|
|
218
243
|
if (cb) {
|
|
219
244
|
cb()
|
|
@@ -235,18 +260,27 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
235
260
|
return beginValidate(rows, cb)
|
|
236
261
|
},
|
|
237
262
|
clearValidate (rows, fieldOrColumn) {
|
|
263
|
+
const { validErrorMaps } = reactData
|
|
264
|
+
const validTip = refValidTooltip.value
|
|
265
|
+
const validOpts = computeValidOpts.value
|
|
238
266
|
const rowList = XEUtils.isArray(rows) ? rows : (rows ? [rows] : [])
|
|
239
267
|
const colList = (XEUtils.isArray(fieldOrColumn) ? fieldOrColumn : (fieldOrColumn ? [fieldOrColumn] : []).map(column => handleFieldOrColumn($xetable, column))) as VxeTableDefines.ColumnInfo<any>[]
|
|
240
|
-
let validErrMaps: {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
268
|
+
let validErrMaps: Record<string, {
|
|
269
|
+
row: any;
|
|
270
|
+
column: any;
|
|
271
|
+
rule: any;
|
|
272
|
+
content: any;
|
|
273
|
+
}> = {}
|
|
274
|
+
if (validTip && validTip.reactData.visible) {
|
|
275
|
+
validTip.close()
|
|
276
|
+
}
|
|
277
|
+
// 如果是单个提示模式
|
|
278
|
+
if (validOpts.msgMode === 'single') {
|
|
279
|
+
reactData.validErrorMaps = {}
|
|
280
|
+
return nextTick()
|
|
281
|
+
}
|
|
248
282
|
if (rowList.length && colList.length) {
|
|
249
|
-
validErrMaps = Object.assign({},
|
|
283
|
+
validErrMaps = Object.assign({}, validErrorMaps)
|
|
250
284
|
rowList.forEach(row => {
|
|
251
285
|
colList.forEach((column) => {
|
|
252
286
|
const vaildKey = `${getRowid($xetable, row)}:${column.id}`
|
|
@@ -257,14 +291,14 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
257
291
|
})
|
|
258
292
|
} else if (rowList.length) {
|
|
259
293
|
const rowidList = rowList.map(row => `${getRowid($xetable, row)}`)
|
|
260
|
-
XEUtils.each(
|
|
294
|
+
XEUtils.each(validErrorMaps, (item, key) => {
|
|
261
295
|
if (rowidList.indexOf(key.split(':')[0]) > -1) {
|
|
262
296
|
validErrMaps[key] = item
|
|
263
297
|
}
|
|
264
298
|
})
|
|
265
299
|
} else if (colList.length) {
|
|
266
300
|
const colidList = colList.map(column => `${column.id}`)
|
|
267
|
-
XEUtils.each(
|
|
301
|
+
XEUtils.each(validErrorMaps, (item, key) => {
|
|
268
302
|
if (colidList.indexOf(key.split(':')[1]) > -1) {
|
|
269
303
|
validErrMaps[key] = item
|
|
270
304
|
}
|
|
@@ -323,10 +357,10 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
323
357
|
if (rules) {
|
|
324
358
|
const cellValue = XEUtils.isUndefined(val) ? XEUtils.get(row, field) : val
|
|
325
359
|
rules.forEach((rule) => {
|
|
326
|
-
const { type, trigger, required } = rule
|
|
360
|
+
const { type, trigger, required, validator } = rule
|
|
327
361
|
if (validType === 'all' || !trigger || validType === trigger) {
|
|
328
|
-
if (
|
|
329
|
-
const
|
|
362
|
+
if (validator) {
|
|
363
|
+
const validParams = {
|
|
330
364
|
cellValue,
|
|
331
365
|
rule,
|
|
332
366
|
rules,
|
|
@@ -334,9 +368,29 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
334
368
|
rowIndex: $xetable.getRowIndex(row),
|
|
335
369
|
column,
|
|
336
370
|
columnIndex: $xetable.getColumnIndex(column),
|
|
337
|
-
field: column.
|
|
338
|
-
$table: $xetable
|
|
339
|
-
|
|
371
|
+
field: column.field,
|
|
372
|
+
$table: $xetable,
|
|
373
|
+
$grid: $xetable.xegrid
|
|
374
|
+
}
|
|
375
|
+
let customValid: any
|
|
376
|
+
if (XEUtils.isString(validator)) {
|
|
377
|
+
const gvItem = VXETable.validators.get(validator)
|
|
378
|
+
if (gvItem) {
|
|
379
|
+
if (gvItem.cellValidatorMethod) {
|
|
380
|
+
customValid = gvItem.cellValidatorMethod(validParams)
|
|
381
|
+
} else {
|
|
382
|
+
if (process.env.VUE_APP_VXE_TABLE_ENV === 'development') {
|
|
383
|
+
warnLog('vxe.error.notValidators', [validator])
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
} else {
|
|
387
|
+
if (process.env.VUE_APP_VXE_TABLE_ENV === 'development') {
|
|
388
|
+
errLog('vxe.error.notValidators', [validator])
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
} else {
|
|
392
|
+
customValid = validator(validParams)
|
|
393
|
+
}
|
|
340
394
|
if (customValid) {
|
|
341
395
|
if (XEUtils.isError(customValid)) {
|
|
342
396
|
validRuleErr = true
|
|
@@ -395,6 +449,13 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
395
449
|
const { editStore } = reactData
|
|
396
450
|
const { actived } = editStore
|
|
397
451
|
const editOpts = computeEditOpts.value
|
|
452
|
+
const validOpts = computeValidOpts.value
|
|
453
|
+
// 检查清除校验消息
|
|
454
|
+
if (editRules && validOpts.msgMode === 'single') {
|
|
455
|
+
reactData.validErrorMaps = {}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// 校验单元格
|
|
398
459
|
if (editConfig && editRules && actived.row) {
|
|
399
460
|
const { row, column, cell } = actived.args
|
|
400
461
|
if (validatorPrivateMethods.hasCellRules(type, row, column)) {
|
|
@@ -419,17 +480,37 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
|
|
|
419
480
|
* 弹出校验错误提示
|
|
420
481
|
*/
|
|
421
482
|
showValidTooltip (params) {
|
|
422
|
-
const {
|
|
483
|
+
const { height } = props
|
|
484
|
+
const { tableData, validStore, validErrorMaps } = reactData
|
|
485
|
+
const validOpts = computeValidOpts.value
|
|
486
|
+
const validTip = refValidTooltip.value
|
|
423
487
|
validStore.visible = true
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
488
|
+
if (validOpts.msgMode === 'single') {
|
|
489
|
+
reactData.validErrorMaps = {
|
|
490
|
+
[`${getRowid($xetable, params.row)}:${params.column.id}`]: {
|
|
491
|
+
column: params.column,
|
|
492
|
+
row: params.row,
|
|
493
|
+
rule: params.rule,
|
|
494
|
+
content: params.rule.content
|
|
495
|
+
}
|
|
430
496
|
}
|
|
431
|
-
}
|
|
497
|
+
} else {
|
|
498
|
+
reactData.validErrorMaps = Object.assign({}, validErrorMaps, {
|
|
499
|
+
[`${getRowid($xetable, params.row)}:${params.column.id}`]: {
|
|
500
|
+
column: params.column,
|
|
501
|
+
row: params.row,
|
|
502
|
+
rule: params.rule,
|
|
503
|
+
content: params.rule.content
|
|
504
|
+
}
|
|
505
|
+
})
|
|
506
|
+
}
|
|
432
507
|
$xetable.dispatchEvent('valid-error', params, null)
|
|
508
|
+
if (validTip) {
|
|
509
|
+
const { cell } = params
|
|
510
|
+
if (validTip && (validOpts.message === 'tooltip' || (validOpts.message === 'default' && !height && tableData.length < 2))) {
|
|
511
|
+
return validTip.open(cell, params.rule.content)
|
|
512
|
+
}
|
|
513
|
+
}
|
|
433
514
|
return nextTick()
|
|
434
515
|
}
|
|
435
516
|
}
|
package/styles/cssvar.scss
CHANGED
|
@@ -135,6 +135,7 @@
|
|
|
135
135
|
|
|
136
136
|
/*validate*/
|
|
137
137
|
--vxe-table-validate-error-color: #{$vxe-table-validate-error-color};
|
|
138
|
+
--vxe-table-validate-error-background-color: #{$vxe-table-validate-error-background-color};
|
|
138
139
|
|
|
139
140
|
/*grid*/
|
|
140
141
|
--vxe-grid-maximize-background-color: #{$vxe-grid-maximize-background-color};
|
|
@@ -148,8 +149,6 @@
|
|
|
148
149
|
--vxe-tooltip-dark-color: #{$vxe-tooltip-dark-color};
|
|
149
150
|
--vxe-tooltip-dark-background-color: #{$vxe-tooltip-dark-background-color};
|
|
150
151
|
--vxe-tooltip-light-background-color: #{$vxe-tooltip-light-background-color};
|
|
151
|
-
--vxe-tooltip-validate-error-color: #{$vxe-tooltip-validate-error-color};
|
|
152
|
-
--vxe-tooltip-validate-error-background-color: #{$vxe-tooltip-validate-error-background-color};
|
|
153
152
|
|
|
154
153
|
/*pager*/
|
|
155
154
|
--vxe-pager-background-color: #{$vxe-pager-background-color};
|
package/styles/table.scss
CHANGED
|
@@ -1190,6 +1190,7 @@
|
|
|
1190
1190
|
display: inline-block;
|
|
1191
1191
|
border-radius: var(--vxe-border-radius);
|
|
1192
1192
|
color: var(--vxe-table-validate-error-color);
|
|
1193
|
+
background-color: var(--vxe-table-validate-error-background-color);
|
|
1193
1194
|
pointer-events: auto;
|
|
1194
1195
|
}
|
|
1195
1196
|
}
|
|
@@ -1206,10 +1207,21 @@
|
|
|
1206
1207
|
|
|
1207
1208
|
}
|
|
1208
1209
|
}
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1210
|
+
&.vaild-msg--single {
|
|
1211
|
+
.vxe-body--row {
|
|
1212
|
+
&:last-child {
|
|
1213
|
+
.vxe-cell--valid {
|
|
1214
|
+
bottom: calc(100%);
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
&.vaild-msg--full {
|
|
1220
|
+
.vxe-body--row {
|
|
1221
|
+
&:last-child {
|
|
1222
|
+
.vxe-cell--valid {
|
|
1223
|
+
top: calc(100% - 1.3em);
|
|
1224
|
+
}
|
|
1213
1225
|
}
|
|
1214
1226
|
}
|
|
1215
1227
|
}
|
|
@@ -1221,8 +1233,8 @@
|
|
|
1221
1233
|
position: relative;
|
|
1222
1234
|
&:before {
|
|
1223
1235
|
content: "";
|
|
1224
|
-
top: var(--vxe-table-cell-dirty-width);
|
|
1225
|
-
left: var(--vxe-table-cell-dirty-width);
|
|
1236
|
+
top: calc(var(--vxe-table-cell-dirty-width) * -1);
|
|
1237
|
+
left: calc(var(--vxe-table-cell-dirty-width) * -1);
|
|
1226
1238
|
position: absolute;
|
|
1227
1239
|
border-width: var(--vxe-table-cell-dirty-width);
|
|
1228
1240
|
border-style: solid;
|
|
@@ -1291,6 +1303,15 @@
|
|
|
1291
1303
|
}
|
|
1292
1304
|
}
|
|
1293
1305
|
|
|
1306
|
+
/*valid error*/
|
|
1307
|
+
div.vxe-table--tooltip-wrapper {
|
|
1308
|
+
&.vxe-table--valid-error {
|
|
1309
|
+
padding: 0;
|
|
1310
|
+
color: var(--vxe-table-validate-error-color);
|
|
1311
|
+
background-color: var(--vxe-table-validate-error-background-color);
|
|
1312
|
+
}
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1294
1315
|
/*footer*/
|
|
1295
1316
|
.vxe-table--footer-wrapper {
|
|
1296
1317
|
color: var(--vxe-table-footer-font-color);
|
package/styles/tooltip.scss
CHANGED
package/styles/variable.scss
CHANGED
|
@@ -132,6 +132,7 @@ $vxe-loading-z-index: 999 !default;
|
|
|
132
132
|
|
|
133
133
|
/*validate*/
|
|
134
134
|
$vxe-table-validate-error-color: #f56c6c !default;
|
|
135
|
+
$vxe-table-validate-error-background-color: $vxe-table-body-background-color !default;
|
|
135
136
|
|
|
136
137
|
/*grid*/
|
|
137
138
|
$vxe-grid-maximize-background-color: #fff !default;
|
|
@@ -145,8 +146,6 @@ $vxe-toolbar-panel-background-color: #fff !default;
|
|
|
145
146
|
$vxe-tooltip-dark-color: #fff !default;
|
|
146
147
|
$vxe-tooltip-dark-background-color: #303133 !default;
|
|
147
148
|
$vxe-tooltip-light-background-color: #fff !default;
|
|
148
|
-
$vxe-tooltip-validate-error-color: #fff !default;
|
|
149
|
-
$vxe-tooltip-validate-error-background-color: #f56c6c !default;
|
|
150
149
|
|
|
151
150
|
/*pager*/
|
|
152
151
|
$vxe-pager-background-color: #fff !default;
|
package/types/form.d.ts
CHANGED
|
@@ -262,18 +262,7 @@ export namespace VxeFormDefines {
|
|
|
262
262
|
* 使用自定义校验函数,接收一个 Promise
|
|
263
263
|
* @param params 参数
|
|
264
264
|
*/
|
|
265
|
-
validator
|
|
266
|
-
$form: VxeFormConstructor,
|
|
267
|
-
itemValue: any,
|
|
268
|
-
rule: VxeFormDefines.FormRule
|
|
269
|
-
rules: VxeFormDefines.FormRule[]
|
|
270
|
-
data: any
|
|
271
|
-
field: string,
|
|
272
|
-
/**
|
|
273
|
-
* @deprecated
|
|
274
|
-
*/
|
|
275
|
-
property: string
|
|
276
|
-
}): void | Error | Promise<any>
|
|
265
|
+
validator?: string | ((params: RuleValidatorParams) => void | Error | Promise<any>)
|
|
277
266
|
/**
|
|
278
267
|
* 提示消息
|
|
279
268
|
*/
|
|
@@ -286,6 +275,14 @@ export namespace VxeFormDefines {
|
|
|
286
275
|
message?: string
|
|
287
276
|
}
|
|
288
277
|
|
|
278
|
+
export interface RuleValidatorParams {
|
|
279
|
+
$form: VxeFormConstructor
|
|
280
|
+
itemValue: any
|
|
281
|
+
rule: VxeFormDefines.FormRule
|
|
282
|
+
rules: VxeFormDefines.FormRule[]
|
|
283
|
+
data: any
|
|
284
|
+
field: string
|
|
285
|
+
}
|
|
289
286
|
export interface ValidateErrorParams {
|
|
290
287
|
$form: VxeFormConstructor,
|
|
291
288
|
rule: VxeFormDefines.FormRule
|
package/types/table.d.ts
CHANGED
|
@@ -40,6 +40,7 @@ export interface VxeTableConstructor<D = any> extends VxeComponentBase, VxeTable
|
|
|
40
40
|
export interface TablePrivateRef {
|
|
41
41
|
refElem: Ref<HTMLDivElement>
|
|
42
42
|
refTooltip: Ref<VxeTooltipInstance>
|
|
43
|
+
refValidTooltip: Ref<VxeTooltipInstance>
|
|
43
44
|
refTableFilter: Ref<ComponentPublicInstance>
|
|
44
45
|
refTableMenu: Ref<VxeMenuPanelInstance>
|
|
45
46
|
refTableHeader: Ref<ComponentPublicInstance>
|
|
@@ -2013,14 +2014,32 @@ export namespace VxeTablePropTypes {
|
|
|
2013
2014
|
* 校验配置项
|
|
2014
2015
|
*/
|
|
2015
2016
|
export interface ValidConfig {
|
|
2017
|
+
/**
|
|
2018
|
+
* 是否自动定位到校验不通过的单元格
|
|
2019
|
+
*/
|
|
2016
2020
|
autoPos?: boolean
|
|
2021
|
+
/**
|
|
2022
|
+
* 是否显示错误显示
|
|
2023
|
+
*/
|
|
2017
2024
|
showMessage?: boolean
|
|
2025
|
+
/**
|
|
2026
|
+
* 校验消息提示方式
|
|
2027
|
+
*/
|
|
2028
|
+
msgMode?: 'single' | 'full' | null | ''
|
|
2029
|
+
/**
|
|
2030
|
+
* 当点击表格之外或者其他列之后,是否自动清除单元格的校验消息
|
|
2031
|
+
*/
|
|
2032
|
+
autoClear?: boolean
|
|
2033
|
+
/**
|
|
2034
|
+
* 校验提示框的最大宽度
|
|
2035
|
+
*/
|
|
2036
|
+
maxWidth?: number
|
|
2037
|
+
|
|
2018
2038
|
/**
|
|
2019
2039
|
* 不建议使用,后续废弃
|
|
2020
2040
|
* @deprecated
|
|
2021
2041
|
*/
|
|
2022
2042
|
message?: string
|
|
2023
|
-
maxWidth?: number
|
|
2024
2043
|
}
|
|
2025
2044
|
export interface ValidOpts extends ValidConfig { }
|
|
2026
2045
|
|
|
@@ -6,6 +6,7 @@ import { VxeGlobalInterceptor } from './interceptor'
|
|
|
6
6
|
import { VxeGlobalCommands } from './commands'
|
|
7
7
|
import { VxeGlobalFormats } from './formats'
|
|
8
8
|
import { VxeGlobalMenus } from './menus'
|
|
9
|
+
import { VxeGlobalValidators } from './validators'
|
|
9
10
|
import { VxeGlobalHooks } from './hooks'
|
|
10
11
|
import { VxeGlobalSetup } from './setup'
|
|
11
12
|
|
|
@@ -39,6 +40,7 @@ export const renderer: VxeGlobalRenderer
|
|
|
39
40
|
export const commands: VxeGlobalCommands
|
|
40
41
|
export const formats: VxeGlobalFormats
|
|
41
42
|
export const menus: VxeGlobalMenus
|
|
43
|
+
export const validators: VxeGlobalValidators
|
|
42
44
|
export const hooks: VxeGlobalHooks
|
|
43
45
|
export const modal: ModalController
|
|
44
46
|
export const saveFile: SaveFileFunction
|
|
@@ -93,6 +95,10 @@ export interface VXETableCore {
|
|
|
93
95
|
* Table context menu
|
|
94
96
|
*/
|
|
95
97
|
menus: VxeGlobalMenus
|
|
98
|
+
/**
|
|
99
|
+
* Validators table/form
|
|
100
|
+
*/
|
|
101
|
+
validators: VxeGlobalValidators
|
|
96
102
|
/**
|
|
97
103
|
* Table VxeGlobalHooks API
|
|
98
104
|
*/
|
|
@@ -131,7 +137,7 @@ export interface VXETableCore {
|
|
|
131
137
|
}
|
|
132
138
|
|
|
133
139
|
/**
|
|
134
|
-
* 一个基于 vue 的 PC
|
|
140
|
+
* 一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式为零代码而设计...
|
|
135
141
|
*/
|
|
136
142
|
export const VXETable: VXETableCore
|
|
137
143
|
|
|
@@ -140,6 +146,7 @@ export * from './interceptor'
|
|
|
140
146
|
export * from './commands'
|
|
141
147
|
export * from './formats'
|
|
142
148
|
export * from './menus'
|
|
149
|
+
export * from './validators'
|
|
143
150
|
export * from './hooks'
|
|
144
151
|
export * from './setup'
|
|
145
152
|
|
|
@@ -5,18 +5,30 @@ import { VxeGlobalRendererHandles } from './renderer'
|
|
|
5
5
|
/* eslint-disable no-use-before-define */
|
|
6
6
|
|
|
7
7
|
export namespace VxeGlobalMenusHandles {
|
|
8
|
-
export type
|
|
9
|
-
|
|
8
|
+
export type MenusOption<D = VxeTableDataRow> = {
|
|
9
|
+
menuMethod?: (params: MenuMethodParams<D>, event: Event) => any
|
|
10
|
+
}
|
|
10
11
|
interface MenusParams<D = VxeTableDataRow> {
|
|
11
12
|
$grid: VxeGridConstructor<D> | null
|
|
12
13
|
$table: VxeTableConstructor<D> & VxeTablePrivateMethods<D>
|
|
13
14
|
}
|
|
14
|
-
export interface
|
|
15
|
+
export interface MenuMethodParams<D = VxeTableDataRow> extends MenusParams<D>, VxeGlobalRendererHandles.RenderCellParams<D> {
|
|
15
16
|
$grid: VxeGridConstructor<D> | null
|
|
16
17
|
$table: VxeTableConstructor<D> & VxeTablePrivateMethods<D>
|
|
17
18
|
$event: MouseEvent
|
|
18
19
|
menu: VxeTableDefines.MenuFirstOption | VxeTableDefines.MenuChildOption
|
|
19
20
|
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 请使用 MenusOption
|
|
24
|
+
* @deprecated
|
|
25
|
+
*/
|
|
26
|
+
export type MenusCallback = MenusOption
|
|
27
|
+
/**
|
|
28
|
+
* 请使用 MenuMethodParams
|
|
29
|
+
* @deprecated
|
|
30
|
+
*/
|
|
31
|
+
export interface MenusCallbackParams<D = VxeTableDataRow> extends MenuMethodParams<D> {}
|
|
20
32
|
}
|
|
21
33
|
|
|
22
34
|
/**
|
|
@@ -24,11 +36,11 @@ export namespace VxeGlobalMenusHandles {
|
|
|
24
36
|
*/
|
|
25
37
|
export interface VxeGlobalMenus {
|
|
26
38
|
mixin(options: {
|
|
27
|
-
[code: string]: VxeGlobalMenusHandles.
|
|
39
|
+
[code: string]: VxeGlobalMenusHandles.MenusOption<any> | ((params: VxeGlobalMenusHandles.MenuMethodParams<any>, event: Event) => any)
|
|
28
40
|
}): VxeGlobalMenus
|
|
29
41
|
has(code: string): boolean
|
|
30
|
-
get(code: string): VxeGlobalMenusHandles.
|
|
31
|
-
add(code: string,
|
|
42
|
+
get(code: string): VxeGlobalMenusHandles.MenusOption<any>
|
|
43
|
+
add(code: string, options: VxeGlobalMenusHandles.MenusOption<any> | ((params: VxeGlobalMenusHandles.MenuMethodParams<any>, event: Event) => any)): VxeGlobalMenus
|
|
32
44
|
delete(code: string): void
|
|
33
|
-
forEach(callback: (options: VxeGlobalMenusHandles.
|
|
45
|
+
forEach(callback: (options: VxeGlobalMenusHandles.MenusOption<any>, code: string) => void): void
|
|
34
46
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { VxeTableDefines, VxeTableDataRow } from '../table'
|
|
2
|
+
import { VxeFormDefines } from '../form'
|
|
3
|
+
|
|
4
|
+
/* eslint-disable no-use-before-define */
|
|
5
|
+
|
|
6
|
+
export namespace VxeGlobalValidatorsHandles {
|
|
7
|
+
export interface ValidatorsOptions<D = VxeTableDataRow> {
|
|
8
|
+
itemValidatorMethod?: ItemValidatorMethod
|
|
9
|
+
cellValidatorMethod?: CellValidatorMethod<D>
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ItemValidatorMethod = (params: ItemValidatorParams, ...args: any[]) => void | Error | Promise<any>
|
|
13
|
+
export type CellValidatorMethod<D = VxeTableDataRow> = (params: CellValidatorParams<D>, ...args: any[]) => void | Error | Promise<any>
|
|
14
|
+
export interface ItemValidatorParams extends VxeFormDefines.RuleValidatorParams {}
|
|
15
|
+
export interface CellValidatorParams<D = VxeTableDataRow> extends VxeTableDefines.RuleValidatorParams<D> {}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 全局快捷菜单
|
|
20
|
+
*/
|
|
21
|
+
export interface VxeGlobalValidators {
|
|
22
|
+
mixin(options: {
|
|
23
|
+
[code: string]: VxeGlobalValidatorsHandles.ValidatorsOptions<any>
|
|
24
|
+
}): VxeGlobalValidators
|
|
25
|
+
has(code: string): boolean
|
|
26
|
+
get(code: string): VxeGlobalValidatorsHandles.ValidatorsOptions<any>
|
|
27
|
+
add(code: string, callback: VxeGlobalValidatorsHandles.ValidatorsOptions<any>): VxeGlobalValidators
|
|
28
|
+
delete(code: string): void
|
|
29
|
+
forEach(callback: (options: VxeGlobalValidatorsHandles.ValidatorsOptions<any>, code: string) => void): void
|
|
30
|
+
}
|
package/types/validator.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { VXEComponent } from './component'
|
|
2
2
|
import { VxeTableDefines, VxeTableDataRow, VxeTableConstructor } from './table'
|
|
3
|
+
import { VxeGridConstructor } from './grid'
|
|
3
4
|
import { VxeColumnPropTypes } from './column'
|
|
4
5
|
|
|
5
6
|
/* eslint-disable no-use-before-define */
|
|
@@ -71,7 +72,7 @@ declare module './table' {
|
|
|
71
72
|
* 使用自定义校验函数,接收一个 Promise
|
|
72
73
|
* @param params 参数
|
|
73
74
|
*/
|
|
74
|
-
validator
|
|
75
|
+
validator?: string | ((params: RuleValidatorParams<D>) => void | Error | Promise<void>)
|
|
75
76
|
/**
|
|
76
77
|
* 提示消息
|
|
77
78
|
*/
|
|
@@ -83,6 +84,18 @@ declare module './table' {
|
|
|
83
84
|
*/
|
|
84
85
|
message?: string
|
|
85
86
|
}
|
|
87
|
+
export interface RuleValidatorParams<D = VxeTableDataRow> {
|
|
88
|
+
$table: VxeTableConstructor<D>
|
|
89
|
+
$grid: VxeGridConstructor<D> | null
|
|
90
|
+
cellValue: any
|
|
91
|
+
rule: ValidatorRule<D>
|
|
92
|
+
rules: ValidatorRule<D>[]
|
|
93
|
+
column: VxeTableDefines.ColumnInfo<D>
|
|
94
|
+
columnIndex: number
|
|
95
|
+
row: D
|
|
96
|
+
rowIndex: number
|
|
97
|
+
field: string
|
|
98
|
+
}
|
|
86
99
|
export interface ValidatorErrorParams<D = VxeTableDataRow> {
|
|
87
100
|
$table: VxeTableConstructor<D>
|
|
88
101
|
cellValue: any
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|