mirror of
https://github.com/taskPyroer/DjangoVue3Admin.git
synced 2026-10-04 00:49:37 +00:00
153 lines
5.6 KiB
Python
153 lines
5.6 KiB
Python
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 |