diff --git a/Routes/BigScreen.py b/Routes/BigScreen.py index d7f1051..a218ec8 100644 --- a/Routes/BigScreen.py +++ b/Routes/BigScreen.py @@ -1,19 +1,79 @@ from fastapi import APIRouter +import pyecharts +from pyecharts import options as opts +from pyecharts.charts import Bar +from pyecharts.faker import Faker +from pyecharts.globals import CurrentConfig +import json # 创建 APIRouter 实例 router = APIRouter(prefix="/bigscreen", tags=["大屏展示"]) -# 定义根路由,返回 helloWorld -@router.get("/") -async def root(): - return {"message": "helloWorld"} +# 配置使用自定义的 ECharts 路径 +CurrentConfig.ONLINE_HOST = "https://gcore.jsdelivr.net/npm/echarts@6.0.0/dist/" # 定义一个 helloWorld 路由 @router.get("/hello") async def hello_world(): return {"message": "helloWorld"} -# 定义一个带有参数的路由 -@router.get("/hello/{name}") -async def hello_name(name: str): - return {"message": f"helloWorld, {name}!"} \ No newline at end of file +# 生成图表配置的函数 +def generate_bar_chart_config(): + c = ( + Bar() + .add_xaxis(Faker.choose()) + .add_yaxis("商家A", Faker.values()) + .add_yaxis("商家B", Faker.values()) + .set_global_opts(title_opts=opts.TitleOpts(title="Bar-MarkLine(自定义)")) + .set_series_opts( + label_opts=opts.LabelOpts(is_show=False), + markline_opts=opts.MarkLineOpts( + data=[opts.MarkLineItem(y=50, name="yAxis=50")] + ), + ) + ) + + # 获取图表的选项配置,使用 dump_options_with_quotes 方法获取可以直接序列化的选项 + options_str = c.dump_options_with_quotes() + + # 将字符串转换为 JSON 对象 + options_json = json.loads(options_str) + + return options_json + +# 定义一个返回图表配置的路由 +@router.get("/chart/bar") +async def get_bar_chart_config(): + """ + 获取柱状图配置 + """ + chart_config = generate_bar_chart_config() + return chart_config + +# 定义一个带有参数的路由,可以自定义图表标题 +@router.get("/chart/bar/{title}") +async def get_custom_bar_chart_config(title: str): + """ + 获取自定义标题的柱状图配置 + """ + c = ( + Bar() + .add_xaxis(Faker.choose()) + .add_yaxis("商家A", Faker.values()) + .add_yaxis("商家B", Faker.values()) + .set_global_opts(title_opts=opts.TitleOpts(title=title)) + .set_series_opts( + label_opts=opts.LabelOpts(is_show=False), + markline_opts=opts.MarkLineOpts( + data=[opts.MarkLineItem(y=50, name="yAxis=50")] + ), + ) + ) + + # 获取图表的选项配置 + options_str = c.dump_options_with_quotes() + + # 将字符串转换为 JSON 对象 + options_json = json.loads(options_str) + + return options_json diff --git a/Routes/__pycache__/BigScreen.cpython-310.pyc b/Routes/__pycache__/BigScreen.cpython-310.pyc index e6577c1..9927c50 100644 Binary files a/Routes/__pycache__/BigScreen.cpython-310.pyc and b/Routes/__pycache__/BigScreen.cpython-310.pyc differ diff --git a/Start.py b/Start.py index cb7032f..ac541e9 100644 --- a/Start.py +++ b/Start.py @@ -1,12 +1,16 @@ # pip install fastapi uvicorn from fastapi import FastAPI +from fastapi.staticfiles import StaticFiles import uvicorn from Routes.BigScreen import router as bigscreen_router # 创建 FastAPI 应用实例 app = FastAPI(title="云南教育决策研究服务系统", description="云南省教育数据分析和可视化平台") +# 挂载静态文件目录 +app.mount("/static", StaticFiles(directory="static"), name="static") + # 包含大屏展示路由 app.include_router(bigscreen_router) diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..2016e22 --- /dev/null +++ b/static/index.html @@ -0,0 +1,145 @@ + + +
+ + +数据可视化展示平台
+