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 SESafeSurveyTest extends React.Component { constructor(props) { super(props); let viewAll = false; if ((this.props.formParam && this.props.formParam.viewAll) || (this.props.login.user.APPROVE_ROLE_ID != null && this.props.data.tableKey == undefined)) { viewAll = true; } this.state = { papers: [], viewAll, safe: null, UserList: [], SelUsrID: null, config: null, score: 0, NAME: '', END_TIME: null, readonly: true, haveAnswer: false, 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, 'SAFE_ID', 1, this.props.data.id); extendInclude(json, 'Nav_User'); this.state.loading = true; this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'SE/SESafeSurvey/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, 'SAFE_ID', 1, this.props.data.id); extendRule(json, 'USER_ID', 1, SelUsrID); extendInclude(json, 'Nav_Test'); //extendInclude(json, 'Nav_Test.Nav_File'); extendInclude(json, 'Nav_Safe'); extendInclude(json, 'Nav_Safe.Nav_LaunchDepartment'); extendInclude(json, 'Nav_Safe.Nav_LaunchUser'); extendInclude(json, 'Nav_Safe.Nav_Points'); extendInclude(json, 'Nav_Safe.Nav_Points.Nav_Point'); extendInclude(json, 'Nav_Safe.Nav_JoinDepartment'); extendInclude(json, 'Nav_Safe.Nav_JoinDepartment.Nav_Department'); extendInclude(json, 'Nav_User'); extendInclude(json, 'Nav_Department'); this.state.loading = true; this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'SE/SESafeSurvey/GetPapers', onComplete: (ret) => { this.state.loading = false; if (ret && ret.Nav_Papers && ret.Nav_Papers.length > 0) { let NAME = ''; let END_TIME = null; if (ret.Nav_Papers.length > 0) { NAME = ret.Nav_Papers[0].Nav_Safe.NAME; END_TIME = ret.Nav_Papers[0].Nav_Safe.END_TIME; } if (moment().format("YYYY-MM-DD HH:mm:ss") > END_TIME&&this.props.data.tableKey != undefined) { message.error('已过答题截止时间!'); this.props.dispatch({ type: 'app/getDataByPost', url: 'HM/HMNoticeRelease/PersonalAgree', payload: { ID: this.props.data.id, TaskID: this.props.data.TaskID, }, }) } else { let haveAnswer = ret.Nav_Papers.find(it => it.ANSWER != 0) ? true : false; this.setState({ papers: ret.Nav_Papers.sort((a, b) => { return a.Nav_Test.TYPE - b.Nav_Test.TYPE }), config: ret.Nav_Config, safe: ret.Nav_Papers[0].Nav_Safe, readonly: haveAnswer || this.state.viewAll, haveAnswer: haveAnswer, NAME: NAME, END_TIME: END_TIME, }) } } else { message.warn('未能成功获取此用户的问卷,请稍后重试'); } } }); } 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/SESafeSurvey/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) { if (it.Nav_Department.NAME == "宁化行洛坑钨矿有限公司") { arr.push("公司领导") } else { arr.push(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, }) } 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 { safe, papers, SelUsrID, UserList } = this.state; const SelUsr = SelUsrID && UserList.find(it => it.ID === SelUsrID); return
} content={() => this.componentRef} /> { this.state.viewAll && } { !this.state.readonly && ( ) }
(this.componentRef = el)} id={'tableId' + this.props.data.id} style={{ padding: '20px' }}>

安全意识调查问卷

{ !this.state.haveAnswer && this.state.viewAll && !this.state.loading && } { (this.state.haveAnswer || !this.state.viewAll) && papers.map((it, idx) => { return ( ) }) }
调查名称 {safe ? safe.NAME : ''}
发起时间 {safe ? safe.LAUNCH_TIME : null} 发起部门 {safe ? safe.Nav_LaunchDepartment.NAME : ''} 发起人员 {safe ? safe.Nav_LaunchUser.NAME : ''} 截止时间 {safe ? safe.END_TIME : ''}
参与人员 {this.getJoinDepartment().join('、')}
调查内容 {safe && safe.Nav_Points && safe.Nav_Points.map(it => 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 }))(SESafeSurveyTest)