diff --git a/apps/setting/migrations/0002_systemsetting.py b/apps/setting/migrations/0002_systemsetting.py index 1293ca5df..5c2972f80 100644 --- a/apps/setting/migrations/0002_systemsetting.py +++ b/apps/setting/migrations/0002_systemsetting.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('setting', '0001_initial'), ] @@ -15,7 +14,7 @@ class Migration(migrations.Migration): fields=[ ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), - ('type', models.IntegerField(choices=[('0', '邮箱')], default='0', max_length=5, primary_key=True, serialize=False, verbose_name='设置类型')), + ('type', models.IntegerField(choices=[(0, '邮箱'), (1, '私钥秘钥')], default=0, primary_key=True, serialize=False, verbose_name='设置类型')), ('meta', models.JSONField(default=dict, verbose_name='配置数据')), ], options={ diff --git a/apps/setting/models/system_management.py b/apps/setting/models/system_management.py index 84060b792..736707935 100644 --- a/apps/setting/models/system_management.py +++ b/apps/setting/models/system_management.py @@ -24,7 +24,7 @@ class SystemSetting(AppModelMixin): """ 系统设置 """ - type = models.IntegerField(primary_key=True, verbose_name='设置类型', max_length=5, choices=SettingType.choices, + type = models.IntegerField(primary_key=True, verbose_name='设置类型', choices=SettingType.choices, default=SettingType.EMAIL) meta = models.JSONField(verbose_name="配置数据", default=dict) diff --git a/apps/users/migrations/0002_user_create_time_user_update_time.py b/apps/users/migrations/0002_user_create_time_user_update_time.py new file mode 100644 index 000000000..68baae0da --- /dev/null +++ b/apps/users/migrations/0002_user_create_time_user_update_time.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.13 on 2024-03-20 12:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='create_time', + field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间'), + ), + migrations.AddField( + model_name='user', + name='update_time', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间'), + ), + ] diff --git a/apps/users/models/user.py b/apps/users/models/user.py index 0b9184e2b..08b5d8f2c 100644 --- a/apps/users/models/user.py +++ b/apps/users/models/user.py @@ -14,6 +14,7 @@ from django.db import models from common.constants.permission_constants import Permission, Group, Operate from common.db.sql_execute import select_list +from common.mixins.app_model_mixin import AppModelMixin from common.util.file_util import get_file_content from smartdoc.conf import PROJECT_DIR @@ -60,7 +61,7 @@ def get_user_dynamics_permission(user_id: str): return result -class User(models.Model): +class User(AppModelMixin): id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid1, editable=False, verbose_name="主键id") email = models.EmailField(unique=True, verbose_name="邮箱") phone = models.CharField(max_length=20, verbose_name="电话", default="") @@ -69,6 +70,8 @@ class User(models.Model): password = models.CharField(max_length=150, verbose_name="密码") role = models.CharField(max_length=150, verbose_name="角色") is_active = models.BooleanField(default=True) + create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True, null=True) + update_time = models.DateTimeField(verbose_name="修改时间", auto_now=True, null=True) USERNAME_FIELD = 'username' REQUIRED_FIELDS = [] diff --git a/apps/users/serializers/user_serializers.py b/apps/users/serializers/user_serializers.py index ba38bc182..519735551 100644 --- a/apps/users/serializers/user_serializers.py +++ b/apps/users/serializers/user_serializers.py @@ -468,17 +468,21 @@ class UserSerializer(ApiMixin, serializers.ModelSerializer): class UserInstanceSerializer(ApiMixin, serializers.ModelSerializer): class Meta: model = User - fields = ['id', 'username', 'email', 'phone', 'nick_name'] + fields = ['id', 'username', 'email', 'phone', 'is_active', 'role', 'nick_name', 'create_time', 'update_time'] @staticmethod def get_response_body_api(): return openapi.Schema( type=openapi.TYPE_OBJECT, - required=['id', 'username', 'email', 'password', 'create_time', 'update_time'], + required=['id', 'username', 'email', 'phone', 'is_active', 'role', 'nick_name', 'create_time', + 'update_time'], properties={ + 'id': openapi.Schema(type=openapi.TYPE_STRING, title="用户id", description="用户id"), 'username': openapi.Schema(type=openapi.TYPE_STRING, title="用户名", description="用户名"), 'email': openapi.Schema(type=openapi.TYPE_STRING, title="邮箱", description="邮箱地址"), 'phone': openapi.Schema(type=openapi.TYPE_STRING, title="手机号", description="手机号"), + 'is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否激活", description="是否激活"), + 'role': openapi.Schema(type=openapi.TYPE_STRING, title="角色", description="角色"), 'nick_name': openapi.Schema(type=openapi.TYPE_STRING, title="昵称", description="昵称"), 'create_time': openapi.Schema(type=openapi.TYPE_STRING, title="创建时间", description="修改时间"), 'update_time': openapi.Schema(type=openapi.TYPE_STRING, title="修改时间", description="修改时间") @@ -562,9 +566,9 @@ class UserManageSerializer(serializers.Serializer): , message="密码长度6-20个字符,必须字母、数字、特殊字符组合")]) nick_name = serializers.CharField(required=False, error_messages=ErrMessage.char("昵称"), max_length=56, - allow_null=True) + allow_null=True, allow_blank=True) phone = serializers.CharField(required=False, error_messages=ErrMessage.char("手机号"), max_length=20, - allow_null=True) + allow_null=True, allow_blank=True) def is_valid(self, *, raise_exception=True): super().is_valid(raise_exception=True) @@ -599,9 +603,9 @@ class UserManageSerializer(serializers.Serializer): code=ExceptionCodeConstants.EMAIL_FORMAT_ERROR.value.code)]) nick_name = serializers.CharField(required=False, error_messages=ErrMessage.char("昵称"), max_length=56, - allow_null=True) + allow_null=True, allow_blank=True) phone = serializers.CharField(required=False, error_messages=ErrMessage.char("手机号"), max_length=20, - allow_null=True) + allow_null=True, allow_blank=True) is_active = serializers.BooleanField(required=False, error_messages=ErrMessage.char("是否可用")) def is_valid(self, *, user_id=None, raise_exception=False): diff --git a/ui/src/router/modules/setting.ts b/ui/src/router/modules/setting.ts index f37dbd491..f8bcc4c4b 100644 --- a/ui/src/router/modules/setting.ts +++ b/ui/src/router/modules/setting.ts @@ -1,9 +1,16 @@ +import { hasPermission } from '@/utils/permission/index' import Layout from '@/layout/main-layout/index.vue' +import { Role } from '@/utils/permission/type' const settingRouter = { path: '/setting', name: 'setting', meta: { icon: 'Setting', title: '系统设置', permission: 'SETTING:READ' }, - redirect: '/user', + redirect: (to: any) => { + if (hasPermission(new Role('ADMIN'), 'AND')) { + return '/user' + } + return '/team' + }, component: Layout, children: [ { @@ -15,7 +22,8 @@ const settingRouter = { title: '用户管理', activeMenu: '/setting', parentPath: '/setting', - parentName: 'setting' + parentName: 'setting', + permission: new Role('ADMIN') }, component: () => import('@/views/user-manage/index.vue') },