Compare commits

...

2 Commits

Author SHA1 Message Date
sugarBecomer ddcbe65856 fix: 修复角色授权和菜单授权Checkbox绑定及菜单树递归展示 2026-03-24 20:46:32 +08:00
sugarBecomer 994dc360ae fix: 修复部分参数bug 2026-03-24 20:10:03 +08:00
4 changed files with 22 additions and 8 deletions
+1 -1
View File
@@ -76,7 +76,7 @@ async function fetchSummary() {
async function fetchAnnouncement() {
announcementLoading.value = true
try {
const res = await authApi.getPublicConfig('announcement')
const res = await authApi.getPublicConfig('system.announcement')
if (res.code === 200 && res.data) announcement.value = String(res.data)
} finally {
announcementLoading.value = false
+1 -1
View File
@@ -171,7 +171,7 @@ onMounted(() => {
<template v-else>
<div class="flex items-center gap-3">
<Label>允许用户注册</Label>
<Switch v-model:checked="allowRegister" />
<Switch v-model="allowRegister" />
<span class="text-sm text-muted-foreground">{{ allowRegister ? '已开启' : '已关闭' }}</span>
</div>
<div class="flex justify-end">
+18 -4
View File
@@ -131,6 +131,18 @@ const menuRoleId = ref(0)
const menuTree = ref<UserMenu[]>([])
const selectedMenuIds = ref<number[]>([])
/** 递归将 edges.children 转换为 children */
function normalizeMenuTree(nodes: any[]): UserMenu[] {
if (!nodes?.length) return []
return nodes.map(node => {
const edgeChildren = node.edges?.children
const directChildren = node.children
const rawChildren = edgeChildren?.length ? edgeChildren : directChildren
const children = rawChildren?.length ? normalizeMenuTree(rawChildren) : undefined
return { ...node, children }
})
}
async function openMenuAuth(roleId: number) {
menuRoleId.value = roleId
menuLoading.value = true
@@ -140,8 +152,10 @@ async function openMenuAuth(roleId: number) {
systemMenuApi.getTree(),
systemRoleApi.getMenu(roleId),
])
menuTree.value = treeRes.data ?? []
selectedMenuIds.value = (roleMenuRes.data as number[]) ?? []
menuTree.value = normalizeMenuTree(treeRes.data ?? [])
// getMenu 返回的是菜单 ID 数组
const ids = roleMenuRes.data
selectedMenuIds.value = Array.isArray(ids) ? ids : []
} catch {
toast.error('获取菜单数据失败')
} finally {
@@ -314,8 +328,8 @@ const MenuTreeCheckbox: ReturnType<typeof defineComponent> = defineComponent({
h('div', { class: 'flex items-center gap-2', style: { paddingLeft: `${props.depth * 20}px` } }, [
h(Checkbox, {
id: `menu-${props.menu.id}`,
checked: props.selectedIds.includes(props.menu.id),
'onUpdate:checked': () => emit('toggle', props.menu.id),
modelValue: props.selectedIds.includes(props.menu.id),
'onUpdate:modelValue': () => emit('toggle', props.menu.id),
}),
h(Label, { for: `menu-${props.menu.id}`, class: 'cursor-pointer text-sm' }, () => props.menu.name || props.menu.label),
]),
+2 -2
View File
@@ -313,8 +313,8 @@ async function fetchUsers(params: PageParams): Promise<PageResponse<any>> {
>
<Checkbox
:id="`role-${role.id}`"
:checked="selectedRoleIds.includes(role.id)"
@update:checked="toggleRole(role.id)"
:model-value="selectedRoleIds.includes(role.id)"
@update:model-value="toggleRole(role.id)"
/>
<Label :for="`role-${role.id}`" class="cursor-pointer">
{{ role.name }}