import { message } from "antd/lib/index"; import { Button, Popconfirm, Row, Col, Checkbox, Radio, Form, Input, Select, Table, Upload, Icon, PageHeader, Modal } from 'antd'; import React from 'react'; import { initFilter, extendRule, extendInclude, showUserSign, showFiles, GetFileModel } from "../../../utils/common"; import ReactToPrint from "react-to-print"; import styles from '../../CustomPages/HI/StepForm.css'; import XLSX from 'xlsx'; import { connect } from 'dva'; import moment from 'moment'; import config from "../../../config"; import FormPage from '../../FormPage' class SE018EditPage extends React.Component { constructor(props) { super(props); this.state = { data: null, missUsers: [], leaveUsers: [], isView: props.formCode === 'SE017_SHOWPRINT' || props.formCode === 'SE050_SHOWPRINT', isApprove: false, isExam: false, isShow: "none", //弹窗参数 detailForm: { isShow: false, formCode: "SE018_PAPERPAGE", title: "培训记录答题", ID: '' }, passRate: 0, isClisk: false, fileForm: { title: "", visible: false, }, }; }; componentDidMount() { if (this.props.formCode == "SE050_SHOWPRINT") { this.loadData(this.props.data.parentRecord.RECORD_ID); } else { this.loadData(this.props.data.id); } } BtnClose = () => { if (typeof this.props.data.onCancel != "undefined" && typeof this.props.data.onCancel == 'function') this.props.data.onCancel(); } loadData = (dataId) => { let json = initFilter(this.props.login.OrgId, '', null, null, null); extendRule(json, 'ID', 1, dataId); extendInclude(json, 'Nav_Notify'); extendInclude(json, 'Nav_Notify.Nav_TrainContentList.Nav_Point'); extendInclude(json, 'Nav_Notify.Nav_LaunchDepartment'); extendInclude(json, 'Nav_Notify.Nav_LaunchUser'); extendInclude(json, 'Nav_Notify.Nav_TrainType'); // extendInclude(json, 'Nav_Notify.Nav_TrainCheckType'); extendInclude(json, 'Nav_Users.Nav_User'); extendInclude(json, 'Nav_Files.Nav_ImgFile'); extendInclude(json, 'Nav_Users.Nav_User'); extendInclude(json, 'Nav_Papers'); json.IgnoreDataRule = true; this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'SE/TrainRecord/Get', onComplete: (ret) => { if (!ret) return; this.updateData(ret); } }); } updateData(data) { let isApprove = false; // if (data.Nav_Notify.Nav_TrainCheckType.NAME == "笔试") { if (data.Nav_Notify.CHECKTYPE == 51) { this.state.isExam = true; this.state.isShow = "table-cell"; } this.state.leaveUsers = data.Nav_Users.filter(item => item.STATUS == 1); this.state.missUsers = data.Nav_Users.filter(item => item.STATUS == 2); data.Nav_Users = data.Nav_Users.filter(item => item.STATUS == 0); let uniqueUsers = data.Nav_Papers.reduce((acc, user) => { // 如果累积数组中还没有这个 user_id,则添加 if (!acc.some(item => item.USER_ID === user.USER_ID)) { acc.push(user); } return acc; }, []); let temp = 0; uniqueUsers.forEach(item => { if (item.SCORE >= 80) { temp++; } }) var passRateThis = 0 if (uniqueUsers && uniqueUsers.length > 0) { passRateThis = (temp / uniqueUsers.length).toFixed(4) * 100; } //安环部负责人审阅中 if (data.STATUS >= 2 && this.props.formCode != "SE050_SHOWPRINT" && this.props.data.tableKey != undefined) { isApprove = true; } this.setState({ data, isApprove, passRate: passRateThis }) } onApprove = () => { let json = initFilter(this.props.login.OrgId); json.Keyword = this.props.data.id; json.Parameter1 = this.props.data.TaskID; this.props.dispatch({ type: 'app/getDataByPost', url: 'SE/SETrainRecord/Submit', payload: json, onComplete: (ret) => { if (ret) { message.success('提交成功!'); this.BtnClose(); } } }) } onSignIn = () => { if (!this.state.data || (this.state.data.STATUS !== 1) || !this.state.data.Nav_Users) { return; } var ud = this.state.data.Nav_Users.find(it => it.USER_ID === this.props.login.user.ID) if (!ud) { return; } this.state.isClisk = true; let json = initFilter(this.props.login.OrgId); json.Keyword = this.props.data.id; json.Parameter1 = this.props.data.TaskID; this.props.dispatch({ type: 'app/getDataByPost', url: 'SE/SETrainRecord/SignIn', payload: json, onComplete: (ret) => { if (ret) { message.success('签到成功'); this.BtnClose(); } } }) } 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 = '培训记录表'; name += '.xlsx'; XLSX.writeFile(wb, name) } 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; } showDetailModal = (ID, USER_ID) => { const newtmpData = { data: { id: ID, USER_ID: USER_ID, }, formCode: "SE018_PAPERPAGE", }; this.setState({ tmpData: newtmpData }, () => { var detailForm = { isShow: true, title: "查看成绩单", }; this.setState({ detailForm: detailForm, }); }); }; //详情弹窗关闭(隐藏) detailFormClose = () => { var detailForm = { isShow: false, }; this.setState({ detailForm: detailForm, }); }; render() { const { data, missUsers, leaveUsers } = this.state; const signable = this.state.isView && data && data.STATUS == 1 && data.Nav_Users && data.Nav_Users.find(it => it.USER_ID === this.props.login.user.ID) && (this.props.data.tableKey == "1") return
{ this.state.isView && <> } content={() => this.componentRef} /> { signable && ( ) } } { this.state.isApprove && <> }
(this.componentRef = el)} id={'tableId' + this.props.data.id} style={{ padding: '20px' }}> { this.state.isView &&

培训记录表

} {/* */}
培训名称 {data && data.Nav_Notify ? data.Nav_Notify.NAME : null}
培训类型 {data && data.Nav_Notify.Nav_TrainType ? data.Nav_Notify.Nav_TrainType.NAME : null} 培训级别 {data && this.props.app.enums.FMDepartmentType.enums[data.Nav_Notify.LEVEL]} 组织部门 {data && data.Nav_Notify && data.Nav_Notify.Nav_LaunchDepartment ? data.Nav_Notify.Nav_LaunchDepartment.NAME : null}
培训时间 {data && data.Nav_Notify ? `${data.Nav_Notify.TRAIN_START_TIME} - ${data.Nav_Notify.TRAIN_END_TIME}` : null} 培训地点 {data && data.Nav_Notify ? data.Nav_Notify.TRAIN_ADDR : null} 培训学时 {data && data.Nav_Notify ? data.Nav_Notify.HOURS : null}
培训老师 {data && data.Nav_Notify ? data.Nav_Notify.TRAIN_TEACHER : null} 培训形式 {data && this.returnModel(data.Nav_Notify.TRAIN_MODEL)} 考核方式{data && data.Nav_Notify && data.Nav_Notify.Nav_TrainCheckType ? data.Nav_Notify.Nav_TrainCheckType.NAME : null}{data.Nav_Notify.CHECKTYPE && enums.PlanCheckType.enums[data.Nav_Notify.CHECKTYPE]}
培训内容 { data && data.Nav_Notify && data.Nav_Notify.Nav_TrainContentList && data.Nav_Notify.Nav_TrainContentList.map(it => { return it.Nav_Point.NAME }).join('、') }
请假人员 { leaveUsers && (leaveUsers.map(it => { return it.Nav_User.NAME }).join('、') || '无') }
缺席人员 { missUsers && (missUsers.map(it => { return it.Nav_User.NAME }).join('、') || '无') }
培训人员 { data && data.Nav_Users && (data.Nav_Users.map(it => { if (it.OK) { return it.Nav_User.NAME + " " } else { return } }) || '无') }
附件 { showFiles(data?.Nav_Files, config.picServerHost, this) }
审阅意见 { data && data.STATUS > 2 && '已阅' }
合格率 {this.state.passRate + '%'}
{ this.state.isView && <>

培训签到表

{this.state.isExam && } { this.state.isView && data && data.Nav_Users && data.Nav_Users.filter(it => it.OK).map((it, idx) => { return {this.state.isExam && } }) }
序号 部门 工号 姓名 岗位 电子签名分数查看试卷
{idx + 1} {it.DEPARTMENT_NAME} {it.Nav_User.CODE} {it.Nav_User.NAME} {it.POST_NAME} { showUserSign(it.Nav_User, config.picServerHost) } {this.state.data.Nav_Papers.find(item => item.USER_ID == it.USER_ID)?.SCORE}
this.showDetailModal(it.RECORD_ID, it.USER_ID)}>
}
{ GetFileModel(Modal, FormPage, this, this.state.fileForm.visible) }
} } export default connect(({ login, app }) => ({ login, app }))(SE018EditPage)