diff --git a/examples/api/table.js b/examples/api/table.js
index c1633a1c4..6055bae25 100644
--- a/examples/api/table.js
+++ b/examples/api/table.js
@@ -2083,7 +2083,7 @@ const apis = [
},
{
name: 'extendSetMethod',
- desc: '只对 extendByCopy 启用后有效,重写单元格扩展区域赋值的方法',
+ desc: '只对 extendByCopy | extendByCalc 启用后有效,重写单元格扩展区域赋值的方法',
version: 'pro',
type: '({ cellValue, row, column, rows, cols, targetValues, targetRows, targetCols, extendRows, extendCols, direction }) => void',
enum: '',
@@ -2092,12 +2092,21 @@ const apis = [
},
{
name: 'beforeExtendSetMethod',
- desc: '只对 extendByCopy 启用后有效,自定义单元格扩展区域赋值之前的方法,可以通过返回 false 阻止扩展行为',
+ desc: '只对 extendByCopy | extendByCalc 启用后有效,自定义单元格扩展区域赋值之前的方法,可以通过返回 false 阻止扩展区域赋值行为',
version: 'pro',
type: '({ rows, cols, targetValues, targetRows, targetCols, extendRows, extendCols, direction }) => boolean',
enum: '',
defVal: '',
list: []
+ },
+ {
+ name: 'afterExtendSetMethod',
+ desc: '只对 extendByCopy | extendByCalc 启用后有效,自定义单元格扩展区域赋值之后的方法',
+ version: 'pro',
+ type: '(params: { rows, cols, targetValues, targetRows, targetCols, extendValues, extendRows, extendCols, direction }) => void',
+ enum: '',
+ defVal: '',
+ list: []
}
]
},
@@ -3160,7 +3169,7 @@ const apis = [
version: 'pro',
type: '',
enum: '',
- defVal: '{ row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, cell, $event}',
+ defVal: '{ row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, cell, targetRows, targetCols, $event}',
list: []
},
{
@@ -3169,7 +3178,7 @@ const apis = [
version: 'pro',
type: '',
enum: '',
- defVal: '{ rows, cols, $event}',
+ defVal: '{ rows, cols, targetRows, targetCols, returnValue, $event}',
list: []
}
]
diff --git a/examples/views/input/Input.vue b/examples/views/input/Input.vue
index e1c128016..29d3d75ac 100644
--- a/examples/views/input/Input.vue
+++ b/examples/views/input/Input.vue
@@ -32,7 +32,7 @@
-
+
@@ -229,7 +229,7 @@ export default {
-
+
diff --git a/examples/views/modal/Modal.vue b/examples/views/modal/Modal.vue
index 8fec34360..a3253efd2 100644
--- a/examples/views/modal/Modal.vue
+++ b/examples/views/modal/Modal.vue
@@ -94,8 +94,8 @@
@@ -110,8 +110,8 @@
@@ -176,7 +176,6 @@
show-overflow
auto-resize
height="auto"
- :sync-resize="value10"
:data="tableData">
@@ -199,7 +198,6 @@
show-overflow
auto-resize
height="auto"
- :sync-resize="value11"
:pager-config="tablePage"
:proxy-config="tableProxy"
:columns="tableColumn"
@@ -404,8 +402,8 @@ export default {
@@ -420,8 +418,8 @@ export default {
@@ -486,7 +484,6 @@ export default {
show-overflow
auto-resize
height="auto"
- :sync-resize="value10"
:data="tableData">
@@ -509,7 +506,6 @@ export default {
show-overflow
auto-resize
height="auto"
- :sync-resize="value11"
:pager-config="tablePage"
:proxy-config="tableProxy"
:columns="tableColumn"
diff --git a/examples/views/table/advanced/Event.vue b/examples/views/table/advanced/Event.vue
index 706e780a8..7e1c451f6 100644
--- a/examples/views/table/advanced/Event.vue
+++ b/examples/views/table/advanced/Event.vue
@@ -11,7 +11,7 @@
:menu-config="{}"
:data="tableData"
@header-cell-click="headerCellClickEvent"
- @header-cell-dblclick="headerCellDBLClickEvent"
+ @header-cell-dblclick="headerCellDblclickEvent"
@header-cell-menu="headerCellContextMenuEvent"
@cell-click="cellClickEvent"
@cell-dblclick="cellDBLClickEvent"
@@ -61,7 +61,7 @@ export default {
:menu-config="{}"
:data="tableData"
@header-cell-click="headerCellClickEvent"
- @header-cell-dblclick="headerCellDBLClickEvent"
+ @header-cell-dblclick="headerCellDblclickEvent"
@header-cell-menu="headerCellContextMenuEvent"
@cell-click="cellClickEvent"
@cell-dblclick="cellDBLClickEvent"
@@ -97,7 +97,7 @@ export default {
headerCellClickEvent ({ column }) {
console.log(\`表头单元格点击\${column.title}\`)
},
- headerCellDBLClickEvent ({ column }) {
+ headerCellDblclickEvent ({ column }) {
console.log(\`表头单元格双击\${column.title}\`)
},
headerCellContextMenuEvent ({ column }) {
@@ -131,7 +131,7 @@ export default {
headerCellClickEvent ({ column }) {
console.log(`表头单元格点击${column.title}`)
},
- headerCellDBLClickEvent ({ column }) {
+ headerCellDblclickEvent ({ column }) {
console.log(`表头单元格双击${column.title}`)
},
headerCellContextMenuEvent ({ column }) {
diff --git a/package.json b/package.json
index 98082af07..758590745 100644
--- a/package.json
+++ b/package.json
@@ -88,7 +88,7 @@
"vxe-table-plugin-virtual-tree": "0.6.7",
"xe-ajax": "^4.0.5",
"xe-clipboard": "^1.10.1",
- "xe-utils": "^3.1.13",
+ "xe-utils": "^3.1.14",
"xlsx": "^0.16.8"
},
"peerDependencies": {
diff --git a/packages/header/src/header.js b/packages/header/src/header.js
index edf7a02e5..ad3554721 100644
--- a/packages/header/src/header.js
+++ b/packages/header/src/header.js
@@ -125,7 +125,7 @@ export default {
thOns.click = evnt => $xetable.triggerHeaderCellClickEvent(evnt, params)
}
if (tableListeners['header-cell-dblclick']) {
- thOns.dblclick = evnt => $xetable.triggerHeaderCellDBLClickEvent(evnt, params)
+ thOns.dblclick = evnt => $xetable.triggerHeaderCellDblclickEvent(evnt, params)
}
// 按下事件处理
if (mouseConfig) {
diff --git a/packages/table/src/body.js b/packages/table/src/body.js
index d94ebbc80..dcf157b20 100644
--- a/packages/table/src/body.js
+++ b/packages/table/src/body.js
@@ -151,7 +151,7 @@ function renderColumn (h, _vm, $xetable, $seq, seq, rowid, fixedType, rowLevel,
// 双击事件处理
if (triggerDblclick || tableListeners['cell-dblclick']) {
tdOns.dblclick = evnt => {
- $xetable.triggerCellDBLClickEvent(evnt, params)
+ $xetable.triggerCellDblclickEvent(evnt, params)
}
}
// 合并行或列
diff --git a/packages/table/src/methods.js b/packages/table/src/methods.js
index 0086d9a71..a4c263d11 100644
--- a/packages/table/src/methods.js
+++ b/packages/table/src/methods.js
@@ -2992,7 +2992,7 @@ const Methods = {
}
return this.$nextTick()
},
- triggerHeaderCellDBLClickEvent (evnt, params) {
+ triggerHeaderCellDblclickEvent (evnt, params) {
this.emitEvent('header-cell-dblclick', Object.assign({ cell: evnt.currentTarget }, params), evnt)
},
getCurrentColumn () {
@@ -3107,7 +3107,7 @@ const Methods = {
* 列双击点击事件
* 如果是双击模式,则激活为编辑状态
*/
- triggerCellDBLClickEvent (evnt, params) {
+ triggerCellDblclickEvent (evnt, params) {
const { editStore, editConfig, editOpts } = this
const { actived } = editStore
const cell = evnt.currentTarget
diff --git a/packages/validator/src/mixin.js b/packages/validator/src/mixin.js
index 47f19512f..b7a4eceff 100644
--- a/packages/validator/src/mixin.js
+++ b/packages/validator/src/mixin.js
@@ -1,4 +1,5 @@
import XEUtils from 'xe-utils'
+import { eqCellNull } from '../../table/src/util'
import { UtilTools, DomTools } from '../../tools'
/**
@@ -28,6 +29,29 @@ class Rule {
}
}
+function validErrorCellValue (rule, cellValue) {
+ const { type, min, max, pattern } = rule
+ const isNumType = type === 'number'
+ const numVal = isNumType ? XEUtils.toNumber(cellValue) : XEUtils.getSize(cellValue)
+ // 判断数值
+ if (isNumType) {
+ return isNaN(cellValue)
+ }
+ // 如果存在 min,判断最小值
+ if (!XEUtils.eqNull(min)) {
+ return numVal < XEUtils.toNumber(min)
+ }
+ // 如果存在 max,判断最大值
+ if (!XEUtils.eqNull(max)) {
+ return numVal > XEUtils.toNumber(max)
+ }
+ // 如果存在 pattern,正则校验
+ if (pattern) {
+ return (XEUtils.isRegExp(pattern) ? pattern : new RegExp(pattern)).test(cellValue)
+ }
+ return false
+}
+
export default {
methods: {
/**
@@ -195,7 +219,7 @@ export default {
* validator=Function({ cellValue, rule, rules, row, column, rowIndex, columnIndex }) 自定义校验,接收一个 Promise
* trigger=blur|change 触发方式(除非特殊场景,否则默认为空就行)
*/
- validCellRules (type, row, column, val) {
+ validCellRules (validType, row, column, val) {
const { editRules } = this
const { property } = column
const errorRules = []
@@ -205,7 +229,8 @@ export default {
if (rules) {
const cellValue = XEUtils.isUndefined(val) ? XEUtils.get(row, property) : val
rules.forEach(rule => {
- if (type === 'all' || !rule.trigger || type === rule.trigger) {
+ const { type, trigger, required } = rule
+ if (validType === 'all' || !trigger || validType === trigger) {
if (XEUtils.isFunction(rule.validator)) {
const customValid = rule.validator({
cellValue,
@@ -220,27 +245,21 @@ export default {
if (customValid) {
if (XEUtils.isError(customValid)) {
this.validRuleErr = true
- errorRules.push(new Rule({ type: 'custom', trigger: rule.trigger, message: customValid.message, rule: new Rule(rule) }))
+ errorRules.push(new Rule({ type: 'custom', trigger, message: customValid.message, rule: new Rule(rule) }))
} else if (customValid.catch) {
// 如果为异步校验(注:异步校验是并发无序的)
syncVailds.push(
customValid.catch(e => {
this.validRuleErr = true
- errorRules.push(new Rule({ type: 'custom', trigger: rule.trigger, message: e && e.message ? e.message : rule.message, rule: new Rule(rule) }))
+ errorRules.push(new Rule({ type: 'custom', trigger, message: e && e.message ? e.message : rule.message, rule: new Rule(rule) }))
})
)
}
}
} else {
- const isNumType = rule.type === 'number'
- const isArrType = rule.type === 'array'
- const numVal = isNumType ? XEUtils.toNumber(cellValue) : XEUtils.getSize(cellValue)
- if ((rule.required && (isArrType ? (!XEUtils.isArray(cellValue) || !cellValue.length) : (cellValue === null || cellValue === undefined || cellValue === ''))) ||
- (isNumType && isNaN(cellValue)) ||
- (!isNaN(rule.min) && numVal < parseFloat(rule.min)) ||
- (!isNaN(rule.max) && numVal > parseFloat(rule.max)) ||
- (rule.pattern && !(rule.pattern.test ? rule.pattern : new RegExp(rule.pattern)).test(cellValue))
- ) {
+ const isArrType = type === 'array'
+ const hasEmpty = isArrType ? (!XEUtils.isArray(cellValue) || !cellValue.length) : eqCellNull(cellValue)
+ if (required ? (hasEmpty || validErrorCellValue(rule, cellValue)) : (!hasEmpty && validErrorCellValue(rule, cellValue))) {
this.validRuleErr = true
errorRules.push(new Rule(rule))
}
diff --git a/styles/input.scss b/styles/input.scss
index d5c068b2c..4d1d25685 100644
--- a/styles/input.scss
+++ b/styles/input.scss
@@ -129,7 +129,8 @@ $iconWidth: 1.6em;
&.type--datetime,
&.type--week,
&.type--month,
- &.type--year {
+ &.type--year,
+ &.type--time {
.vxe-input--inner {
padding-right: #{$iconWidth + 0.2em};
}
@@ -149,7 +150,8 @@ $iconWidth: 1.6em;
&.type--datetime,
&.type--week,
&.type--month,
- &.type--year {
+ &.type--year,
+ &.type--time {
.vxe-input--inner {
padding-right: #{$iconWidth * 2};
}
diff --git a/styles/modal.scss b/styles/modal.scss
index 4c76ef9e5..68d8f8567 100644
--- a/styles/modal.scss
+++ b/styles/modal.scss
@@ -145,12 +145,6 @@
cursor: move;
}
}
- }
-
- &.type--modal {
- .vxe-modal--header {
- padding: 0.6em 4.6em 0.6em 1em;
- }
.vxe-modal--body {
overflow: auto;
.vxe-modal--content {
@@ -158,6 +152,12 @@
}
}
}
+
+ &.type--modal {
+ .vxe-modal--header {
+ padding: 0.6em 4.6em 0.6em 1em;
+ }
+ }
&.type--alert,
&.type--confirm {
.vxe-modal--status-wrapper {