feat: cms users institution department manager
This commit is contained in:
+46
-19
@@ -11,7 +11,7 @@ from .auth import TRIAL_INSTITUTION_NAME
|
||||
from .models import User, Role, TeacherStudentRelation, Institution, Department
|
||||
from .serializers import (
|
||||
UserSerializer, UserCreateSerializer, UserUpdateSerializer,
|
||||
StudentProfileConfigSerializer,
|
||||
StudentProfileConfigSerializer, ProfileUpdateSerializer,
|
||||
RoleSerializer,
|
||||
TeacherStudentRelationSerializer, InstitutionSerializer, DepartmentSerializer
|
||||
)
|
||||
@@ -184,21 +184,13 @@ class InstitutionViewSet(viewsets.ModelViewSet):
|
||||
filterset_fields = ['type', 'province', 'city']
|
||||
search_fields = ['name']
|
||||
|
||||
@action(detail=True, methods=['get'])
|
||||
def departments(self, request, pk=None):
|
||||
"""获取机构下的科室列表"""
|
||||
institution = self.get_object()
|
||||
departments = institution.department_set.all()
|
||||
serializer = DepartmentSerializer(departments, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
class DepartmentViewSet(viewsets.ModelViewSet):
|
||||
"""科室管理"""
|
||||
"""科室管理(全局科室,与机构无关)"""
|
||||
queryset = Department.objects.all()
|
||||
serializer_class = DepartmentSerializer
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
|
||||
filterset_fields = ['institution', 'category']
|
||||
filterset_fields = ['category']
|
||||
search_fields = ['name']
|
||||
|
||||
|
||||
@@ -278,20 +270,16 @@ def institution_info(request):
|
||||
|
||||
|
||||
@extend_schema(
|
||||
summary='所属机构科室列表接口(不分页)',
|
||||
description='返回当前登录学生所属机构下的全部科室,不分页,供配置页选择执业科室。',
|
||||
summary='科室列表接口(全局、不分页)',
|
||||
description='返回全部科室(全局科室表,与机构无关),不分页,供配置页/个人中心选择想学习的科室。',
|
||||
responses={200: None},
|
||||
tags=['机构'],
|
||||
)
|
||||
@api_view(['GET'])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def my_departments(request):
|
||||
"""所属机构科室列表接口 — 当前用户机构下全部科室、不分页"""
|
||||
inst = request.user.institution
|
||||
if inst is None:
|
||||
raise AppError('USER_INSTITUTION_NOT_FOUND', '当前账号未关联机构', status_code=404)
|
||||
|
||||
departments = Department.objects.filter(institution=inst).order_by('name')
|
||||
"""科室列表接口 — 全部全局科室、不分页(用户可自由选择想学习的科室)"""
|
||||
departments = Department.objects.all().order_by('name')
|
||||
data = [
|
||||
{
|
||||
'id': dept.id,
|
||||
@@ -331,3 +319,42 @@ def student_profile_config(request):
|
||||
'message': '配置成功',
|
||||
'user': UserSerializer(user).data,
|
||||
})
|
||||
|
||||
|
||||
@extend_schema(
|
||||
methods=['GET'],
|
||||
summary='个人信息获取',
|
||||
description='获取当前登录用户的全部个人信息(个人中心)。',
|
||||
responses={200: UserSerializer},
|
||||
tags=['用户'],
|
||||
)
|
||||
@extend_schema(
|
||||
methods=['PATCH'],
|
||||
summary='个人信息更新',
|
||||
description='更新当前登录用户的个人信息。仅允许修改:用户名、真实姓名、手机号、头像、'
|
||||
'性别、所属科室、职称、专业、执业年限、培训阶段、学习目标。'
|
||||
'机构、角色、is_superuser 不可由用户自行修改。',
|
||||
request=ProfileUpdateSerializer,
|
||||
responses={200: UserSerializer},
|
||||
tags=['用户'],
|
||||
)
|
||||
@api_view(['GET', 'PATCH'])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def profile(request):
|
||||
"""个人信息获取 / 更新(移动端个人中心)"""
|
||||
user = request.user
|
||||
|
||||
if request.method == 'GET':
|
||||
return Response(UserSerializer(user).data)
|
||||
|
||||
# PATCH:局部更新,仅白名单字段生效
|
||||
serializer = ProfileUpdateSerializer(
|
||||
user, data=request.data, partial=True, context={'request': request}
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
|
||||
return Response({
|
||||
'message': '更新成功',
|
||||
'user': UserSerializer(user).data,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user