Merge branch 'master' of https://e.coding.net/dvadmin/dvadmin3/dvadmin3
This commit is contained in:
@@ -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文件)
|
||||||
|
|||||||
@@ -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白名单
|
||||||
|
|||||||
@@ -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'})),
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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="获取成功")
|
||||||
|
|||||||
@@ -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 对象
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user