diff --git a/components/apolloTable/component/base/edit/text-select/index.tsx b/components/apolloTable/component/base/edit/text-select/index.tsx index b15e41db59f15f284bb8e427dce974821ff3139f..e9117bb1e2e3a5b02c6fc7a299bcdfacd5da16c5 100644 --- a/components/apolloTable/component/base/edit/text-select/index.tsx +++ b/components/apolloTable/component/base/edit/text-select/index.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useRef } from 'react'; import InputSearch from '../../extra/dataEntry/textSelect'; import { ApolloInputSearchProps } from '../editInterface'; import { antiAssign } from '../../../../utils/utils'; @@ -26,13 +26,14 @@ export const ApolloInputSearch = (props: ApolloInputSearchProps) => { 'getInstanceDetail', ]); const [curValue, setCurValue] = useState(value); + const isOpen = useRef(null); const changeValue = (value: any) => { setCurValue(value); if (typeof onChange === 'function') { onChange(value, value); } - // 表格中的单选,选择后直接触发更新 - if (origin === 'table' && selfProps.mode !== 'multiple') { + // 弹框关闭时触发修改 + if (origin === 'table' && selfProps.mode !== 'multiple' && !isOpen.current) { onBlur(value); } }; @@ -41,6 +42,12 @@ export const ApolloInputSearch = (props: ApolloInputSearchProps) => { onEmitChange(value, value); } }; + const onDropdownVisibleChange = (open: boolean) => { + isOpen.current = open; + }; + if (origin === 'table') { + selfProps.onDropdownVisibleChange = onDropdownVisibleChange; + } return ( { }; onResetValue = (searchStr) => { + if (!searchStr) return undefined; return { value: '', label: searchStr }; }; @@ -142,23 +142,19 @@ class TextSelect extends React.Component { } }; - onClear = () => { - const { tempVisible } = this.state; - const searchStr = ''; - const selected = this.onResetValue(searchStr); - this.setState({ searchStr, selected }, () => { - if (tempVisible) { - this.fetch(searchStr); - } - this.onChange(selected); - }); - }; - onVisibleChange = (tempVisible) => { const { onDropdownVisibleChange } = this.props; + const { selected } = this.state; this.setState({ tempVisible }); if (onDropdownVisibleChange) { onDropdownVisibleChange(tempVisible); + if (!tempVisible) { + // 清空或者为空对象时,强制置空 + if (!selected || selected.length === 0 || (!selected.label || !selected.value || !selected.key)) { + return this.onChange(undefined); + } + this.onChange(selected); + } } };