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:
@@ -1435,14 +1435,23 @@ def list_budget_versions(
|
|||||||
|
|
||||||
result = []
|
result = []
|
||||||
for key, v in version_map.items():
|
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({
|
result.append({
|
||||||
"version": v["version"],
|
"version": v["version"],
|
||||||
"status": v["status"],
|
"status": raw_status,
|
||||||
|
"approval_status": approval_status,
|
||||||
"kpi_count": v["kpi_count"],
|
"kpi_count": v["kpi_count"],
|
||||||
|
"plan_count": v["kpi_count"], # 前端列 prop 别名(BudgetManagement.vue versions tab)
|
||||||
"total_budget": round(v["total_budget"], 2),
|
"total_budget": round(v["total_budget"], 2),
|
||||||
"period_count": len(v["periods"]),
|
"period_count": len(v["periods"]),
|
||||||
"year": year,
|
"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)
|
result.sort(key=lambda x: x["version"], reverse=True)
|
||||||
return result
|
return result
|
||||||
|
|||||||
@@ -166,7 +166,7 @@
|
|||||||
<el-table-column prop="last_updated" label="最后更新" min-width="150" />
|
<el-table-column prop="last_updated" label="最后更新" min-width="150" />
|
||||||
<el-table-column label="操作" width="200" fixed="right">
|
<el-table-column label="操作" width="200" fixed="right">
|
||||||
<template #default="{ row }">
|
<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>
|
<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-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;" />
|
<el-checkbox v-model="row._selected" @change="onVersionSelect(row)" :disabled="selectedVersions.length >= 2 && !row._selected" style="margin-left:8px;" />
|
||||||
|
|||||||
Reference in New Issue
Block a user