diff --git a/backend/dvadmin/system/views/user.py b/backend/dvadmin/system/views/user.py
index 3235f2e..151f05c 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
# 导入
@@ -283,6 +308,7 @@ class UserViewSet(CustomModelViewSet):
user = request.user
result = {
"id": user.id,
+ "username": user.username,
"name": user.name,
"mobile": user.mobile,
"user_type": user.user_type,
@@ -293,6 +319,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 +336,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/docker_env/nginx/my.conf b/docker_env/nginx/my.conf
index dc9fccc..30fa210 100644
--- a/docker_env/nginx/my.conf
+++ b/docker_env/nginx/my.conf
@@ -14,29 +14,20 @@ server {
}
location /api/ {
+ proxy_http_version 1.1;
proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
- set_real_ip_from 0.0.0.0/0;
- real_ip_header X-Forwarded-For;
- rewrite ^/api/(.*)$ /$1 break; #重写
- proxy_pass http://177.8.0.12:8000/; # 设置代理服务器的协议和地址
- }
- location /api/ws {
- proxy_http_version 1.1;
- proxy_set_header Host $host;
- proxy_set_header X-Real-Ip $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Nginx-Proxy true;
set_real_ip_from 0.0.0.0/0;
- proxy_redirect off;
- client_max_body_size 10m;
- proxy_pass http://177.8.0.12:8000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
- }
+ real_ip_header X-Forwarded-For;
+ rewrite ^/api/(.*)$ /$1 break; #重写
+ proxy_pass http://177.8.0.12:8000/; # 设置代理服务器的协议和地址
+ }
}
diff --git a/web/package.json b/web/package.json
index 32044c8..484ca41 100644
--- a/web/package.json
+++ b/web/package.json
@@ -1,6 +1,6 @@
{
"name": "django-vue-admin",
- "version": "2.0.6",
+ "version": "2.0.7",
"scripts": {
"serve": "vue-cli-service serve --open",
"start": "npm run serve",
@@ -13,7 +13,7 @@
},
"dependencies": {
"@great-dream/template": "^1.0.2",
- "@vue/composition-api": "^1.0.4",
+ "@vue/composition-api": "1.0.4",
"axios": "^0.19.0",
"axios-mock-adapter": "^1.18.1",
"better-scroll": "^1.15.2",
@@ -41,7 +41,7 @@
"screenfull": "^5.0.2",
"sortablejs": "^1.10.1",
"ua-parser-js": "^0.7.20",
- "vue": "^2.6.11",
+ "vue": "2.7.14",
"vue-i18n": "^8.15.1",
"vue-infinite-scroll": "^2.0.2",
"vue-router": "^3.6.5",
diff --git a/web/public/image/avatar.png b/web/public/image/avatar.png
new file mode 100644
index 0000000..cb82953
Binary files /dev/null and b/web/public/image/avatar.png differ
diff --git a/web/src/layout/header-aside/components/header-color/index.vue b/web/src/layout/header-aside/components/header-color/index.vue
index f3d0d52..c255f21 100644
--- a/web/src/layout/header-aside/components/header-color/index.vue
+++ b/web/src/layout/header-aside/components/header-color/index.vue
@@ -1,10 +1,12 @@
-
+
+
+