import React, { Component } from "react"; import style from "../index.less"; import deleteIcon from '@common/images/delete.png'; import deleteIconNo from '@common/images/delete_no.png'; import allTableIcon from '@common/images/all-table.png'; import level1 from "@common/images/级别1.png"; import checkIcon from '@common/images/check.png'; import {ComplexModal,MiniToast,Radio} from '@commonComp'; import Notify from '@commonComp/Notify'; import {deepClone,preventDefault} from '@utils/tools'; import { getFormulaResult } from '@store/async-actions/fetchModules' /** * 来源于页面选择 * * **/ class ScaleItem extends Component { constructor(props) { super(props); this.$area = React.createRef(); const {result}= props; let radioVal = result&&result.radioVal; this.state = { scaleId:'', scaleName:'', parentId:'', showScale:false, optionId:'', radioVal:Object.assign({},radioVal)||{}, formulaId:'', text:props.text, isCalculated:false, calcuValues:deepClone(props.calcuValues), //计算公式填的值 }; this.getItems = this.getItems.bind(this); this.getDetailItems = this.getDetailItems.bind(this); this.showOption = this.showOption.bind(this); this.closeOption = this.closeOption.bind(this); this.closeFormula = this.closeFormula.bind(this); this.handleInputformula =this.handleInputformula.bind(this); } showOption(id){ this.setState({ optionId: id, formulaId: '' }) } closeOption(){ const {result} = this.props; const possible=result&&result.possible; let {radioVal} = this.state; this.setState({ radioVal:Object.assign({},radioVal,possible), optionId:null, }); } confirmOption(){ const {handleRes} = this.props; const {radioVal} = this.state; handleRes&&handleRes({ possible:Object.assign({},radioVal), radioVal:Object.assign({},radioVal),//不设置radioVal只有最近一次选中的值 }); this.setState({ optionId:null, }); } handleShowScale(item){ const {showScaleFn,closeAssess} = this.props; //closeAssess&&closeAssess(); //关闭评估弹窗 showScaleFn&&showScaleFn(item,true); } handleRadio(item,parent){ let {result} = this.props; let radioVal = result&&result.radioVal; this.setState({ radioVal:Object.assign({},radioVal,{[parent.conceptId]:item.detailName}) }) } handleReg(e){ //只能输入数字和特殊符号 const key = e.key; if(key!='Backspace'&&((/[^\d|.\/%*~]/.test(key)))){ preventDefault(e); } } handleInputformula(id,calcuContent,i,e) { const {calcuValues} = this.state; let obj = deepClone(calcuValues); let values = (obj&&obj[id])||deepClone(calcuContent); const txt = e.target.value; values[i].value = txt.replace(/[\u4e00-\u9fa5]|[^\d|.\/%*~]/g,''); //处理中文输入法的情况 obj[id] = values; if(/[\u4e00-\u9fa5]|[^\d|.\/%*~]/g.test(txt)){ e.target.value = txt.replace(/[\u4e00-\u9fa5]|[^\d|.\/%*~]/g,''); } this.setState({ isCalculated:false, calcuValues:obj }); } handleForRadio(id,calcuContent,i,fidx){//计算公式 const { calcuValues } = this.state; let obj = deepClone(calcuValues); let values = (obj&&obj[id])||deepClone(calcuContent); let details = values[i].details; for(let x=0;x{ if(+res.data.code==0){ const result = res.data.data.result; results[formulaId] = result; handleCalcu&&handleCalcu(calcuValues,results); this.setState({ isCalculated:true }); }else{ Notify.error(res.data.msg||'计算没有结果返回'); } }) } else { //不是所有值都填过了 Notify.info('请填写计算公式内容') } } getDetailItems(item,i){ let arr = [],temp=''; const {indexs,result,formulaResult,disabled,calcuResult} = this.props; const {optionId,formulaId,radioVal,calcuValues} = this.state; const possible=result&&result.possible; item.details.map((its,j)=>{ let it=its; if(indexs[i]&&indexs[i].includes(j)){ if(its.type==1){ //量表 let scaleRes=formulaResult&&formulaResult[it.content.conceptId]&&formulaResult[it.content.conceptId].calcalculate; const name = scaleRes&&scaleRes.result?(' 【'+it.content.name+'】 结果:'+scaleRes.result.value+" "+(scaleRes.result.text||'')):'【'+it.content.name+'】'; temp = {name} ; }else if(its.type==2){ //计算公式 const showRes = calcuResult&&calcuResult[item.conceptId]||it.content.result; const details = calcuValues&&calcuValues[item.conceptId]||it.content.details; const cresult = showRes&&showRes[1]&&showRes[1].text; temp =
计算公式结果: {cresult?cresult:'请选择'} {disabled?'':} {disabled?'': {details.map((item1,idd)=>{ if(item1.controlType==0){//单选 return }else if(item1.controlType==2){//输入框 return } })}
{item1.isShow == '0' ? item1.name+':' : '请选择'+item1.name+':'} {Array.isArray(item1.details)&&item1.isShow == '0'&&item1.details.map((ii,ind)=>{ return ii.state == 1 &&
{ii.detailName}
})} {Array.isArray(item1.details)&&item1.isShow != '0'&&item1.details.map((ii,ind)=>{ return
})}
{item1.isShow == '0' ? item1.name+':':'请输入'+item1.name+':'} {item1.isShow == '0' ? item1.value + ' ' +item1.uint : this.handleInputformula(item.conceptId,details,idd,e)}/>} {item1.isShow != '0'&&{item1.uint}}
计算
{showRes && Array.isArray(showRes) &&showRes.map((itemResult) => { return })}
{itemResult.name+':'} {itemResult.text}
}
}else if(its.type==3){ temp =
可能结果: {possible&&possible[item.conceptId]?possible[item.conceptId]:'请选择'} {disabled?'':} {disabled?'':
{it.content.name?it.content.name+':':''} {it.content.details&&it.content.details.map((lis,ind)=>{ return
{/*{lis.state==1?(智能推荐):''}*/}
})}
}
; } const passId = item.details[j].type==1?item.details[j].content.conceptId:undefined; const li = disabled?
  • {item.name}:
    {temp}
  • :
  • {item.name}:
    {temp}
  • ; arr.push(li); } }); return arr; } getItems(){ const { data } = this.props; return data&&data.map((it,i)=>{ return this.getDetailItems(it,i); }); } getScaleContent(data){ if(!data){ return null; } const item = data&&data.find((it)=>{ return it.type==1; }); const content = JSON.parse(item.content||null); return {conceptId:item.conceptId,content,name:content.scaleName}; } getScales(){ const {scaleItems,disabled,formulaResult} = this.props; let li='',temp='',arr=[],it={}; if(!scaleItems){ return ''; }; for( let i in scaleItems){ it = {conceptId:i,name:scaleItems[i].name};//this.getScaleContent(scaleItems[i].data); if(!it) continue; let scaleRes=formulaResult&&formulaResult[it.conceptId]&&formulaResult[it.conceptId].calcalculate; const name = scaleRes&&scaleRes.result?(' 【'+scaleItems[i].name+'】 结果:'+scaleRes.result.value+" "+(scaleRes.result.text||'')):'【'+scaleItems[i].name+'】'; //这里onClick不能用箭头函数,用箭头函数会一直绑定for的最后一个it temp ={name}; li = disabled?
  • 相关量表:
    {temp}
  • :
  • 相关量表:
    {temp}
  • ; arr.push(li); }; return arr; } handleInput(e){ const text = e.target.value; this.setState({ text }); } componentWillReceiveProps(next){ //修复bug1329,第二次保存值不显示 if(next.text!=this.state.text){ this.setState({ text:next.text }); this.$area.current.value=next.text; } } render() { const {title,handleInp,disabled} = this.props; return

    {title}

      { this.getItems() } { this.getScales() }
    • 评估描述:{this.state.text}
    ; } } export default ScaleItem;