mh_jy_safe_web/src/components/CustomPages/FO/FoTeamActivityShowPrint.js
2025-08-25 10:08:30 +08:00

238 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { message } from "antd/lib/index";
import { Button, Descriptions, Badge, Popconfirm, Row, Col, Form, Input, Select, Modal } from 'antd';
import React from 'react';
import { initFilter, extendRule, extendInclude, setDataFieldValue, guid, showFiles, GetFileModel, onBeforeSaveHandleRecordLog } from "../../../utils/common";
import { ExportToExcel } from '@woowalker/feui'
import styles from '../HI/StepForm.css';
import ReactToPrint from "react-to-print";
import moment from 'moment';
import config from "../../../config.js";
import XLSX from 'xlsx';
import { connect } from 'dva';
import FormPage from '../../../components/FormPage'
class FoTeamActivityShowPrint extends React.Component {
constructor(props) {
super(props);
this.state = {
data: null,
item: null,
enumData: null,
btndisplay: 'none',
readDisplay: 'none',
isFinished: 'none',
isMobile: false,
fileForm: {
title: "",
visible: 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);
}
}
onTableBtnExport() {
// let TableWrap = document.getElementById('table1' + this.props.record.ID);
let TableWrap = document.getElementById('table1');
let Table = TableWrap.getElementsByTagName('table1')[0];
const wb = XLSX.utils.table_to_book(Table);
XLSX.writeFile(wb, this.state.data.Nav_Taem?.NAME + ".xlsx")
}
onTableBtnAgree() {
onBeforeSaveHandleRecordLog(this.props, 'FO010', 'FO010_onTableBtnAgree')
this.props.dispatch({
type: 'app/getDataByPost',
url: 'FO/FOTeamActivity/TeamActivityUserUpdate',
payload: {
ID: this.props.data.id,
//ORG_ID: this.props.data.OrgId,
TaskID: this.props.data.TaskID, //传参到后端消息表ID
},
onComplete: (ret) => {
if (ret) {
message.success('签到成功!');
this.BtnClose();
}
}
})
}
onTableBtnRead() {
onBeforeSaveHandleRecordLog(this.props, 'FO010', 'FO010_onTableBtnRead')
this.props.dispatch({
type: 'app/getDataByPost',
url: 'FO/FOTeamActivity/TeamActivityUserRead',
payload: {
ID: this.props.data.id,
TaskID: this.props.data.TaskID, //传参到后端消息表ID
},
onComplete: (ret) => {
if (ret) {
message.success('已阅成功!');
this.BtnClose();
}
}
})
}
BtnClose = () => {
if (typeof this.props.data.onCancel != "undefined" && typeof this.props.data.onCancel == 'function')
this.props.data.onCancel();
}
//加载数据(传过来的参数都在props里面包括登录信息)
loadData = (id) => {
var orgId = this.props.login ? this.props.login.OrgId : ''; //登录后有存储登录信息
let json = initFilter(orgId);
extendRule(json, 'ID', 1, id); //ID=‘’,字段,等于,条件值, 1代表=2代表不等于3小于4小于等于5大于6大于等于7以开始的Like,8以结束的Like9包含
extendInclude(json, 'Nav_Taem');
extendInclude(json, 'Nav_User');
extendInclude(json, 'Nav_MainUser');
extendInclude(json, 'Nav_TeamActivityUser.Nav_User');
extendInclude(json, 'Nav_TeamActivityUser.Nav_User.Nav_Person.Nav_Post');
extendInclude(json, 'Nav_TeamActivityFile.Nav_ImgFile');
json.IgnoreDataRule = true;
let attendanceAry = [], leaveAry = [];
let that = this;
let btndisplay = 'none';
this.state.readDisplay = 'none';
this.props.dispatch({
type: 'app/getDataByPost',
payload: json,
url: 'FO/TeamActivity/Get',
onComplete: (ret) => { //返回查询结果ret
if (ret) { //判断是否有记录
//data?.Nav_TeamActivityUser.map(item => { //当data有值时遍历(map)data记录集
ret?.Nav_TeamActivityUser.forEach(item => { //当data有值时遍历(forEach)data记录集
if (item.ATTEND_STATUS === 1) { //参会人员
attendanceAry.push(item.Nav_User.NAME); //将人员添加到attendanceAry数组
} else if (item.ATTEND_STATUS === 2) { //缺席人员,
leaveAry.push(item.Nav_User.NAME); //将人员添加到attendanceAry数组
}
//if (item.Nav_User.ID.toLowerCase() == that.props.login.userId.toLowerCase() && item.TA_STATUS===1 && item.ATTEND_STATUS === 1 && item.SIGN_IN_STATUS === 0) {
if (item.Nav_User.ID.toLowerCase() == that.props.login.userId.toLowerCase() && item.ATTEND_STATUS === 1 && item.SIGN_IN_STATUS === 0 || !(this.props.data.tableKey == "2" || this.props.data.tableKey == undefined)) {
btndisplay = 'inline'; //签到按扭显示变量
}
if (item.Nav_User.ID.toLowerCase() == that.props.login.userId.toLowerCase() && item.ATTEND_STATUS === 2) {
this.state.readDisplay = 'inline';
}
})
this.setState({ //设置setState全局变量
data: ret, //将ret对象赋值给data, data供页面调用
attendance: attendanceAry,
leave: leaveAry,
btndisplay: btndisplay
})
if (ret.TA_STATUS == 2) {
this.setState({
isFinished: 'inline'
})
}
} else { message.error('数据加载获取失败,请联系管理员排查!'); }
}
});
}
//渲染页面
render() {
const { data, isMobile } = this.state;
return <div>
<div style={{ marginTop: '10px' }}>
<table>
<tr>
<td><ReactToPrint trigger={() => <Button type={'default'} icon={'printer'} style={{ marginLeft: '20px', display: this.state.isFinished }} >打印</Button>} content={() => this.componentRef}
pageStyle=".printDIV { padding:0 40px;} img{width :120px}"
/></td>
<td style={{ marginLeft: '20px', display: this.state.isFinished }}><ExportToExcel fileName='班组安全记录活动表' tableId='table1' /></td>
<td><Button type="default" style={{ marginLeft: isMobile ? '0' : '20px', display: this.state.btndisplay }} onClick={() => this.onTableBtnAgree()} icon="check" >签到</Button></td>
<td><Button type="default" style={{ marginLeft: isMobile ? '0' : '20px', display: this.state.readDisplay }} onClick={() => this.onTableBtnRead()} icon="check" >已阅</Button></td>
</tr>
</table>
</div>
<FormPage {...this.state.tmpData} />
{/* 班组安全活动记录表 */}
<div ref={el => (this.componentRef = el)} style={{ padding: isMobile ? '0px 0px 20px 0px' : '20px' }} id={'tableId' + this.props.id}>
<h1 style={{ textAlign: 'center' }}>班组安全活动记录表</h1>
{
data ? <div>
<table id={'table1'} style={{ width: '100%', borderTop: '1px solid #333', borderLeft: '1px solid #333' }} className={styles.PrintForm}>
<tr>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>活动主题</td>
<td colSpan={4} rowSpan={1} style={{ textAlign: 'left' }}>{data.TITLE}</td>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>活动日期</td>
<td colSpan={4} rowSpan={1} style={{ textAlign: 'left' }}>{moment(data.ACTIVITY_TIME).format('YYYY-MM-DD')} </td>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>活动地点</td>
<td colSpan={4} rowSpan={1} style={{ textAlign: 'left' }}>{data.ADDRESS}</td>
</tr>
<tr>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>班组名称</td>
<td colSpan={4} rowSpan={1} style={{ textAlign: 'left' }}>{data.Nav_Taem ? data.Nav_Taem.NAME : ''}</td>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>主持人</td>
<td colSpan={4} rowSpan={1} style={{ textAlign: 'left' }}>{data.Nav_MainUser ? data.Nav_MainUser.NAME : ''}</td>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>记录人</td>
<td colSpan={4} rowSpan={1} style={{ textAlign: 'left' }}>{data.Nav_User ? data.Nav_User.NAME : ''}</td>
</tr>
<tr>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>活动时长</td>
<td colSpan={16} rowSpan={1} style={{ textAlign: 'left' }}>{data.DURATION}</td>
</tr>
<tr>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>活动记录</td>
<td colSpan={16} rowSpan={1} style={{ textAlign: 'left', height: '150px' }}>{data.ACTIVITY_CONTENT}</td>
</tr>
<tr>
<td colSpan={2} rowSpan={1} className={styles.fontBold}>附件</td>
<td colSpan={16} rowSpan={1} style={{ textAlign: 'left' }}>
{
showFiles(data?.Nav_TeamActivityFile, config.picServerHost, this)
}
</td>
</tr>
<tr>
<td colSpan={3} rowSpan={1} className={styles.fontBold}>姓名</td>
<td colSpan={3} rowSpan={1} className={styles.fontBold}>工号</td>
<td colSpan={4} rowSpan={1} className={styles.fontBold}>岗位</td>
<td colSpan={4} rowSpan={1} className={styles.fontBold}>出席状态</td>
<td colSpan={4} rowSpan={1} className={styles.fontBold}>签名</td>
</tr>
{
data.Nav_TeamActivityUser.map((item, index) => {
return <tr >
<td colSpan={3} rowSpan={1}>{item.SIGN_IN_STATUS == 1 ? item.Nav_User.NAME : (<span style={{ color: 'red' }}>{item.Nav_User.NAME + " "}</span>)}</td>
<td colSpan={3} rowSpan={1}>{item.Nav_User.CODE}</td>
<td colSpan={4} rowSpan={1}>{item.Nav_User.Nav_Person.Nav_Post.NAME}</td>
<td colSpan={4} rowSpan={1}>{item.ATTEND_STATUS == 1 ? '参会' : '请假'}</td>
<td colSpan={4} rowSpan={1}>{item.ATTEND_STATUS == 1 && item.SIGN_IN_STATUS == 1 ? item.Nav_User.FILE_PATH && <img width={'100px'} src={config.picServerHost + item.Nav_User?.FILE_PATH} /> : ""}</td>
</tr>
})
}
</table>
</div> : null
}
</div>
{
GetFileModel(Modal, FormPage, this, this.state.fileForm.visible)
}
</div>
}
}
export default connect(({ login }) => ({ login }))(FoTeamActivityShowPrint)