| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- import React, { useEffect, useState } from "react";
- import styles from "./style.less";
- import { observer, observable } from "mobx-react";
- import { useHistory, useLocation } from "react-router-dom";
- import $store from "@store/";
- import { useRef } from "react";
- import { timeDiffer, dealDiffSheetType } from "@utils/util";
- import PropTypes from "prop-types";
- import { Tabs, List, Radio, Tooltip, Modal, Button, message, Form } from "antd";
- import {
- getAccountMsgPage,
- getMenuDesc,
- getReportInfo,
- setReadStatus,
- getAccountResourceVoByResourceId,
- getUnReadMessageNum,
- } from "../../apis/personal";
- import { switchPage, getUnionId } from "@apis/common.js";
- // newResourceMsg :报表上新
- // fineReportChange :报表内容更新
- // fineDataResourceChange :报表元数据更新
- // 权限通知:
- const messageType = [
- "newResourceMsg",
- "fineReportChange",
- "fineDataResourceChange",
- ];
- export default observer(function (props) {
- const history = useHistory();
- const [tabNum, settabNum] = useState(1);
- const [messageList, setMessageList] = useState([]); /**消息通知列表 */
- const [isShowDetail, setIsShowDetail] = useState(
- false
- ); /**控制 详情消息弹出 */
- const [msgDetail, setMsgDetail] = useState({}); /**消息通知 当条 点击详情 */
- const [reportName, setReportName] = useState(""); /**消息弹窗-相关报表名字 */
- const [hasPermission, setHasPermission] = useState(
- false
- ); /**消息弹窗-去看看权限 */
- //表单配置
- const formItemLayout = {
- labelCol: { span: 4 },
- wrapperCol: { span: 20 },
- };
- const options = [
- { label: "系统公告", value: 1 },
- { label: "权限通知", value: 2 },
- ];
- const subMenuList = [
- {
- defaultOpen: true,
- openType: "self",
- parentId: null,
- resourceCode: null,
- resourceId: "",
- resourceList: [],
- resourceType: "sys",
- sortNo: "2",
- status: true,
- sysResource: false,
- topParentId: "",
- resourceIcon: "RadarChartOutlined",
- resourceName: "个人信息",
- resourceUrl: "/home/center",
- },
- {
- defaultOpen: true,
- openType: "self",
- parentId: null,
- resourceCode: null,
- resourceId: "",
- resourceList: [],
- resourceType: "sys",
- sortNo: "2",
- status: true,
- sysResource: false,
- topParentId: "",
- resourceIcon: "DatabaseOutlined",
- resourceName: "消息通知",
- resourceUrl: "/home/message",
- },
- // {
- // defaultOpen: true,
- // openType: "self",
- // parentId: null,
- // resourceCode: null,
- // resourceId: "",
- // resourceList: [],
- // resourceType: "sys",
- // sortNo: "2",
- // status: true,
- // sysResource: false,
- // topParentId: "",
- // resourceIcon: "ApartmentOutlined",
- // resourceName: "权限申请记录",
- // resourceUrl: "/home/right",
- // },
- ];
- function calcValue(str) {
- if (str === "sysToken") {
- return `${sessionStorage.getItem("token")}$`;
- }
- }
- const chooseTab = (e) => {
- //console.log("e",e.target.value);
- settabNum(e.target.value);
- };
- useEffect(() => {
- getMessageList();
- }, []);
- /**获取 消息通知列表 */
- const getMessageList = () => {
- let accountId = sessionStorage.getItem("accountId");
- let config = {
- accountId,
- messageType: ["System_bulletin", "Permission_msg"],
- };
- getAccountMsgPage(config).then(({ data, resultCode }) => {
- if (+resultCode === 0) {
- data.records.map((item) => {
- item.messageDetailTitle = item.messageDetailTitle.replace(
- /\\n/g,
- " "
- );
- item.messageContent = item.messageContent.replace(/\\n/g, "\n");
- });
- setMessageList(data.records.slice(0, 3));
- }
- });
- };
- //处理 消息 详情
- const goHandleMessage = () => {
- if (!hasPermission) {
- message.warning("该报表无权限!");
- return;
- }
- const { messageDetailType, messageContentObjectId } = msgDetail || {};
- switch (messageDetailType) {
- case "fineDataResourceChange":
- //根据id 找到 该元数据
- getMenuDesc({ resourceId: messageContentObjectId }).then(
- ({ data, resultCode }) => {
- if (+resultCode === 0) {
- $store.app.setMetaData({
- data,
- visible: true,
- });
- }
- }
- );
- break;
- case "fineReportChange":
- getReportInfo({ resourceId: messageContentObjectId }).then(
- ({ data, resultCode }) => {
- if (+resultCode === 0) {
- switchPage({
- // pageId: relationship[key].pageId,
- modelName: data.resourceName,
- pageName: data.resourceName,
- pageUrl: data.resourceUrl,
- resourceId: data.resourceId,
- visitId: sessionStorage.getItem("unionId"),
- });
- let dataOpt = {
- id: data.resourceId,
- name: data.resourceName,
- openType: "self",
- path: data.resourceUrl,
- type: data.resourceType,
- };
- dealDiffSheetType(data).then((response) => {
- $store.app.setNavList({ ...dataOpt });
- $store.app.setCurNav(dataOpt.path);
- if (response.type === "sys") {
- history.push(response.link);
- } else {
- history.push(`/home/outer/${response.activeItem.resourceId}`);
- }
- });
- }
- }
- );
- break;
- }
- };
- //获取 未读消息的数量
- const getUnReadNum = () => {
- let accountId = sessionStorage.getItem("accountId");
- getUnReadMessageNum(accountId).then(({ data, resultCode }) => {
- if (+resultCode === 0) {
- $store.app.setNewsCount(+data);
- }
- });
- };
- //更改消息状态
- const changeReadStatus = (msgId) => {
- let accountId = sessionStorage.getItem("accountId");
- const config = {
- accountId,
- messageIds: [msgId],
- };
- setReadStatus({ ...config });
- };
- //获取 相关报表
- const getReportDetail = (id) => {
- if (!id) {
- return;
- }
- getAccountResourceVoByResourceId({ resourceId: id }).then(
- ({ data, resultCode }) => {
- if (+resultCode === 0) {
- setReportName(data.resourceName);
- setHasPermission(data.hasPermission);
- }
- }
- );
- };
- const {
- messageDetailType,
- messageContentObjectId,
- createTime,
- messageContent,
- } = msgDetail || {};
- return (
- <div className={styles.right_park}>
- {Array.isArray(messageList) && messageList.length > 0 ? (
- <div className="right_park_title">
- <div className="title_left">消息通知</div>
- <div
- className="go_more"
- onClick={() => {
- let dataOpt = {
- id: 122,
- name: "消息通知",
- openType: "self",
- path: "/home/message",
- type: "sys",
- };
- sessionStorage.setItem("curNav", "/home/message");
- sessionStorage.setItem("activedUrl", "/home/message");
- $store.sysMenu.setSubmenuList(subMenuList);
- $store.app.setActivedUrl("/home/message");
- let arr = $store.app.navList.slice(1);
- arr.push(dataOpt);
- $store.app.setNavList(arr, "set");
- $store.app.setCurNav("/home/message");
- history.push("/home/message");
- //埋点记录
- switchPage({
- // pageId: relationship[key].pageId,
- modelName: "消息通知",
- pageName: "消息通知",
- pageUrl: "/home/message",
- resourceId: "10000001",
- visitId: sessionStorage.getItem("unionId"),
- });
- }}
- >
- 更多 >
- </div>
- {/* <div className="clear"></div> */}
- </div>
- ) : (
- <></>
- )}
- {/* tab 切换-系统公告 权限通知 */}
- {/* <Radio.Group
- options={options}
- onChange={chooseTab}
- value={tabNum}
- optionType="button"
- /> */}
- <div className="message_list">
- {Array.isArray(messageList) && messageList.length > 0 ? (
- messageList.map((item) => {
- return (
- <>
- <div className="message_item" key={item.messageId}>
- <Tooltip
- placement="top"
- title={
- item.messageDetailTitle.length > 20
- ? item.messageDetailTitle
- : ""
- }
- >
- <span
- className={
- item.messageReadStatus
- ? "message_desc"
- : "isBlod message_desc"
- }
- onClick={() => {
- setMsgDetail(item);
- setIsShowDetail(true);
- messageType.includes(item.messageDetailType)
- ? getReportDetail(item.messageContentObjectId)
- : "";
- //更改消息状态(点开 -》 已读)
- changeReadStatus(item.messageId);
- // getUnReadNum();
- }}
- >
- {item.messageDetailTitle}
- </span>
- </Tooltip>
- <span className="msg_time">
- {timeDiffer(item.createTime)}
- </span>
- </div>
- </>
- );
- })
- ) : (
- <>
- <div className="message_null">
- <img
- src={require("@assets/imgs/messgae_null.png").default}
- width={100}
- />
- <div className="noMsg_desc">暂无消息</div>
- </div>
- </>
- )}
- </div>
- {/* 点击消息详情 对话框 */}
- <Modal
- title="消息通知"
- visible={isShowDetail}
- onCancel={() => {
- setIsShowDetail(false);
- //关闭对话框-更新top实时小红点数量
- // getUnReadNum();
- getMessageList();
- }}
- footer={
- <Button
- type="primary"
- key="goHandle"
- onClick={goHandleMessage}
- disabled={
- messageDetailType === "newResourceMsg" ||
- messageDetailType === "permissionOverDueSoon"
- ? true
- : false
- }
- >
- {messageDetailType === "newResourceMsg"
- ? "申请权限"
- : messageDetailType === "permissionOverDueSoon"
- ? "续期"
- : "去看看"}
- </Button>
- }
- >
- <Form {...formItemLayout}>
- <Form.Item
- label="消息时间"
- style={{ fontWeight: 600, marginBottom: 8 }}
- >
- <span style={{ fontWeight: 400 }}>{createTime}</span>
- </Form.Item>
- {messageDetailType === "fineReportChange" && (
- <Form.Item
- label="相关报表"
- style={{ fontWeight: 600, marginBottom: 8 }}
- >
- <span style={{ fontWeight: 400 }}>{reportName}</span>
- </Form.Item>
- )}
- <Form.Item
- label="消息内容"
- style={{ fontWeight: 600, marginBottom: 8 }}
- >
- <div
- style={{
- fontWeight: 400,
- whiteSpace: "pre-wrap",
- paddingTop: 5,
- paddingBottom: 5,
- }}
- >
- {messageContent}
- </div>
- </Form.Item>
- </Form>
- </Modal>
- </div>
- );
- });
|