From 75bf88dbe418c24edf78f9202a97b9d50d1e6ed6 Mon Sep 17 00:00:00 2001 From: tjz <415800467@qq.com> Date: Thu, 8 Feb 2018 21:58:43 +0800 Subject: [PATCH] fix --- components/trigger/Popup.vue | 5 ++- components/trigger/index.vue | 4 +- components/vc-select/Select.vue | 65 ++++++++++++++++++--------------- 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/components/trigger/Popup.vue b/components/trigger/Popup.vue index 1d9961a46..e50d39a7f 100644 --- a/components/trigger/Popup.vue +++ b/components/trigger/Popup.vue @@ -22,6 +22,7 @@ export default { mask: PropTypes.bool, zIndex: PropTypes.number, popupClassName: PropTypes.any, + popupStyle: PropTypes.object.def({}), }, data () { return { @@ -99,7 +100,7 @@ export default { }, getPopupElement () { const { $props: props, $slots, $listeners, getTransitionName } = this - const { align, visible, prefixCls, animation } = props + const { align, visible, prefixCls, animation, popupStyle } = props const { mouseenter, mouseleave } = $listeners const className = this.getClassName(props.getClassNameFromAlign(align)) // const hiddenClassName = `${prefixCls}-hidden` @@ -115,7 +116,7 @@ export default { mouseleave: mouseleave || noop, }, ref: 'popupInstance', - style: { ...this.getZIndexStyle() }, + style: { ...this.getZIndexStyle(), ...popupStyle }, } const transitionProps = { props: Object.assign({ diff --git a/components/trigger/index.vue b/components/trigger/index.vue index 691d5c127..ae12fd8ea 100644 --- a/components/trigger/index.vue +++ b/components/trigger/index.vue @@ -340,12 +340,12 @@ export default { }, el: div, render () { - const { popupStyle, popupEvents, ...otherProps } = this.popupProps + const { popupEvents, ...otherProps } = this.popupProps const p = { props: otherProps, on: popupEvents, ref: 'popup', - style: popupStyle, + // style: popupStyle, } return ( <Popup diff --git a/components/vc-select/Select.vue b/components/vc-select/Select.vue index 662f761c4..0fe9c5dc4 100644 --- a/components/vc-select/Select.vue +++ b/components/vc-select/Select.vue @@ -31,6 +31,7 @@ import { } from './util' import SelectTrigger from './SelectTrigger' import { SelectPropTypes } from './PropTypes' +import { setTimeout } from 'timers' function noop () {} @@ -101,7 +102,7 @@ export default { } }, beforeMount () { - this.adjustOpenState() + // this.adjustOpenState() }, mounted () { this.$nextTick(() => { @@ -147,8 +148,8 @@ export default { }) }, beforeUpdate () { - console.log('beforeUpdate') - this.adjustOpenState() + // console.log('beforeUpdate') + // this.adjustOpenState() }, beforeDestroy () { this.clearFocusTime() @@ -200,12 +201,12 @@ export default { // combobox ignore onKeyDown (event) { - const { disabled, sOpen } = this + const { disabled, openStatus } = this if (disabled) { return } const keyCode = event.keyCode - if (sOpen && !this.getInputDOMNode()) { + if (openStatus && !this.getInputDOMNode()) { this.onInputKeydown(event) } else if (keyCode === KeyCode.ENTER || keyCode === KeyCode.DOWN) { this.setOpenState(true) @@ -214,7 +215,7 @@ export default { }, onInputKeydown (event) { - const { disabled, sOpen, sValue, $props } = this + const { disabled, openStatus, sValue, $props } = this if (disabled) { return } @@ -231,14 +232,14 @@ export default { return } if (keyCode === KeyCode.DOWN) { - if (!sOpen) { + if (!openStatus) { this.openIfHasChildren() event.preventDefault() event.stopPropagation() return } } else if (keyCode === KeyCode.ESC) { - if (sOpen) { + if (openStatus) { this.setOpenState(false) event.preventDefault() event.stopPropagation() @@ -246,7 +247,7 @@ export default { return } - if (sOpen) { + if (openStatus) { const menu = this.$refs.selectTriggerRef.getInnerMenu() if (menu && menu.onKeyDown(event, this.handleBackfill)) { event.preventDefault() @@ -322,7 +323,7 @@ export default { onArrowClick (e) { // e.stopPropagation() // if (!this.disabled) { - // this.setOpenState(!this.sOpen, !this.sOpen) + // this.setOpenState(!this.openStatus, !this.openStatus) // } }, @@ -544,10 +545,13 @@ export default { }, inputBlur (e) { // console.log(e.target) - this.onOuterBlur() - if (!this.disabled) { - this.setOpenState(!this.sOpen, !this.sOpen) - } + this.clearBlurTime() + this.blurTimer = setTimeout(() => { + this.onOuterBlur() + if (!this.disabled) { + this.setOpenState(!this.openStatus, !this.openStatus) + } + }, 10) }, _getInputElement () { const props = this.$props @@ -619,8 +623,8 @@ export default { }, setOpenState (open, needFocus) { - const { $props: props, $data: state } = this - if (state.sOpen === open) { + const { $props: props, openStatus } = this + if (openStatus === open) { this.maybeFocus(open, needFocus) return } @@ -919,7 +923,7 @@ export default { const { $props, showSearch } = this let options = [] // If hidden menu due to no options, then it should be calculated again - if (sOpen || this.hiddenForNoOptions) { + if (true || sOpen || this.hiddenForNoOptions) { options = this.renderFilterOptions() } this._options = options @@ -935,8 +939,9 @@ export default { this.hiddenForNoOptions = false } } + this.openStatus = sOpen return { - option: this._options, + options, open: sOpen, } }, @@ -1095,8 +1100,8 @@ export default { return sel }, - renderTopControlNode () { - const { sValue, sOpen, inputValue, $props: props } = this + renderTopControlNode (openStatus) { + const { sValue, inputValue, $props: props } = this const { choiceTransitionName, prefixCls, @@ -1116,7 +1121,7 @@ export default { if (!showSearch) { showSelectedValue = true } else { - if (sOpen) { + if (openStatus) { showSelectedValue = !inputValue if (showSelectedValue) { opacity = 0.4 @@ -1149,7 +1154,7 @@ export default { class={`${prefixCls}-search ${prefixCls}-search--inline`} key='input' style={{ - display: sOpen ? 'block' : 'none', + display: openStatus ? 'block' : 'none', }} > {this._getInputElement()} @@ -1230,7 +1235,7 @@ export default { if (isMultipleOrTags(props) && choiceTransitionName) { const transitionProps = getTransitionProps(choiceTransitionName, { tag: 'ul', - afterLeave: this.onChoiceAnimationLeave, + // beforeEnter: this.onChoiceAnimationLeave, }) innerNode = ( <transition-group @@ -1299,11 +1304,11 @@ export default { render () { const props = this.$props const multiple = isMultipleOrTags(props) - const { disabled, prefixCls, sOpen, inputValue, sValue, $listeners } = this + const { options, open: openStatus } = this.getOptionsAndOpenStatus() + const { disabled, prefixCls, inputValue, sValue, $listeners } = this const { mouseenter = noop, mouseleave = noop, popupScroll = noop } = $listeners - const ctrlNode = this.renderTopControlNode() + const ctrlNode = this.renderTopControlNode(openStatus) let extraSelectionProps = {} - const options = this._options if (!isMultipleOrTagsOrCombobox(props)) { extraSelectionProps = { onKeyDown: this.onKeyDown, @@ -1312,8 +1317,8 @@ export default { } const rootCls = { [prefixCls]: 1, - [`${prefixCls}-open`]: sOpen, - [`${prefixCls}-focused`]: sOpen || !!this._focused, + [`${prefixCls}-open`]: openStatus, + [`${prefixCls}-focused`]: openStatus || !!this._focused, [`${prefixCls}-combobox`]: isCombobox(props), [`${prefixCls}-disabled`]: disabled, [`${prefixCls}-enabled`]: !disabled, @@ -1336,7 +1341,7 @@ export default { options={options} multiple={multiple} disabled={disabled} - visible={sOpen} + visible={openStatus} inputValue={inputValue} value={sValue} firstActiveValue={props.firstActiveValue} @@ -1366,7 +1371,7 @@ export default { role='combobox' aria-autocomplete='list' aria-haspopup='true' - aria-expanded={sOpen} + aria-expanded={openStatus} {...extraSelectionProps} // onClick={this.stopPropagation} >