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
{ this.state.viewAll && } } content={() => this.componentRef} /> { !this.state.readonly && ( ) }
(this.componentRef = el)} id={'tableId' + this.props.data.id}>

培训在线答题

{ papers.map((it, idx) => { return ( ) }) }
培训名称 {notify ? notify.NAME : null}
编号 {notify ? notify.CODE : null} 培训时间 {notify ? `${moment(notify.TRAIN_START_TIME).format('YYYY-MM-DD')} - ${moment(notify.TRAIN_END_TIME).format('YYYY-MM-DD')}` : null} 培训地点 {notify ? notify.TRAIN_ADDR : null}
组织部门 {notify && notify.Nav_LaunchDepartment ? notify.Nav_LaunchDepartment.NAME : null} 记录/考核人 {notify && notify.Nav_LaunchUser ? notify.Nav_LaunchUser.NAME : null} 培训老师 {notify ? notify.TRAIN_TEACHER : null}
培训学时 {notify ? notify.HOURS : null} 培训形式 {notify ? this.returnModel(notify.TRAIN_MODEL) : null} 考核方式 {notify && notify.Nav_TrainCheckType ? notify.Nav_TrainCheckType.NAME : null}
培训内容 { notify && notify.Nav_TrainContentList && notify.Nav_TrainContentList.map(it => { return it.Nav_Point.NAME }).join('、') }
工号 {SelUsr && SelUsr.CODE} 答卷人 {SelUsr && SelUsr.NAME} 成绩 {this.CalcScore()}
问卷
{ it.Nav_Test.TYPE === 0 ? : } { it.Nav_Test.TYPE === 0 ? : } { it.Nav_Test.TYPE !== 0 && } { it.Nav_Test.TYPE !== 0 && it.Nav_Test.OPTION_D != "" && it.Nav_Test.OPTION_D != undefined && } { it.Nav_Test.TYPE !== 0 && it.Nav_Test.OPTION_E != "" && it.Nav_Test.OPTION_E != undefined && }
{idx + 1}. {it.Nav_Test.NAME} {this.getType(it.Nav_Test.TYPE)}
this.doOptionChange(it, idx, 1, evt)} /> 正确 { it.Nav_Test.TYPE === 1 ? this.doOptionChange(it, idx, 1, evt)} /> : this.doOptionChange(it, idx, 1, evt)} /> } A. {it.Nav_Test.OPTION_A}
this.doOptionChange(it, idx, 2, evt)} /> 错误 { it.Nav_Test.TYPE === 1 ? this.doOptionChange(it, idx, 2, evt)} /> : this.doOptionChange(it, idx, 2, evt)} /> } B. {it.Nav_Test.OPTION_B}
{ it.Nav_Test.TYPE === 1 ? this.doOptionChange(it, idx, 4, evt)} /> : this.doOptionChange(it, idx, 4, evt)} /> } C. {it.Nav_Test.OPTION_C}
{ it.Nav_Test.TYPE === 1 ? this.doOptionChange(it, idx, 8, evt)} /> : this.doOptionChange(it, idx, 8, evt)} /> } D. {it.Nav_Test.OPTION_D}
{ it.Nav_Test.TYPE === 1 ? this.doOptionChange(it, idx, 16, evt)} /> : this.doOptionChange(it, idx, 16, evt)} /> } E. {it.Nav_Test.OPTION_E}
} } export default connect(({ login, app }) => ({ login, app }))(SE018PaperPage)