123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- import React,{Component} from 'react';
- import className from 'classnames';
- import {NumberUnitPan} from '@commonComp';
- import style from './index.less';
- import config from '@config/index.js';
- import {filterArr,handleEnter,isIE,filterDataArr,setFontColorSize,handleMouseUp} from '@utils/tools.js';
- import {Notify} from '@commonComp';
- import $ from 'jquery';
- /***
- * 带单位数字组件
- * 接收参数:
- * value: 默认选中的值
- * placeholder:灰显文字
- * handleSelect: 选中事件
- * show: 是否显示下拉
- * 双击编辑效果去掉2019-8-13
- * ***/
- class NumberUnitDrop extends Component{
- constructor(props){
- super(props);
- this.state={
- editable:false, //标签是否可输入
- numEditable:true, //数字框是否可输入
- timer:null,
- hasSelect:false, //是否点过下拉键盘
- isClosed:false,
- value:props.value,
- // placeholderFlag:false,
- labelVal:'',
- };
- this.$span = React.createRef();
- this.$pre = React.createRef();
- this.$suf = React.createRef();
- this.$cont = React.createRef();
- this.select = this.select.bind(this);
- this.handleNumClick = this.handleNumClick.bind(this);
- }
- select(obj){ //选中键盘上数字事件
- const {handleSelect,ikey,suffix,prefix,mainSaveText,formulaCode,mainData} = this.props;
- this.setState({
- hasSelect:true
- });
- if(!obj.text){
- this.setState({
- value:''
- });
- }
- handleSelect&&handleSelect({ikey,text:obj.text,suffix,prefix,mainSaveText,mark:obj.mark,formulaCode,mainData});
- }
-
- handleNumClick(e){
- e.stopPropagation();
- const {show,handleShow,ikey,id,patId,handleHide,value} = this.props;
- const {hasSelect} = this.state;
- const that = this;
- //双击时不显示下拉
- clearTimeout(this.state.timer);
- const timer = setTimeout(function(){
- const {hasSelect,editable,isClosed} = that.state;
- if(editable||isClosed){
- return;
- }
- handleShow&&handleShow({ikey,id:patId||id});
- },300);
- this.setState({
- timer,
- });
- handleHide&&handleHide();
- }
- handleMouseDown(){
- const {i,setSelectArea,boxMark}= this.props;
- setSelectArea({i,boxMark,dir:'start'});
- }
- getClasses(){ //整个标签是否有值的状态
- const {value,hideTag,show,isImports,isExtBlue,mouseSelect} = this.props;
- const inpValue = this.state.value;
- const blueBorder = this.state.editable?style['blue-border']:'';
- const isSelected = value||inpValue?style['selected']:style['container'];
- const orgBorder = isImports&&!(value||inpValue)?style['orange-border']:'';
- const noTag = hideTag?style['no-tag']:'';
- const selectedArea = mouseSelect?style['selected-area']:'';
- if(show){
- $(this.$cont.current).addClass(style['borderd']);
- }else{
- $(this.$cont.current).removeClass(style['borderd']);
- }
- if(value){
- return className(isSelected,noTag,blueBorder,orgBorder,setFontColorSize(isExtBlue?2:''),selectedArea);
- }else{
- if(isExtBlue){
- return classNames(isSelected,noTag,blueBorder,orgBorder, setFontColorSize(2),'prefixUnsetColor',selectedArea);
- }else{
- return className(isSelected,noTag,blueBorder,orgBorder,setFontColorSize(1),selectedArea);
- }
- }
- }
- render(){
- const {placeholder,prefix,suffix,show,value,handleHide,select_start,i,boxMark} = this.props;
- const {editable,hasSelect} = this.state;
- return <div className={this.getClasses()}
- ref={this.$cont}
- onMouseUp={()=>handleMouseUp({select_start,i,boxMark})}
- onMouseDown={this.handleMouseDown.bind(this)}
- onClick={this.handleNumClick}>
- <span ref = {this.$pre} className="prefixUnset">{prefix?prefix+' ':prefix}</span>
- <span ref = {this.$span}
- onKeyDown={handleEnter}
- className="prefixUnset"
- style={{cursor:editable?'text':'pointer',wordBreak:'break-all'}}>{value||placeholder}</span>
- <span ref = {this.$suf} className="prefixUnset">{suffix?' '+suffix:suffix}</span>
- <NumberUnitPan handleSelect={(obj)=>this.select(obj)}
- onClose={handleHide}
- show={show} toClear={!hasSelect} value={value}/>
- </div>
- }
- }
- export default NumberUnitDrop;
|