From e2fd227b24a2d188ef209dc47fabcc8390f2a94b Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 06 十一月 2024 10:58:13 +0800
Subject: [PATCH] 2024-11-06

---
 src/components/tabview/index.jsx                                |    3 
 src/components/breadview/index.jsx                              |    3 
 /dev/null                                                       |   67 -------------
 src/components/header/sysmessage/icon.jsx                       |   57 +++++++++++
 src/tabviews/custom/components/card/double-data-card/index.scss |    9 +
 src/components/header/index.jsx                                 |    4 
 src/components/header/sysmessage/index.scss                     |    9 +
 src/tabviews/custom/components/card/data-card/index.scss        |    9 +
 src/views/main/index.jsx                                        |   22 ++-
 src/components/header/sysmessage/index.jsx                      |   58 +++++++++++
 10 files changed, 157 insertions(+), 84 deletions(-)

diff --git a/src/components/breadview/index.jsx b/src/components/breadview/index.jsx
index a71c288..340b188 100644
--- a/src/components/breadview/index.jsx
+++ b/src/components/breadview/index.jsx
@@ -17,7 +17,6 @@
 const TreePage = asyncComponent(() => import('@/tabviews/treepage'))
 const Iframe = asyncComponent(() => import('@/tabviews/iframe'))
 const RoleManage = asyncComponent(() => import('@/tabviews/rolemanage'))
-const SysMessage = asyncComponent(() => import('@/tabviews/sysmessage'))
 
 if (sessionStorage.getItem('lang') === 'zh-CN') {
   moment.locale('zh-cn')
@@ -125,8 +124,6 @@
       return (<Home MenuID={view.MenuID} MenuName={view.MenuName}/>)
     } else if (view.type === 'RolePermission') {
       return (<RoleManage MenuID={view.MenuID}/>)
-    } else if (view.type === 'SysMessage') {
-      return (<SysMessage />)
     } else if (view.type === 'CommonTable') {
       return (<CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} param={view.param} changeTemp={this.changeTemp}/>)
     } else if (view.type === 'TreePage') {
diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index 7f216a9..ebe1ff8 100644
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -18,7 +18,7 @@
 const Resetpwd = asyncComponent(() => import('@/components/resetPassword'))
 const QrCode = asyncComponent(() => import('@/components/qrcode'))
 const LoginForm = asyncSpinComponent(() => import('./loginform'))
-const SysMessage = asyncComponent(() => import('./sysmessage'))
+const SysIcon = asyncComponent(() => import('./sysmessage/icon'))
 
 class Header extends Component {
   state = {
@@ -788,7 +788,7 @@
             <SearchOutlined className="search-menu" />
           </Dropdown> : null
         }
-        {window.GLOB.SysNotice ? <SysMessage /> : null}
+        {window.GLOB.SysNotice ? <SysIcon /> : null}
         {/* 澶村儚銆佺敤鎴峰悕 */}
         <Dropdown className="header-setting" overlay={menu}>
           <div>
diff --git a/src/components/header/sysmessage.jsx b/src/components/header/sysmessage.jsx
deleted file mode 100644
index 3c3b82a..0000000
--- a/src/components/header/sysmessage.jsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React, { Component } from 'react'
-import { notification } from 'antd'
-import { MessageFilled, CloseOutlined } from '@ant-design/icons'
-
-import Api from '@/api'
-// import MKEmitter from '@/utils/events.js'
-
-import './sysmessage.scss'
-
-class SysMessage extends Component {
-  state = {
-    visible: false,
-    notices: []
-  }
-
-  UNSAFE_componentWillMount () {
-    
-  }
-
-  getMsgList = () => {
-    let param = {
-      func: 's_get_kei'
-    }
-
-    Api.getSystemConfig(param).then(result => {
-      if (result.status) {
-        let notices = result.data
-
-        this.setState({ notices })
-      } else {
-        notification.warning({
-          top: 92,
-          message: result.message,
-          duration: 5
-        })
-      }
-    })
-  }
-
-  open = () => {
-    // let menu = {
-    //   MenuID: 'message_page_id',
-    //   MenuName: '绯荤粺娑堟伅',
-    //   type: 'SysMessage'
-    // }
-
-    // MKEmitter.emit('modifyTabs', menu)
-    this.setState({ visible: true })
-  }
-
-  render() {
-    const { visible } = this.state
-
-    return (<>
-      <MessageFilled className="mk-msg-icon" data-title="23" onClick={this.open} />
-      <div className={'mk-msg-wrap' + (visible ? ' visible' : '')}>
-        <div className="title">
-          绯荤粺娑堟伅
-          <CloseOutlined />
-        </div>
-        <div>list</div>
-      </div>
-    </>)
-  }
-}
-
-export default SysMessage
\ No newline at end of file
diff --git a/src/components/header/sysmessage/icon.jsx b/src/components/header/sysmessage/icon.jsx
new file mode 100644
index 0000000..a60199f
--- /dev/null
+++ b/src/components/header/sysmessage/icon.jsx
@@ -0,0 +1,57 @@
+import React, { Component } from 'react'
+import { notification } from 'antd'
+import { MessageFilled } from '@ant-design/icons'
+
+import Api from '@/api'
+import MKEmitter from '@/utils/events.js'
+
+class SysIcon extends Component {
+  state = {
+    notices: []
+  }
+
+  componentDidMount () {
+    setTimeout(() => {
+      this.getMsgList()
+    }, 2000)
+  }
+
+  getMsgList = () => {
+    let param = {
+      func: 's_get_kei'
+    }
+
+    Api.getSystemConfig(param).then(result => {
+      if (result.status) {
+        let notices = result.data || []
+
+        this.setState({ notices })
+        MKEmitter.emit('sysMessageChange', notices)
+
+        setTimeout(() => {
+          this.getMsgList()
+        }, 600000)
+      } else {
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+      }
+    })
+  }
+
+  open = () => {
+    MKEmitter.emit('sysMessageOpen')
+  }
+
+  render() {
+    const { notices } = this.state
+
+    return (
+      <MessageFilled className="mk-msg-icon" data-title={notices.length ? notices.length : ''} onClick={this.open} />
+    )
+  }
+}
+
+export default SysIcon
\ No newline at end of file
diff --git a/src/components/header/sysmessage/index.jsx b/src/components/header/sysmessage/index.jsx
new file mode 100644
index 0000000..2e444ab
--- /dev/null
+++ b/src/components/header/sysmessage/index.jsx
@@ -0,0 +1,58 @@
+import React, { Component } from 'react'
+import { CloseOutlined } from '@ant-design/icons'
+
+import MKEmitter from '@/utils/events.js'
+
+import './index.scss'
+
+class SysMessage extends Component {
+  state = {
+    visible: false,
+    notices: []
+  }
+
+  componentDidMount() {
+    MKEmitter.addListener('sysMessageChange', this.sysMessageChange)
+    MKEmitter.addListener('sysMessageOpen', this.sysMessageOpen)
+  }
+
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+    MKEmitter.removeListener('sysMessageChange', this.sysMessageChange)
+    MKEmitter.removeListener('sysMessageOpen', this.sysMessageOpen)
+  }
+
+  sysMessageChange = (notices) => {
+    this.setState({ notices })
+  }
+
+  sysMessageOpen = () => {
+    this.setState({ visible: true })
+  }
+
+  close = () => {
+    this.setState({ visible: false })
+  }
+
+  render() {
+    const { visible, notices } = this.state
+
+    return (
+      <div className={'mk-msg-wrap' + (visible ? ' visible' : '')}>
+        <div className="title">
+          绯荤粺娑堟伅
+          <CloseOutlined onClick={this.close}/>
+        </div>
+        <div className="msg-list">{notices.map((item, index) => {
+          return <div className="msg-item" key={index}>
+            {item.remark}
+          </div>
+        })}</div>
+      </div>
+    )
+  }
+}
+
+export default SysMessage
\ No newline at end of file
diff --git a/src/components/header/sysmessage.scss b/src/components/header/sysmessage/index.scss
similarity index 88%
rename from src/components/header/sysmessage.scss
rename to src/components/header/sysmessage/index.scss
index 6973c88..997c78e 100644
--- a/src/components/header/sysmessage.scss
+++ b/src/components/header/sysmessage/index.scss
@@ -66,6 +66,15 @@
       color: rgba(0, 0, 0, 0.85);
     }
   }
+  .msg-list {
+    .msg-item {
+      height: 80px;
+      background: rgba(0, 0, 0, 0.05);
+      margin: 10px 0px;
+      padding: 5px;
+      border-radius: 2px;
+    }
+  }
 }
 .mk-msg-wrap.visible {
   z-index: 3000;
diff --git a/src/components/tabview/index.jsx b/src/components/tabview/index.jsx
index 6660c1f..f4a5dc0 100644
--- a/src/components/tabview/index.jsx
+++ b/src/components/tabview/index.jsx
@@ -18,7 +18,6 @@
 const TreePage = asyncComponent(() => import('@/tabviews/treepage'))
 const Iframe = asyncComponent(() => import('@/tabviews/iframe'))
 const RoleManage = asyncComponent(() => import('@/tabviews/rolemanage'))
-const SysMessage = asyncComponent(() => import('@/tabviews/sysmessage'))
 
 if (sessionStorage.getItem('lang') === 'zh-CN') {
   moment.locale('zh-cn')
@@ -285,8 +284,6 @@
       return (<Home MenuID={view.MenuID} MenuName={view.MenuName}/>)
     } else if (view.type === 'RolePermission') {
       return (<RoleManage MenuID={view.MenuID}/>)
-    } else if (view.type === 'SysMessage') {
-      return (<SysMessage />)
     } else if (view.type === 'CommonTable') {
       return (<CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} param={view.param} changeTemp={this.changeTemp}/>)
     } else if (view.type === 'TreePage') {
diff --git a/src/tabviews/custom/components/card/data-card/index.scss b/src/tabviews/custom/components/card/data-card/index.scss
index 7a3eefc..8693005 100644
--- a/src/tabviews/custom/components/card/data-card/index.scss
+++ b/src/tabviews/custom/components/card/data-card/index.scss
@@ -79,6 +79,15 @@
         margin-bottom: 0!important;
       }
     }
+    .extend-card:last-child:not(:only-child) {
+      position: sticky;
+      bottom: 0;
+      z-index: 1;
+      .card-item-box {
+        margin-top: 0!important;
+        margin-bottom: 0!important;
+      }
+    }
     div:last-child {
       .card-item-box {
         border-bottom: none!important;
diff --git a/src/tabviews/custom/components/card/double-data-card/index.scss b/src/tabviews/custom/components/card/double-data-card/index.scss
index 07c69b2..82740e6 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.scss
+++ b/src/tabviews/custom/components/card/double-data-card/index.scss
@@ -286,6 +286,15 @@
           margin-bottom: 0!important;
         }
       }
+      .extend-card:last-child:not(:only-child) {
+        position: sticky;
+        bottom: 0;
+        z-index: 1;
+        .card-item-box {
+          margin-top: 0!important;
+          margin-bottom: 0!important;
+        }
+      }
       div:last-child {
         .sub-card-wrap {
           .card-item-box {
diff --git a/src/views/main/index.jsx b/src/views/main/index.jsx
index 8723ebc..82241b8 100644
--- a/src/views/main/index.jsx
+++ b/src/views/main/index.jsx
@@ -1,4 +1,4 @@
-import React, {Component} from 'react'
+import React, { Component } from 'react'
 
 import asyncComponent from '@/utils/asyncComponent'
 import Header from '@/components/header'
@@ -11,6 +11,7 @@
 
 const Tabview = asyncComponent(() => import('@/components/tabview'))
 const Breadview = asyncComponent(() => import('@/components/breadview'))
+const SysMessage = asyncComponent(() => import('@/components/header/sysmessage/index'))
 
 class Main extends Component {
   state = {
@@ -72,15 +73,18 @@
     if (!this.state.userId) return null
 
     return (
-      <div className="mk-main-view">
-        <Header key="header"/>
-        {navBar === 'shutter' ? <Sidemenu key="sidemenu"/> : null}
-        {navBar === 'shutter' || navBar === 'menu_board_navigation' ?
-          <Tabview key="tabview"/> :
-          <Breadview key="breadview"/>}
+      <>
+        <div className="mk-main-view">
+          <Header key="header"/>
+          {navBar === 'shutter' ? <Sidemenu key="sidemenu"/> : null}
+          {navBar === 'shutter' || navBar === 'menu_board_navigation' ?
+            <Tabview key="tabview"/> :
+            <Breadview key="breadview"/>}
+          <ImgScale />
+        </div>
         {window.GLOB.systemType === 'production' ? <QueryLog /> : null}
-        <ImgScale />
-      </div>
+        {window.GLOB.SysNotice ? <SysMessage /> : null}
+      </>
     )
   }
 }

--
Gitblit v1.8.0