feature: 添加 公告管理
This commit is contained in:
parent
4f688396e7
commit
eeae93ea46
|
@ -42,4 +42,4 @@ def valid_token():
|
|||
app.layout = valid_token
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='127.0.0.1', port=80, debug=True)
|
||||
app.run(host='127.0.0.1', port=8000, debug=False)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
from dash_view.application.access_ import role_mgmt, user_mgmt, group_auth, group_mgmt
|
||||
from dash_view.application.dashboard_ import workbench, monitor
|
||||
from dash_view.application.person_ import personal_info
|
||||
from dash_view.application.notification_ import announcement
|
||||
|
||||
################## 【开始】此处导入您的应用 ###################
|
||||
from dash_view.application.example_app import subapp1, subapp2
|
||||
|
@ -20,7 +21,7 @@ def trim_module_path2menu_item(module_path):
|
|||
class AccessFactory:
|
||||
from common.utilities.util_menu_access import MenuAccess
|
||||
|
||||
views = [role_mgmt, user_mgmt, group_auth, group_mgmt, workbench, monitor, personal_info, *apps]
|
||||
views = [role_mgmt, user_mgmt, group_auth, group_mgmt, workbench, monitor, personal_info, announcement, *apps]
|
||||
|
||||
# 读取每个VIEW中配置的所有权限
|
||||
dict_access_meta2module_path = {access_meta: view.__name__ for view in views for access_meta in view.access_metas}
|
||||
|
@ -37,7 +38,7 @@ class AccessFactory:
|
|||
group_access_meta = ('团队授权-页面',)
|
||||
|
||||
# 系统管理员默认权限
|
||||
admin_access_meta = ('用户管理-页面', '角色管理-页面', '团队管理-页面')
|
||||
admin_access_meta = ('用户管理-页面', '角色管理-页面', '团队管理-页面', '公告管理-页面')
|
||||
|
||||
# 检查数据库和应用权限
|
||||
@classmethod
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
# 一级菜单的标题、图标和显示顺序
|
||||
title = '通知管理'
|
||||
icon = 'antd-notification'
|
||||
order = 9997
|
|
@ -0,0 +1,22 @@
|
|||
from common.utilities.util_menu_access import MenuAccess
|
||||
from typing import List
|
||||
import feffery_antd_components as fac
|
||||
import feffery_utils_components as fuc
|
||||
from common.utilities.util_logger import Log
|
||||
from dash import html
|
||||
from dash_components import Card
|
||||
from dash import dcc
|
||||
from database.sql_db.dao import dao_user
|
||||
from i18n import t__person, t__default, t__access
|
||||
|
||||
|
||||
# 二级菜单的标题、图标和显示顺序
|
||||
title = '公告管理'
|
||||
icon = None
|
||||
logger = Log.get_logger(__name__)
|
||||
order = 1
|
||||
access_metas = ('公告管理-页面',)
|
||||
|
||||
|
||||
def render_content(menu_access: MenuAccess, **kwargs):
|
||||
...
|
|
@ -46,11 +46,32 @@ def render_head_content(menu_access: MenuAccess):
|
|||
'alignItems': 'center',
|
||||
},
|
||||
),
|
||||
*(
|
||||
[
|
||||
fac.AntdAlert(
|
||||
message=dao_announcement.get_announcement(),
|
||||
type='info',
|
||||
banner=True,
|
||||
showIcon=True,
|
||||
icon='📢',
|
||||
messageRenderMode='loop-text',
|
||||
className={
|
||||
'backgroundColor': 'rgba(0,0,0,0)',
|
||||
'maxWidth': '20em',
|
||||
'marginLeft': '50px',
|
||||
'border': '1px',
|
||||
},
|
||||
)
|
||||
]
|
||||
if dao_announcement.get_announcement()
|
||||
else []
|
||||
),
|
||||
],
|
||||
style={
|
||||
'height': '100%',
|
||||
'alignItems': 'center',
|
||||
},
|
||||
wrap=False,
|
||||
),
|
||||
id='header-breadcrumb-col',
|
||||
flex='1',
|
||||
|
@ -59,26 +80,6 @@ def render_head_content(menu_access: MenuAccess):
|
|||
fac.AntdCol(
|
||||
fac.AntdSpace(
|
||||
[
|
||||
*(
|
||||
[
|
||||
fac.AntdAlert(
|
||||
message=dao_announcement.get_announcement(),
|
||||
type='info',
|
||||
banner=True,
|
||||
showIcon=True,
|
||||
messageRenderMode='marquee',
|
||||
className={
|
||||
'backgroundColor': 'rgba(0,0,0,0)',
|
||||
'minWidth': '30em',
|
||||
'maxWidth': '50em',
|
||||
'marginRight': '40px',
|
||||
'& div ': {'textDecoration': 'underline'},
|
||||
},
|
||||
)
|
||||
]
|
||||
if dao_announcement.get_announcement()
|
||||
else []
|
||||
),
|
||||
html.A(
|
||||
html.Img(src='https://img.shields.io/github/stars/luojiaaoo/DashGo.svg?style=social&label=Stars'),
|
||||
href='https://github.com/luojiaaoo/DashGo',
|
||||
|
@ -129,27 +130,28 @@ def render_head_content(menu_access: MenuAccess):
|
|||
],
|
||||
placement='bottomRight',
|
||||
),
|
||||
fac.AntdTooltip(
|
||||
fac.AntdIcon(
|
||||
id='global-full-screen',
|
||||
icon='antd-full-screen',
|
||||
debounceWait=300,
|
||||
style={'cursor': 'pointer', 'marginLeft': '12px', 'fontSize': '1.2em'},
|
||||
),
|
||||
title=t__default('全屏'),
|
||||
placement='left',
|
||||
),
|
||||
render_lang_content(),
|
||||
],
|
||||
style={
|
||||
'height': '100%',
|
||||
'display': 'flex',
|
||||
'alignItems': 'center',
|
||||
'paddingRight': '20px',
|
||||
'paddingRight': '10px',
|
||||
},
|
||||
wrap=False,
|
||||
),
|
||||
flex='None',
|
||||
),
|
||||
fac.AntdTooltip(
|
||||
fac.AntdIcon(
|
||||
id='global-full-screen',
|
||||
icon='antd-full-screen',
|
||||
debounceWait=300,
|
||||
style={'cursor': 'pointer', 'marginRight': '12px', 'fontSize': '1.2em'},
|
||||
),
|
||||
title=t__default('全屏'),
|
||||
placement='left',
|
||||
),
|
||||
render_lang_content(),
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
from peewee import JOIN
|
||||
from ..entity.table_announcement import SysAnnouncement
|
||||
from ..entity.table_user import SysUser
|
||||
|
||||
|
||||
def get_announcement() -> bool:
|
||||
from ..entity.table_announcement import SysAnnouncement
|
||||
from ..entity.table_user import SysUser
|
||||
|
||||
"""获取公告内容"""
|
||||
query = (
|
||||
SysAnnouncement.select(SysAnnouncement.datetime, SysAnnouncement.announcement, SysUser.user_full_name)
|
||||
SysAnnouncement.select(SysAnnouncement.datetime, SysAnnouncement.announcement, SysAnnouncement.user_name, SysUser.user_full_name)
|
||||
.join(SysUser, JOIN.LEFT_OUTER, on=(SysAnnouncement.user_name == SysUser.user_name))
|
||||
.where(SysAnnouncement.status)
|
||||
.order_by(SysAnnouncement.datetime.desc())
|
||||
|
@ -16,6 +15,6 @@ def get_announcement() -> bool:
|
|||
announcements = []
|
||||
for announcement in query.dicts():
|
||||
announcements.append(
|
||||
f'『{announcement["datetime"]:%Y%m%d} {announcement["user_full_name"] if announcement["user_full_name"] else "Unknown"}』{announcement["announcement"]}'
|
||||
f'『{announcement["datetime"]:%Y/%m/%d} {announcement["user_name"]}({announcement["user_full_name"] if announcement["user_full_name"] else "Unknown"})』{announcement["announcement"]}'
|
||||
)
|
||||
return '⠀⠀⠀⠀➤' + '⠀⠀⠀⠀➤'.join(announcements)
|
||||
return announcements
|
||||
|
|
Loading…
Reference in New Issue