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]
+ """实际数据"""