import React, { Component } from 'react' import { StyleSheet, Text, TouchableOpacity, View, TextInput, Image, } from 'react-native' import PropTypes from 'prop-types' import countNumSubRed from './countNumSubRed.png' import countNumAddRed from './countNumAddRed.png' import countNumSubGray from './countNumSubGray.png' export default class CountNum extends Component { //初始化 constructor(props) { super(props) let defaultValue = 1 if (this.props.defaultValue && this.props.defaultValue > 0) { defaultValue = this.props.defaultValue } this.state = { totalnum: defaultValue, } this._callback = this._callback.bind(this) this.maxValue = props.maxValue this.minValue = props.minValue // this.unitScale = props.unitScale } static propTypes = { size: PropTypes.number, touchSpan: PropTypes.number, touchDisabledAdd: PropTypes.bool, touchDisabledSub: PropTypes.bool, } static defaultProps = { size: 25, touchSpan: 1, touchDisabledAdd: false, touchDisabledSub: false, } componentWillReceiveProps(nextProps) { // if ((nextProps.maxValue !== this.props.maxValue) || (nextProps.minValue !== this.props.minValue)) { this.maxValue = nextProps.maxValue this.minValue = nextProps.minValue // this.state.totalnum = nextProps.defaultValue this.setState({ totalnum: nextProps.defaultValue, }) // } } _callback(totalnum) { if (this.props.callback) { this.props.callback(totalnum) } } //处理数量和金额变化 _changeNumAndSum(totalnum) { this.setState({ totalnum: totalnum, }) this._callback(totalnum) } //数量输入框处理 _getInputContent(InputText) { // if (!InputText) { // return this.setState({ totalnum: InputText }) // } if (InputText == this.state.totalnum) return if (parseFloat(InputText) > this.maxValue) { InputText = this.minValue || 1 } this.state.totalnum = InputText // this._changeNumAndSum(InputText); } //点击加号 _onPressIncrease(totalnum) { let num = (totalnum ? parseFloat(totalnum) : parseFloat(this.props.defaultValue || 1)) + this.props.touchSpan if (num > 999999) { num = 999999 } if (num > this.maxValue) { num = this.maxValue } this._changeNumAndSum(num) } //点击减号 _onPressDecrease(totalnum) { let num = (totalnum ? parseFloat(totalnum) : parseFloat(this.props.defaultValue || 1)) - this.props.touchSpan if (this.minValue != null || this.minValue != undefined) { if (num < this.minValue) { num = this.minValue } } else { if (num < 1) { num = 1 } } this._changeNumAndSum(num) } _handlerNull() { if (!this.state.totalnum) { // return this._changeNumAndSum(this.minValue || 1) return } this._changeNumAndSum(this.state.totalnum) } render() { let fontSize this.props.size >= 30 ? (fontSize = 14) : (fontSize = 12) if (this.props.isDesign) { return ( {/* 减号 */} this._onPressDecrease(this.state.totalnum)} style={{ justifyContent: 'center', height: this.props.size, width: this.props.size, // flex: 1, }} > 1 ? countNumSubRed : countNumSubGray } resizeMode="cover" /> {/* 输入框 */} (this._ip = ip)} style={{ fontSize: fontSize, color: '#333333', padding: 0, backgroundColor: '#FFF', textAlign: 'center', height: 20, }} // defaultValue={1.toString()} // maxLength={6} underlineColorAndroid="transparent" keyboardType="numeric" blurOnSubmit={true} onBlur={() => this._handlerNull()} onChangeText={text => this._getInputContent(text)} //加个空的字符串以便将数字转换成字符串显示 defaultValue={this.state.totalnum + ''} // value={this.state.totalnum + ''} editable={this.props.editable} /> {/* 加号 */} this._onPressIncrease(this.state.totalnum)} style={{ justifyContent: 'center', height: this.props.size, width: this.props.size, }} > {this.props.defaultScale ? ( {this.props.defaultScale} ) : null} ) } else { return ( {/* 减号 */} this._onPressDecrease(this.state.totalnum)} style={{ justifyContent: 'center', height: this.props.size, width: this.props.size, backgroundColor: '#FFF', // flex: 1, borderWidth: 1, borderColor: '#DDDDDD', borderTopLeftRadius: 3, borderBottomLeftRadius: 3, }} > - {/* 输入框 */} (this._ip = ip)} style={{ fontSize: fontSize, color: '#333333', padding: 0, backgroundColor: '#FFF', textAlign: 'center', height: 20, }} // defaultValue={1.toString()} // maxLength={6} underlineColorAndroid="transparent" keyboardType="numeric" blurOnSubmit={true} onBlur={() => this._handlerNull()} onChangeText={text => this._getInputContent(text)} //加个空的字符串以便将数字转换成字符串显示 defaultValue={this.state.totalnum + ''} // value={this.state.totalnum + ''} editable={this.props.editable} /> {/* 加号 */} this._onPressIncrease(this.state.totalnum)} style={{ justifyContent: 'center', height: this.props.size, width: this.props.size, backgroundColor: '#FFF', // flex: 1, borderWidth: 1, borderColor: '#DDDDDD', borderTopRightRadius: 3, borderBottomRightRadius: 3, }} > + {this.props.defaultScale ? ( {this.props.defaultScale} ) : null} ) } } }