config_center/app/api/pages.py
guyue55 e71d485629 1. 去除重复的pages.py
2. 编辑和删除操作增加鼠标悬停提示
3. 搜索栏布局的优化工作:

- 调整了搜索框容器的宽度和间距
- 优化了搜索框组件的弹性布局
- 设置了下拉框和按钮的最小宽度
- 改进了按钮的对齐方式和间距
- 优化了移动端的响应式布局
2025-03-04 13:23:43 +08:00

111 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from fastapi import APIRouter, Request, Depends
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse
from pathlib import Path
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, func
from typing import Optional
from app.models.database import get_db
from app.models.type import Type
from app.models.config import Config
# 将 router 改名为 page_router
page_router = APIRouter()
# 设置模板目录
templates = Jinja2Templates(directory=Path(__file__).parent.parent / "templates")
@page_router.get("/", response_class=HTMLResponse)
async def index_page(request: Request, db: AsyncSession = Depends(get_db)):
"""首页"""
# 查询类型数量
result = await db.execute(select(func.count()).select_from(Type))
type_count = result.scalar()
# 查询配置项数量
result = await db.execute(select(func.count()).select_from(Config))
config_count = result.scalar()
return templates.TemplateResponse(
"index.html",
{
"request": request,
"types_count": type_count,
"configs_count": config_count
}
)
@page_router.get("/types", response_class=HTMLResponse)
async def types_page(
request: Request,
search: Optional[str] = None,
db: AsyncSession = Depends(get_db)
):
"""配置类型页面"""
query = select(Type)
if search:
query = query.where(Type.type_name.contains(search) | Type.description.contains(search))
result = await db.execute(query)
types = result.scalars().all()
return templates.TemplateResponse(
"types.html",
{
"request": request,
"types": types,
"search": search
}
)
@page_router.get("/configs", response_class=HTMLResponse)
async def configs_page(
request: Request,
type_name: Optional[str] = None,
key: Optional[str] = None,
value: Optional[str] = None,
db: AsyncSession = Depends(get_db)
):
"""配置项页面"""
# 构建查询
query = select(Config, Type).join(Type)
# 添加筛选条件
if type_name:
query = query.where(Type.type_name.contains(type_name))
if key:
query = query.where(Config.key.contains(key))
if value:
query = query.where(Config.value.contains(value))
# 执行查询
result = await db.execute(query)
rows = result.all()
# 处理查询结果将Config对象的属性转换为字典
configs = [{
"config_id": row[0].config_id,
"type_id": row[0].type_id,
"key": row[0].key,
"value": row[0].value,
"key_description": row[0].key_description,
"created_at": row[0].created_at,
"updated_at": row[0].updated_at,
"type_name": row[1].type_name
} for row in rows]
# 获取所有类型
types_result = await db.execute(select(Type))
types = types_result.scalars().all()
return templates.TemplateResponse(
"configs.html",
{
"request": request,
"configs": configs,
"types": types,
"current_type": type_name
}
)