2024-01-22 09:18:38 +08:00
|
|
|
import { message } from "antd/lib/index";
|
|
|
|
|
import { Button, Popconfirm, Row, Col, Checkbox, Radio, Form, Input, Select, Table, Upload, Icon, PageHeader, Modal, Spin } from 'antd';
|
|
|
|
|
import React from 'react';
|
|
|
|
|
import { initFilter, extendRule, extendInclude, setDataFieldValue, guid, initQueryFilter } from "../../../utils/common";
|
|
|
|
|
import ReactToPrint from "react-to-print";
|
|
|
|
|
import styles from '../../CustomPages/HI/StepForm.css';
|
|
|
|
|
import SEstyles from './SE.css';
|
|
|
|
|
import XLSX from 'xlsx';
|
|
|
|
|
import { connect } from 'dva';
|
|
|
|
|
import moment from 'moment';
|
|
|
|
|
|
|
|
|
|
const Option = Select.Option;
|
|
|
|
|
const answer = {
|
|
|
|
|
color: 'blue',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SE018PaperPage extends React.Component {
|
|
|
|
|
constructor(props) {
|
|
|
|
|
super(props);
|
|
|
|
|
let viewAll = false;
|
|
|
|
|
if ((this.props.formParam && this.props.formParam.viewAll) || this.props.data.tableKey == undefined) {
|
|
|
|
|
viewAll = true;
|
|
|
|
|
}
|
|
|
|
|
this.state = {
|
|
|
|
|
papers: [],
|
|
|
|
|
viewAll,
|
|
|
|
|
record: null,
|
|
|
|
|
notify: null,
|
|
|
|
|
UserList: [],
|
|
|
|
|
SelUsrID: null,
|
|
|
|
|
config: null,
|
|
|
|
|
score: 0,
|
|
|
|
|
NAME: '',
|
|
|
|
|
END_TIME: null,
|
|
|
|
|
readonly: true,
|
|
|
|
|
loading: false,
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
componentDidMount() {
|
|
|
|
|
if (window.navigator.userAgent.indexOf("Windows") < 1) {
|
|
|
|
|
this.setState({ isMobile: true })
|
|
|
|
|
}
|
|
|
|
|
if (this.props.data?.id)
|
|
|
|
|
this.loadData(this.props.data?.id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
componentWillReceiveProps(NextProps) {
|
|
|
|
|
if (NextProps.data?.id && this.props.data?.id != NextProps.data?.id) {
|
|
|
|
|
this.loadData(NextProps.data?.id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BtnClose = () => {
|
|
|
|
|
if (typeof this.props.data.onCancel != "undefined" && typeof this.props.data.onCancel == 'function')
|
|
|
|
|
this.props.data.onCancel();
|
|
|
|
|
}
|
|
|
|
|
getUsers = () => {
|
|
|
|
|
let json = initFilter(this.props.login.OrgId);
|
|
|
|
|
json.OrgType = 2;
|
|
|
|
|
extendRule(json, 'RECORD_ID', 1, this.props.data.id);
|
|
|
|
|
extendInclude(json, 'Nav_User');
|
|
|
|
|
this.state.loading = true;
|
|
|
|
|
this.props.dispatch({
|
|
|
|
|
type: 'app/getDataByPost',
|
|
|
|
|
payload: json,
|
|
|
|
|
url: 'SE/SETrainRecord/GetUsers',
|
|
|
|
|
onComplete: (ret) => {
|
|
|
|
|
this.state.loading = false;
|
|
|
|
|
if (ret && ret.length > 0) {
|
|
|
|
|
this.setState({
|
|
|
|
|
UserList: ret
|
|
|
|
|
})
|
|
|
|
|
if (this.state.viewAll) {
|
|
|
|
|
this.setState({
|
|
|
|
|
SelUsrID: ret[0].ID
|
|
|
|
|
}, () => {
|
|
|
|
|
this.getPapers();
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
let usr = ret.find(it => it.ID === this.props.login.user.ID);
|
|
|
|
|
if (usr) {
|
|
|
|
|
this.setState({
|
|
|
|
|
SelUsrID: usr.ID
|
|
|
|
|
}, () => {
|
|
|
|
|
this.getPapers();
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
message.warn("当前用户没有问卷");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
getPapers = () => {
|
|
|
|
|
let SelUsrID = this.state.SelUsrID;
|
|
|
|
|
this.setState({ papers: [] });
|
|
|
|
|
if (!SelUsrID) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let json = initFilter(this.props.login.OrgId, '', 'Nav_Test.TYPE', 1);
|
|
|
|
|
json.OrgType = 2;
|
|
|
|
|
extendRule(json, 'RECORD_ID', 1, this.props.data.id);
|
|
|
|
|
extendRule(json, 'USER_ID', 1, SelUsrID);
|
|
|
|
|
extendInclude(json, 'Nav_Record');
|
|
|
|
|
extendInclude(json, 'Nav_Record.Nav_Notify');
|
|
|
|
|
extendInclude(json, 'Nav_Record.Nav_Notify.Nav_LaunchDepartment');
|
|
|
|
|
extendInclude(json, 'Nav_Record.Nav_Notify.Nav_LaunchUser');
|
|
|
|
|
extendInclude(json, 'Nav_Record.Nav_Notify.Nav_TrainContentList');
|
|
|
|
|
extendInclude(json, 'Nav_Record.Nav_Notify.Nav_TrainType');
|
|
|
|
|
extendInclude(json, 'Nav_Record.Nav_Notify.Nav_TrainCheckType');
|
|
|
|
|
extendInclude(json, 'Nav_Record.Nav_Notify.Nav_TrainContentList.Nav_Point');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extendInclude(json, 'Nav_Test');
|
|
|
|
|
extendInclude(json, 'Nav_User');
|
|
|
|
|
this.state.loading = true;
|
|
|
|
|
this.props.dispatch({
|
|
|
|
|
type: 'app/getDataByPost',
|
|
|
|
|
payload: json,
|
|
|
|
|
url: 'SE/SETrainRecord/GetUserPapers',
|
|
|
|
|
onComplete: (ret) => {
|
|
|
|
|
this.state.loading = false;
|
|
|
|
|
if (ret && ret.Nav_Papers && ret.Nav_Papers.length > 0) {
|
|
|
|
|
let papers = ret.Nav_Papers.sort((a, b) => { return a.Nav_Test.TYPE - b.Nav_Test.TYPE });
|
|
|
|
|
let config = ret.Nav_Config;
|
|
|
|
|
let record = ret.Nav_Papers[0].Nav_Record;
|
|
|
|
|
let notify = record ? record.Nav_Notify : null;
|
|
|
|
|
let NAME = record.Nav_Notify.NAME;
|
|
|
|
|
let hasAnswered = false;
|
|
|
|
|
for (let i = 0; i < ret.Nav_Papers.length; i++) {
|
|
|
|
|
if (ret.Nav_Papers[i].ANSWER !== 0) {
|
|
|
|
|
hasAnswered = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.setState({
|
|
|
|
|
papers,
|
|
|
|
|
config,
|
|
|
|
|
record,
|
|
|
|
|
notify,
|
|
|
|
|
readonly: hasAnswered,
|
|
|
|
|
NAME: NAME,
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
message.error('未能成功获取此用户的在线试卷,请稍后重试');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
loadData = () => {
|
|
|
|
|
if (this.props.data.id == "")
|
|
|
|
|
return;
|
|
|
|
|
this.getUsers();
|
|
|
|
|
}
|
|
|
|
|
onSave = () => {
|
|
|
|
|
if (this.state.readonly) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
let data = JSON.parse(JSON.stringify(this.state.papers));
|
|
|
|
|
for (let i = 0; i < data.length; i++) {
|
|
|
|
|
if (data[i].ANSWER == 0) {
|
|
|
|
|
message.error(`第${i + 1}题尚未选择答题,请完成所有答题后再进行提交`);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (data[i].Nav_Test.TYPE === 2 && ([0, 1, 2, 4, 8].indexOf(data[i].ANSWER) !== -1)) {
|
|
|
|
|
message.error(`第${i + 1}题为多选题,请选择至少两个选项`);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
let saveData = () => {
|
|
|
|
|
let data = {
|
|
|
|
|
Nav_Config: JSON.parse(JSON.stringify(this.state.config)),
|
|
|
|
|
Nav_Papers: JSON.parse(JSON.stringify(this.state.papers)),
|
|
|
|
|
TaskID: this.props.data.TaskID
|
|
|
|
|
}
|
|
|
|
|
this.props.dispatch({
|
|
|
|
|
type: 'app/getDataByPost',
|
|
|
|
|
payload: data,
|
|
|
|
|
url: 'SE/SETrainRecord/SavePapers',
|
|
|
|
|
onComplete: (ret) => {
|
|
|
|
|
if (ret) {
|
|
|
|
|
message.success('提交成功');
|
|
|
|
|
this.BtnClose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
Modal.confirm({
|
|
|
|
|
title: '提示',
|
|
|
|
|
content: '确定要提交当前问卷么?提交之后不可再次更改',
|
|
|
|
|
onOk: () => {
|
|
|
|
|
saveData();
|
|
|
|
|
},
|
|
|
|
|
onCancel() {
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
fmtEnum(name, value) {
|
|
|
|
|
const enums = this.props.app.enums;
|
|
|
|
|
if (!enums || !enums[name]) return '';
|
|
|
|
|
return enums[name].enums[value] || '';
|
|
|
|
|
}
|
|
|
|
|
onTableBtnExport() {
|
|
|
|
|
let TableWrap = document.getElementById('tableId' + this.props.data.id);
|
|
|
|
|
let Table = TableWrap.getElementsByTagName('table')[0];
|
|
|
|
|
const wb = XLSX.utils.table_to_book(Table);
|
|
|
|
|
let name = '培训在线答题';
|
|
|
|
|
if (this.state.papers && this.state.papers.length > 0) {
|
|
|
|
|
let user = this.state.papers[0].Nav_User;
|
|
|
|
|
name += `-${user.CODE}-${user.NAME}`;
|
|
|
|
|
}
|
|
|
|
|
name += '.xlsx';
|
|
|
|
|
XLSX.writeFile(wb, name)
|
|
|
|
|
}
|
|
|
|
|
getJoinDepartment() {
|
|
|
|
|
let arr = [];
|
|
|
|
|
if (this.state.safe && this.state.safe.Nav_JoinDepartment) {
|
|
|
|
|
for (let it of this.state.safe.Nav_JoinDepartment) {
|
|
|
|
|
if (it.Nav_Department.NAME == "宁化行洛坑钨矿有限公司") {
|
|
|
|
|
arr.push({
|
|
|
|
|
id: it.Nav_Department.ID,
|
|
|
|
|
name: "公司领导"
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
arr.push({
|
|
|
|
|
id: it.Nav_Department.ID,
|
|
|
|
|
name: it.Nav_Department.NAME
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return arr;
|
|
|
|
|
}
|
|
|
|
|
doOptionChange = (it, index, mask, evt) => {
|
|
|
|
|
let papers = this.state.papers;
|
|
|
|
|
if (evt.target.checked) {
|
|
|
|
|
if (it.Nav_Test.TYPE === 2) {
|
|
|
|
|
papers[index].ANSWER |= mask;
|
|
|
|
|
} else {
|
|
|
|
|
papers[index].ANSWER = mask;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
papers[index].ANSWER = papers[index].ANSWER & (~mask);
|
|
|
|
|
}
|
|
|
|
|
this.setState({
|
|
|
|
|
papers,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
returnModel(level) {
|
|
|
|
|
let str = '';
|
|
|
|
|
if (level == undefined) {
|
|
|
|
|
return str;
|
|
|
|
|
}
|
|
|
|
|
if (level.indexOf('1') >= 0) {
|
|
|
|
|
str += '讲授法 ';
|
|
|
|
|
}
|
|
|
|
|
if (level.indexOf('2') >= 0) {
|
|
|
|
|
str += '视听法 ';
|
|
|
|
|
}
|
|
|
|
|
if (level.indexOf('3') >= 0) {
|
|
|
|
|
str += '研讨法 ';
|
|
|
|
|
}
|
|
|
|
|
if (level.indexOf('4') >= 0) {
|
|
|
|
|
str += '演示法 ';
|
|
|
|
|
}
|
|
|
|
|
return str;
|
|
|
|
|
}
|
|
|
|
|
CalcScore = () => {
|
|
|
|
|
if (!this.state.readonly) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
let score = 0;
|
|
|
|
|
let sscore = 1;
|
|
|
|
|
let mscore = 1;
|
|
|
|
|
let cscore = 1;
|
|
|
|
|
if (this.state.config) {
|
|
|
|
|
if (this.state.config.S_TEST_SCORE > 0) {
|
|
|
|
|
sscore = this.state.config.S_TEST_SCORE;
|
|
|
|
|
}
|
|
|
|
|
if (this.state.config.M_TEST_SCORE > 0) {
|
|
|
|
|
mscore = this.state.config.M_TEST_SCORE;
|
|
|
|
|
}
|
|
|
|
|
if (this.state.config.C_TEST_SCORE > 0) {
|
|
|
|
|
cscore = this.state.config.C_TEST_SCORE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.state.papers.map((it, idx) => {
|
|
|
|
|
if (it.ANSWER !== 0 && it.ANSWER == it.Nav_Test.ANSWER) {
|
|
|
|
|
switch (it.Nav_Test.TYPE) {
|
|
|
|
|
case 0: {
|
|
|
|
|
score += cscore;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 1: {
|
|
|
|
|
score += sscore;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 2: {
|
|
|
|
|
score += mscore;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
return score;
|
|
|
|
|
}
|
|
|
|
|
getType(type) {
|
|
|
|
|
let ret = '';
|
|
|
|
|
const { config } = this.state
|
|
|
|
|
switch (type) {
|
|
|
|
|
case 0: ret = `【是非题】(${config && config.C_TEST_SCORE || 1}分)`; break;
|
|
|
|
|
case 1: ret = `【单选题】(${config && config.S_TEST_SCORE || 1}分)`; break;
|
|
|
|
|
case 2: ret = `【多选题】(${config && config.M_TEST_SCORE || 1}分)`; break;
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
render() {
|
|
|
|
|
const { record, papers, SelUsrID, UserList, notify } = this.state;
|
|
|
|
|
const SelUsr = SelUsrID && UserList.find(it => it.ID === SelUsrID);
|
|
|
|
|
return <div>
|
|
|
|
|
<div style={{ padding: '10px' }}>
|
|
|
|
|
{
|
|
|
|
|
this.state.viewAll &&
|
|
|
|
|
<Select style={{ fontSize: 14, width: "100px" }}
|
|
|
|
|
showSearch
|
|
|
|
|
value={this.state.SelUsrID}
|
|
|
|
|
onChange={val => {
|
|
|
|
|
this.setState({
|
|
|
|
|
SelUsrID: val
|
|
|
|
|
}, () => {
|
|
|
|
|
this.getPapers();
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}}
|
|
|
|
|
filterOption={(input, option) =>
|
|
|
|
|
option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
|
|
|
|
}
|
|
|
|
|
>
|
|
|
|
|
{
|
|
|
|
|
this.state.UserList.map(usr =>
|
|
|
|
|
<Option key={usr.ID} value={usr.ID}>{usr.NAME}</Option>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
</Select>
|
|
|
|
|
}
|
|
|
|
|
<span />
|
|
|
|
|
<ReactToPrint
|
|
|
|
|
trigger={() => <Button type={'primary'} icon={'printer'} >打印</Button>}
|
|
|
|
|
content={() => this.componentRef}
|
|
|
|
|
/>
|
|
|
|
|
<Button style={{ marginLeft: '8px' }} onClick={() => this.onTableBtnExport()} icon="export" >导出</Button>
|
|
|
|
|
{
|
|
|
|
|
!this.state.readonly && (
|
|
|
|
|
<Button type="primary" style={{ marginLeft: '8px' }} onClick={() => { this.onSave(); }}>
|
|
|
|
|
提交问卷
|
|
|
|
|
</Button>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
<div ref={el => (this.componentRef = el)} id={'tableId' + this.props.data.id}>
|
|
|
|
|
<h1 style={{ textAlign: 'center' }}>培训在线答题</h1>
|
|
|
|
|
<Spin spinning={this.state.loading}>
|
|
|
|
|
<table style={{ width: '100%', textAlign: 'center', borderTop: '1px solid #333', borderLeft: '1px solid #333' }} className={styles.PrintForm}>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>培训名称</td>
|
|
|
|
|
<td colSpan={20} rowSpan={1} className={styles.fontBold}>{notify ? notify.NAME : null}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>编号</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify ? notify.CODE : null}</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>培训时间</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify ? `${moment(notify.TRAIN_START_TIME).format('YYYY-MM-DD')} - ${moment(notify.TRAIN_END_TIME).format('YYYY-MM-DD')}` : null}</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>培训地点</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify ? notify.TRAIN_ADDR : null}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>组织部门</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify && notify.Nav_LaunchDepartment ? notify.Nav_LaunchDepartment.NAME : null}</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>记录/考核人</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify && notify.Nav_LaunchUser ? notify.Nav_LaunchUser.NAME : null}</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>培训老师</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify ? notify.TRAIN_TEACHER : null}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>培训学时</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify ? notify.HOURS : null}</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>培训形式</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify ? this.returnModel(notify.TRAIN_MODEL) : null}</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>考核方式</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} >{notify && notify.Nav_TrainCheckType ? notify.Nav_TrainCheckType.NAME : null}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>培训内容</td>
|
|
|
|
|
<td colSpan={20} rowSpan={1} >{
|
|
|
|
|
notify && notify.Nav_TrainContentList && notify.Nav_TrainContentList.map(it => {
|
|
|
|
|
return it.Nav_Point.NAME
|
|
|
|
|
}).join('、')
|
|
|
|
|
}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>工号</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1}>{SelUsr && SelUsr.CODE}</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>答卷人</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1}>{SelUsr && SelUsr.NAME}</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1} className={styles.fontBold}>成绩</td>
|
|
|
|
|
<td colSpan={4} rowSpan={1}>{this.CalcScore()}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={styles.fontBold}>问卷</td>
|
|
|
|
|
</tr>
|
|
|
|
|
{
|
|
|
|
|
papers.map((it, idx) => {
|
|
|
|
|
return (
|
|
|
|
|
<tr key={it.ID}>
|
|
|
|
|
<td colSpan={24} rowSpan={1}>
|
|
|
|
|
<table border={0} className={SEstyles.TestPaperItem}>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={SEstyles.TestTiltle}>
|
|
|
|
|
<span>{idx + 1}.</span>
|
|
|
|
|
<span>{it.Nav_Test.NAME}</span>
|
|
|
|
|
<span>{this.getType(it.Nav_Test.TYPE)}</span>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr style={this.state.readonly && ((it.Nav_Test.ANSWER & 1) != 0) ? answer : null}>
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE === 0 ?
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={this.state.readonly && ((it.Nav_Test.ANSWER & 1) != 0) ? styles.answer : null}>
|
|
|
|
|
<Radio disabled={this.state.readonly} checked={(it.ANSWER & 1) != 0} onChange={evt => this.doOptionChange(it, idx, 1, evt)} />
|
|
|
|
|
<span>正确</span>
|
|
|
|
|
</td>
|
|
|
|
|
:
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={this.state.readonly && ((it.Nav_Test.ANSWER & 1) != 0) ? styles.answer : null}>
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE === 1 ?
|
|
|
|
|
<Radio disabled={this.state.readonly} checked={(it.ANSWER & 1) != 0} onChange={evt => this.doOptionChange(it, idx, 1, evt)} />
|
|
|
|
|
:
|
|
|
|
|
<Checkbox disabled={this.state.readonly} checked={(it.ANSWER & 1) != 0} onChange={evt => this.doOptionChange(it, idx, 1, evt)} />
|
|
|
|
|
}
|
|
|
|
|
<span>A.</span>
|
|
|
|
|
<span>{it.Nav_Test.OPTION_A}</span>
|
|
|
|
|
</td>
|
|
|
|
|
}
|
|
|
|
|
</tr>
|
|
|
|
|
<tr style={this.state.readonly && ((it.Nav_Test.ANSWER & 2) != 0) ? answer : null}>
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE === 0 ?
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={this.state.readonly && ((it.Nav_Test.ANSWER & 2) != 0) ? styles.answer : null}>
|
|
|
|
|
<Radio disabled={this.state.readonly} checked={(it.ANSWER & 2) != 0} onChange={evt => this.doOptionChange(it, idx, 2, evt)} />
|
|
|
|
|
<span>错误</span>
|
|
|
|
|
</td>
|
|
|
|
|
:
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={this.state.readonly && ((it.Nav_Test.ANSWER & 2) != 0) ? styles.answer : null}>
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE === 1 ?
|
|
|
|
|
<Radio disabled={this.state.readonly} checked={(it.ANSWER & 2) != 0} onChange={evt => this.doOptionChange(it, idx, 2, evt)} />
|
|
|
|
|
:
|
|
|
|
|
<Checkbox disabled={this.state.readonly} checked={(it.ANSWER & 2) != 0} onChange={evt => this.doOptionChange(it, idx, 2, evt)} />
|
|
|
|
|
}
|
|
|
|
|
<span>B.</span>
|
|
|
|
|
<span>{it.Nav_Test.OPTION_B}</span>
|
|
|
|
|
</td>
|
|
|
|
|
}
|
|
|
|
|
</tr>
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE !== 0 &&
|
|
|
|
|
<tr style={this.state.readonly && ((it.Nav_Test.ANSWER & 4) != 0) ? answer : null}>
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={this.state.readonly && ((it.Nav_Test.ANSWER & 4) != 0) ? styles.answer : null}>
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE === 1 ?
|
|
|
|
|
<Radio disabled={this.state.readonly} checked={(it.ANSWER & 4) != 0} onChange={evt => this.doOptionChange(it, idx, 4, evt)} />
|
|
|
|
|
:
|
|
|
|
|
<Checkbox disabled={this.state.readonly} checked={(it.ANSWER & 4) != 0} onChange={evt => this.doOptionChange(it, idx, 4, evt)} />
|
|
|
|
|
}
|
|
|
|
|
<span>C.</span>
|
|
|
|
|
<span>{it.Nav_Test.OPTION_C}</span>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
}
|
|
|
|
|
{
|
2024-04-16 14:31:26 +08:00
|
|
|
it.Nav_Test.TYPE !== 0 && it.Nav_Test.OPTION_D != "" && it.Nav_Test.OPTION_D != undefined &&
|
2024-01-22 09:18:38 +08:00
|
|
|
<tr style={this.state.readonly && ((it.Nav_Test.ANSWER & 8) != 0) ? answer : null}>
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={this.state.readonly && ((it.Nav_Test.ANSWER & 8) != 0) ? styles.answer : null}>
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE === 1 ?
|
|
|
|
|
<Radio disabled={this.state.readonly} checked={(it.ANSWER & 8) != 0} onChange={evt => this.doOptionChange(it, idx, 8, evt)} />
|
|
|
|
|
:
|
|
|
|
|
<Checkbox disabled={this.state.readonly} checked={(it.ANSWER & 8) != 0} onChange={evt => this.doOptionChange(it, idx, 8, evt)} />
|
|
|
|
|
}
|
|
|
|
|
<span>D.</span>
|
|
|
|
|
<span>{it.Nav_Test.OPTION_D}</span>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE !== 0 && it.Nav_Test.OPTION_E != "" && it.Nav_Test.OPTION_E != undefined &&
|
|
|
|
|
<tr style={this.state.readonly && ((it.Nav_Test.ANSWER & 16) != 0) ? answer : null}>
|
|
|
|
|
<td colSpan={24} rowSpan={1} className={this.state.readonly && ((it.Nav_Test.ANSWER & 16) != 0) ? styles.answer : null}>
|
|
|
|
|
{
|
|
|
|
|
it.Nav_Test.TYPE === 1 ?
|
|
|
|
|
<Radio disabled={this.state.readonly} checked={(it.ANSWER & 16) != 0} onChange={evt => this.doOptionChange(it, idx, 16, evt)} />
|
|
|
|
|
:
|
|
|
|
|
<Checkbox disabled={this.state.readonly} checked={(it.ANSWER & 16) != 0} onChange={evt => this.doOptionChange(it, idx, 16, evt)} />
|
|
|
|
|
}
|
|
|
|
|
<span>E.</span>
|
|
|
|
|
<span>{it.Nav_Test.OPTION_E}</span>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
}
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</Spin>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default connect(({ login, app }) => ({ login, app }))(SE018PaperPage)
|