task-251(admin.html观感对齐): 用户管理补齐新建/编辑/角色+菜单授权弹窗(接线孤儿模块)

This commit is contained in:
2026-09-05 21:17:15 +08:00
parent 41cb4ce174
commit 07fda4cf22
7 changed files with 426 additions and 2 deletions
@@ -9,6 +9,9 @@ import { createUserFilterState, toUserListParams, type UserFilterState } from '.
import { totalPageCount } from './user-pagination'
import { deleteBlockReason, deleteConfirmMessage } from './user-delete-model'
import { listPhaseOf, userListEmptyHint } from './user-list-state'
import { isEditableUser } from './user-edit-model'
import CreateUserDialog from './CreateUserDialog.vue'
import EditUserDialog from './EditUserDialog.vue'
const session = useAdminSessionStore()
const loading = ref(false)
@@ -22,6 +25,24 @@ const isSuperAdmin = computed(() => session.isSuperAdmin)
const currentUserId = computed(() => session.user?.id ?? null)
const statePhase = computed(() => listPhaseOf({ loading: loading.value, error: loadError.value, items: rows.value, total: total.value }))
const createVisible = ref(false)
const editVisible = ref(false)
const editUser = ref<AdminUser | null>(null)
function openCreate(): void {
createVisible.value = true
}
function openEdit(row: AdminUser): void {
if (!isEditableUser(row.role)) return
editUser.value = row
editVisible.value = true
}
function editableOf(row: AdminUser): boolean {
return isEditableUser(row.role)
}
async function loadUsers() {
loading.value = true
loadError.value = ''
@@ -92,6 +113,7 @@ onMounted(loadUsers)
<h2>用户管理</h2>
<p>当前没有开放注册入口仅管理员可在此创建用户层级关系超级管理员 -&gt; 管理员 -&gt; 普通账号</p>
</div>
<el-button type="primary" @click="openCreate">新建用户</el-button>
</div>
<el-card shadow="never" class="filter-card">
<el-form inline @submit.prevent="search">
@@ -143,8 +165,9 @@ onMounted(loadUsers)
</el-table-column>
<el-table-column prop="creatorUsername" label="所属管理员" width="160" />
<el-table-column prop="createdAt" label="创建时间" width="180" />
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button link type="primary" :disabled="!editableOf(row)" @click="openEdit(row)">编辑</el-button>
<el-button
link
type="danger"
@@ -168,6 +191,8 @@ onMounted(loadUsers)
/>
</div>
</el-card>
<CreateUserDialog v-model="createVisible" :operator-super="isSuperAdmin" @created="loadUsers" />
<EditUserDialog v-model="editVisible" :user="editUser" :operator-super="isSuperAdmin" @updated="loadUsers" />
</div>
</template>