This commit is contained in:
sheng
2023-08-03 17:39:09 +08:00
7 changed files with 102 additions and 29 deletions

View File

@@ -6,8 +6,11 @@ from rest_framework import serializers
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
import django import django
django.setup() django.setup()
from dvadmin.system.models import Role, Dept, Users, Menu, MenuButton, ApiWhiteList, Dictionary, SystemConfig, \ from dvadmin.system.models import (
Role, Dept, Users, Menu, MenuButton,
ApiWhiteList, Dictionary, SystemConfig,
RoleMenuPermission, RoleMenuButtonPermission RoleMenuPermission, RoleMenuButtonPermission
)
from dvadmin.utils.serializers import CustomModelSerializer from dvadmin.utils.serializers import CustomModelSerializer
@@ -50,7 +53,6 @@ class MenuButtonInitSerializer(CustomModelSerializer):
read_only_fields = ["id"] read_only_fields = ["id"]
class MenuInitSerializer(CustomModelSerializer): class MenuInitSerializer(CustomModelSerializer):
""" """
递归深度获取数信息(用于生成初始化json文件) 递归深度获取数信息(用于生成初始化json文件)
@@ -139,8 +141,8 @@ class RoleMenuInitSerializer(CustomModelSerializer):
""" """
初始化角色菜单(用于生成初始化json文件) 初始化角色菜单(用于生成初始化json文件)
""" """
role_key = serializers.CharField(max_length=100,required=True) role_key = serializers.CharField(max_length=100, required=True)
menu_component_name = serializers.CharField(max_length=100,required=True) menu_component_name = serializers.CharField(max_length=100, required=True)
def create(self, validated_data): def create(self, validated_data):
init_data = self.initial_data init_data = self.initial_data
@@ -154,7 +156,7 @@ class RoleMenuInitSerializer(CustomModelSerializer):
class Meta: class Meta:
model = RoleMenuPermission model = RoleMenuPermission
fields = ['role_key','menu_component_name','creator', 'dept_belong_id'] fields = ['role_key', 'menu_component_name', 'creator', 'dept_belong_id']
read_only_fields = ["id"] read_only_fields = ["id"]
extra_kwargs = { extra_kwargs = {
'role': {'required': False}, 'role': {'required': False},
@@ -168,8 +170,8 @@ class RoleMenuButtonInitSerializer(CustomModelSerializer):
""" """
初始化角色菜单按钮(用于生成初始化json文件) 初始化角色菜单按钮(用于生成初始化json文件)
""" """
role_key = serializers.CharField(max_length=100,required=True) role_key = serializers.CharField(max_length=100, required=True)
menu_button_value = serializers.CharField(max_length=100,required=True) menu_button_value = serializers.CharField(max_length=100, required=True)
data_range = serializers.CharField(max_length=100, required=False) data_range = serializers.CharField(max_length=100, required=False)
def create(self, validated_data): def create(self, validated_data):
@@ -186,7 +188,7 @@ class RoleMenuButtonInitSerializer(CustomModelSerializer):
class Meta: class Meta:
model = RoleMenuButtonPermission model = RoleMenuButtonPermission
fields = ['role_key','menu_button_value','data_range','dept','creator', 'dept_belong_id'] fields = ['role_key', 'menu_button_value','data_range','dept','creator', 'dept_belong_id']
read_only_fields = ["id"] read_only_fields = ["id"]
extra_kwargs = { extra_kwargs = {
'role': {'required': False}, 'role': {'required': False},
@@ -196,7 +198,6 @@ class RoleMenuButtonInitSerializer(CustomModelSerializer):
} }
class ApiWhiteListInitSerializer(CustomModelSerializer): class ApiWhiteListInitSerializer(CustomModelSerializer):
""" """
初始化获取数信息(用于生成初始化json文件) 初始化获取数信息(用于生成初始化json文件)

View File

@@ -8,9 +8,11 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings")
django.setup() django.setup()
from dvadmin.utils.core_initialize import CoreInitialize from dvadmin.utils.core_initialize import CoreInitialize
from dvadmin.system.fixtures.initSerializer import UsersInitSerializer, DeptInitSerializer, RoleInitSerializer, \ from dvadmin.system.fixtures.initSerializer import (
MenuInitSerializer, ApiWhiteListInitSerializer, DictionaryInitSerializer, SystemConfigInitSerializer, \ UsersInitSerializer, DeptInitSerializer, RoleInitSerializer,
RoleMenuInitSerializer, RoleMenuButtonInitSerializer MenuInitSerializer, ApiWhiteListInitSerializer, DictionaryInitSerializer,
SystemConfigInitSerializer, RoleMenuInitSerializer, RoleMenuButtonInitSerializer
)
class Initialize(CoreInitialize): class Initialize(CoreInitialize):
@@ -51,7 +53,6 @@ class Initialize(CoreInitialize):
""" """
self.init_base(RoleMenuButtonInitSerializer, unique_fields=['role', 'menu_button']) self.init_base(RoleMenuButtonInitSerializer, unique_fields=['role', 'menu_button'])
def init_api_white_list(self): def init_api_white_list(self):
""" """
初始API白名单 初始API白名单

View File

@@ -29,13 +29,11 @@ system_url.register(r'area', AreaViewSet)
system_url.register(r'file', FileViewSet) system_url.register(r'file', FileViewSet)
system_url.register(r'api_white_list', ApiWhiteListViewSet) system_url.register(r'api_white_list', ApiWhiteListViewSet)
system_url.register(r'system_config', SystemConfigViewSet) system_url.register(r'system_config', SystemConfigViewSet)
system_url.register(r'message_center',MessageCenterViewSet) system_url.register(r'message_center', MessageCenterViewSet)
system_url.register(r'role_menu_button_permission', RoleMenuButtonPermissionViewSet) system_url.register(r'role_menu_button_permission', RoleMenuButtonPermissionViewSet)
system_url.register(r'role_menu_permission', RoleMenuPermissionViewSet) system_url.register(r'role_menu_permission', RoleMenuPermissionViewSet)
urlpatterns = [ urlpatterns = [
path('user/export/', UserViewSet.as_view({'post': 'export_data', })), path('user/export/', UserViewSet.as_view({'post': 'export_data', })),
path('user/import/', UserViewSet.as_view({'get': 'import_data', 'post': 'import_data'})), path('user/import/', UserViewSet.as_view({'get': 'import_data', 'post': 'import_data'})),

View File

@@ -189,3 +189,53 @@ class DeptViewSet(CustomModelViewSet):
dept.save() dept.save()
return SuccessResponse(data=[], msg="下移成功") return SuccessResponse(data=[], msg="下移成功")
@action(methods=['GET'], detail=False, permission_classes=[])
def dept_info(self, request):
"""部门信息"""
def inner(did, li):
sub = Dept.objects.filter(parent_id=did)
if not sub.exists():
return li
for i in sub:
li.append(i.pk)
inner(i, li)
return li
dept_id = request.query_params.get('dept_id')
show_all = request.query_params.get('show_all')
if dept_id is None:
return ErrorResponse(msg="部门不存在")
if not show_all:
show_all = 0
if int(show_all): # 递归当前部门下的所有部门,查询用户
all_did = [dept_id]
inner(dept_id, all_did)
users = Users.objects.filter(dept_id__in=all_did)
else:
if dept_id != '':
users = Users.objects.filter(dept_id=dept_id)
else:
users = Users.objects.none()
dept_obj = Dept.objects.get(id=dept_id) if dept_id != '' else None
sub_dept = Dept.objects.filter(parent_id=dept_obj.pk) if dept_id != '' else []
data = {
'dept_name': dept_obj and dept_obj.name,
'dept_user': users.count(),
'owner': dept_obj and dept_obj.owner,
'description': dept_obj and dept_obj.description,
'gender': {
'male': users.filter(gender=1).count(),
'female': users.filter(gender=2).count(),
'unknown': users.filter(gender=0).count(),
},
'sub_dept_map': []
}
for dept in sub_dept:
all_did = [dept.pk]
inner(dept.pk, all_did)
sub_data = {
'name': dept.name,
'count': Users.objects.filter(dept_id__in=all_did).count()
}
data['sub_dept_map'].append(sub_data)
return SuccessResponse(data)

View File

@@ -3,13 +3,13 @@ import hashlib
from django.contrib.auth.hashers import make_password, check_password from django.contrib.auth.hashers import make_password, check_password
from django_restql.fields import DynamicSerializerMethodField from django_restql.fields import DynamicSerializerMethodField
from rest_framework import serializers from rest_framework import serializers
from rest_framework.decorators import action, permission_classes from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from django.db import connection from django.db import connection
from application import dispatch from application import dispatch
from dvadmin.system.models import Users, Role, Dept from dvadmin.system.models import Users, Role, Dept
from dvadmin.system.views.role import RoleSerializer from dvadmin.system.views.role import RoleSerializer
from dvadmin.utils.json_response import ErrorResponse, DetailResponse from dvadmin.utils.json_response import ErrorResponse, DetailResponse, SuccessResponse
from dvadmin.utils.serializers import CustomModelSerializer from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.validator import CustomUniqueValidator from dvadmin.utils.validator import CustomUniqueValidator
from dvadmin.utils.viewset import CustomModelViewSet from dvadmin.utils.viewset import CustomModelViewSet
@@ -23,7 +23,7 @@ def recursion(instance, parent, result):
res.append(data) res.append(data)
if new_instance: if new_instance:
array = recursion(new_instance, parent, result) array = recursion(new_instance, parent, result)
res += (array) res += array
return res return res
@@ -197,6 +197,7 @@ class ExportUserProfileSerializer(CustomModelSerializer):
class UserProfileImportSerializer(CustomModelSerializer): class UserProfileImportSerializer(CustomModelSerializer):
password = serializers.CharField(read_only=True, required=False) password = serializers.CharField(read_only=True, required=False)
def save(self, **kwargs): def save(self, **kwargs):
data = super().save(**kwargs) data = super().save(**kwargs)
password = hashlib.new( password = hashlib.new(
@@ -363,3 +364,33 @@ class UserViewSet(CustomModelViewSet):
return DetailResponse(data=None, msg="修改成功") return DetailResponse(data=None, msg="修改成功")
else: else:
return ErrorResponse(msg="未获取到用户") return ErrorResponse(msg="未获取到用户")
def list(self, request, *args, **kwargs):
dept_id = request.query_params.get('dept')
show_all = request.query_params.get('show_all')
if not dept_id:
dept_id = ''
if not show_all:
show_all = 0
if int(show_all):
all_did = [dept_id]
def inner(did):
sub = Dept.objects.filter(parent_id=did)
if not sub.exists():
return
for i in sub:
all_did.append(i.pk)
inner(i)
if dept_id != '':
inner(dept_id)
queryset = Users.objects.filter(dept_id__in=all_did)
else:
queryset = self.filter_queryset(self.get_queryset())
else:
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True, request=request)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True, request=request)
return SuccessResponse(data=serializer.data, msg="获取成功")

View File

@@ -6,8 +6,6 @@
@Created on: 2021/5/31 031 22:08 @Created on: 2021/5/31 031 22:08
@Remark: 公共基础model类 @Remark: 公共基础model类
""" """
import uuid
from django.apps import apps from django.apps import apps
from django.db import models from django.db import models
from django.db.models import QuerySet from django.db.models import QuerySet
@@ -20,8 +18,6 @@ class SoftDeleteQuerySet(QuerySet):
pass pass
class SoftDeleteManager(models.Manager): class SoftDeleteManager(models.Manager):
"""支持软删除""" """支持软删除"""
@@ -40,7 +36,7 @@ class SoftDeleteManager(models.Manager):
return SoftDeleteQuerySet(self.model, using=self._db).exclude(is_deleted=False) return SoftDeleteQuerySet(self.model, using=self._db).exclude(is_deleted=False)
return SoftDeleteQuerySet(self.model).exclude(is_deleted=True) return SoftDeleteQuerySet(self.model).exclude(is_deleted=True)
def get_by_natural_key(self,name): def get_by_natural_key(self, name):
return SoftDeleteQuerySet(self.model).get(username=name) return SoftDeleteQuerySet(self.model).get(username=name)
@@ -86,8 +82,6 @@ class CoreModel(models.Model):
verbose_name_plural = verbose_name verbose_name_plural = verbose_name
def get_all_models_objects(model_name=None): def get_all_models_objects(model_name=None):
""" """
获取所有 models 对象 获取所有 models 对象
@@ -111,4 +105,4 @@ def get_all_models_objects(model_name=None):
settings.ALL_MODELS_OBJECTS.setdefault(item.__name__, {"table": table, "object": item}) settings.ALL_MODELS_OBJECTS.setdefault(item.__name__, {"table": table, "object": item})
if model_name: if model_name:
return settings.ALL_MODELS_OBJECTS[model_name] or {} return settings.ALL_MODELS_OBJECTS[model_name] or {}
return settings.ALL_MODELS_OBJECTS or {} return settings.ALL_MODELS_OBJECTS or {}

View File

@@ -6,8 +6,6 @@
@Created on: 2021/6/1 001 22:57 @Created on: 2021/6/1 001 22:57
@Remark: 自定义视图集 @Remark: 自定义视图集
""" """
import uuid
from django.db import transaction from django.db import transaction
from drf_yasg import openapi from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema from drf_yasg.utils import swagger_auto_schema