From 4f6c06a48802c3beb46ca9cdf52f44b90c2022b5 Mon Sep 17 00:00:00 2001 From: XingQue Date: Sat, 20 Jun 2026 18:28:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=B4=A2=E5=8A=A1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AD=97=E6=AE=B5=E5=90=8D=E5=8F=8A=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90/=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=97=E8=A1=A8=E8=BF=94=E5=9B=9E=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/view.py | 58 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/backend/view.py b/backend/view.py index 79ad357..cb62abb 100644 --- a/backend/view.py +++ b/backend/view.py @@ -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'))