✨ feat!(ui): 重构图表组件架构,实现数据与样式分离 (#2035)

* ✨ feat!(ui): 重构图表组件架构,实现数据与样式分离

🏗️ **架构重构**
- 移除charts.py中所有硬编码样式参数(grid、tooltip、legend等)
- 将样式配置迁移至主题层style.json文件
- 统一图表模板消费样式文件的能力

📊 **图表组件优化**
- bar_chart: 移除grid和坐标轴show参数
- pie_chart: 移除tooltip、legend样式和series视觉参数
- line_chart: 移除tooltip、grid和坐标轴配置
- radar_chart: 移除tooltip硬编码

🎨 **主题系统增强**
- 新增pie_chart、line_chart、radar_chart的style.json配置
- 更新bar_chart/style.json,添加grid、xAxis、yAxis样式
- 所有图表模板支持deepMerge样式合并逻辑

🔧 **Breaking Changes**
- 图表工厂函数不再接受样式参数
- 主题开发者现可通过style.json完全定制图表外观
- 提升组件可维护性和主题灵活性

* 📦️ build(pyinstaller): 引入 resources.spec 并更新 .gitignore 规则

* 🚨 auto fix by pre-commit hooks

---------

Co-authored-by: webjoin111 <455457521@qq.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Rumio
2025-08-28 09:20:15 +08:00
committed by GitHub
co-authored by webjoin111 pre-commit-ci[bot]
parent d9e65057cf
commit 7472cabd48
61 changed files with 2272 additions and 648 deletions
+8 -9
View File
@@ -3,12 +3,12 @@ from pathlib import Path
import random
from zhenxun import ui
from zhenxun.ui.models import BarChartData
from zhenxun.ui.builders import charts as chart_builders
from .models import Barh
BACKGROUND_PATH = (
Path() / "resources" / "themes" / "default" / "assets" / "bar_chart" / "background"
Path() / "resources" / "themes" / "default" / "assets" / "ui" / "background"
)
@@ -21,12 +21,11 @@ class ChartUtils:
if BACKGROUND_PATH.exists()
else None
)
chart_component = BarChartData(
title=data.title,
category_data=data.category_data,
data=data.data,
background_image=background_image_name,
direction="horizontal",
items = list(zip(data.category_data, data.data))
builder = chart_builders.bar_chart(
title=data.title, items=items, direction="horizontal"
)
if background_image_name:
builder.set_background_image(background_image_name)
return await ui.render(chart_component)
return await ui.render(builder.build())
+7
View File
@@ -18,6 +18,7 @@ __all__ = [
"PYDANTIC_V2",
"_dump_pydantic_obj",
"_is_pydantic_type",
"compat_computed_field",
"model_copy",
"model_dump",
"model_json_schema",
@@ -38,6 +39,12 @@ def model_copy(
return model.copy(update=update_dict, deep=deep)
if PYDANTIC_V2:
from pydantic import computed_field as compat_computed_field
else:
compat_computed_field = property
def model_json_schema(model_class: type[BaseModel], **kwargs: Any) -> dict[str, Any]:
"""
Pydantic `Model.schema()` (v1) 和 `Model.model_json_schema()` (v2) 的兼容函数。