From 5cb4e85f48e54beed41b258350c547973d7aafb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Sat, 26 Nov 2022 20:49:30 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/views/user.py | 67 +++++++++++++----- web/public/image/avatar.png | Bin 0 -> 708 bytes .../components/header-color/index.vue | 14 ++-- .../components/header-user/index.vue | 20 +++++- .../components/header-user/userinfo.vue | 57 ++++++--------- web/src/libs/util.js | 4 +- web/src/router/index.js | 9 +-- .../store/modules/d2admin/modules/account.js | 21 ++++-- 8 files changed, 112 insertions(+), 80 deletions(-) create mode 100644 web/public/image/avatar.png diff --git a/backend/dvadmin/system/views/user.py b/backend/dvadmin/system/views/user.py index 3235f2e..9592c41 100644 --- a/backend/dvadmin/system/views/user.py +++ b/backend/dvadmin/system/views/user.py @@ -5,7 +5,7 @@ from django_restql.fields import DynamicSerializerMethodField from rest_framework import serializers from rest_framework.decorators import action, permission_classes from rest_framework.permissions import IsAuthenticated - +from django.db import connection from application import dispatch from dvadmin.system.models import Users, Role, Dept from dvadmin.system.views.role import RoleSerializer @@ -15,17 +15,18 @@ from dvadmin.utils.validator import CustomUniqueValidator from dvadmin.utils.viewset import CustomModelViewSet -def recursion(instance,parent,result): - new_instance = getattr(instance,parent,None) +def recursion(instance, parent, result): + new_instance = getattr(instance, parent, None) res = [] data = getattr(instance, result, None) if data: res.append(data) if new_instance: - array = recursion(new_instance,parent,result) - res+=(array) + array = recursion(new_instance, parent, result) + res += (array) return res + class UserSerializer(CustomModelSerializer): """ 用户管理-序列化器 @@ -63,12 +64,13 @@ class UsersInitSerializer(CustomModelSerializer): """ 初始化获取数信息(用于生成初始化json文件) """ + def save(self, **kwargs): instance = super().save(**kwargs) - role_key = self.initial_data.get('role_key',[]) - role_ids = Role.objects.filter(key__in=role_key).values_list('id',flat=True) + role_key = self.initial_data.get('role_key', []) + role_ids = Role.objects.filter(key__in=role_key).values_list('id', flat=True) instance.role.set(role_ids) - dept_key = self.initial_data.get('dept_key',None) + dept_key = self.initial_data.get('dept_key', None) dept_id = Dept.objects.filter(key=dept_key).first() instance.dept = dept_id instance.save() @@ -162,6 +164,29 @@ class UserUpdateSerializer(CustomModelSerializer): } +class UserInfoUpdateSerializer(CustomModelSerializer): + """ + 用户修改-序列化器 + """ + mobile = serializers.CharField( + max_length=50, + validators=[ + CustomUniqueValidator(queryset=Users.objects.all(), message="手机号必须唯一") + ], + allow_blank=True + ) + + def update(self, instance, validated_data): + return super().update(instance, validated_data) + + class Meta: + model = Users + fields = ['email', 'mobile', 'avatar', 'name', 'gender'] + extra_kwargs = { + "post": {"required": False, "read_only": True}, + } + + class ExportUserProfileSerializer(CustomModelSerializer): """ 用户导出 序列化器 @@ -242,15 +267,15 @@ class UserViewSet(CustomModelViewSet): search_fields = ["username", "name", "gender", "dept__name", "role__name"] # 导出 export_field_label = { - "username":"用户账号", - "name":"用户名称", - "email":"用户邮箱", - "mobile":"手机号码", - "gender":"用户性别", - "is_active":"帐号状态", - "last_login":"最后登录时间", - "dept_name":"部门名称", - "dept_owner":"部门负责人", + "username": "用户账号", + "name": "用户名称", + "email": "用户邮箱", + "mobile": "手机号码", + "gender": "用户性别", + "is_active": "帐号状态", + "last_login": "最后登录时间", + "dept_name": "部门名称", + "dept_owner": "部门负责人", } export_serializer_class = ExportUserProfileSerializer # 导入 @@ -293,6 +318,9 @@ class UserViewSet(CustomModelViewSet): "is_superuser": user.is_superuser, "role": user.role.values_list('id', flat=True), } + if hasattr(connection, 'tenant'): + result['tenant_id'] = connection.tenant and connection.tenant.id + result['tenant_name'] = connection.tenant and connection.tenant.name dept = getattr(user, 'dept', None) if dept: result['dept_info'] = { @@ -307,8 +335,9 @@ class UserViewSet(CustomModelViewSet): @action(methods=["PUT"], detail=False, permission_classes=[IsAuthenticated]) def update_user_info(self, request): """修改当前用户信息""" - user = request.user - Users.objects.filter(id=user.id).update(**request.data) + serializer = UserInfoUpdateSerializer(request.user, data=request.data, request=request) + serializer.is_valid(raise_exception=True) + serializer.save() return DetailResponse(data=None, msg="修改成功") @action(methods=["PUT"], detail=True, permission_classes=[IsAuthenticated]) diff --git a/web/public/image/avatar.png b/web/public/image/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..cb829533489dab8b5c3773d832d136ad63e480a9 GIT binary patch literal 708 zcmV;#0z3UuNk&Gz0ssJ4MM6+kP&gp40ssI|DFB@TDl7pk0X~sPp-ZKuBcY_YNC>bJ z32AQOb^#mnMf#_oOW9b>c($K*Q;Q+-UoXNfG4s}iiL}Vef;7-G7-I}!j4_5V#u&pG zV+>)8F@`Y47+z|~qR2$-{Xs4{;B)RcmlEP!NC5eP0CMKFTn=rp;)Y3yF(w_i7pglg7IOKu8F~na_1v1w^AmH`^`<(?1i{ zxkB7V7mDZHk_JG#CuHd98MEnV<*7nqlnb(UPRWEVxqcrLl2F@grDWFf0M+&cfQ%HL z9GuMPwbL^}KqGG2tpd^G`;kQEV+oRkPxQ^OnWx*O~8H_Q8Fvb|e7-I}!j4_5V#u&pG zOaK7>|9B_>A~;3FEraWE8HIdEn{r`m?#bWOzbIDxGVlJPaCriy$59&C)B`yH1))*& z*d-4W@{8**I=)asU_*{wWR2F`p(*msQ$SV`a;iTX5dnJX-Ct)Up9!s+E6X?aa+>r` z-9jsbHXC_#n8N?ZWBvYkXZI$T3JNgrvg6wnR>U z)u-T5yWt%=_BB;Xi9;Fyc)QhrK3PC)?=tYNA-mRRkr(Iw;Dsl_s2V-bn1ZU{x|Z5v q+ZxmW7$k`$z_9{!q#dj5`WF6tLk* - + + +