提取公共CommonStatus
This commit is contained in:
@@ -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="状态"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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")
|
||||||
|
|
||||||
|
|||||||
@@ -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']
|
||||||
|
|||||||
@@ -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="创建人")
|
||||||
|
|||||||
@@ -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: '状态',
|
||||||
|
|||||||
@@ -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: '状态',
|
||||||
|
|||||||
@@ -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: '状态',
|
||||||
|
|||||||
Reference in New Issue
Block a user