|
|
|
@ -74,6 +74,49 @@ class AdvancedForm extends PureComponent { |
|
|
|
window.removeEventListener('resize', this.resizeFooterToolbar); |
|
|
|
} |
|
|
|
|
|
|
|
getErrorInfo = () => { |
|
|
|
const { |
|
|
|
form: { getFieldsError }, |
|
|
|
} = this.props; |
|
|
|
const errors = getFieldsError(); |
|
|
|
const errorCount = Object.keys(errors).filter(key => errors[key]).length; |
|
|
|
if (!errors || errorCount === 0) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
const scrollToField = fieldKey => { |
|
|
|
const labelNode = document.querySelector(`label[for="${fieldKey}"]`); |
|
|
|
if (labelNode) { |
|
|
|
labelNode.scrollIntoView(true); |
|
|
|
} |
|
|
|
}; |
|
|
|
const errorList = Object.keys(errors).map(key => { |
|
|
|
if (!errors[key]) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
return ( |
|
|
|
<li key={key} className={styles.errorListItem} onClick={() => scrollToField(key)}> |
|
|
|
<Icon type="cross-circle-o" className={styles.errorIcon} /> |
|
|
|
<div className={styles.errorMessage}>{errors[key][0]}</div> |
|
|
|
<div className={styles.errorField}>{fieldLabels[key]}</div> |
|
|
|
</li> |
|
|
|
); |
|
|
|
}); |
|
|
|
return ( |
|
|
|
<span className={styles.errorIcon}> |
|
|
|
<Popover |
|
|
|
title="表单校验信息" |
|
|
|
content={errorList} |
|
|
|
overlayClassName={styles.errorPopover} |
|
|
|
trigger="click" |
|
|
|
getPopupContainer={trigger => trigger.parentNode} |
|
|
|
> |
|
|
|
<Icon type="exclamation-circle" /> |
|
|
|
</Popover> |
|
|
|
{errorCount} |
|
|
|
</span> |
|
|
|
); |
|
|
|
}; |
|
|
|
|
|
|
|
resizeFooterToolbar = () => { |
|
|
|
requestAnimationFrame(() => { |
|
|
|
const sider = document.querySelectorAll('.ant-layout-sider')[0]; |
|
|
|
@ -87,60 +130,29 @@ class AdvancedForm extends PureComponent { |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
render() { |
|
|
|
const { form, dispatch, submitting } = this.props; |
|
|
|
const { getFieldDecorator, validateFieldsAndScroll, getFieldsError } = form; |
|
|
|
const validate = () => { |
|
|
|
validateFieldsAndScroll((error, values) => { |
|
|
|
if (!error) { |
|
|
|
// submit the values
|
|
|
|
dispatch({ |
|
|
|
type: 'form/submitAdvancedForm', |
|
|
|
payload: values, |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
|
const errors = getFieldsError(); |
|
|
|
const getErrorInfo = () => { |
|
|
|
const errorCount = Object.keys(errors).filter(key => errors[key]).length; |
|
|
|
if (!errors || errorCount === 0) { |
|
|
|
return null; |
|
|
|
validate = () => { |
|
|
|
const { |
|
|
|
form: { validateFieldsAndScroll }, |
|
|
|
dispatch, |
|
|
|
} = this.props; |
|
|
|
validateFieldsAndScroll((error, values) => { |
|
|
|
if (!error) { |
|
|
|
// submit the values
|
|
|
|
dispatch({ |
|
|
|
type: 'form/submitAdvancedForm', |
|
|
|
payload: values, |
|
|
|
}); |
|
|
|
} |
|
|
|
const scrollToField = fieldKey => { |
|
|
|
const labelNode = document.querySelector(`label[for="${fieldKey}"]`); |
|
|
|
if (labelNode) { |
|
|
|
labelNode.scrollIntoView(true); |
|
|
|
} |
|
|
|
}; |
|
|
|
const errorList = Object.keys(errors).map(key => { |
|
|
|
if (!errors[key]) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
return ( |
|
|
|
<li key={key} className={styles.errorListItem} onClick={() => scrollToField(key)}> |
|
|
|
<Icon type="cross-circle-o" className={styles.errorIcon} /> |
|
|
|
<div className={styles.errorMessage}>{errors[key][0]}</div> |
|
|
|
<div className={styles.errorField}>{fieldLabels[key]}</div> |
|
|
|
</li> |
|
|
|
); |
|
|
|
}); |
|
|
|
return ( |
|
|
|
<span className={styles.errorIcon}> |
|
|
|
<Popover |
|
|
|
title="表单校验信息" |
|
|
|
content={errorList} |
|
|
|
overlayClassName={styles.errorPopover} |
|
|
|
trigger="click" |
|
|
|
getPopupContainer={trigger => trigger.parentNode} |
|
|
|
> |
|
|
|
<Icon type="exclamation-circle" /> |
|
|
|
</Popover> |
|
|
|
{errorCount} |
|
|
|
</span> |
|
|
|
); |
|
|
|
}; |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
render() { |
|
|
|
const { |
|
|
|
form: { getFieldDecorator }, |
|
|
|
submitting, |
|
|
|
} = this.props; |
|
|
|
const { width } = this.state; |
|
|
|
|
|
|
|
return ( |
|
|
|
<PageHeaderWrapper |
|
|
|
title="高级表单" |
|
|
|
@ -298,8 +310,8 @@ class AdvancedForm extends PureComponent { |
|
|
|
})(<TableForm />)} |
|
|
|
</Card> |
|
|
|
<FooterToolbar style={{ width }}> |
|
|
|
{getErrorInfo()} |
|
|
|
<Button type="primary" onClick={validate} loading={submitting}> |
|
|
|
{this.getErrorInfo()} |
|
|
|
<Button type="primary" onClick={this.validate} loading={submitting}> |
|
|
|
提交 |
|
|
|
</Button> |
|
|
|
</FooterToolbar> |
|
|
|
|