Merge remote-tracking branch 'origin/main'

This commit is contained in:
liqiang-fit2cloud 2024-03-20 13:08:11 +08:00
commit adcdb21d00
6 changed files with 49 additions and 12 deletions

View File

@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('setting', '0001_initial'), ('setting', '0001_initial'),
] ]
@ -15,7 +14,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=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='配置数据')), ('meta', models.JSONField(default=dict, verbose_name='配置数据')),
], ],
options={ options={

View File

@ -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) default=SettingType.EMAIL)
meta = models.JSONField(verbose_name="配置数据", default=dict) meta = models.JSONField(verbose_name="配置数据", default=dict)

View File

@ -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='修改时间'),
),
]

View File

@ -14,6 +14,7 @@ from django.db import models
from common.constants.permission_constants import Permission, Group, Operate from common.constants.permission_constants import Permission, Group, Operate
from common.db.sql_execute import select_list 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 common.util.file_util import get_file_content
from smartdoc.conf import PROJECT_DIR from smartdoc.conf import PROJECT_DIR
@ -60,7 +61,7 @@ def get_user_dynamics_permission(user_id: str):
return result 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") id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid1, editable=False, verbose_name="主键id")
email = models.EmailField(unique=True, verbose_name="邮箱") email = models.EmailField(unique=True, verbose_name="邮箱")
phone = models.CharField(max_length=20, verbose_name="电话", default="") 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="密码") password = models.CharField(max_length=150, verbose_name="密码")
role = models.CharField(max_length=150, verbose_name="角色") role = models.CharField(max_length=150, verbose_name="角色")
is_active = models.BooleanField(default=True) 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' USERNAME_FIELD = 'username'
REQUIRED_FIELDS = [] REQUIRED_FIELDS = []

View File

@ -468,17 +468,21 @@ class UserSerializer(ApiMixin, serializers.ModelSerializer):
class UserInstanceSerializer(ApiMixin, serializers.ModelSerializer): class UserInstanceSerializer(ApiMixin, serializers.ModelSerializer):
class Meta: class Meta:
model = User model = User
fields = ['id', 'username', 'email', 'phone', 'nick_name'] fields = ['id', 'username', 'email', 'phone', 'is_active', 'role', 'nick_name', 'create_time', 'update_time']
@staticmethod @staticmethod
def get_response_body_api(): def get_response_body_api():
return openapi.Schema( return openapi.Schema(
type=openapi.TYPE_OBJECT, 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={ properties={
'id': openapi.Schema(type=openapi.TYPE_STRING, title="用户id", description="用户id"),
'username': openapi.Schema(type=openapi.TYPE_STRING, title="用户名", description="用户名"), 'username': openapi.Schema(type=openapi.TYPE_STRING, title="用户名", description="用户名"),
'email': 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="手机号"), '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="昵称"), 'nick_name': openapi.Schema(type=openapi.TYPE_STRING, title="昵称", description="昵称"),
'create_time': 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="修改时间") 'update_time': openapi.Schema(type=openapi.TYPE_STRING, title="修改时间", description="修改时间")
@ -562,9 +566,9 @@ class UserManageSerializer(serializers.Serializer):
, message="密码长度6-20个字符必须字母、数字、特殊字符组合")]) , message="密码长度6-20个字符必须字母、数字、特殊字符组合")])
nick_name = serializers.CharField(required=False, error_messages=ErrMessage.char("昵称"), max_length=56, 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, 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): def is_valid(self, *, raise_exception=True):
super().is_valid(raise_exception=True) super().is_valid(raise_exception=True)
@ -599,9 +603,9 @@ class UserManageSerializer(serializers.Serializer):
code=ExceptionCodeConstants.EMAIL_FORMAT_ERROR.value.code)]) code=ExceptionCodeConstants.EMAIL_FORMAT_ERROR.value.code)])
nick_name = serializers.CharField(required=False, error_messages=ErrMessage.char("昵称"), max_length=56, 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, 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("是否可用")) is_active = serializers.BooleanField(required=False, error_messages=ErrMessage.char("是否可用"))
def is_valid(self, *, user_id=None, raise_exception=False): def is_valid(self, *, user_id=None, raise_exception=False):

View File

@ -1,9 +1,16 @@
import { hasPermission } from '@/utils/permission/index'
import Layout from '@/layout/main-layout/index.vue' import Layout from '@/layout/main-layout/index.vue'
import { Role } from '@/utils/permission/type'
const settingRouter = { const settingRouter = {
path: '/setting', path: '/setting',
name: 'setting', name: 'setting',
meta: { icon: 'Setting', title: '系统设置', permission: 'SETTING:READ' }, meta: { icon: 'Setting', title: '系统设置', permission: 'SETTING:READ' },
redirect: '/user', redirect: (to: any) => {
if (hasPermission(new Role('ADMIN'), 'AND')) {
return '/user'
}
return '/team'
},
component: Layout, component: Layout,
children: [ children: [
{ {
@ -15,7 +22,8 @@ const settingRouter = {
title: '用户管理', title: '用户管理',
activeMenu: '/setting', activeMenu: '/setting',
parentPath: '/setting', parentPath: '/setting',
parentName: 'setting' parentName: 'setting',
permission: new Role('ADMIN')
}, },
component: () => import('@/views/user-manage/index.vue') component: () => import('@/views/user-manage/index.vue')
}, },