签入版本
This commit is contained in:
@@ -0,0 +1,332 @@
|
||||
# 完整代码清单
|
||||
|
||||
本章汇总友链(Link)模块涉及的全部文件,便于开发时快速查阅和复制。
|
||||
|
||||
## 后端文件清单
|
||||
|
||||
### 1. 数据模型 `src/modules/link/models.py`
|
||||
|
||||
```python
|
||||
# +======================================================================
|
||||
# | 模块: 友链数据模型层
|
||||
# | 说明: 定义友链表结构,继承 BaseModel 获得通用字段与序列化能力
|
||||
# +======================================================================
|
||||
"""友链数据模型。"""
|
||||
|
||||
from sqlalchemy import Column, Integer, String, text
|
||||
|
||||
from config.database import DB_PREFIX
|
||||
from core.base_model import BaseModel
|
||||
|
||||
|
||||
class Link(BaseModel):
|
||||
"""友情链接模型"""
|
||||
__tablename__ = DB_PREFIX + "link"
|
||||
__table_args__ = {"comment": "友情链接表"}
|
||||
|
||||
# 链接名称
|
||||
name = Column(String(255), nullable=False, index=True, comment="链接名称")
|
||||
# 链接类型
|
||||
type = Column(String(50), default="", comment="链接类型")
|
||||
# 链接来源
|
||||
form = Column(String(50), default="", comment="链接来源")
|
||||
# 链接图片
|
||||
image = Column(String(500), default="", comment="链接图片")
|
||||
# 链接地址
|
||||
url = Column(String(500), default="", comment="链接地址")
|
||||
# 状态:0-正常 1-停用
|
||||
status = Column(Integer, default=0, server_default=text("0"), comment="状态")
|
||||
# 排序
|
||||
sort = Column(Integer, default=0, server_default=text("0"), comment="排序")
|
||||
```
|
||||
|
||||
### 2. 表单验证 `src/modules/link/schemas.py`
|
||||
|
||||
```python
|
||||
# +======================================================================
|
||||
# | 模块: 友链请求校验模型层
|
||||
# | 说明: 定义友链创建/编辑与状态更新的 Pydantic 校验模型
|
||||
# +======================================================================
|
||||
"""友链请求校验模型。"""
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from core.base_schema import BaseSchema
|
||||
|
||||
|
||||
class LinkSchema(BaseSchema):
|
||||
"""友链创建/编辑表单"""
|
||||
# 链接名称
|
||||
name: str = Field(..., min_length=1, max_length=150, description="链接名称")
|
||||
# 链接类型
|
||||
type: Optional[str] = Field(default="", max_length=50, description="链接类型")
|
||||
# 链接来源
|
||||
form: Optional[str] = Field(default="", max_length=50, description="链接来源")
|
||||
# 链接图片
|
||||
image: Optional[str] = Field(default="", max_length=500, description="链接图片")
|
||||
# 链接地址
|
||||
url: Optional[str] = Field(default="", max_length=500, description="链接地址")
|
||||
# 状态
|
||||
status: Optional[int] = Field(default=0, ge=0, le=1, description="状态")
|
||||
# 排序
|
||||
sort: Optional[int] = Field(default=0, ge=0, le=99999, description="排序")
|
||||
|
||||
|
||||
class LinkStatusSchema(BaseModel):
|
||||
"""友链状态更新表单"""
|
||||
# 记录ID
|
||||
id: int = Field(..., gt=0, description="记录ID")
|
||||
# 状态
|
||||
status: int = Field(..., ge=0, le=1, description="状态")
|
||||
```
|
||||
|
||||
### 3. 数据访问层 `src/modules/link/repository.py`
|
||||
|
||||
```python
|
||||
# +======================================================================
|
||||
# | 模块: 友链数据访问层
|
||||
# | 说明: 定义友链仓储,继承 BaseRepository 获得通用 CRUD 与软删除能力
|
||||
# +======================================================================
|
||||
"""友链数据访问。"""
|
||||
|
||||
from core.base_repository import BaseRepository
|
||||
from modules.link.models import Link
|
||||
|
||||
|
||||
class LinkRepository(BaseRepository):
|
||||
"""友链数据仓库"""
|
||||
model = Link
|
||||
```
|
||||
|
||||
### 4. 业务逻辑层 `src/modules/link/service.py`
|
||||
|
||||
```python
|
||||
# +======================================================================
|
||||
# | 模块: 友链业务逻辑层
|
||||
# | 说明: 定义友链服务,声明差异点(file_fields 自动处理图片),
|
||||
# | 最后导出服务单例
|
||||
# +======================================================================
|
||||
"""友链业务逻辑。"""
|
||||
|
||||
from core.base_service import BaseService
|
||||
from modules.link.models import Link
|
||||
from modules.link.repository import LinkRepository
|
||||
from modules.link.schemas import LinkSchema, LinkStatusSchema
|
||||
|
||||
|
||||
class LinkService(BaseService):
|
||||
"""友链服务"""
|
||||
|
||||
# ============================================================
|
||||
# 基础声明
|
||||
# ============================================================
|
||||
model = Link
|
||||
repo_cls = LinkRepository
|
||||
|
||||
# ============================================================
|
||||
# 差异点声明
|
||||
# ============================================================
|
||||
create_schema = LinkSchema
|
||||
update_schema = LinkSchema
|
||||
status_schema = LinkStatusSchema
|
||||
# 分页查询字段与排序
|
||||
page_like_fields = ("name",)
|
||||
page_eq_fields = ("type", "form", "status")
|
||||
page_order_by = (("sort", "asc"),)
|
||||
# 枚举显示名映射
|
||||
serialize_maps = {
|
||||
"type": "link_type",
|
||||
"form": "link_form",
|
||||
}
|
||||
# 文件字段:add/update 时自动 save_file,serialize 时自动补全 URL
|
||||
file_fields = ("image",)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 服务单例
|
||||
# ======================================================================
|
||||
link_service = LinkService()
|
||||
```
|
||||
|
||||
### 5. 请求处理器 `src/modules/link/handlers.py`
|
||||
|
||||
```python
|
||||
# +======================================================================
|
||||
# | 模块: 友链请求处理器层
|
||||
# | 说明: 承接友情链接相关的 HTTP 请求,校验权限/演示模式并记录操作日志后,
|
||||
# | 转交友链服务层处理(分页、详情、增删改、状态、批量删除等)
|
||||
# +======================================================================
|
||||
"""友链请求处理器。"""
|
||||
|
||||
from common.middleware.access_decorators import check_demo, permission_required
|
||||
from common.middleware.operation_log import operation_log
|
||||
from core import response as R
|
||||
from core.base_handler import BaseHandler
|
||||
from modules.link.service import link_service
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 查询友链分页数据
|
||||
# ======================================================================
|
||||
class LinkPageHandler(BaseHandler):
|
||||
"""查询友链分页数据。"""
|
||||
|
||||
@permission_required("sys:link:list")
|
||||
async def get(self):
|
||||
"""GET 请求:返回友链分页列表。"""
|
||||
return await link_service.get_page(self)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 查询友链详情
|
||||
# ======================================================================
|
||||
class LinkDetailHandler(BaseHandler):
|
||||
"""查询友链详情。"""
|
||||
|
||||
@permission_required("sys:link:detail")
|
||||
async def get(self, id):
|
||||
"""GET 请求:按 ID 返回友链详情。"""
|
||||
return R.ok(self, data=link_service.get_detail(id))
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 添加友链
|
||||
# ======================================================================
|
||||
class LinkAddHandler(BaseHandler):
|
||||
"""添加友链。"""
|
||||
|
||||
@permission_required("sys:link:add")
|
||||
@check_demo
|
||||
@operation_log("友链管理", "添加")
|
||||
async def post(self):
|
||||
"""POST 请求:新增友链。"""
|
||||
return await link_service.add(self)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 更新友链
|
||||
# ======================================================================
|
||||
class LinkUpdateHandler(BaseHandler):
|
||||
"""更新友链。"""
|
||||
|
||||
@permission_required("sys:link:update")
|
||||
@check_demo
|
||||
@operation_log("友链管理", "更新")
|
||||
async def put(self):
|
||||
"""PUT 请求:更新友链信息。"""
|
||||
return await link_service.update(self)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 删除友链
|
||||
# ======================================================================
|
||||
class LinkDeleteHandler(BaseHandler):
|
||||
"""删除友链。"""
|
||||
|
||||
@permission_required("sys:link:delete")
|
||||
@check_demo
|
||||
@operation_log("友链管理", "删除")
|
||||
async def delete(self, id):
|
||||
"""DELETE 请求:按 ID 删除友链(软删除)。"""
|
||||
return await link_service.delete(self, id)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 设置友链状态
|
||||
# ======================================================================
|
||||
class LinkStatusHandler(BaseHandler):
|
||||
"""设置友链状态。"""
|
||||
|
||||
@permission_required("sys:link:status")
|
||||
@check_demo
|
||||
@operation_log("友链管理", "设置状态")
|
||||
async def put(self):
|
||||
"""PUT 请求:修改友链状态。"""
|
||||
return await link_service.update_status(self)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 批量删除友链
|
||||
# ======================================================================
|
||||
class LinkBatchDeleteHandler(BaseHandler):
|
||||
"""批量删除友链。"""
|
||||
|
||||
@permission_required("sys:link:delete")
|
||||
@check_demo
|
||||
@operation_log("友链管理", "批量删除")
|
||||
async def post(self):
|
||||
"""POST 请求:批量删除友链(软删除)。"""
|
||||
return await link_service.batch_delete(self)
|
||||
```
|
||||
|
||||
### 6. 路由定义 `src/api/v1/link.py`
|
||||
|
||||
```python
|
||||
# +======================================================================
|
||||
# | 模块: 友链路由层
|
||||
# | 说明: 提供友情链接的增删改查、批量删除、状态管理等 API 接口
|
||||
# +======================================================================
|
||||
"""友链相关路由。"""
|
||||
|
||||
from modules.link.handlers import (
|
||||
LinkAddHandler, LinkBatchDeleteHandler, LinkDeleteHandler,
|
||||
LinkDetailHandler, LinkPageHandler, LinkStatusHandler,
|
||||
LinkUpdateHandler,
|
||||
)
|
||||
|
||||
routes = [
|
||||
# 查询友链分页数据
|
||||
(r"/link/page", LinkPageHandler),
|
||||
# 查询友链详情
|
||||
(r"/link/detail/(\d+)", LinkDetailHandler),
|
||||
# 添加友链
|
||||
(r"/link/add", LinkAddHandler),
|
||||
# 更新友链
|
||||
(r"/link/update", LinkUpdateHandler),
|
||||
# 删除友链
|
||||
(r"/link/delete/(\d+)", LinkDeleteHandler),
|
||||
# 设置友链状态
|
||||
(r"/link/status", LinkStatusHandler),
|
||||
# 批量删除友链
|
||||
(r"/link/batchDelete", LinkBatchDeleteHandler),
|
||||
]
|
||||
```
|
||||
|
||||
### 7. 路由注册 `src/api/v1/router.py`
|
||||
|
||||
```python
|
||||
# 在 _RESOURCE_MODULES 列表中追加 link 模块
|
||||
from api.v1 import link
|
||||
|
||||
_RESOURCE_MODULES = [
|
||||
# ... 已有模块 ...
|
||||
link,
|
||||
]
|
||||
```
|
||||
|
||||
## 前端文件清单
|
||||
|
||||
| 文件 | 说明 |
|
||||
|:-----|:-----|
|
||||
| `ui/src/api/system/link.js` | 接口请求封装 |
|
||||
| `ui/src/views/system/link/index.vue` | 列表页面 |
|
||||
| `ui/src/views/system/link/edit.vue` | 编辑弹窗 |
|
||||
| `ui/src/views/system/link/columns.js` | 表格列定义 |
|
||||
| `ui/src/views/system/link/querySchemas.js` | 查询条件定义 |
|
||||
|
||||
## 文件关系图
|
||||
|
||||
```
|
||||
src/modules/link/
|
||||
├── models.py ← 数据模型(继承 BaseModel)
|
||||
├── schemas.py ← 请求校验(继承 BaseSchema)
|
||||
├── repository.py ← 数据访问(继承 BaseRepository)
|
||||
├── service.py ← 业务逻辑(继承 BaseService)
|
||||
└── handlers.py ← 请求处理器(继承 BaseHandler)
|
||||
|
||||
src/api/v1/
|
||||
├── link.py ← 路由定义(routes 列表)
|
||||
└── router.py ← 路由注册(_RESOURCE_MODULES)
|
||||
```
|
||||
Reference in New Issue
Block a user