From 910542f2b5eecd5414c2afeeb6f52003e5b07362 Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Sun, 25 Aug 2024 00:02:35 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E5=8A=9F=E8=83=BD=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E7=BB=9F=E8=AE=A1=E4=BD=BF=E7=94=A8html=E6=88=AA?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/template/bar_chart/main.css | 7 +++ resources/template/bar_chart/main.html | 50 +++++++++++++++++++ .../statistics/_data_source.py | 9 ++-- zhenxun/utils/echart_utils/__init__.py | 24 +++++++++ zhenxun/utils/echart_utils/models.py | 9 ++++ 5 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 resources/template/bar_chart/main.css create mode 100644 resources/template/bar_chart/main.html create mode 100644 zhenxun/utils/echart_utils/__init__.py create mode 100644 zhenxun/utils/echart_utils/models.py diff --git a/resources/template/bar_chart/main.css b/resources/template/bar_chart/main.css new file mode 100644 index 00000000..8c1cc039 --- /dev/null +++ b/resources/template/bar_chart/main.css @@ -0,0 +1,7 @@ + +body { + position: absolute; + left: -8px; + top: -8px; +} + diff --git a/resources/template/bar_chart/main.html b/resources/template/bar_chart/main.html new file mode 100644 index 00000000..8728b14b --- /dev/null +++ b/resources/template/bar_chart/main.html @@ -0,0 +1,50 @@ + + + + + ECharts Example + + + + + + +
+ + + + \ No newline at end of file diff --git a/zhenxun/builtin_plugins/statistics/_data_source.py b/zhenxun/builtin_plugins/statistics/_data_source.py index 161dafc6..9cc1b2ae 100644 --- a/zhenxun/builtin_plugins/statistics/_data_source.py +++ b/zhenxun/builtin_plugins/statistics/_data_source.py @@ -6,6 +6,8 @@ from zhenxun.models.group_console import GroupConsole from zhenxun.models.group_member_info import GroupInfoUser from zhenxun.models.plugin_info import PluginInfo from zhenxun.models.statistics import Statistics +from zhenxun.utils.echart_utils import ChartUtils +from zhenxun.utils.echart_utils.models import Barh from zhenxun.utils.enum import PluginType from zhenxun.utils.image_utils import BuildImage, BuildMat, MatType @@ -114,7 +116,6 @@ class StatisticsManage: @classmethod async def __build_image(cls, data_list: list[tuple[str, int]], title: str): - mat = BuildMat(MatType.BARH) module2count = {x[0]: x[1] for x in data_list} plugin_info = await PluginInfo.filter( module__in=module2count.keys(), @@ -125,7 +126,5 @@ class StatisticsManage: for plugin in plugin_info: x_index.append(plugin.name) data.append(module2count.get(plugin.module, 0)) - mat.x_index = x_index - mat.data = data - mat.title = title - return await mat.build() + barh = Barh(data=data, category_data=x_index) + return await ChartUtils.barh(barh) diff --git a/zhenxun/utils/echart_utils/__init__.py b/zhenxun/utils/echart_utils/__init__.py new file mode 100644 index 00000000..ede8c35e --- /dev/null +++ b/zhenxun/utils/echart_utils/__init__.py @@ -0,0 +1,24 @@ +from nonebot_plugin_htmlrender import template_to_pic + +from zhenxun.configs.path_config import TEMPLATE_PATH +from zhenxun.utils._build_image import BuildImage + +from .models import Barh + + +class ChartUtils: + + @classmethod + async def barh(cls, data: Barh) -> BuildImage: + """横向统计图""" + pic = await template_to_pic( + template_path=str((TEMPLATE_PATH / "bar_chart").absolute()), + template_name="main.html", + templates={"data": data}, + pages={ + "viewport": {"width": 1000, "height": 500}, + "base_url": f"file://{TEMPLATE_PATH}", + }, + wait=2, + ) + return BuildImage.open(pic) diff --git a/zhenxun/utils/echart_utils/models.py b/zhenxun/utils/echart_utils/models.py new file mode 100644 index 00000000..8d9f639f --- /dev/null +++ b/zhenxun/utils/echart_utils/models.py @@ -0,0 +1,9 @@ +from pydantic import BaseModel + + +class Barh(BaseModel): + + category_data: list[str] + """坐标轴数据""" + data: list[int | float] + """实际数据"""