- 后端 /api/v1/dashboard 单端点返回四区块:经营总览(绩效/应付/人数/团队数/月结状态/近 6 个月趋势)、待办(待审批 + 回款未指定批次 + 同步显式降级)、风险预警(回款逾期/审批超时,阈值参数化)、最近动态(操作日志) - dashboard_service 实时派生(不落表、不引调度器);参数快照一次解析;总览只做 SQL 聚合,不复用报表的重查询 - V10 迁移新增预警参数三项(warning.enabled / warning.receipt.overdue.days=90 / warning.approval.timeout.days=3),参数注册表 19→22,init-dev 与 V10 SQL 双轨同步 - 测试:test_dashboard 5 例(权限文案/总览对账+非法月份 400/待办三类/预警命中与参数关闭/动态来源);全量 852 passed - 依赖闭包并入:core/month.py 月份校验、api/v1/base/business_roles.py(router 已挂载的岗位只读端点)、test_month_validation - 修复:alembic --sql 在 Windows 按控制台 GBK 输出,V10 SQL 以 UTF-8 重新导出(README 已记) Co-Authored-By: Claude Code <noreply@anthropic.com>
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
"""岗位下拉选项(基础数据与报表筛选共用)。
|
||
|
||
岗位管理本身仅管理员可用(FR-006),但报表的「岗位」筛选对财务/领导
|
||
开放(FR-029)。为避免把管理接口整体放开,这里提供只读、登录即可的
|
||
启用岗位选项;写操作仍走 `/system/business-roles` 的管理员端点。
|
||
"""
|
||
|
||
from typing import Annotated
|
||
|
||
from fastapi import APIRouter, Depends
|
||
|
||
from app.api.deps import DbSession, get_current_user
|
||
from app.core.response import ApiResponse, ok
|
||
from app.models import User
|
||
from app.repositories import business_role_repository
|
||
|
||
router = APIRouter(prefix="/business-roles", tags=["人员管理"])
|
||
|
||
# 基础数据是业务操作:登录即可,不要求管理员
|
||
CurrentUser = Annotated[User, Depends(get_current_user)]
|
||
|
||
|
||
@router.get("/options", response_model=ApiResponse[list[dict]], summary="岗位下拉选项")
|
||
def list_options(session: DbSession, _: CurrentUser) -> ApiResponse[list[dict]]:
|
||
"""岗位选项(登录即可;含停用——人员档案可能仍引用停用岗位)。
|
||
|
||
岗位规模有限(内置 + 自定义),一次取足够上限,不做分页。
|
||
"""
|
||
roles = business_role_repository.list_roles(session, offset=0, limit=1000)
|
||
return ok(
|
||
[
|
||
{
|
||
"id": role.id,
|
||
"role_code": role.role_code,
|
||
"role_name": role.role_name,
|
||
"status": role.status,
|
||
}
|
||
for role in roles
|
||
]
|
||
)
|