|
@@ -1,13 +1,12 @@
|
|
|
import React, { Component } from "react";
|
|
|
import style from "../index.less";
|
|
|
import deleteIcon from '@common/images/delete.png';
|
|
|
-import tableIcon from '@common/images/table.png';
|
|
|
-import printIcon from '@common/images/team.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 ScaleTable from '@containers/ScaleTable';
|
|
|
+import Notify from '@commonComp/Notify';
|
|
|
+import {deepClone} from '@utils/tools';
|
|
|
import $ from "jquery";
|
|
|
/**
|
|
|
* 来源于页面选择
|
|
@@ -25,7 +24,8 @@ class ScaleItem extends Component {
|
|
|
optionId:'',
|
|
|
radioVal:props.radioVal||{},
|
|
|
formulaId:'',
|
|
|
- text:props.text
|
|
|
+ text:props.text,
|
|
|
+ formulaData:{}, //计算公式值
|
|
|
};
|
|
|
this.getItems = this.getItems.bind(this);
|
|
|
this.getDetailItems = this.getDetailItems.bind(this);
|
|
@@ -33,6 +33,7 @@ class ScaleItem extends Component {
|
|
|
this.closeOption = this.closeOption.bind(this);
|
|
|
this.closeFormula = this.closeFormula.bind(this);
|
|
|
this.onPrint = this.onPrint.bind(this);
|
|
|
+ this.handleInputformula =this.handleInputformula.bind(this);
|
|
|
}
|
|
|
showOption(id){
|
|
|
this.setState({
|
|
@@ -53,7 +54,7 @@ class ScaleItem extends Component {
|
|
|
});
|
|
|
this.closeOption();
|
|
|
}
|
|
|
- handleShowScale(item,parentId){
|
|
|
+ handleShowScale(item,parentId){console.log(item,parentId)
|
|
|
const {showScaleFn,closeAssess} = this.props;
|
|
|
closeAssess&&closeAssess(); //关闭评估弹窗
|
|
|
showScaleFn&&showScaleFn(item,parentId); //显示量表
|
|
@@ -65,35 +66,101 @@ class ScaleItem extends Component {
|
|
|
radioVal:Object.assign({},radioVal,{[pIndex]:item.detailName})
|
|
|
})
|
|
|
}
|
|
|
- handleForRadio(){
|
|
|
-
|
|
|
+ handleForRadio(id,idd, ind){
|
|
|
+ const {formulaData} = this.state;
|
|
|
+ const obj = JSON.parse(JSON.stringify(formulaData));
|
|
|
+ const data = obj&&obj[id];
|
|
|
+ if (data) {
|
|
|
+ for(let z = 0; z < data.content.details[idd].details.length; z++) {
|
|
|
+ data.content.details[idd].details[z].state = 0;
|
|
|
+ }
|
|
|
+ data.content.details[idd].details[ind].state = 1;
|
|
|
+ };
|
|
|
+ this.setState({
|
|
|
+ formulaData:obj
|
|
|
+ });
|
|
|
}
|
|
|
- showFormula(id){
|
|
|
+ showFormula(id,it){
|
|
|
+ const {formulaData} = this.state;
|
|
|
+ const obj = JSON.parse(JSON.stringify(formulaData)||{});
|
|
|
+ obj[id] = it;
|
|
|
this.setState({
|
|
|
- formulaId:id
|
|
|
- })
|
|
|
+ formulaId:id,
|
|
|
+ formulaData:obj
|
|
|
+ });
|
|
|
}
|
|
|
confirmFormula(){
|
|
|
-
|
|
|
+ this.closeFormula();
|
|
|
}
|
|
|
closeFormula(){
|
|
|
this.setState({
|
|
|
formulaId:null
|
|
|
})
|
|
|
}
|
|
|
+ calcuFormula(j, v, i) { //计算公式计算
|
|
|
+ const { calcuFormula } = this.props;
|
|
|
+ const {formulaId,formulaData} = this.state;
|
|
|
+ const it =formulaData&&formulaData[formulaId];
|
|
|
+ let allHasInfo = true
|
|
|
+ for (let i = 0; i < it.content.details.length; i++) {
|
|
|
+ if(it.content.details[i].controlType == 2) { //输入框类型的有没有填值
|
|
|
+ if(!it.content.details[i].value) {
|
|
|
+ allHasInfo = false
|
|
|
+ }
|
|
|
+ } else if(it.content.details[i].controlType == 1) {
|
|
|
+ let hasSelect = false
|
|
|
+ for( let z = 0; z <it.content.details[i].details.length; z++) {
|
|
|
+ if(it.content.details[i].details[z].state == 1) {
|
|
|
+ hasSelect= true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!hasSelect) {
|
|
|
+ allHasInfo = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if(allHasInfo) { //所有都有值,则计算
|
|
|
+ // delete it.content.resultz
|
|
|
+ let param = {
|
|
|
+ type: 2,
|
|
|
+ data: it,
|
|
|
+ disId: v.id,
|
|
|
+ pIndex: j,
|
|
|
+ ppIndex: i,
|
|
|
+ }
|
|
|
+ calcuFormula(param)
|
|
|
+ } else { //不是所有值都填过了
|
|
|
+ Notify.info('请填写计算公式内容')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ handleInputformula(id,idd,text) {
|
|
|
+ const {formulaData} = this.state;
|
|
|
+ const obj = deepClone(formulaData);
|
|
|
+ const data = obj&&obj[id];
|
|
|
+ if (data) {
|
|
|
+ data.content.details[idd].value = text;
|
|
|
+ }
|
|
|
+ this.setState({
|
|
|
+ formulaData:obj
|
|
|
+ });
|
|
|
+ }
|
|
|
getDetailItems(item,i){
|
|
|
let arr = [],temp='';
|
|
|
const {indexs,result} = this.props;
|
|
|
- const {optionId,formulaId,radioVal} = this.state;
|
|
|
+ const {optionId,formulaId,radioVal,formulaData} = this.state;
|
|
|
const possible=result&&result[item.id]&&result[item.id].possible;
|
|
|
- item.details.map((it,j)=>{
|
|
|
+ item.details.map((its,j)=>{
|
|
|
if(indexs[i]&&indexs[i].includes(j)){
|
|
|
- if(it.type==1){ //量表
|
|
|
+ let it=null;
|
|
|
+ if(its.type==1){ //量表
|
|
|
+ it=deepClone(its);
|
|
|
temp =<span className={style['scale']} onClick={()=>this.handleShowScale(it.content,item.id)}>【{it.content.name}】</span>;
|
|
|
- }else if(it.type==2){ //计算公式
|
|
|
+ }else if(its.type==2){ //计算公式
|
|
|
+ it=formulaData[formulaId]||deepClone(its);
|
|
|
temp = <div className={style['results']}>
|
|
|
<span>计算公式:</span>
|
|
|
- <span className={style["blue"]} onClick={this.showFormula.bind(this,item.id)}>请选择</span>
|
|
|
+ <span className={style["blue"]} onClick={this.showFormula.bind(this,item.id,it)}>请选择</span>
|
|
|
<img src={level1} />
|
|
|
<MiniToast title={it.content.name}
|
|
|
icon={allTableIcon}
|
|
@@ -102,59 +169,57 @@ class ScaleItem extends Component {
|
|
|
confirm={this.confirmFormula.bind(this,item,i)}
|
|
|
footer="true">
|
|
|
<table>
|
|
|
- {it.content.details.map((item,idd)=>{
|
|
|
- if(item.controlType==0){//单选
|
|
|
+ {it.content.details.map((item1,idd)=>{
|
|
|
+ if(item1.controlType==1){//单选
|
|
|
return <tr>
|
|
|
<td>
|
|
|
- <span>{'请选择'+item.name+':'}</span>
|
|
|
+ <span>{'请选择'+item1.name+':'}</span>
|
|
|
</td>
|
|
|
<td>
|
|
|
- {item.details.map((ii,ind)=>{
|
|
|
+ {item1.details.map((ii,ind)=>{
|
|
|
return <div className={style["chooseItem"]}>
|
|
|
<Radio label={ii.detailName}
|
|
|
- isSelect={radioVal[i]==ii.detailName}
|
|
|
- handleClick={this.handleForRadio.bind(this,ii,item,i)}>
|
|
|
+ isSelect={ii.state == 1}
|
|
|
+ handleClick={this.handleForRadio.bind(this,item.id,idd, ind)}>
|
|
|
+ >
|
|
|
</Radio>
|
|
|
</div>
|
|
|
})}
|
|
|
</td>
|
|
|
</tr>
|
|
|
- }else if(item.controlType==1){//多选
|
|
|
-
|
|
|
- }else if(item.controlType==2){//输入框
|
|
|
+ }else if(item1.controlType==2){//输入框
|
|
|
return <tr>
|
|
|
<td>
|
|
|
- <span>{'请输入'+item.name+':'}</span>
|
|
|
- </td>
|
|
|
- <td>
|
|
|
- <input type="text" placeholder="请输入"/>
|
|
|
+ <span>{'请输入'+item1.name+':'}</span>
|
|
|
</td>
|
|
|
-
|
|
|
- </tr>
|
|
|
- }else if(item.controlType==3){//下拉
|
|
|
- return <tr>
|
|
|
<td>
|
|
|
- <span>{'请选择'+item.name+':'}</span>
|
|
|
+ <input type="text" placeholder="请输入" value={item1.value} onInput={(e)=>this.handleInputformula(item.id,idd,e.target.value)}/>
|
|
|
</td>
|
|
|
<td>
|
|
|
- {item.details.map((ii,ind)=>{
|
|
|
- return <div className={style["chooseItem"]}>
|
|
|
- <Radio label={ii.detailName}
|
|
|
- isSelect={radioVal[i]==ii.detailName}
|
|
|
- handleClick={this.handleForRadio.bind(this,ii,item,i)}>
|
|
|
- </Radio>
|
|
|
- </div>
|
|
|
- })}
|
|
|
+ <span>{item1.uint}</span>
|
|
|
</td>
|
|
|
|
|
|
</tr>
|
|
|
}
|
|
|
})}
|
|
|
</table>
|
|
|
- <div className={style["forMulBtn"]}>计算</div>
|
|
|
+ <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,j, item, i)}>计算</div>
|
|
|
+ <table>
|
|
|
+ {it.content.result && Array.isArray(it.content.result) &&it.content.result.map((itemResult, resultIndex) => {
|
|
|
+ return <tr>
|
|
|
+ <td>
|
|
|
+ <span>{itemResult.name+':'}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span>{itemResult.text}</span>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ })}
|
|
|
+ </table>
|
|
|
</MiniToast>
|
|
|
</div>
|
|
|
- }else if(it.type==3){
|
|
|
+ }else if(its.type==3){
|
|
|
+ it=deepClone(its);
|
|
|
temp = <div className={style['results']}>
|
|
|
<span>可能结果:</span>
|
|
|
<span onClick={this.showOption.bind(this,item.id)} className={style["blue"]}>{possible&&possible[i]?possible[i]:'请选择'}</span>
|
|
@@ -212,22 +277,22 @@ class ScaleItem extends Component {
|
|
|
});
|
|
|
}
|
|
|
render() {
|
|
|
- const {title,handleInp,disabled} = this.props;
|
|
|
+ const {title,handleInp,disabled,isRecommend} = this.props;
|
|
|
return <div className={style['assess-item']}>
|
|
|
- <h2>{title}</h2>
|
|
|
+ {isRecommend?'':<h2>{title}</h2>}
|
|
|
<div className={style['item-content']}>
|
|
|
<ul>
|
|
|
{
|
|
|
this.getItems()
|
|
|
}
|
|
|
- <li>
|
|
|
+ {isRecommend?'':<li>
|
|
|
<textarea className={style['edit-row']}
|
|
|
ref={this.$area}
|
|
|
type="text"
|
|
|
disabled={disabled}
|
|
|
onBlur={()=>handleInp(this.state.text)}
|
|
|
onInput={this.handleInput.bind(this)}>{this.state.text}</textarea>
|
|
|
- </li>
|
|
|
+ </li>}
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>;
|