提取公共CommonStatus

This commit is contained in:
xie7654
2025-07-01 13:02:02 +08:00
parent 3bc50e79e8
commit 57429ba359
7 changed files with 124 additions and 71 deletions

View File

@@ -0,0 +1,55 @@
# Generated by Django 5.2.1 on 2025-07-01 04:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("system", "0002_post_alter_dept_creator_alter_dept_is_deleted_and_more"),
]
operations = [
migrations.AlterField(
model_name="dictdata",
name="status",
field=models.IntegerField(
choices=[(0, "禁用"), (1, "启用")], default=1, verbose_name="状态"
),
),
migrations.AlterField(
model_name="dicttype",
name="status",
field=models.IntegerField(
choices=[(0, "禁用"), (1, "启用")], default=1, verbose_name="状态"
),
),
migrations.AlterField(
model_name="menu",
name="status",
field=models.IntegerField(
choices=[(0, "禁用"), (1, "启用")], default=1, verbose_name="状态"
),
),
migrations.AlterField(
model_name="post",
name="status",
field=models.IntegerField(
choices=[(0, "禁用"), (1, "启用")], default=1, verbose_name="状态"
),
),
migrations.AlterField(
model_name="role",
name="status",
field=models.IntegerField(
choices=[(0, "禁用"), (1, "启用")], default=1, verbose_name="角色状态"
),
),
migrations.AlterField(
model_name="user",
name="status",
field=models.IntegerField(
choices=[(0, "禁用"), (1, "启用")], default=1, verbose_name="状态"
),
),
]

View File

@@ -2,14 +2,37 @@ from django.contrib.auth.models import AbstractUser
from django.db import models
from backend import settings
from utils.models import CoreModel
from utils.models import CoreModel, CommonStatus
from utils.utils import validate_mobile
# 定义状态枚举(可根据实际业务扩展)
class DepartmentStatus(models.IntegerChoices):
DISABLED = 0, "禁用" # 对应数据中的 status: 0
ENABLED = 1, "启用" # 对应数据中的 status: 1
# 菜单类型枚举
class MenuType(models.TextChoices):
CATALOG = 'catalog', '目录'
MENU = 'menu', '菜单'
BUTTON = 'button', '按钮'
EMBEDDED = 'embedded', '内嵌页面'
LINK = 'link', '外部链接'
# 菜单元数据模型(单独存储元数据,避免 JSONField
class MenuMeta(CoreModel):
title = models.CharField(max_length=200, verbose_name='标题')
icon = models.CharField(max_length=100, blank=True, verbose_name='图标')
order = models.IntegerField(default=0, verbose_name='排序')
affix_tab = models.BooleanField(default=False, verbose_name='固定标签页')
badge = models.CharField(max_length=50, blank=True, verbose_name='徽章文本')
badge_type = models.CharField(max_length=20, blank=True, verbose_name='徽章类型')
badge_variants = models.CharField(max_length=20, blank=True, verbose_name='徽章样式')
iframe_src = models.URLField(blank=True, verbose_name='内嵌页面URL')
link = models.URLField(blank=True, verbose_name='外部链接')
def __str__(self):
return self.title
class Meta:
db_table = 'system_menu_meta'
verbose_name = '菜单元数据'
verbose_name_plural = '菜单元数据'
class Dept(CoreModel):
pid = models.ForeignKey(
@@ -22,8 +45,8 @@ class Dept(CoreModel):
)
name = models.CharField(max_length=100, verbose_name="部门名称")
status = models.SmallIntegerField(
choices=DepartmentStatus.choices,
default=DepartmentStatus.DISABLED,
choices=CommonStatus.choices,
default=CommonStatus.DISABLED,
verbose_name="部门状态"
)
create_time = models.DateTimeField(
@@ -61,39 +84,6 @@ class Dept(CoreModel):
verbose_name_plural = verbose_name
ordering = ["-create_time"] # 按创建时间倒序排列
# 菜单类型枚举
class MenuType(models.TextChoices):
CATALOG = 'catalog', '目录'
MENU = 'menu', '菜单'
BUTTON = 'button', '按钮'
EMBEDDED = 'embedded', '内嵌页面'
LINK = 'link', '外部链接'
# 菜单状态枚举
class MenuStatus(models.IntegerChoices):
ENABLED = 1, '启用'
DISABLED = 0, '禁用'
# 菜单元数据模型(单独存储元数据,避免 JSONField
class MenuMeta(CoreModel):
title = models.CharField(max_length=200, verbose_name='标题')
icon = models.CharField(max_length=100, blank=True, verbose_name='图标')
order = models.IntegerField(default=0, verbose_name='排序')
affix_tab = models.BooleanField(default=False, verbose_name='固定标签页')
badge = models.CharField(max_length=50, blank=True, verbose_name='徽章文本')
badge_type = models.CharField(max_length=20, blank=True, verbose_name='徽章类型')
badge_variants = models.CharField(max_length=20, blank=True, verbose_name='徽章样式')
iframe_src = models.URLField(blank=True, verbose_name='内嵌页面URL')
link = models.URLField(blank=True, verbose_name='外部链接')
def __str__(self):
return self.title
class Meta:
db_table = 'system_menu_meta'
verbose_name = '菜单元数据'
verbose_name_plural = '菜单元数据'
# 主菜单模型
class Menu(CoreModel):
pid = models.ForeignKey(
@@ -105,7 +95,7 @@ class Menu(CoreModel):
verbose_name='父菜单'
)
name = models.CharField(max_length=100, verbose_name='菜单名称')
status = models.IntegerField(choices=MenuStatus.choices, default=MenuStatus.ENABLED, verbose_name='状态')
status = models.IntegerField(choices=CommonStatus.choices, default=CommonStatus.ENABLED, verbose_name='状态')
type = models.CharField(choices=MenuType.choices, max_length=20, verbose_name='菜单类型')
path = models.CharField(max_length=200, blank=True, verbose_name='路由路径')
component = models.CharField(max_length=200, blank=True, verbose_name='组件路径')
@@ -120,19 +110,14 @@ class Menu(CoreModel):
verbose_name_plural = '菜单管理'
ordering = ['meta__order', 'id']
# 角色状态枚举
class RoleStatus(models.IntegerChoices):
ENABLED = 1, '启用'
DISABLED = 0, '禁用'
class Role(CoreModel):
name = models.CharField(
max_length=100,
verbose_name='角色名称'
)
status = models.IntegerField(
choices=RoleStatus.choices,
default=RoleStatus.ENABLED,
choices=CommonStatus.choices,
default=CommonStatus.ENABLED,
verbose_name='角色状态'
)
sort = models.IntegerField(
@@ -186,7 +171,11 @@ class DictType(CoreModel):
"""字典类型表"""
name = models.CharField(max_length=100, default='', verbose_name='字典名称')
type = models.CharField(max_length=100, default='', verbose_name='字典类型', db_index=True)
status = models.BooleanField(default=True)
status = models.IntegerField(
choices=CommonStatus.choices,
default=CommonStatus.ENABLED,
verbose_name='状态'
)
deleted_time = models.DateTimeField(null=True, blank=True, verbose_name='删除时间')
class Meta:
@@ -210,7 +199,11 @@ class DictData(CoreModel):
related_name='dict_data',
verbose_name='字典类型'
)
status = models.BooleanField(default=True)
status = models.IntegerField(
choices=CommonStatus.choices,
default=CommonStatus.ENABLED,
verbose_name='状态'
)
color_type = models.CharField(max_length=100, blank=True, default='', verbose_name='颜色类型')
css_class = models.CharField(max_length=100, blank=True, default='', verbose_name='css 样式')
@@ -228,7 +221,11 @@ class Post(CoreModel):
code = models.CharField(max_length=64, db_comment='岗位编码')
name = models.CharField(max_length=50, db_comment='岗位名称')
sort = models.IntegerField(default=0, db_comment='显示顺序')
status = models.BooleanField(default=False, db_comment='状态')
status = models.IntegerField(
choices=CommonStatus.choices,
default=CommonStatus.ENABLED,
verbose_name='状态'
)
class Meta:
db_table = 'system_post'
@@ -257,7 +254,11 @@ class User(AbstractUser, CoreModel):
'Post', blank=True, verbose_name='岗位', db_constraint=False,
related_name='users'
)
status = models.BooleanField(default=False, verbose_name='<帐号状态>1正常 0停用', db_comment="帐号状态")
status = models.IntegerField(
choices=CommonStatus.choices,
default=CommonStatus.ENABLED,
verbose_name='状态'
)
login_date = models.DateTimeField("<最后登录时间>", blank=True, null=True, db_comment="最后登录时间")
login_ip = models.GenericIPAddressField(blank=True, null=True, db_comment="最后登录IP")

View File

@@ -16,9 +16,9 @@ class PostViewSet(CustomModelViewSet):
"""
岗位信息表 视图集
"""
queryset = Post.objects.filter(is_deleted=False).order_by('-id')
queryset = Post.objects.filter(is_deleted=False)
serializer_class = PostSerializer
filterset_fields = ['id', 'remark', 'creator', 'modifier', 'is_deleted', 'code', 'name', 'sort', 'status']
search_fields = ['name'] # 根据实际字段调整
ordering_fields = ['create_time', 'id']
ordering = ['-create_time']
ordering_fields = ['create_time', 'id', 'sort']
ordering = ['sort']