fix(budget): 版本管理UI字段/状态机对齐 active→draft映射+plan_count/last_updated别名

- list_budget_versions 输出 approval_status(active映射draft)+plan_count+last_updated
- 保留 status/kpi_count/updated_at 原字段兼容(下拉'当前'标记/测试契约)
- 前端提交审批按钮兜底 active(双端保险)
- 修复: 版本行仅复选框无按钮/状态恒草稿/条目数空白/最后更新空白
This commit is contained in:
Hermes CI Fix
2026-09-07 11:01:56 +08:00
parent 1fa08364ad
commit b01a108874
2 changed files with 12 additions and 3 deletions
+11 -2
View File
@@ -1435,14 +1435,23 @@ def list_budget_versions(
result = []
for key, v in version_map.items():
raw_status = v["status"]
# 状态机对齐(2026-09-07 UI修复):DB 默认态是 active(当前在用/草稿态),
# 前端审批按钮语义用 draft=可提交审批/submitted=待审批/approved=已批准只读/rejected=已驳回
# → approval_status 把 active 映射为 draft,同时保留 status 原字段兼容其他引用(下拉"当前"标记等)
approval_status = "draft" if raw_status == "active" else raw_status
updated_str = v["updated_at"].strftime("%Y-%m-%d %H:%M") if v["updated_at"] else ""
result.append({
"version": v["version"],
"status": v["status"],
"status": raw_status,
"approval_status": approval_status,
"kpi_count": v["kpi_count"],
"plan_count": v["kpi_count"], # 前端列 prop 别名(BudgetManagement.vue versions tab)
"total_budget": round(v["total_budget"], 2),
"period_count": len(v["periods"]),
"year": year,
"updated_at": v["updated_at"].strftime("%Y-%m-%d %H:%M") if v["updated_at"] else "",
"updated_at": updated_str,
"last_updated": updated_str, # 前端列 prop 别名
})
result.sort(key=lambda x: x["version"], reverse=True)
return result
+1 -1
View File
@@ -166,7 +166,7 @@
<el-table-column prop="last_updated" label="最后更新" min-width="150" />
<el-table-column label="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button v-if="row.approval_status === 'draft'" size="small" @click="submitVersion(row)">提交审批</el-button>
<el-button v-if="row.approval_status === 'draft' || row.approval_status === 'active'" size="small" @click="submitVersion(row)">提交审批</el-button>
<template v-if="row.approval_status === 'submitted'"><el-button size="small" type="success" @click="approveVersion(row, 'approved')">批准</el-button><el-button size="small" type="danger" @click="approveVersion(row, 'rejected')">驳回</el-button></template>
<el-button v-if="row.approval_status === 'rejected'" size="small" @click="resubmitVersion(row)">重新提交</el-button>
<el-checkbox v-model="row._selected" @change="onVersionSelect(row)" :disabled="selectedVersions.length >= 2 && !row._selected" style="margin-left:8px;" />