diff --git a/packages/table/editor.vue b/packages/table/editor.vue index f3c0171..f228924 100644 --- a/packages/table/editor.vue +++ b/packages/table/editor.vue @@ -16,7 +16,11 @@ function isItemRequired(context, config) { let rules = editorRules[config.prop] || []; const match = editorProps.items.find(i => i.prop === config.prop); if (match && match.rules) { - rules = match.rules; + let matchRules = match.rules; + if (typeof match.rules === 'function') { + matchRules = match.rules({}); + } + rules = matchRules; } if (rules.length === 0) { return false; @@ -74,7 +78,7 @@ function cellRender(h, context, item) { } // 表单项渲染 -function formItemRender(h, context, item, scope, children) { +function formItemRender(h, context, item, value, scope, children) { // 渲染函数配置 const contentProps = context.props || {}; // 编辑器统一配置 @@ -84,10 +88,15 @@ function formItemRender(h, context, item, scope, children) { formItemProp.push(scope.$index); formItemProp.push(item.prop); formItemProp = formItemProp.join('.'); + // 处理校验规则 + let itemRules = item.rules; + if (typeof item.rules === 'function') { + itemRules = item.rules({ item, value, index: scope.$index, ...scope }); + } return h( editorProps.formItem || 'el-form-item', { - props: { prop: formItemProp, rules: item.rules || editorRules[item.prop], inlineMessage: true }, + props: { prop: formItemProp, rules: itemRules || editorRules[item.prop], inlineMessage: true }, }, children, ); @@ -166,7 +175,7 @@ function editorRender(h, context, item) { } // 需要校验时外层嵌套校验组件 if (editorProps.validate) { - return formItemRender(h, context, item, scope, [vnode]); + return formItemRender(h, context, item, value, scope, [vnode]); } return vnode; }; -- libgit2 0.21.0