fix(F006-W17.3.8): UserListView enabled 语义反转 (后端 0=正常 1=禁用)

用户反馈: 切 tab 时全部(2284) vs 已禁用(2283) vs 正常(1) 数据不一致
根因: 后端 /user/user/page 接口 enabled 字段语义 0=正常 1=禁用, 但前端 UI label 与字段值反了:
- 切"正常" tab 发 enabled=1 (后端当禁用查) → 只返 1 条
- 切"已禁用" tab 发 enabled=0 (后端当正常查) → 返 2283 条
- enabledStats 计数 filter 与 UI 标签反
- el-tag 颜色: enabled===1 显示绿色正常 (反了)
- toggleEnabled: 当前 1 改为 0 (方向反了)
- 操作按钮: enabled===1 显示禁用 (凑巧对了但跟实际语义反)

修法: 保留后端字段值, 把前端 UI 判断全部对齐后端语义 (0=正常 1=禁用)
- onTabChange: normal → enabled=0, disabled → enabled=1
- enabledStats.normal = filter === 0, disabled = filter === 1
- el-tag: === 0 绿色正常, === 1 红色禁用
- 操作按钮: === 0 显示禁用(橙色), === 1 显示启用(绿色)
- toggleEnabled: row.enabled===0 → next=1 (禁用), === 1 → next=0 (启用)
This commit is contained in:
Sisyphus 2026-07-07 17:09:42 +08:00
parent 4b77d67dc2
commit 5a7adb9075

View File

@ -118,9 +118,9 @@ async function load() {
raw: it
}))
total.value = Number(resp.total || 0)
// 统计 (在当前搜索结果中)
enabledStats.normal = list.value.filter(u => u.enabled === 1).length
enabledStats.disabled = list.value.filter(u => u.enabled === 0).length
// 统计 (后端 enabled 语义: 0=正常 1=禁用)
enabledStats.normal = list.value.filter(u => u.enabled === 0).length
enabledStats.disabled = list.value.filter(u => u.enabled === 1).length
} else {
list.value = []
total.value = 0
@ -141,9 +141,10 @@ const tabItems = computed(() => [
])
function onTabChange(key: string) {
// 后端 enabled 语义: 0=正常 1=禁用
if (key === 'all') query.enabled = ''
else if (key === 'normal') query.enabled = '1'
else if (key === 'disabled') query.enabled = '0'
else if (key === 'normal') query.enabled = '0'
else if (key === 'disabled') query.enabled = '1'
query.page = 1
load()
}
@ -164,8 +165,9 @@ function onEdit(row: FrontUser) {
}
async function toggleEnabled(row: FrontUser) {
const next = row.enabled === 1 ? 0 : 1
const action = next === 1 ? '启用' : '禁用'
// 当前 enabled: 0=正常 1=禁用; 要切换到对端
const next = row.enabled === 0 ? 1 : 0
const action = next === 1 ? '禁用' : '启用'
try {
await ElMessageBox.confirm(`确认${action}用户「${row.nickName}」?`, `${action}确认`, { type: 'warning' })
} catch { return }
@ -236,15 +238,15 @@ onMounted(load)
@limit-change="onLimitChange"
>
<template #enabled="{ row }">
<el-tag v-if="row.enabled === 1" type="success" size="small" effect="light" round>正常</el-tag>
<el-tag v-if="row.enabled === 0" type="success" size="small" effect="light" round>正常</el-tag>
<el-tag v-else type="danger" size="small" effect="light" round>禁用</el-tag>
</template>
<template #action="{ row }">
<span class="rr-actions">
<el-link type="primary" :underline="false" @click="onEdit(row)">修改</el-link>
<span class="rr-actions__sep">|</span>
<el-link :type="row.enabled === 1 ? 'warning' : 'success'" :underline="false" @click="toggleEnabled(row)">
{{ row.enabled === 1 ? '禁用' : '启用' }}
<el-link :type="row.enabled === 0 ? 'warning' : 'success'" :underline="false" @click="toggleEnabled(row)">
{{ row.enabled === 0 ? '禁用' : '启用' }}
</el-link>
<span class="rr-actions__sep">|</span>
<el-link type="danger" :underline="false" @click="deleteUser(row)">删除</el-link>