页面显示效果css
点击编辑显示效果react
因为项目频繁修改相关信息,并单独提交,为了方便,封装了一个简单的组件组件依赖antd(用到了图标和Input组件这不用能够省略)组件宽高显示为自适应控制父级大小便可,类型可无限扩展antd
/**ide
**/字体
调用代码
<ChangeInputui
fontSize='14px' //显示字体大小 iconColor="#5f68ea" //鼠标滑过icon图标颜色 inputWidth="400px" //输入框宽度,高度自适应 showSize="30" //可展现字数,溢出隐藏,滑过展现所有 amount="30" //字数限制长度 type="number" //可输入类型 handleOk={this.handleOk} //点击对号回调 value="17600381667" //传入内容 name="firmFax" //地段名
/>this
组件代码:url
import React from 'react';
import {Icon, Input, message, Tooltip} from 'antd';spa
export default class ChangeInput extends React.Component {code
constructor(props) { super(props); this.state = { showInput:false, //输入框显示隐藏 valueCon:'', //input框回显字段 } } //点击展现输入框 handleChangeClick = () => { this.setState({ showInput:true }) }; //点击关闭输入框 handleCloseClick = () => { this.setState({ showInput:!this.state.showInput }) }; //去空格 trim = (str) => { return str.replace(/^(\s|\u00A0)+/,'').replace(/(\s|\u00A0)+$/,''); }; //点击肯定按钮 handleAffirmClick = () => { //判断不为空 if(this.props.required&&this.trim(this.state.valueCon)===''||this.props.required&&this.trim(this.state.valueCon)==='-') { message.error(`此字段不能为空及特殊字符'-'`); return false } //判断为数字 if(this.props.type&&this.props.type==="number"&&isNaN(this.trim(this.state.valueCon))) { message.error(`请输入数字`); return false } //判断网址 let reg=/^\\{2}[\w-]+\\(([\w-][\w-\s]*[\w-]+[$$]?$)|([\w-][$$]?$))/; if(this.props.type&&this.props.type==="url"&&!reg.test(this.props.valueCon)){ message.error("这网址不是以http://https://开头,或者不是网址!"); return false } //判断字数长度 if(this.trim(this.state.valueCon).length>this.props.amount){ message.error(`字数不得超过${this.props.amount}个字`); return false } //回调肯定方法 let obj = {}; // obj.value = this.state.valueCon; // obj.label = this.props.name; obj[ this.props.name] = this.state.valueCon; //判断是否须要id if(this.props.idName){ obj[this.props.idName] = this.props.id; } this.props.handleOk(obj); //关闭输入框 this.setState({ showInput:this.props.isShow }) }; //input改变 handleChange = (e) => { console.log(e.target.value); this.setState({ valueCon:e.target.value }) }; componentDidMount() { this.setState({ valueCon:this.props.value, }) } handleDeleteClick = () =>{ let obj = {}; // obj.value = this.state.valueCon; // obj.label = this.props.name; obj[ this.props.name] = this.state.valueCon; //判断是否须要id if(this.props.idName){ obj[this.props.idName] = this.props.id; } this.props.handleDelete(obj); }; render() { const {value,fontSize,iconColor,inputWidth,showSize} = this.props; console.log(value) return ( <div> {!this.state.showInput? <div className="change_input"> <span className="change_input_name" style={{fontSize:fontSize}} > {showSize&&value.length>showSize? <Tooltip title={value}> <span>{value.slice(0,showSize)+"..."}</span> </Tooltip> :value } <Icon type="edit" style={{color:iconColor}} className="change_input_hide_change" onClick={this.handleChangeClick} /> {this.props.handleDelete&& <Icon type="delete" style={{color:iconColor}} className="change_input_hide_change" onClick={this.handleDeleteClick} /> } </span> </div> : <div className="write_input"> <div className="write_input_name" style={{width:inputWidth?inputWidth:'100px'}}> <Input placeholder="请输入" defaultValue={this.props.value==='-'?'':this.props.value} onChange={this.handleChange} style={{height:'25px',margin:'0'}} /> </div> <div className="write_input_hide" style={{color:iconColor}}> <Icon type="check-circle" className="write_input_hide_yes" onClick={this.handleAffirmClick}/> <Icon type="close-circle" className="write_input_hide_no" onClick={this.handleCloseClick} /> </div> </div> } </div> ) }
}
css代码
.change_input{
width: 100%;
//background: slateblue;
height: 100%;
overflow: hidden;
word-break: break-all;
.change_input_name{
//float: left; .change_input_hide_change{ margin-left: 5px; cursor: pointer; display: none; }
}
&:hover{
.change_input_name{ .change_input_hide_change{ display: inline-block; } }
}
}
.write_input{
height: 100%;
overflow: hidden;
.write_input_name{
//height: 98%; float: left;
}
.write_input_hide{
height: 100%; float: left; //background: seagreen; .write_input_hide_yes{ margin-left: 5px; } .write_input_hide_no{ margin-left: 5px; } //width: 100px;
}}