fix: id兼容, 通知入口
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 5m0s

This commit is contained in:
luo
2026-07-28 15:19:29 +08:00
parent 0e8a11430a
commit 261f5f2853
21 changed files with 271 additions and 71 deletions

View File

@@ -34,7 +34,7 @@
<!-- 表格 -->
<ArtTable
ref="tableRef"
row-key="ID"
row-key="id"
:loading="loading"
:data="accountList"
:currentPage="pagination.page"
@@ -120,8 +120,11 @@
<ElEmpty v-if="filteredAvailableRoles.length === 0" description="暂无角色" />
<template v-else-if="isPlatformUser">
<ElCheckboxGroup v-model="rolesToAdd" class="role-list">
<div v-for="role in filteredAvailableRoles" :key="role.ID" class="role-item">
<ElCheckbox :label="role.ID" :disabled="selectedRoles.includes(role.ID)">
<div v-for="role in filteredAvailableRoles" :key="getRoleId(role)" class="role-item">
<ElCheckbox
:label="getRoleId(role)"
:disabled="selectedRoles.includes(getRoleId(role))"
>
<span class="role-info">
<span>{{ role.role_name }}</span>
<ElTag :type="role.role_type === 1 ? 'primary' : 'success'" size="small">
@@ -134,8 +137,11 @@
</template>
<template v-else>
<ElRadioGroup v-model="roleToAdd" class="role-list">
<div v-for="role in filteredAvailableRoles" :key="role.ID" class="role-item">
<ElRadio :label="role.ID" :disabled="selectedRoles.includes(role.ID)">
<div v-for="role in filteredAvailableRoles" :key="getRoleId(role)" class="role-item">
<ElRadio
:label="getRoleId(role)"
:disabled="selectedRoles.includes(getRoleId(role))"
>
<span class="role-info">
<span>{{ role.role_name }}</span>
<ElTag :type="role.role_type === 1 ? 'primary' : 'success'" size="small">
@@ -177,7 +183,7 @@
<div class="role-list">
<div
v-for="role in filteredAssignedRoles"
:key="role.ID"
:key="getRoleId(role)"
class="role-item assigned-role-item"
>
<span class="role-info">
@@ -186,7 +192,12 @@
{{ role.role_type === 1 ? '平台角色' : '客户角色' }}
</ElTag>
</span>
<ElButton type="danger" size="small" link @click="removeSingleRole(role.ID)">
<ElButton
type="danger"
size="small"
link
@click="removeSingleRole(getRoleId(role))"
>
移除
</ElButton>
</div>
@@ -231,6 +242,7 @@
import type { SearchFormItem } from '@/types'
import type { PlatformAccount, PlatformRole } from '@/types/api'
import { formatDateTime } from '@/utils/business/format'
import { getCompatibleNumericId } from '@/utils/business/id'
import { useAuth } from '@/composables/useAuth'
defineOptions({ name: 'CommonAccountList' })
@@ -287,6 +299,9 @@
// 是否为平台用户(平台用户可多选,其他单选)
const isPlatformUser = computed(() => currentAccountType.value === 2)
const getAccountId = (account: PlatformAccount | any) => getCompatibleNumericId(account) ?? 0
const getRoleId = (role: PlatformRole | any) => getCompatibleNumericId(role) ?? 0
// 搜索表单初始值
const initialSearchState = {
username: '',
@@ -646,7 +661,9 @@
// 计算属性:过滤后的已分配角色
const filteredAssignedRoles = computed(() => {
const assignedRolesList = allRoles.value.filter((role) => selectedRoles.value.includes(role.ID))
const assignedRolesList = allRoles.value.filter((role) =>
selectedRoles.value.includes(getRoleId(role))
)
if (!rightRoleFilter.value) return assignedRolesList
const keyword = rightRoleFilter.value.toLowerCase()
return assignedRolesList.filter((role) => role.role_name.toLowerCase().includes(keyword))
@@ -654,7 +671,12 @@
// 显示分配角色对话框
const showRoleDialog = async (row: PlatformAccount) => {
currentAccountId.value = (row as any).id
const accountId = getAccountId(row)
if (!accountId) {
ElMessage.error('当前账号缺少账号标识,无法分配角色')
return
}
currentAccountId.value = accountId
currentAccountName.value = row.username
currentAccountType.value = row.user_type
selectedRoles.value = []
@@ -671,12 +693,12 @@
await loadAllRoles('', roleType)
// 先加载当前账号的角色,再打开对话框
const res = await AccountService.getAccountRoles((row as any).id)
const res = await AccountService.getAccountRoles(accountId)
if (res.code === 0) {
// 提取角色ID数组
const roles = res.data || []
// 兼容 ID 和 id 两种字段名
selectedRoles.value = roles.map((role: any) => role.ID || role.id)
selectedRoles.value = roles.map((role: any) => getRoleId(role)).filter((id) => id > 0)
// 数据加载完成后再打开对话框
roleDialogVisible.value = true
}