添加主页图表
This commit is contained in:
parent
bf9cc32ceb
commit
5cfbdc63e0
|
@ -2,6 +2,7 @@ ConcurrentLogHandler==0.9.1
|
|||
dash==2.18.2
|
||||
feffery_antd_components==0.3.15
|
||||
feffery_utils_components==0.2.0rc27
|
||||
feffery_antd_charts==0.1.5
|
||||
pycryptodome==3.21.0
|
||||
PyJWT==2.9.0
|
||||
user_agents==2.2.0
|
||||
|
|
|
@ -2,6 +2,7 @@ concurrent_log_handler==0.9.25
|
|||
dash==2.18.2
|
||||
feffery_antd_components==0.3.15
|
||||
feffery_utils_components==0.2.0rc27
|
||||
feffery_antd_charts==0.1.5
|
||||
pycryptodome==3.21.0
|
||||
PyJWT==2.9.0
|
||||
user_agents==2.2.0
|
||||
|
|
|
@ -1,7 +1,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, personal_setting
|
||||
from dash_view.application.person_ import personal_info
|
||||
|
||||
################## 【开始】此处导入您的应用 ###################
|
||||
from dash_view.application.example_app import subapp1, subapp2
|
||||
|
@ -20,7 +20,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, personal_setting, *apps]
|
||||
views = [role_mgmt, user_mgmt, group_auth, group_mgmt, workbench, monitor, personal_info, *apps]
|
||||
|
||||
# 读取每个VIEW中配置的所有权限
|
||||
dict_access_meta2module_path = {access_meta: view.__name__ for view in views for access_meta in view.access_metas}
|
||||
|
@ -29,7 +29,6 @@ class AccessFactory:
|
|||
# 基础默认权限,主页和个人中心,每人都有,无需分配
|
||||
default_access_meta = (
|
||||
'个人信息-页面',
|
||||
'个人设置-页面',
|
||||
'工作台-页面',
|
||||
'监控页-页面',
|
||||
)
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
from common.utilities.util_menu_access import MenuAccess
|
||||
from typing import List
|
||||
import random
|
||||
import feffery_antd_charts as fact
|
||||
import feffery_antd_components as fac
|
||||
import feffery_utils_components as fuc
|
||||
from feffery_dash_utils.style_utils import style
|
||||
from dash_components import Card
|
||||
import feffery_antd_components as fac
|
||||
from common.utilities.util_logger import Log
|
||||
|
@ -15,20 +19,245 @@ logger = Log.get_logger(__name__)
|
|||
access_metas = ('工作台-页面',)
|
||||
|
||||
|
||||
def render_content(menu_access: MenuAccess, **kwargs):
|
||||
return Card(
|
||||
fac.AntdSpace(
|
||||
[
|
||||
fac.AntdAvatar(
|
||||
id='workbench-avatar',
|
||||
mode='image',
|
||||
src=f'/avatar/{menu_access.user_info.user_name}',
|
||||
alt=menu_access.user_info.user_full_name,
|
||||
size=70,
|
||||
style={'marginRight': '20px'},
|
||||
),
|
||||
fac.AntdText(t__dashboard('你好,')),
|
||||
fac.AntdText(menu_access.user_info.user_full_name, id='workbench-user-full-name'),
|
||||
]
|
||||
)
|
||||
def chart_block(title, chart):
|
||||
"""示例自定义组件,返回仪表盘区块"""
|
||||
|
||||
return fac.AntdFlex(
|
||||
[
|
||||
fac.AntdText(
|
||||
title,
|
||||
style=style(borderLeft='3px solid #1890ff', paddingLeft=8, fontSize=15),
|
||||
),
|
||||
chart,
|
||||
],
|
||||
vertical=True,
|
||||
gap=8,
|
||||
style=style(height='calc(100% - 20px)'),
|
||||
)
|
||||
|
||||
|
||||
def render_content(menu_access: MenuAccess, **kwargs):
|
||||
return fac.AntdSpace(
|
||||
[
|
||||
Card(
|
||||
fac.AntdSpace(
|
||||
[
|
||||
fac.AntdAvatar(
|
||||
id='workbench-avatar',
|
||||
mode='image',
|
||||
src=f'/avatar/{menu_access.user_info.user_name}',
|
||||
alt=menu_access.user_info.user_full_name,
|
||||
size=70,
|
||||
style={'marginRight': '20px'},
|
||||
),
|
||||
fac.AntdText(t__dashboard('你好,')),
|
||||
fac.AntdText(menu_access.user_info.user_full_name, id='workbench-user-full-name'),
|
||||
]
|
||||
)
|
||||
),
|
||||
fuc.FefferyGrid(
|
||||
[
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='折线图示例',
|
||||
chart=fact.AntdLine(
|
||||
data=[
|
||||
{
|
||||
'date': f'2020-0{i}',
|
||||
'y': random.randint(50, 100),
|
||||
}
|
||||
for i in range(1, 10)
|
||||
],
|
||||
xField='date',
|
||||
yField='y',
|
||||
slider={},
|
||||
),
|
||||
),
|
||||
key='折线图示例',
|
||||
),
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='面积图示例',
|
||||
chart=fact.AntdArea(
|
||||
data=[
|
||||
{
|
||||
'date': f'2020-0{i}',
|
||||
'y': random.randint(50, 100),
|
||||
}
|
||||
for i in range(1, 10)
|
||||
],
|
||||
xField='date',
|
||||
yField='y',
|
||||
areaStyle={'fill': 'l(270) 0:#ffffff 0.5:#7ec2f3 1:#1890ff'},
|
||||
),
|
||||
),
|
||||
key='面积图示例',
|
||||
),
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='柱状图示例',
|
||||
chart=fact.AntdColumn(
|
||||
data=[
|
||||
{
|
||||
'date': f'2020-0{i}',
|
||||
'y': random.randint(0, 100),
|
||||
'type': f'item{j}',
|
||||
}
|
||||
for i in range(1, 10)
|
||||
for j in range(1, 4)
|
||||
],
|
||||
xField='date',
|
||||
yField='y',
|
||||
seriesField='type',
|
||||
isGroup=True,
|
||||
),
|
||||
),
|
||||
key='柱状图示例',
|
||||
),
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='条形图示例',
|
||||
chart=fact.AntdBar(
|
||||
data=[
|
||||
{
|
||||
'year': '1951 年',
|
||||
'value': 38,
|
||||
},
|
||||
{
|
||||
'year': '1952 年',
|
||||
'value': 52,
|
||||
},
|
||||
{
|
||||
'year': '1956 年',
|
||||
'value': 61,
|
||||
},
|
||||
{
|
||||
'year': '1957 年',
|
||||
'value': 145,
|
||||
},
|
||||
{
|
||||
'year': '1958 年',
|
||||
'value': 48,
|
||||
},
|
||||
],
|
||||
xField='value',
|
||||
yField='year',
|
||||
seriesField='year',
|
||||
legend={
|
||||
'position': 'top-left',
|
||||
},
|
||||
),
|
||||
),
|
||||
key='条形图示例',
|
||||
),
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='饼图示例',
|
||||
chart=fact.AntdPie(
|
||||
data=[
|
||||
{
|
||||
'type': f'item{i}',
|
||||
'x': random.randint(50, 100),
|
||||
}
|
||||
for i in range(1, 6)
|
||||
],
|
||||
colorField='type',
|
||||
angleField='x',
|
||||
radius=0.9,
|
||||
),
|
||||
),
|
||||
key='饼图示例',
|
||||
),
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='双轴图示例',
|
||||
chart=fact.AntdDualAxes(
|
||||
data=[
|
||||
# 左轴数据
|
||||
[
|
||||
{
|
||||
'date': f'2020-0{i}',
|
||||
'y1': random.randint(50, 100),
|
||||
}
|
||||
for i in range(1, 10)
|
||||
],
|
||||
# 右轴数据
|
||||
[
|
||||
{
|
||||
'date': f'2020-0{i}',
|
||||
'y2': random.randint(100, 1000),
|
||||
}
|
||||
for i in range(1, 10)
|
||||
],
|
||||
],
|
||||
xField='date',
|
||||
yField=['y1', 'y2'],
|
||||
geometryOptions=[
|
||||
{'geometry': 'line'},
|
||||
{'geometry': 'column'},
|
||||
],
|
||||
),
|
||||
),
|
||||
key='双轴图示例',
|
||||
),
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='迷你面积图示例',
|
||||
chart=fact.AntdTinyArea(
|
||||
data=[random.randint(50, 100) for _ in range(20)],
|
||||
height=60,
|
||||
smooth=True,
|
||||
),
|
||||
),
|
||||
key='迷你面积图示例',
|
||||
),
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='进度条图示例',
|
||||
chart=fact.AntdProgress(percent=0.7, barWidthRatio=0.2),
|
||||
),
|
||||
key='进度条图示例',
|
||||
),
|
||||
fuc.FefferyGridItem(
|
||||
chart_block(
|
||||
title='进度环图示例',
|
||||
chart=fact.AntdRingProgress(
|
||||
percent=0.6,
|
||||
color=['#F4664A', '#E8EDF3'],
|
||||
innerRadius=0.85,
|
||||
radius=0.98,
|
||||
statistic={
|
||||
'title': {
|
||||
'style': {
|
||||
'color': '#363636',
|
||||
'fontSize': '12px',
|
||||
'lineHeight': '14px',
|
||||
},
|
||||
'formatter': {'func': "() => '进度'"},
|
||||
},
|
||||
},
|
||||
),
|
||||
),
|
||||
key='进度环图示例',
|
||||
),
|
||||
],
|
||||
layouts=[
|
||||
dict(i='折线图示例', x=0, y=0, w=1, h=2),
|
||||
dict(i='面积图示例', x=1, y=0, w=1, h=2),
|
||||
dict(i='柱状图示例', x=2, y=0, w=1, h=2),
|
||||
dict(i='条形图示例', x=0, y=1, w=1, h=2),
|
||||
dict(i='饼图示例', x=1, y=1, w=1, h=2),
|
||||
dict(i='双轴图示例', x=2, y=1, w=1, h=2),
|
||||
dict(i='迷你面积图示例', x=0, y=2, w=1, h=1),
|
||||
dict(i='进度条图示例', x=1, y=2, w=1, h=1),
|
||||
dict(i='进度环图示例', x=2, y=2, w=1, h=2),
|
||||
],
|
||||
cols=3,
|
||||
rowHeight=150,
|
||||
placeholderBorderRadius='5px',
|
||||
margin=[12, 12],
|
||||
),
|
||||
],
|
||||
direction='vertical',
|
||||
style={'width': '100%'},
|
||||
)
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
from common.utilities.util_menu_access import MenuAccess
|
||||
from typing import List
|
||||
from common.utilities.util_logger import Log
|
||||
from dash import html
|
||||
|
||||
# 二级菜单的标题、图标和显示顺序
|
||||
title = '个人设置'
|
||||
icon = None
|
||||
logger = Log.get_logger(__name__)
|
||||
order = 2
|
||||
|
||||
access_metas = ('个人设置-页面',)
|
||||
|
||||
|
||||
def render_content(menu_access: MenuAccess, **kwargs):
|
||||
return 'TODO: 快捷导航,用户动态'
|
Loading…
Reference in New Issue