添加主页图表

This commit is contained in:
luojiaaoo 2025-02-18 22:27:59 +08:00
parent bf9cc32ceb
commit 5cfbdc63e0
5 changed files with 250 additions and 36 deletions

View File

@ -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

View File

@ -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

View File

@ -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 = (
'个人信息-页面',
'个人设置-页面',
'工作台-页面',
'监控页-页面',
)

View File

@ -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%'},
)

View File

@ -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: 快捷导航,用户动态'