// FullScreenInter.js - 主文件保持简洁 import React from 'react'; import { connect } from 'dva'; import { withRouter } from 'dva/router'; import { Icon, Row, Col, message } from 'antd'; import styles from './fullinter.less'; import logo from '../assets/layout/headerno-logo-new.png'; import debounce from 'lodash.debounce'; import storage from '../utils/storage'; import { initFilter, extendRule } from '../utils/common'; import HomeContent from './FullOther/HomeContent'; import TrainingContent from './FullOther/TrainingContent'; import RiskControl from './FullOther/RiskControl'; import ClassBuild from './FullOther/ClassBuild'; import DangerJob from './FullOther/DangerJob'; import HiddenSolve from './FullOther/HiddenSolve'; import moment from 'moment'; // 添加这一行 const getScale = () => { const width = 1920, height = 1080; let ww = window.innerWidth / width; let wh = window.innerHeight / height; return ww < wh ? ww : wh; }; class FullScreen extends React.Component { constructor(props) { super(props); this.state = { nowDate: '', riskTypeRate: [], riskTotal: [], // jobTodayQty: [], hiddenSummary: [], taskTop3: [], scale: getScale(), configBanner: ['首页', '风险管控', '隐患治理', '班组建设', '危险作业', '安全培训'], mediaList: [], currentMediaIndex: 0, announcementList: [], activeTab: '首页', // 安全培训相关数据 trainingData: { listNAME: [], YearCount: [], MonthRecordCount: [], MonthPersonCount: [], listAnnourcement: [], TITLE: '', listVideoImg: [], playSet: [], }, trainingSubData: { listNAME: [], YearCount: [], MonthRecordCount: [], MonthPersonCount: [], }, trainingSubDataMonth: { listNAME: [], YearCount: [], MonthRecordCount: [], MonthPersonCount: [], }, trainingSubIDCard: [], trainingSubBSType: {}, trainingCompanyData: [], // 安全培训专用公司数据 selectedTrainingMonth: new Date().getMonth() + 1, selectedTrainingCompany: '', // 隐患治理相关数据 hiddenSubData: {}, // 隐患治理数据 hiddenCompanyData: [], // 隐患治理专用公司数据 selectedHiddenCompany: '', // 隐患治理选中的公司 // 其他页面数据 riskSubData: {}, classSubData: [], dangerSubData: {}, jobTodayQty: [], dangerCompanyData: [], selectedDangerCompany: '', selectedStartDate: moment(), selectedEndDate: moment(), announcementDetail: null, announcementDetailLoading: false, announcementModalVisible: false, currentAnnouncement: null, }; this.isUnmounted = false; this.dataTimer = null; // 新增:用于数据定时请求 } setScale = debounce(() => { if (this.isUnmounted) return; this.setState({ scale: getScale() }); }, 500); toggleFullscreen = () => { if (!document.fullscreenElement) { document.documentElement.requestFullscreen?.(); } else { document.exitFullscreen?.(); } }; startDataRefreshTimer = () => { // 清除已有定时器 if (this.dataTimer) { clearInterval(this.dataTimer); } // 设置新的定时器,每5分钟执行一次 this.dataTimer = setInterval( () => { if (!this.isUnmounted) { if (this.state.activeTab === '首页') { this.getHomeDataArray(); this.getYearPXData(); } // 安全培训 - 参考原有逻辑 else if (this.state.activeTab === '安全培训') { this.getTrainingCompanyData(); // 先获取公司列表 this.getHomeSESubYearData(); this.getHomeSESubYearMonthData(); this.getHomeSESubIDCardData(); } // 隐患治理 - 参考安全培训的调用顺序 else if (this.state.activeTab === '隐患治理') { this.getHiddenCompanyData(); // 先获取公司列表(与安全培训独立) } // 风险管控 else if (this.state.activeTab === '风险管控') { this.getRiskSubData(); } // 班组建设 else if (this.state.activeTab === '班组建设') { this.getClassSubData(); } // 危险作业 else if (this.state.activeTab === '危险作业') { this.getDangerCompanyData(); } } }, 5 * 60 * 1000 ); // 5分钟 = 300000毫秒 }; componentDidMount() { this.isUnmounted = false; window.addEventListener('resize', this.setScale); this.getHomeDataArray(); this.getYearPXData(); // 启动定时刷新 this.startDataRefreshTimer(); this.timer = setInterval(() => { if (!this.isUnmounted) this.setState({ nowDate: this.getDate() }); }, 1000); document.addEventListener('fullscreenchange', this.handleFullscreenChange); } getAnnouncementDetail = (announcement) => { return new Promise((resolve, reject) => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); extendRule(json, 'ID', 1, announcement.ID); json.Include = ['Nav_Orgs', 'Nav_Orgs.Nav_OrgSub', 'Nav_Files.Nav_ImgFile']; this.setState({ announcementDetailLoading: true, announcementDetail: null }); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'PF/PFAnnourcement/Get', onComplete: (ret) => { if (ret && !this.isUnmounted) { this.setState({ announcementDetail: ret, announcementDetailLoading: false, }); resolve(ret); } else { message.error('暂无公告详情'); this.setState({ announcementDetailLoading: false }); reject(new Error('获取公告详情失败')); } }, onError: (error) => { this.setState({ announcementDetailLoading: false }); reject(error); }, }); }); }; handleAnnouncementClick = async (announcement) => { try { const detail = await this.getAnnouncementDetail(announcement); this.setState({ currentAnnouncement: detail, announcementModalVisible: true, }); } catch (error) { console.error('获取公告详情失败:', error); } }; handleAnnouncementModalClose = () => { this.setState({ announcementModalVisible: false, currentAnnouncement: null, }); }; handleCarouselChange = (current) => { this.setState({ currentMediaIndex: current }); }; handleDotClick = (index) => { this.setState({ currentMediaIndex: index }); }; handleTabClick = (name) => { this.setState({ activeTab: name }); if (name === '首页') { this.getHomeDataArray(); this.getYearPXData(); } // 安全培训 - 参考原有逻辑 if (name === '安全培训') { this.getTrainingCompanyData(); // 先获取公司列表 this.getHomeSESubYearData(); this.getHomeSESubYearMonthData(); this.getHomeSESubIDCardData(); } // 隐患治理 - 参考安全培训的调用顺序 if (name === '隐患治理') { this.getHiddenCompanyData(); // 先获取公司列表(与安全培训独立) } // 风险管控 if (name === '风险管控') { this.getRiskSubData(); } // 班组建设 if (name === '班组建设') { this.getClassSubData(); } // 危险作业 if (name === '危险作业') { this.getDangerCompanyData(); } }; handleFullscreenChange = () => { this.forceUpdate(); }; componentWillUnmount() { this.isUnmounted = true; window.removeEventListener('resize', this.setScale); if (this.timer) clearInterval(this.timer); // 清除数据刷新定时器 if (this.dataTimer) clearInterval(this.dataTimer); document.removeEventListener('fullscreenchange', this.handleFullscreenChange); } getDate = () => { const myDate = new Date(); const year = myDate.getFullYear(); const mon = myDate.getMonth() + 1; const date = myDate.getDate(); let hours = myDate.getHours(); let minutes = myDate.getMinutes(); let seconds = myDate.getSeconds(); hours = hours < 10 ? '0' + hours : hours; minutes = minutes < 10 ? '0' + minutes : minutes; seconds = seconds < 10 ? '0' + seconds : seconds; return `${year} 年 ${mon} 月 ${date} 日 \t\t\t${hours} : ${minutes} : ${seconds}`; }; getHomeDataArray = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIKanBanController/ReturnAllData', onComplete: (ret) => { if (ret && !this.isUnmounted) { this.setState({ riskTypeRate: ret.riskTypeRate || [], // jobTodayQty: ret.jobTodayQty || [], hiddenSummary: ret.hiddenSummary || [], taskTop3: ret.taskTop3 || [], }); } }, }); }; getYearPXData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIHeadSE/SEtrInfo', onComplete: (ret) => { if (ret && !this.isUnmounted) { this.setState({ trainingData: ret, }); } }, }); }; // ==================== 安全培训相关方法 ==================== getTrainingCompanyData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'FM/Organization/OrderPaged', onComplete: (ret) => { if (ret && !this.isUnmounted) { // 默认选中邦泰公司 const defaultCompany = ret.find((company) => company.ID === '00500000-0000-0000-0000-000000000000'); this.setState({ trainingCompanyData: ret, }); if (defaultCompany && !this.state.selectedTrainingCompany) { this.setState( { selectedTrainingCompany: defaultCompany.ID, }, () => { this.getBSTypeMonthData(); // 公司设置完成后获取培训类型数据 } ); } else { this.getBSTypeMonthData(); } } }, }); }; getHomeSESubYearData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); const currentYear = new Date().getFullYear(); json.Parameter1 = currentYear.toString(); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIHeadSE/HomeSESubYear', onComplete: (ret) => { if (ret && !this.isUnmounted) { const listNAME = ret.map((item) => item.CName); const MonthPersonCount = ret.map((item) => item.PCount); const MonthRecordCount = ret.map((item) => item.RCount); const YearCount = ret.map((item) => item.PCount); this.setState({ trainingSubData: { listNAME: listNAME, YearCount: YearCount, MonthRecordCount: MonthRecordCount, MonthPersonCount: MonthPersonCount, }, }); } }, }); }; handleTrainingMonthChange = (month) => { this.setState({ selectedTrainingMonth: month }, () => { this.getHomeSESubYearMonthData(); }); }; handleTrainingCompanyChange = (company) => { this.setState({ selectedTrainingCompany: company }, () => { this.getBSTypeMonthData(); }); }; getHomeSESubYearMonthData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); const currentYear = new Date().getFullYear(); json.Parameter1 = currentYear.toString(); json.Parameter2 = this.state.selectedTrainingMonth.toString(); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIHeadSE/HomeSESubYear', onComplete: (ret) => { if (ret && !this.isUnmounted) { const listNAME = ret.map((item) => item.CName); const MonthPersonCount = ret.map((item) => item.PCount); const MonthRecordCount = ret.map((item) => item.RCount); const YearCount = ret.map((item) => item.PCount); this.setState({ trainingSubDataMonth: { listNAME: listNAME, YearCount: YearCount, MonthRecordCount: MonthRecordCount, MonthPersonCount: MonthPersonCount, }, }); } }, }); }; getHomeSESubIDCardData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); const currentDate = new Date(); const year = currentDate.getFullYear(); const month = String(currentDate.getMonth() + 1).padStart(2, '0'); const day = String(currentDate.getDate()).padStart(2, '0'); const currentDateStr = `${year}-${month}-${day}`; json.Parameter1 = currentDateStr; this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIHeadSE/SubCertificateType', onComplete: (ret) => { if (ret && !this.isUnmounted) { this.setState({ trainingSubIDCard: ret, }); } }, }); }; getBSTypeMonthData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); const currentDate = new Date(); const year = currentDate.getFullYear(); const month = String(currentDate.getMonth() + 1).padStart(2, '0'); const day = String(currentDate.getDate()).padStart(2, '0'); const currentDateStr = `${year}-${month}-${day}`; json.Parameter1 = currentDateStr; if (this.state.selectedTrainingCompany) { json.Parameter2 = this.state.selectedTrainingCompany; } this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIHeadSE/SubTypeMonth', onComplete: (ret) => { if (ret && !this.isUnmounted) { this.setState({ trainingSubBSType: ret, }); } }, }); }; // ==================== 隐患治理相关方法 ==================== // 获取隐患治理的公司列表(独立于安全培训) getHiddenCompanyData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'FM/Organization/OrderPaged', onComplete: (ret) => { if (ret && !this.isUnmounted) { // 默认选中邦泰公司 const defaultCompany = ret.find((company) => company.ID === '00500000-0000-0000-0000-000000000000'); this.setState({ hiddenCompanyData: ret, }); if (defaultCompany && !this.state.selectedHiddenCompany) { this.setState({ selectedHiddenCompany: defaultCompany.ID, }); } this.getHiddenSubData(); } }, }); }; // 隐患治理公司筛选变化处理 handleHiddenCompanyChange = (company) => { this.setState({ selectedHiddenCompany: company }); }; getHiddenSubData = () => { // 以下是真实的API调用代码,如需使用请取消注释 const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIKanBanController/HiddenManage', onComplete: (ret) => { if (ret && !this.isUnmounted) { this.setState({ hiddenSubData: ret, }); } }, }); }; // ==================== 其他页面方法 ==================== getRiskSubData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIKanBanController/RiskManage', onComplete: (ret) => { if (ret && !this.isUnmounted) { this.setState({ riskSubData: ret, }); } }, }); }; getClassSubData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIKanBanController/TeamManage', onComplete: (ret) => { if (ret && !this.isUnmounted) { this.setState({ classSubData: ret, }); } }, }); }; getDangerCompanyData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'FM/Organization/OrderPaged', onComplete: (ret) => { if (ret && !this.isUnmounted) { const defaultCompany = ret.find((company) => company.ID === '00500000-0000-0000-0000-000000000000'); this.setState({ dangerCompanyData: ret, }); if (defaultCompany && !this.state.selectedDangerCompany) { this.setState( { selectedDangerCompany: defaultCompany.ID, }, () => { this.getDangerSubData(); } ); } else { this.getDangerSubData(); } } }, }); }; handleDangerCompanyChange = (company) => { this.setState({ selectedDangerCompany: company }, () => { this.getDangerSubData(); }); }; handleStartDateChange = (startDate) => { this.setState({ selectedStartDate: startDate }, () => { this.getDangerSubData(); }); }; handleEndDateChange = (endDate) => { this.setState({ selectedEndDate: endDate }, () => { this.getDangerSubData(); }); }; getDangerSubData = () => { const orgId = storage('lacal').getItem('webOrgId')?.val; const json = initFilter(orgId); json.Keyword ='' if (this.state.selectedDangerCompany) { const selectedCompanyObj = this.state.dangerCompanyData?.find( (company) => company.ID === this.state.selectedDangerCompany ); const selectedCompanyName = selectedCompanyObj?.NAME; if (selectedCompanyName) { json.Keyword = selectedCompanyName; // filteredData = filteredData.filter((item) => item.companyName === selectedCompanyName); } } json.Parameter1 = this.state.selectedStartDate?.format('YYYY-MM-DD') || ''; json.Parameter2 = this.state.selectedEndDate?.format('YYYY-MM-DD') || ''; this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'BI/BIKanBanController/JobManage', onComplete: (ret) => { if (ret && !this.isUnmounted) { //let filteredData = ret.jobList; // if (this.state.selectedDangerCompany) { // const selectedCompanyObj = this.state.dangerCompanyData?.find( // (company) => company.ID === this.state.selectedDangerCompany // ); // const selectedCompanyName = selectedCompanyObj?.NAME; // if (selectedCompanyName) { // filteredData = filteredData.filter((item) => item.companyName === selectedCompanyName); // }. // } this.setState({ dangerSubData: ret.jobList, jobTodayQty: ret.jobTodayQty, }); } }, }); }; renderOtherTabContent = () => { const { activeTab, trainingSubData, trainingSubBSType, trainingCompanyData, trainingSubDataMonth, selectedTrainingMonth, selectedTrainingCompany, trainingSubIDCard, riskSubData, classSubData, hiddenSubData, hiddenCompanyData, selectedHiddenCompany, } = this.state; if (activeTab === '安全培训') { return ( ); } if (activeTab === '风险管控') { return ; } if (activeTab === '隐患治理') { return ( ); } if (activeTab === '班组建设') { return ; } if (activeTab === '危险作业') { return ( ); } return (
{activeTab} 页面
这里是 {activeTab} 的内容展示区域
请根据实际需求替换此内容
); }; render() { const width = 1920, height = 1080; const { scale, activeTab, riskTypeRate, riskTotal, hiddenSummary, jobTodayQty, taskTop3, mediaList, announcementList, currentMediaIndex, trainingData, announcementModalVisible, currentAnnouncement, announcementDetailLoading, } = this.state; return (
{/* 头部 */}
logo
{this.state.configBanner.slice(0, 3).map((item, index) => (
this.handleTabClick(item)} > {item}
))}
金源公司安全生产管控平台
{this.state.configBanner.slice(3, 6).map((item, index) => (
this.handleTabClick(item)} > {item}
))}
{this.state.nowDate}
{/* 内容区域 */} {activeTab === '首页' ? ( ) : ( this.renderOtherTabContent() )}
); } } export default withRouter(connect(({ login }) => ({ login }))(FullScreen));