fix: 修复财务接口字段名及后台角色权限/用户列表返回格式

This commit is contained in:
XingQue
2026-06-20 18:28:29 +08:00
parent 7890d0992a
commit 4f6c06a488

View File

@@ -101,6 +101,20 @@ from .serializers import PopupPageSerializer
logger = logging.getLogger('houtai')
SHOP_PRODUCT_PERMS = ['1199ab', '1199abc', '1199abd']
def _serialize_permission_row(perm_row):
"""gvsdsdk Permission → 后台 Vue 约定的小写字段"""
if isinstance(perm_row, dict):
code = perm_row.get('PermCode') or perm_row.get('perm_code') or ''
name = perm_row.get('PermName') or perm_row.get('perm_name') or code
desc = perm_row.get('PermDesc') or perm_row.get('perm_desc') or ''
else:
code = perm_row.PermCode or ''
name = perm_row.PermName or code
desc = perm_row.PermDesc or ''
return {'perm_code': code, 'perm_name': name, 'perm_desc': desc}
class GetRolePermissionView(APIView):
"""
获取所有角色、权限以及角色关联的用户数
@@ -124,25 +138,32 @@ class GetRolePermissionView(APIView):
# 3. 获取所有权限
all_perms = Permission.objects.filter(PermStatus=1).values('PermCode', 'PermName', 'PermDesc')
permissions_list = list(all_perms)
permissions_list = [_serialize_permission_row(p) for p in all_perms]
# 4. 获取所有角色,并统计每个角色下的用户数和关联的权限
# 4. 获取所有角色,并统计每个角色下的用户数(仅后台客服账号)
kefu_user_uuids = list(
User.objects.filter(KefuProfile__isnull=False).values_list('UserUUID', flat=True)
)
roles = Role.objects.filter(RoleStatus=1)
roles_data = []
for role in roles:
# 统计该角色下的用户数
user_count = UserRole.objects.filter(RoleUUID=role.RoleUUID).count()
# 获取该角色绑定的权限
user_count = UserRole.objects.filter(
RoleUUID=role.RoleUUID,
UserUUID__in=kefu_user_uuids,
).count()
role_perm_uuids = RolePermission.objects.filter(
RoleUUID=role.RoleUUID
).values_list('PermUUID', flat=True)
perms_of_role = list(Permission.objects.filter(
PermUUID__in=list(role_perm_uuids)
).values('PermCode', 'PermName', 'PermDesc'))
perms_of_role = [
_serialize_permission_row(p)
for p in Permission.objects.filter(
PermUUID__in=list(role_perm_uuids)
).values('PermCode', 'PermName', 'PermDesc')
]
roles_data.append({
'role_code': role.RoleName,
'role_name': role.RoleName,
'description': role.RoleDesc,
'description': role.RoleDesc or '',
'user_count': user_count,
'permissions': perms_of_role
})
@@ -335,19 +356,13 @@ class GetAdminUserListView(APIView):
# 关键修正:先求值为列表,再传入 phone__in
if role_code:
# 通过 gvsdsdk UserRole 查询拥有该角色的用户
target_role = Role.objects.filter(RoleName=role_code).first()
if target_role:
user_uuids = list(
UserRole.objects.filter(RoleUUID=target_role.RoleUUID)
.values_list('UserUUID', flat=True)
)
# 将 UserUUID 转为 phone 列表
user_phones = list(
User.objects.filter(UserUUID__in=user_uuids)
.values_list('Phone', flat=True)
)
users = users.filter(Phone__in=user_phones)
users = users.filter(UserUUID__in=user_uuids)
else:
users = users.none()
@@ -368,12 +383,15 @@ class GetAdminUserListView(APIView):
for r in user_roles
]
data_list.append({
'phone': user.Phone,
'phone': user.Phone or '',
'yonghuid': user.UserUID or '',
'nicheng': user.KefuProfile.nicheng,
'roles': roles_data,
'status': user.KefuProfile.zhuangtai,
'CreateTime': user.UserCreateTime.strftime('%Y-%m-%d %H:%M:%S') if hasattr(user, 'UserCreateTime') else '',
'UpdateTime': user.UpdateTime.strftime('%Y-%m-%d %H:%M:%S') if hasattr(user, 'UpdateTime') else '',
'create_time': user.UserCreateTime.strftime('%Y-%m-%d %H:%M:%S') if getattr(user, 'UserCreateTime', None) else '',
'update_time': user.KefuProfile.UpdateTime.strftime('%Y-%m-%d %H:%M:%S') if getattr(user.KefuProfile, 'UpdateTime', None) else '',
'CreateTime': user.UserCreateTime.strftime('%Y-%m-%d %H:%M:%S') if getattr(user, 'UserCreateTime', None) else '',
'UpdateTime': user.KefuProfile.UpdateTime.strftime('%Y-%m-%d %H:%M:%S') if getattr(user.KefuProfile, 'UpdateTime', None) else '',
})
return Response({
@@ -6377,7 +6395,7 @@ class CaiwuView(APIView):
amount_sum = Czjilu.query.filter(
CreateTime__gte=today_start,
CreateTime__lt=today_end,
UserUID__in=new_huiyuan_user_ids,
yonghuid__in=new_huiyuan_user_ids,
leixing=1,
zhuangtai=3
).aggregate(total=Sum('jine'))