- 修复前端路由守卫:未登录时不显示提示,直接跳转登录页 - 修复API拦截器:401错误不显示提示,直接跳转 - 增强验证码显示:图片尺寸从120x40增加到200x80 - 增大验证码字体:从28号增加到48号 - 优化验证码字符:排除易混淆的0和1 - 减少干扰线:从5条减少到3条,添加背景色优化 - 增强登录API日志:添加详细的调试日志 - 增强验证码生成和验证日志 - 优化异常处理和错误追踪 影响文件: - src/router/index.ts - src/api/request.ts - app/services/auth_service.py - app/api/v1/auth.py - app/schemas/user.py 测试状态: - 前端构建通过 - 后端语法检查通过 - 验证码显示效果优化完成 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
12 KiB
资产调拨和回收API文档
目录
资产调拨管理
1. 获取调拨单列表
GET /api/v1/transfers
查询参数:
skip(int): 跳过条数,默认0limit(int): 返回条数,默认20,最大100transfer_type(string): 调拨类型(internal=内部调拨/external=跨机构调拨)approval_status(string): 审批状态(pending/approved/rejected/cancelled)execute_status(string): 执行状态(pending/executing/completed/cancelled)source_org_id(int): 调出网点IDtarget_org_id(int): 调入网点IDkeyword(string): 搜索关键词(单号/标题)
响应示例:
[
{
"id": 1,
"order_code": "TO-20250124-00001",
"source_org_id": 1,
"target_org_id": 2,
"transfer_type": "external",
"title": "从总部向分公司调拨资产",
"asset_count": 5,
"apply_user_id": 1,
"apply_time": "2025-01-24T10:00:00",
"approval_status": "pending",
"execute_status": "pending",
"created_at": "2025-01-24T10:00:00"
}
]
2. 获取调拨单统计
GET /api/v1/transfers/statistics
查询参数:
source_org_id(int): 调出网点ID(可选)target_org_id(int): 调入网点ID(可选)
响应示例:
{
"total": 100,
"pending": 10,
"approved": 50,
"rejected": 5,
"executing": 15,
"completed": 20
}
3. 获取调拨单详情
GET /api/v1/transfers/{order_id}
路径参数:
order_id(int): 调拨单ID
响应示例:
{
"id": 1,
"order_code": "TO-20250124-00001",
"source_org_id": 1,
"target_org_id": 2,
"transfer_type": "external",
"title": "从总部向分公司调拨资产",
"asset_count": 5,
"apply_user_id": 1,
"apply_time": "2025-01-24T10:00:00",
"approval_status": "approved",
"approval_user_id": 2,
"approval_time": "2025-01-24T11:00:00",
"execute_status": "completed",
"execute_user_id": 3,
"execute_time": "2025-01-24T12:00:00",
"remark": "调拨备注",
"created_at": "2025-01-24T10:00:00",
"updated_at": "2025-01-24T12:00:00",
"source_organization": {
"id": 1,
"org_name": "总部",
"org_type": "headquarters"
},
"target_organization": {
"id": 2,
"org_name": "北京分公司",
"org_type": "branch"
},
"apply_user": {
"id": 1,
"real_name": "张三",
"username": "zhangsan"
},
"items": [
{
"id": 1,
"asset_id": 10,
"asset_code": "ASSET001",
"source_organization_id": 1,
"target_organization_id": 2,
"transfer_status": "completed"
}
]
}
4. 获取调拨单明细
GET /api/v1/transfers/{order_id}/items
路径参数:
order_id(int): 调拨单ID
响应示例:
[
{
"id": 1,
"order_id": 1,
"asset_id": 10,
"asset_code": "ASSET001",
"source_organization_id": 1,
"target_organization_id": 2,
"transfer_status": "completed",
"created_at": "2025-01-24T10:00:00"
}
]
5. 创建调拨单
POST /api/v1/transfers
请求体:
{
"source_org_id": 1,
"target_org_id": 2,
"transfer_type": "external",
"title": "从总部向分公司调拨资产",
"asset_ids": [10, 11, 12, 13, 14],
"remark": "调拨备注"
}
字段说明:
source_org_id(int, 必填): 调出网点IDtarget_org_id(int, 必填): 调入网点IDtransfer_type(string, 必填): 调拨类型internal: 内部调拨external: 跨机构调拨
title(string, 必填): 标题asset_ids(array, 必填): 资产ID列表remark(string, 可选): 备注
响应: 返回创建的调拨单详情
6. 更新调拨单
PUT /api/v1/transfers/{order_id}
路径参数:
order_id(int): 调拨单ID
请求体:
{
"title": "更新后的标题",
"remark": "更新后的备注"
}
字段说明:
title(string, 可选): 标题remark(string, 可选): 备注
响应: 返回更新后的调拨单详情
限制: 只有待审批状态的调拨单可以更新
7. 审批调拨单
POST /api/v1/transfers/{order_id}/approve
路径参数:
order_id(int): 调拨单ID
查询参数:
approval_status(string, 必填): 审批状态(approved/rejected)approval_remark(string, 可选): 审批备注
响应: 返回审批后的调拨单详情
限制:
- 只有待审批状态的调拨单可以审批
- 审批通过后可以开始执行调拨
8. 开始调拨
POST /api/v1/transfers/{order_id}/start
路径参数:
order_id(int): 调拨单ID
响应: 返回开始执行后的调拨单详情
限制:
- 必须已审批通过
- 不能重复开始
9. 完成调拨
POST /api/v1/transfers/{order_id}/complete
路径参数:
order_id(int): 调拨单ID
响应: 返回完成后的调拨单详情
功能:
- 自动更新资产所属机构
- 自动更新资产状态
- 更新明细状态为完成
限制: 只有pending或executing状态的调拨单可以完成
10. 取消调拨单
POST /api/v1/transfers/{order_id}/cancel
路径参数:
order_id(int): 调拨单ID
响应: 204 No Content
限制: 已完成的调拨单无法取消
11. 删除调拨单
DELETE /api/v1/transfers/{order_id}
路径参数:
order_id(int): 调拨单ID
响应: 204 No Content
限制: 只能删除已拒绝或已取消的调拨单
资产回收管理
1. 获取回收单列表
GET /api/v1/recoveries
查询参数:
skip(int): 跳过条数,默认0limit(int): 返回条数,默认20,最大100recovery_type(string): 回收类型(user=使用人回收/org=机构回收/scrap=报废回收)approval_status(string): 审批状态(pending/approved/rejected/cancelled)execute_status(string): 执行状态(pending/executing/completed/cancelled)keyword(string): 搜索关键词(单号/标题)
响应示例:
[
{
"id": 1,
"order_code": "RO-20250124-00001",
"recovery_type": "user",
"title": "回收离职员工资产",
"asset_count": 3,
"apply_user_id": 1,
"apply_time": "2025-01-24T10:00:00",
"approval_status": "pending",
"execute_status": "pending",
"created_at": "2025-01-24T10:00:00"
}
]
2. 获取回收单统计
GET /api/v1/recoveries/statistics
响应示例:
{
"total": 80,
"pending": 8,
"approved": 40,
"rejected": 4,
"executing": 12,
"completed": 16
}
3. 获取回收单详情
GET /api/v1/recoveries/{order_id}
路径参数:
order_id(int): 回收单ID
响应示例:
{
"id": 1,
"order_code": "RO-20250124-00001",
"recovery_type": "user",
"title": "回收离职员工资产",
"asset_count": 3,
"apply_user_id": 1,
"apply_time": "2025-01-24T10:00:00",
"approval_status": "approved",
"approval_user_id": 2,
"approval_time": "2025-01-24T11:00:00",
"execute_status": "completed",
"execute_user_id": 3,
"execute_time": "2025-01-24T12:00:00",
"remark": "回收备注",
"created_at": "2025-01-24T10:00:00",
"updated_at": "2025-01-24T12:00:00",
"apply_user": {
"id": 1,
"real_name": "张三",
"username": "zhangsan"
},
"items": [
{
"id": 1,
"asset_id": 10,
"asset_code": "ASSET001",
"recovery_status": "completed"
}
]
}
4. 获取回收单明细
GET /api/v1/recoveries/{order_id}/items
路径参数:
order_id(int): 回收单ID
响应示例:
[
{
"id": 1,
"order_id": 1,
"asset_id": 10,
"asset_code": "ASSET001",
"recovery_status": "completed",
"created_at": "2025-01-24T10:00:00"
}
]
5. 创建回收单
POST /api/v1/recoveries
请求体:
{
"recovery_type": "user",
"title": "回收离职员工资产",
"asset_ids": [10, 11, 12],
"remark": "回收备注"
}
字段说明:
recovery_type(string, 必填): 回收类型user: 使用人回收(从使用人处回收)org: 机构回收(从机构回收)scrap: 报废回收(报废资产回收)
title(string, 必填): 标题asset_ids(array, 必填): 资产ID列表remark(string, 可选): 备注
响应: 返回创建的回收单详情
6. 更新回收单
PUT /api/v1/recoveries/{order_id}
路径参数:
order_id(int): 回收单ID
请求体:
{
"title": "更新后的标题",
"remark": "更新后的备注"
}
字段说明:
title(string, 可选): 标题remark(string, 可选): 备注
响应: 返回更新后的回收单详情
限制: 只有待审批状态的回收单可以更新
7. 审批回收单
POST /api/v1/recoveries/{order_id}/approve
路径参数:
order_id(int): 回收单ID
查询参数:
approval_status(string, 必填): 审批状态(approved/rejected)approval_remark(string, 可选): 审批备注
响应: 返回审批后的回收单详情
限制:
- 只有待审批状态的回收单可以审批
- 审批通过后可以开始执行回收
8. 开始回收
POST /api/v1/recoveries/{order_id}/start
路径参数:
order_id(int): 回收单ID
响应: 返回开始执行后的回收单详情
限制:
- 必须已审批通过
- 不能重复开始
9. 完成回收
POST /api/v1/recoveries/{order_id}/complete
路径参数:
order_id(int): 回收单ID
响应: 返回完成后的回收单详情
功能:
- 自动更新资产状态为in_stock(普通回收)或scrapped(报废回收)
- 自动记录资产状态历史
- 更新明细状态为完成
限制: 只有pending或executing状态的回收单可以完成
10. 取消回收单
POST /api/v1/recoveries/{order_id}/cancel
路径参数:
order_id(int): 回收单ID
响应: 204 No Content
限制: 已完成的回收单无法取消
11. 删除回收单
DELETE /api/v1/recoveries/{order_id}
路径参数:
order_id(int): 回收单ID
响应: 204 No Content
限制: 只能删除已拒绝或已取消的回收单
业务流程说明
调拨流程
- 创建调拨单:选择调出/调入机构和资产
- 审批调拨单:管理员审批(通过/拒绝)
- 开始调拨:开始执行调拨操作
- 完成调拨:
- 自动更新资产所属机构
- 自动更新资产状态
- 记录状态历史
回收流程
- 创建回收单:选择回收类型和资产
- 审批回收单:管理员审批(通过/拒绝)
- 开始回收:开始执行回收操作
- 完成回收:
- 普通回收:资产状态变为in_stock
- 报废回收:资产状态变为scrapped
- 记录状态历史
状态说明
调拨类型
internal: 内部调拨(同一组织内调拨)external: 跨机构调拨(不同组织间调拨)
回收类型
user: 使用人回收(从使用人处回收资产)org: 机构回收(从机构回收资产)scrap: 报废回收(报废并回收资产)
审批状态
pending: 待审批approved: 已审批通过rejected: 已拒绝cancelled: 已取消
执行状态
pending: 待执行executing: 执行中completed: 已完成cancelled: 已取消
调拨明细状态
pending: 待调拨transferring: 调拨中completed: 已完成failed: 失败
回收明细状态
pending: 待回收recovering: 回收中completed: 已完成failed: 失败