提取公共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 django.db import models
from backend import settings from backend import settings
from utils.models import CoreModel from utils.models import CoreModel, CommonStatus
from utils.utils import validate_mobile from utils.utils import validate_mobile
# 定义状态枚举(可根据实际业务扩展) # 菜单类型枚举
class DepartmentStatus(models.IntegerChoices): class MenuType(models.TextChoices):
DISABLED = 0, "禁用" # 对应数据中的 status: 0 CATALOG = 'catalog', '目录'
ENABLED = 1, "启用" # 对应数据中的 status: 1 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): class Dept(CoreModel):
pid = models.ForeignKey( pid = models.ForeignKey(
@@ -22,8 +45,8 @@ class Dept(CoreModel):
) )
name = models.CharField(max_length=100, verbose_name="部门名称") name = models.CharField(max_length=100, verbose_name="部门名称")
status = models.SmallIntegerField( status = models.SmallIntegerField(
choices=DepartmentStatus.choices, choices=CommonStatus.choices,
default=DepartmentStatus.DISABLED, default=CommonStatus.DISABLED,
verbose_name="部门状态" verbose_name="部门状态"
) )
create_time = models.DateTimeField( create_time = models.DateTimeField(
@@ -61,39 +84,6 @@ class Dept(CoreModel):
verbose_name_plural = verbose_name verbose_name_plural = verbose_name
ordering = ["-create_time"] # 按创建时间倒序排列 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): class Menu(CoreModel):
pid = models.ForeignKey( pid = models.ForeignKey(
@@ -105,7 +95,7 @@ class Menu(CoreModel):
verbose_name='父菜单' verbose_name='父菜单'
) )
name = models.CharField(max_length=100, 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='菜单类型') type = models.CharField(choices=MenuType.choices, max_length=20, verbose_name='菜单类型')
path = models.CharField(max_length=200, blank=True, verbose_name='路由路径') path = models.CharField(max_length=200, blank=True, verbose_name='路由路径')
component = 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 = '菜单管理' verbose_name_plural = '菜单管理'
ordering = ['meta__order', 'id'] ordering = ['meta__order', 'id']
# 角色状态枚举
class RoleStatus(models.IntegerChoices):
ENABLED = 1, '启用'
DISABLED = 0, '禁用'
class Role(CoreModel): class Role(CoreModel):
name = models.CharField( name = models.CharField(
max_length=100, max_length=100,
verbose_name='角色名称' verbose_name='角色名称'
) )
status = models.IntegerField( status = models.IntegerField(
choices=RoleStatus.choices, choices=CommonStatus.choices,
default=RoleStatus.ENABLED, default=CommonStatus.ENABLED,
verbose_name='角色状态' verbose_name='角色状态'
) )
sort = models.IntegerField( sort = models.IntegerField(
@@ -186,7 +171,11 @@ class DictType(CoreModel):
"""字典类型表""" """字典类型表"""
name = models.CharField(max_length=100, default='', verbose_name='字典名称') name = models.CharField(max_length=100, default='', verbose_name='字典名称')
type = models.CharField(max_length=100, default='', verbose_name='字典类型', db_index=True) 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='删除时间') deleted_time = models.DateTimeField(null=True, blank=True, verbose_name='删除时间')
class Meta: class Meta:
@@ -210,7 +199,11 @@ class DictData(CoreModel):
related_name='dict_data', related_name='dict_data',
verbose_name='字典类型' 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='颜色类型') 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 样式') 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='岗位编码') code = models.CharField(max_length=64, db_comment='岗位编码')
name = models.CharField(max_length=50, db_comment='岗位名称') name = models.CharField(max_length=50, db_comment='岗位名称')
sort = models.IntegerField(default=0, 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: class Meta:
db_table = 'system_post' db_table = 'system_post'
@@ -257,7 +254,11 @@ class User(AbstractUser, CoreModel):
'Post', blank=True, verbose_name='岗位', db_constraint=False, 'Post', blank=True, verbose_name='岗位', db_constraint=False,
related_name='users' 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_date = models.DateTimeField("<最后登录时间>", blank=True, null=True, db_comment="最后登录时间")
login_ip = models.GenericIPAddressField(blank=True, null=True, db_comment="最后登录IP") 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 serializer_class = PostSerializer
filterset_fields = ['id', 'remark', 'creator', 'modifier', 'is_deleted', 'code', 'name', 'sort', 'status'] filterset_fields = ['id', 'remark', 'creator', 'modifier', 'is_deleted', 'code', 'name', 'sort', 'status']
search_fields = ['name'] # 根据实际字段调整 search_fields = ['name'] # 根据实际字段调整
ordering_fields = ['create_time', 'id'] ordering_fields = ['create_time', 'id', 'sort']
ordering = ['-create_time'] ordering = ['sort']

View File

@@ -5,6 +5,10 @@
""" """
from django.db import models from django.db import models
class CommonStatus(models.IntegerChoices):
DISABLED = 0, '禁用'
ENABLED = 1, '启用'
class CoreModel(models.Model): class CoreModel(models.Model):
remark = models.CharField(max_length=256, db_comment="备注", null=True, blank=True, help_text="备注") remark = models.CharField(max_length=256, db_comment="备注", null=True, blank=True, help_text="备注")
creator = models.CharField(max_length=64, null=True, blank=True, help_text="创建人", db_comment="创建人") creator = models.CharField(max_length=64, null=True, blank=True, help_text="创建人", db_comment="创建人")

View File

@@ -100,8 +100,8 @@ export function useSchema(): VbenFormSchema[] {
componentProps: { componentProps: {
buttonStyle: 'solid', buttonStyle: 'solid',
options: [ options: [
{ label: '开启', value: true }, { label: '开启', value: 1 },
{ label: '关闭', value: false }, { label: '关闭', value: 0 },
], ],
optionType: 'button', optionType: 'button',
}, },
@@ -166,10 +166,6 @@ export function useColumns(
{ {
cellRender: { cellRender: {
name: 'CellTag', name: 'CellTag',
options: [
{ label: $t('common.enabled'), value: true },
{ label: $t('common.disabled'), value: false },
],
}, },
field: 'status', field: 'status',
title: '状态', title: '状态',

View File

@@ -42,8 +42,8 @@ export function useSchema(): VbenFormSchema[] {
componentProps: { componentProps: {
buttonStyle: 'solid', buttonStyle: 'solid',
options: [ options: [
{ label: '开启', value: true }, { label: '开启', value: 1 },
{ label: '关闭', value: false }, { label: '关闭', value: 0 },
], ],
optionType: 'button', optionType: 'button',
}, },
@@ -97,10 +97,7 @@ export function useColumns(
{ {
cellRender: { cellRender: {
name: 'CellTag', name: 'CellTag',
options: [
{ label: $t('common.enabled'), value: true },
{ label: $t('common.disabled'), value: false },
],
}, },
field: 'status', field: 'status',
title: '状态', title: '状态',

View File

@@ -75,13 +75,13 @@ export function useColumns(
field: 'code', field: 'code',
title: '岗位编码', title: '岗位编码',
}, },
{
field: 'sort',
title: '排序',
},
{ {
cellRender: { cellRender: {
name: 'CellTag', name: 'CellTag',
options: [
{ label: $t('common.enabled'), value: true },
{ label: $t('common.disabled'), value: false },
],
}, },
field: 'status', field: 'status',
title: '状态', title: '状态',