diff --git a/src/layout/Header.js b/src/layout/Header.js
index 75232eb..509a2c9 100644
--- a/src/layout/Header.js
+++ b/src/layout/Header.js
@@ -554,7 +554,7 @@ function Header(props) {
{!props.matchLogin ? (
{/*
*/}
-
+ {/*
*/}
{/* {window.location.host == "121.41.2.71:8001" ?
: ""} */}
diff --git a/src/layout/Sider.js b/src/layout/Sider.js
index 6f9f022..a2ce73d 100644
--- a/src/layout/Sider.js
+++ b/src/layout/Sider.js
@@ -266,6 +266,7 @@ const Sider = (props) => {
首页
+ {localStorage.getItem("webOrgId") == '00300000-0000-0000-0000-000000000000'?
+ :null}
(
-
-
- this.showEditModal(
- record.SOURCE_DATA_ID,
- record.SOURCE_FORMCODE,
- record.ID,
- record.NOTICE_TITLE
- )
- }
- >
- {record.NOTICE_TITLE}
-
-
- ),
- },
- {
- title: "开始时间",
- dataIndex: "TASK_STARTDT",
- key: "TASK_STARTDT",
- },
- {
- title: "结束时间",
- dataIndex: "TASK_ENDDT",
- key: "TASK_ENDDT",
- },
- {
- title: "预警状态",
- dataIndex: "NOTICE_TYPE",
- key: "NOTICE_TYPE",
- render: (text, record) => this.ShowState(record),
- },
- ];
- this.getTeam();
- //定时器功能,暂时不开启
- this.timerID = setInterval(
- () => this.getBaseInfoData(1, this.state.tableKey, 5),
- 120000
- );
- this.showModalSign();
- this.getBaseInfoData(1, 1, 5);
- this.setMessageData();
- this.state.scoreNoneColumns = [
- {
+ this.setState({
+ columns: [
+ {
+ width: "450px",
+ title: "任务名称",
+ dataIndex: "NOTICE_TITLE",
+ key: "NOTICE_TITLE",
+ render: (text, record) => (
+
+
+ this.showEditModal(
+ record.SOURCE_DATA_ID,
+ record.SOURCE_FORMCODE,
+ record.ID,
+ record.NOTICE_TITLE
+ )
+ }
+ >
+ {record.NOTICE_TITLE}
+
+
+ ),
+ },
+ {
+ title: "开始时间",
+ dataIndex: "TASK_STARTDT",
+ key: "TASK_STARTDT",
+ },
+ {
+ title: "结束时间",
+ dataIndex: "TASK_ENDDT",
+ key: "TASK_ENDDT",
+ },
+ {
+ title: "预警状态",
+ dataIndex: "NOTICE_TYPE",
+ key: "NOTICE_TYPE",
+ render: (text, record) => this.ShowState(record),
+ },
+ ],
+ scoreNoneColumns: [{
width: "80px",
title: "生产单元",
dataIndex: "Nav_ProductionUnit.NAME",
@@ -339,149 +337,279 @@ class GroupHome extends React.Component {
})}
),
+ }],
+ scoreColumns: [
+ {
+ width: "80px",
+ title: "生产单元",
+ dataIndex: "Nav_ProductionUnit.NAME",
+ key: "Nav_ProductionUnit.NAME",
+ },
+ {
+ width: "80px",
+ title: "一级要素",
+ dataIndex: "Nav_Primary.NAME",
+ key: "Nav_Primary.NAME",
+ },
+ {
+ width: "80px",
+ title: "二级要素",
+ dataIndex: "Nav_Second.NAME",
+ key: "Nav_Second.NAME",
+ },
+ {
+ width: "80px",
+ title: "三级要素",
+ dataIndex: "Nav_Three.NAME",
+ key: "Nav_Three.NAME",
+ },
+ {
+ width: "50px",
+ title: "考评项目",
+ dataIndex: "EVALUATION_ITEM",
+ key: "EVALUATION_ITEM",
+ render: (text, record) => (
+
+ {
+ this.props.app.enums?.PEEvaluationItemEnum.enums[
+ record.EVALUATION_ITEM
+ ]
+ }
+
+ ),
+ },
+ {
+ // width: "500px",
+ title: "考评内容",
+ dataIndex: "CONTENTS",
+ key: "CONTENTS",
+ },
+ {
+ width: "100px",
+ title: "评分办法",
+ dataIndex: "DESCRIPTION",
+ key: "DESCRIPTION",
+ },
+ {
+ width: "50px",
+ title: "标准分",
+ dataIndex: "STANDARDIZED_SCORE",
+ key: "STANDARDIZED_SCORE",
+ },
+ {
+ width: "50px",
+ title: "实得分",
+ dataIndex: "RESULT_SCORE",
+ key: "RESULT_SCORE",
+ },
+ {
+ width: "200px",
+ title: "不符合说明",
+ dataIndex: "NON_CONFORMANCE",
+ key: "NON_CONFORMANCE",
+ },
+ ,
+ {
+ width: "80px",
+ title: "评价结论",
+ dataIndex: "EVALUATION_RESULT",
+ key: "EVALUATION_RESULT",
+ render: (text, record) => (
+
+ {
+ this.props.app.enums?.PEEvaluationResultEnum.enums[
+ record.EVALUATION_RESULT
+ ]
+ }
+
+ ),
+ },
+ {
+ width: "100px",
+ title: "评价方法",
+ dataIndex: "Nav_EvaluationMethod",
+ key: "Nav_EvaluationMethod",
+ render: (text, record) => (
+
+ {record.Nav_EvaluationMethod &&
+ record.Nav_EvaluationMethod?.map((item, i) => {
+ return (
+
+
+
+ );
+ })}
+
+ ),
+ },
+ ],
+ scoreTotalColumns: [
+ {
+ title: "生产单元",
+ dataIndex: "Nav_ProductionUnit.NAME",
+ key: "Nav_ProductionUnit.NAME",
+ },
+ {
+ title: "标准化得分",
+ dataIndex: "NON_STANDARDIZED_SCORE",
+ key: "NON_STANDARDIZED_SCORE",
+ },
+ {
+ title: "操作",
+ dataIndex: "",
+ key: "",
+ render: (text, record) => (
+
+ {
+
+ {" "}
+
+
+
+ }
+
+ ),
+ },
+ ]
+ })
+ this.getTeam();
+ this.getHomeTitle()
+ //定时器功能,暂时不开启
+ this.timerID = setInterval(
+ () => {
+ if (this._isMounted) {
+ this.getBaseInfoData(1, this.state.tableKey, 5)
+ }
},
- ];
- this.state.scoreColumns = [
- {
- width: "80px",
- title: "生产单元",
- dataIndex: "Nav_ProductionUnit.NAME",
- key: "Nav_ProductionUnit.NAME",
- },
- {
- width: "80px",
- title: "一级要素",
- dataIndex: "Nav_Primary.NAME",
- key: "Nav_Primary.NAME",
- },
- {
- width: "80px",
- title: "二级要素",
- dataIndex: "Nav_Second.NAME",
- key: "Nav_Second.NAME",
- },
- {
- width: "80px",
- title: "三级要素",
- dataIndex: "Nav_Three.NAME",
- key: "Nav_Three.NAME",
- },
- {
- width: "50px",
- title: "考评项目",
- dataIndex: "EVALUATION_ITEM",
- key: "EVALUATION_ITEM",
- render: (text, record) => (
-
- {
- this.props.app.enums?.PEEvaluationItemEnum.enums[
- record.EVALUATION_ITEM
- ]
- }
-
- ),
- },
- {
- // width: "500px",
- title: "考评内容",
- dataIndex: "CONTENTS",
- key: "CONTENTS",
- },
- {
- width: "100px",
- title: "评分办法",
- dataIndex: "DESCRIPTION",
- key: "DESCRIPTION",
- },
- {
- width: "50px",
- title: "标准分",
- dataIndex: "STANDARDIZED_SCORE",
- key: "STANDARDIZED_SCORE",
- },
- {
- width: "50px",
- title: "实得分",
- dataIndex: "RESULT_SCORE",
- key: "RESULT_SCORE",
- },
- {
- width: "200px",
- title: "不符合说明",
- dataIndex: "NON_CONFORMANCE",
- key: "NON_CONFORMANCE",
- },
- ,
- {
- width: "80px",
- title: "评价结论",
- dataIndex: "EVALUATION_RESULT",
- key: "EVALUATION_RESULT",
- render: (text, record) => (
-
- {
- this.props.app.enums?.PEEvaluationResultEnum.enums[
- record.EVALUATION_RESULT
- ]
- }
-
- ),
- },
- {
- width: "100px",
- title: "评价方法",
- dataIndex: "Nav_EvaluationMethod",
- key: "Nav_EvaluationMethod",
- render: (text, record) => (
-
- {record.Nav_EvaluationMethod &&
- record.Nav_EvaluationMethod?.map((item, i) => {
- return (
-
-
-
- );
- })}
-
- ),
- },
- ];
- this.state.scoreTotalColumns = [
- {
- title: "生产单元",
- dataIndex: "Nav_ProductionUnit.NAME",
- key: "Nav_ProductionUnit.NAME",
- },
- {
- title: "标准化得分",
- dataIndex: "NON_STANDARDIZED_SCORE",
- key: "NON_STANDARDIZED_SCORE",
- },
- {
- title: "操作",
- dataIndex: "",
- key: "",
- render: (text, record) => (
-
- {
-
- {" "}
-
-
-
- }
-
- ),
- },
- ];
+ 120000
+ );
+ this.showModalSign();
+ this.getBaseInfoData(1, 1, 5);
+ this.setMessageData();
+ this.getNoticeData()
}
+
componentWillUnmount() {
- this.timerID && clearTimeout(this.timerID);
+ this._isMounted = false; // 组件卸载时设为false
+ if (this.timerID) {
+ clearInterval(this.timerID);
+ this.timerID = null;
+ }
}
+ getNoticeData = () => {
+ const { currentNoticePage, noticePageSize, activeNoticeTab, mineType } = this.state;
+ const orgId = storage("lacal").getItem("webOrgId")?.val;
+ // 构建请求参数(按标签筛选:全部/集团/公司)
+ let json = initFilter(orgId, mineType);
+ extendRule(json, "pageNum", 1, currentNoticePage);
+ extendRule(json, "pageSize", 1, noticePageSize);
+ if (activeNoticeTab === "group") {
+ extendRule(json, "sourceType", 1, 1); // 1=集团发布
+ } else if (activeNoticeTab === "company") {
+ extendRule(json, "sourceType", 1, 2); // 2=公司发布
+ }
+ this.setState({
+ noticeData: [
+ {
+ id: "1",
+ title: "为表彰先进,树立榜样,激励广大员工积极进取,集团决定开展2023年度优秀员工评选工作...",
+ source: "集团发布",
+ date: "08-30",
+ readStatus: "未读", // 可选:未读/已读
+ isImportant: true // 是否重要提醒
+ },
+ {
+ id: "2",
+ title: "根据国家法定节假日安排,结合公司实际情况,现将2023年国庆节放假安排通知如下...",
+ source: "公司发布",
+ date: "08-28",
+ readStatus: "已读",
+ isImportant: false
+ },
+ {
+ id: "3",
+ title: "根据国家法定节假日安排,结合公司实际情况,现将2023年国庆节放假安排通知如下...",
+ source: "公司发布",
+ date: "08-28",
+ readStatus: "已读",
+ isImportant: false
+ },
+ {
+ id: "4",
+ title: "根据国家法定节假日安排,结合公司实际情况,现将2023年国庆节放假安排通知如下...",
+ source: "公司发布",
+ date: "08-28",
+ readStatus: "已读",
+ isImportant: false
+ },
+ {
+ id: "5",
+ title: "根据国家法定节假日安排,结合公司实际情况,现将2023年国庆节放假安排通知如下...",
+ source: "公司发布",
+ date: "08-28",
+ readStatus: "已读",
+ isImportant: false
+ },
+ {
+ id: "6",
+ title: "根据国家法定节假日安排,结合公司实际情况,现将2023年国庆节放假安排通知如下...",
+ source: "公司发布",
+ date: "08-28",
+ readStatus: "已读",
+ isImportant: false
+ }
+ // 更多公告...
+ ],
+ totalNoticeCount: 10 // 公告总数
+ })
+
+ // this.props.dispatch({
+ // type: "app/getDataByPost",
+ // url: "PF/Notice/GetNoticeList", // 假设的公告列表接口,需替换为实际接口
+ // payload: json,
+ // onlyData: false,
+ // onComplete: (data) => {
+ // if (data && data.IsSuccessful) {
+ // this.setState({
+ // noticeData: data.Data.list, // 公告列表
+ // totalNoticeCount: data.Data.total, // 公告总数
+ // });
+ // }
+ // },
+ // });
+ };
+ // 公告页码切换
+ changeNoticePage = (page) => {
+ const { totalNoticeCount, noticePageSize } = this.state;
+ // 边界判断:页码不能小于1,不能大于总页数
+ if (page < 1 || page > Math.ceil(totalNoticeCount / noticePageSize)) return;
+ this.setState({ currentNoticePage: page }, () => {
+ this.getNoticeData(); // 切换页码后重新请求数据
+ });
+ };
+
+ // 公告标签切换(全部/集团发布/公司发布)
+ switchNoticeTab = (tabType) => {
+ this.setState({
+ activeNoticeTab: tabType,
+ currentNoticePage: 1, // 切换标签时重置为第1页
+ }, () => {
+ this.getNoticeData(); // 切换标签后重新请求数据
+ });
+ };
+
+ // 查看更多公告(跳转至公告详情页或展开全部)
+ viewMoreNotice = () => {
+ // 逻辑1:跳转至独立公告页面(推荐)
+ this.props.history.push({ pathname: "/noticeList", state: { tab: this.state.activeNoticeTab } });
+ // 逻辑2:在当前页展开全部公告(备选)
+ // this.setState({ noticePageSize: this.state.totalNoticeCount });
+ };
+
showModalSign = () => {
var userId = storage("lacal").getItem("userid")?.val; //登录后有存储登录信息
@@ -494,53 +622,46 @@ class GroupHome extends React.Component {
url: "FM/User/UserSign", //验证是否有签名照
onComplete: (ret) => {
//返回查询结果ret
- if (ret) {
+ if (this._isMounted && ret) {
//判断是否有记录
openNotification("topRight");
}
},
});
};
+ getHomeTitle = () => {
+ var orgId = storage("lacal").getItem("webOrgId")?.val; //登录后有存储登录信息
+ let json = initFilter(orgId);
+ this.props.dispatch({
+ type: "app/getDataByPost",
+ payload: json,
+ url: "PF/HomeTitle/OrderPaged",
+ onComplete: (ret) => {
+ if (this._isMounted && ret) {
+ const safetySlogan = ret[0].TITLE;
+ // 计算文本长度(中文按1个字符,英文/数字按0.5个字符计算)
+ const charCount = safetySlogan.replace(/[a-zA-Z0-9]/g, 'aa').length;
+
+ // 设置基础速率:每4个字符需要1秒
+ const baseSpeed = 4;
+ // 计算动画时间(最低5秒,最高60秒)
+ const duration = Math.max(5, Math.min(60, charCount / baseSpeed));
+ this.setState({
+ safetySloganOne: safetySlogan,
+ // safetySloganOne: "1.安全方针:以人为本、关注健康、依法治企、安全发展。 2.安全理念:一切风险皆可控,一切事故皆可防!3.安全方针:以人为本、关注健康、依法治企、安全发展。4.安全方针:以人为本、关注健康、依法治企、安全发展。5.安全方针:以人为本、关注健康、依法治企、安全发展。 6.安全理念:一切风险皆可控,一切事故皆可防!7.安全方针:以人为本、关注健康、依法治企、安全发展。8.安全方针:以人为本、关注健康、依法治企、安全发展。",
+ animationDuration: duration,
+ sliderColor: ret[0].COCOR,
+ sliderSize: ret[0].FONTSIZE
+
+ });
+ }
+ },
+ });
+ }
getTeam = () => {
var userId = storage("lacal").getItem("userid")?.val; //登录后有存储登录信息
var orgId = storage("lacal").getItem("webOrgId")?.val; //登录后有存储登录信息
- // 龙岩稀土
- if (orgId == "8f1cf418-8bf3-ea3f-7a6d-fc5d61247008") {
- this.setState({
- safetySloganOne: "安全方针:以人为本、关注健康、依法治企、安全发展。",
- });
- }
- // 都昌金鼎
- else if (orgId == "8b3c41aa-51b1-7ce9-1879-248a038c1b5c") {
- this.setState({
- safetySloganOne: "安全方针:安全第一,预防为主,科学管理,持续改进。",
- mineType: localStorage.getItem("currentMineType")
- });
- }
- //洛阳豫璐
- else if (orgId == "d9871ba8-0eec-9e4a-bb87-7d5a540d8913") {
- this.setState({
- safetySloganOne: "安全方针:科技、安全、环保、效益。",
- });
- }
- //博柏
- else if (orgId == "3efd5276-632b-e379-9ff3-7a7546591fca") {
- this.setState({
- safetySloganOne: "安全方针:安全第一、综合治理、控制风险、科学发展",
- mineType: localStorage.getItem("currentMineType")
- });
- }
- //行洛坑
- else {
- this.setState({
- safetySloganOne: "安全方针:安全第一、综合治理、控制风险、科学发展",
- mineType: localStorage.getItem("currentMineType")
- });
- }
- this.setState({
- safetySloganTwo: "安全理念:一切风险皆可控,一切事故皆可防!",
- });
let json = initFilter(orgId);
extendRule(json, "ID", 1, userId);
extendInclude(json, "Nav_Department");
@@ -549,7 +670,7 @@ class GroupHome extends React.Component {
payload: json,
url: "FM/User/Get",
onComplete: (ret) => {
- if (ret && ret.Nav_Department) {
+ if (this._isMounted && ret && ret.Nav_Department) {
this.setState({
departmentName: ret.Nav_Department.NAME,
deparmentType: ret.Nav_Department.DEPARTMENT_TYPE,
@@ -733,7 +854,7 @@ class GroupHome extends React.Component {
payload: json,
onlyData: false,
onComplete: (re) => {
- if (re && re.IsSuccessful && re.Data.newData) {
+ if (this._isMounted && re && re.IsSuccessful && re.Data.newData) {
this.state.tableData[0].total = re.Data.todoCount;
this.state.tableData[1].total = re.Data.timeOverCount;
this.state.tableData[2].total = re.Data.doneCount;
@@ -1389,9 +1510,9 @@ class GroupHome extends React.Component {
? "尾矿库"
: this.state.mineType == 10
? "选矿厂"
- :this.state.mineType == 31
- ? "职能口": this.state.mineType == 32?"非金属"
- : "露天矿";
+ : this.state.mineType == 31
+ ? "职能口" : this.state.mineType == 32 ? "非金属"
+ : "露天矿";
if (formCode == "BI054_HOMEDETAIL") {
titleTemp += "安全检查次数统计(近12月)";
} else if (formCode == "BI055_HOMEDETAIL") {
@@ -1450,6 +1571,9 @@ class GroupHome extends React.Component {
className: styles.slideHeight,
fade: true,
};
+ // 在render方法中添加动态样式计算
+ const { safetySloganOne, animationDuration, sliderColor, sliderSize } = this.state;
+
const rowSelection = {
onChange: (selectedRowKeys, selectedRows) => {
this.state.taskSelects = selectedRows;
@@ -1608,11 +1732,16 @@ class GroupHome extends React.Component {
-
+
- {this.state.safetySloganOne}
-
- {this.state.safetySloganTwo}
+ {safetySloganOne || '暂无公告'}
@@ -1997,7 +2126,75 @@ class GroupHome extends React.Component {
/>
) : null}
- {/* */}
+ {/* 公告栏 */}
+
+ {/*
+
+
+
+
+ 公告栏
+ {this.state.noticeData.some(item => item.isImportant) && (
+ 包含{this.state.noticeData.filter(item => item.isImportant).length}个重要提醒
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
*/}
diff --git a/src/routes/Home.js b/src/routes/Home.js
index c6989ec..a5c0c73 100644
--- a/src/routes/Home.js
+++ b/src/routes/Home.js
@@ -522,10 +522,18 @@ class Home extends React.Component {
url: "PF/HomeTitle/OrderPaged",
onComplete: (ret) => {
if (this._isMounted&&ret) {
+ const safetySlogan = ret[0].TITLE;
+ // 计算文本长度(中文按1个字符,英文/数字按0.5个字符计算)
+ const charCount = safetySlogan.replace(/[a-zA-Z0-9]/g, 'aa').length;
+
+ // 设置基础速率:每4个字符需要1秒
+ const baseSpeed = 4;
+ // 计算动画时间(最低5秒,最高60秒)
+ const duration = Math.max(5, Math.min(60, charCount / baseSpeed));
this.setState({
- safetySloganOne: ret[0].TITLE,
+ safetySloganOne: safetySlogan,
// safetySloganOne: "1.安全方针:以人为本、关注健康、依法治企、安全发展。 2.安全理念:一切风险皆可控,一切事故皆可防!3.安全方针:以人为本、关注健康、依法治企、安全发展。4.安全方针:以人为本、关注健康、依法治企、安全发展。5.安全方针:以人为本、关注健康、依法治企、安全发展。 6.安全理念:一切风险皆可控,一切事故皆可防!7.安全方针:以人为本、关注健康、依法治企、安全发展。8.安全方针:以人为本、关注健康、依法治企、安全发展。",
- animationDuration: ret[0].SECOND,
+ animationDuration: duration,
sliderColor: ret[0].COCOR,
sliderSize: ret[0].FONTSIZE