From 79e1455e4ba4f4a7d04a483dda1a354e53921a69 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 04 十一月 2020 19:04:14 +0800 Subject: [PATCH] 2020-11-04 --- src/menu/stylecontroller/styleInput/index.jsx | 103 +++++++++++++++++++++++++++++++++------------------ 1 files changed, 66 insertions(+), 37 deletions(-) diff --git a/src/menu/stylecontroller/styleInput/index.jsx b/src/menu/stylecontroller/styleInput/index.jsx index 3bf883c..a7d3df9 100644 --- a/src/menu/stylecontroller/styleInput/index.jsx +++ b/src/menu/stylecontroller/styleInput/index.jsx @@ -1,9 +1,11 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Menu, Popover, Input } from 'antd' +import { Select, Input } from 'antd' import './index.scss' + +const { Option } = Select class StyleInput extends Component { static propTpyes = { @@ -15,14 +17,14 @@ state = { value: '', - parseVal: '', - width: '', + unit: '', options: null } UNSAFE_componentWillMount () { const { defaultValue, value, options } = this.props let val = '' + let unit = '' let _options = ['px'] if (value !== undefined) { @@ -35,8 +37,18 @@ _options = options } - if (val === 'auto') { - val = '' + unit = _options[0] + + if (val) { + if (val.indexOf('px') > -1) { + unit = 'px' + } else if (val.indexOf('%') > -1) { + unit = '%' + } else if (val.indexOf('vw') > -1) { + unit = 'vw' + } else if (val.indexOf('vh') > -1) { + unit = 'vh' + } } let _val = parseInt(val) @@ -45,7 +57,7 @@ _val = '' } - this.setState({value: val, options: _options, parseVal: _val}) + this.setState({value: _val, options: _options, unit}) } shouldComponentUpdate (nextProps, nextState) { @@ -54,13 +66,32 @@ UNSAFE_componentWillReceiveProps(nextProps) { if (nextProps.value !== undefined && nextProps.value !== this.state.value) { - this.setState({ value: nextProps.value }) + let val = nextProps.value + let unit = this.state.unit + + if (val) { + if (val.indexOf('px') > -1) { + unit = 'px' + } else if (val.indexOf('%') > -1) { + unit = '%' + } else if (val.indexOf('vw') > -1) { + unit = 'vw' + } else if (val.indexOf('vh') > -1) { + unit = 'vh' + } + } + + let _val = parseInt(val) + + if (isNaN(_val)) { + _val = '' + } + + this.setState({value: _val, unit}) } } - componentDidMount () { - this.setState({width: (this.input.offsetWidth - 10) + 'px'}) - } + componentDidMount () {} /** * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆 @@ -72,49 +103,47 @@ } changeValue = (e) => { + const { unit } = this.state let val = e.target.value let _val = parseInt(val) - + if (isNaN(_val)) { _val = '' } this.setState({ - value: val, - parseVal: _val - }) - - if (!val && this.props.onChange) { - this.props.onChange('0px') - } - } - - submitValue = (val) => { - this.setState({ - value: val + value: _val, }) if (this.props.onChange) { - this.props.onChange(val) + if (!_val) { + this.props.onChange('0px') + } else { + this.props.onChange(`${_val}${unit}`) + } + } + } + + changeUnit = (val) => { + const { value } = this.state + + this.setState({unit: val}) + if (value && this.props.onChange) { + this.props.onChange(`${value}${val}`) } } render () { - const { value, options, parseVal, width } = this.state + const { value, options, unit } = this.state return ( - <Popover placement="bottom" overlayClassName="style-input-popover" content={ - parseVal !== '' ? - <Menu> - {options.map(option => ( - <Menu.Item key={option} style={{width: width}} onClick={() => this.submitValue(`${parseVal}${option}`)}>{parseVal} {option}</Menu.Item> - ))} - </Menu> : null - } trigger="hover"> - <div ref={dom => { this.input = dom }} style={{lineHeight: '32px'}}> - <Input value={value} onChange={this.changeValue}/> - </div> - </Popover> + <div className="style-input-box"> + <Input value={value} addonAfter={ + <Select value={unit} onChange={this.changeUnit}> + {options.map(item => <Option key={item} value={item}>{item}</Option>)} + </Select> + } onChange={this.changeValue}/> + </div> ) } } -- Gitblit v1.8.0