Files
DjangoVue3Admin/backend/app_user/views.py
T
2025-03-16 14:25:27 +08:00

153 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
from django.utils import timezone
from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated
from app_menu.models import Menu
from app_menu.serializer import MenuSerializer
from app_user.models import Users
from app_user.serializers import UserSerializer, UserCreateSerializer, UserInfoUpdateSerializer, UserResource
from utils.json_response import DetailResponse, ErrorResponse
from utils.viewset import CustomModelViewSet
class UserViewSet(CustomModelViewSet):
queryset = Users.objects.exclude(is_delete=1).all()
serializer_class = UserSerializer
create_serializer_class = UserCreateSerializer
# update_serializer_class = UserInfoUpdateSerializer
update_serializer_class = UserCreateSerializer
filterset_fields = ['status', 'phone', 'role', 'dept']
search_fields = ["username", "nickname"]
@action(methods=["GET"], detail=False, permission_classes=[IsAuthenticated])
def auth(self, request):
"""
获取用户权限信息
"""
user = request.user
result = {}
result['user'] = {
"userId": user.id,
"username": user.username,
"nickName": user.nickname,
"phone": user.phone,
"gender": user.gender,
"email": user.email,
"avatar": user.avatar,
"dept": user.dept_id,
"remark": user.remark,
"is_superuser": user.is_superuser,
}
role = getattr(user, 'role')
role_info = role.values('id', 'role_name', 'role_key')
if role_info:
result['role'] = role_info[0]
else:
return ErrorResponse(code=4003, msg="该用户没有设定角色,请联系管理员分配角色")
# 获取对应的menus
is_superuser = request.user.is_superuser
is_admin = request.user.role.values_list('admin', flat=True)
if is_superuser or True in is_admin:
queryset = Menu.objects.filter(status='0').all()
else:
menu_id_list = request.user.role.values_list('menu', flat=True)
queryset = Menu.objects.filter(status='0', id__in=menu_id_list)
menu_serializers = MenuSerializer(queryset, many=True).data
permissions = []
menus = []
for menu_serializer in menu_serializers:
is_hide = menu_serializer['is_hide']
is_keep_alive = menu_serializer['is_keep_alive']
is_affix = menu_serializer['is_affix']
is_iframe = menu_serializer['is_iframe']
permission = menu_serializer['permission']
menu_type = menu_serializer['menu_type']
menu = {
"id": menu_serializer['id'],
"parent_id": menu_serializer['parent'],
"name": menu_serializer['path'],
"path": menu_serializer['path'],
"redirect": '',
"component": menu_serializer['component'],
"meta": {
"title": menu_serializer['menu_name'],
"isLink": menu_serializer['is_link'],
"isHide": False if is_hide == '0' else True,
"isKeepAlive": False if is_keep_alive == '1' else True,
"isAffix": False if is_affix == '1' else True,
"isIframe": False if is_iframe == '1' else True,
"auth": [] if permission == '' else [permission],
"icon": menu_serializer['icon']
},
'children': []
}
if menu_type != 'F':
menus.append(menu)
if menu_type in ['F', 'C']:
permissions.append(permission)
res_p = []
# 创建数据字典
data_dict = {item["id"]: item for item in menus}
# 遍历数据,找出最高级节点(parent_id为None)
for item in menus:
if item["parent_id"] is None:
res_p.append(item)
# 递归构建树形结构
def build_tree(node, data_dict):
node["children"] = [
build_tree(data_dict[child_id], data_dict)
for child_id in data_dict
if data_dict[child_id]["parent_id"] == node["id"]
]
return node
# 构建树形结构
for item in res_p:
build_tree(item, data_dict)
result['menus'] = res_p
result['permissions'] = permissions
return DetailResponse(data=result, msg="获取成功")
def user_info(self, request):
"""
获取当前用户信息
"""
user = request.user
result = {
"nickname": user.nickname,
"phone": user.phone,
"gender": user.gender,
"email": user.email
}
return DetailResponse(data=result, msg="获取成功")
def update_user_info(self, request):
"""
修改当前用户信息
"""
user = request.user
Users.objects.filter(id=user.id).update(**request.data)
return DetailResponse(data=None, msg="修改成功")
def export_to_excel(self, request):
"""
用户表导出
"""
user_resource = UserResource()
dataset = user_resource.export()
timestamp = timezone.now().strftime('%Y%m%d%H%M%S')
filename = f"user_{timestamp}.xls"
response = HttpResponse(dataset.xls, content_type='application/vnd.ms-excel')
response['Content-Disposition'] = f'attachment; filename="{filename}"'
return response