123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- import React,{Component} from 'react';
- import classNames from 'classnames';
- import RadioDrop from "@containers/RadioDrop";
- import NumberDrop from "@containers/NumberDrop";
- import RadioInpDrop from "@containers/RadioInpDrop";
- import InlineTag from '@containers/InlineTag';
- import Multiple from '@containers/Multiple';
- import addIcon from '@images/addItem.png';
- import style from "./index.less";
- import tools from '@utils/tools';
- import NumberUnitDrop from '@containers/NumberUnitDrop';
- /****
- * 多标签组合
- * author:zn@2018-11.26
- * 接收参数:
- * data:展开标签数据
- * showAdd:是否显示加号(复制)
- * copyId:该标签id
- * fullData:该标签完整数据
- * showArr:是否显示下拉的总对象
- * ikey:当前组件唯一标识,由模块index+标签index+标签内index三个组成的字符串
- * boxMark:当前所在的模块
- * isImports:是否高亮(仅查体使用)
- * selecteds:选中项数据(仅多选子组件用)
- * saveText:该模块的预览数据
- * textPrefix:前缀
- * textSuffix:后缀
- *
- * ***/
- class MultSpread extends Component{
- constructor(props){
- super(props);
- this.state = {
- numDoms:[]
- };
- }
- getClass(){
- const {saveText,ikey,showAdd} = this.props;
- const labelInx = tools.getLabelIndex(ikey);
- const text = saveText&&saveText[+labelInx];
- //const orgBorder = isImports&&!text?style['orange-border']:'';
- const isSelected = text?style['selected']:style['container'];
- const hasAdd = showAdd?style['add']:'';
- return classNames(isSelected,hasAdd);
- }
- saveDoms(it){
- const doms = this.state.numDoms;
- doms.push(it);
- this.setState({
- numDoms:doms
- });
- }
- moveEnd(obj) {
- if(window.getSelection){//ie11 10 9 ff safari
- obj.focus(); //解决ff不获取焦点无法定位问题
- var range = window.getSelection();//创建range
- range.selectAllChildren(obj);//range 选择obj下所有子内容
- range.collapseToEnd();//光标移至最后
- }
- else if (document.selection) {//ie10 9 8 7 6 5
- var range = document.selection.createRange();//创建选择对象
- range.moveToElementText(obj);//range定位到obj
- range.collapse(false);//光标移至最后
- range.select();
- }
- }
- setNextFocus(i){
- const doms = this.state.numDoms;
- doms[i+1]&&this.moveEnd(doms[i+1].current)
- }
- getLabels(){
- const {data,ikey,showArr,copyId,selecteds,boxMark} = this.props;
- let show = false;
- let inx = '',count=0;
- const list = data.map((it,i)=>{
- inx=ikey+'-'+i;
- show = showArr&&showArr[inx];
- switch (true){
- case +it.tagType===8:
- return it.name;
- case +it.controlType===1:
- const list = it.questionDetailList&&it.questionDetailList.length>0?it.questionDetailList:it.questionMapping;
- return <RadioDrop data={list}
- boxMark={boxMark}
- placeholder={it.name}
- show={show}
- value = {it.value}
- ikey={inx}
- id={it.id}
- patId = {copyId}
- hideTag={true}></RadioDrop>;
- case +it.controlType===2:
- const dataList = it.questionDetailList&&it.questionDetailList.length>0?it.questionDetailList:it.questionMapping;
- return <Multiple data={dataList}
- ikey={inx}
- placeholder={it.name}
- value={it.value}
- copyType={it.copyType}
- selecteds={selecteds ?selecteds[i]:[]}
- show={showArr&&showArr[inx]}
- order={it.textGenerate}
- type={boxMark}
- id={it.id}
- hideTag={true}></Multiple>;
- case +it.controlType===5://带单位数字键盘
- return <NumberUnitDrop prefix={it.labelPrefix}
- suffix={it.labelSuffix}
- placeholder={it.name}
- boxMark={ikey.substr(0,1)}
- id={it.id}
- show={show}
- ikey={inx}
- value={it.value}
- hideTag={true}></NumberUnitDrop>;
- case +it.controlType===3:
- case +it.controlType===6:
- return <InlineTag prefix={it.labelPrefix}
- suffix={it.labelSuffix}
- placeholder={it.name}
- value={it.value}
- id={it.id}
- ikey={inx} hideTag={true}></InlineTag>;
- case +it.controlType===7:
- const min = it.minValue;//!=null&&it.minValue!=undefined?it.minValue-1:undefined;
- const max = it.maxValue;//!=null&&it.maxValue!=undefined?+it.maxValue+1:undefined;
- return <NumberDrop prefix={it.labelPrefix}
- suffix={it.labelSuffix}
- placeholder={it.name}
- //inputRef = {this['$inp'+(count++)]}
- saveDoms={this.saveDoms.bind(this)}
- reFocus={this.setNextFocus.bind(this)}
- num = {count++}
- min={min}
- max={max}
- show={show}
- allClick={false}
- ikey={inx}
- id={it.id}
- patId = {copyId}
- value={it.value}
- hideTag={true}></NumberDrop>;
- case +it.controlType===11:
- return <RadioInpDrop data={it.questionDetailList}
- vals={it.vals}
- placeholder={it.name}
- show={showArr&&showArr[inx]}
- value = {it.value}
- boxMark={boxMark}
- id={it.id}
- ikey={inx}
- hideTag={true}></RadioInpDrop>;
- default:
- return it.name;
- }
- });
- return list;
- }
- componentDidMount(){
- //挂载完成保存有加号的项目数据
- const {saveAddItem,fullData,copyId,showAdd} = this.props;
- if(showAdd){
- const data = tools.deepClone(fullData);
- setTimeout(function(){ //修改个别历史病例引用报错bug
- saveAddItem&&saveAddItem(copyId,data);
- })
- }
- }
- getContClass(){
- const {isImports,ikey,saveText} = this.props;
- const labelInx = tools.getLabelIndex(ikey);
- const text = saveText&&saveText[+labelInx];
- const orgBorder = isImports&&!text?style['orange-border']:'';
- return classNames(orgBorder);
- }
- render(){
- const {showAdd,addLabelItem,ikey,copyId,textPrefix,textSuffix} = this.props;
- return (<div className={this.getContClass()}
- style={{display:'inline-block'}}>
- {textPrefix?<span>{textPrefix}</span>:''}
- <div className={this.getClass()}>
- {this.getLabels()}
- {textSuffix?<span>{textSuffix}</span>:''}
- {showAdd?<img src={addIcon} alt="添加血压项"
- className={style['add-icon']}
- onClick={()=>addLabelItem({ikey,copyId})}/>:''}
- </div>
- </div>)
- }
- }
- export default MultSpread;
|