From 289ec43265aff23676281c5152f3cf824f574db3 Mon Sep 17 00:00:00 2001 From: ishenwei Date: Thu, 30 Apr 2026 09:30:35 +0800 Subject: [PATCH] feat(setting): add Chinese verbose_name/help_text to setting models (Phase 4.1 part 7/9) --- apps/setting/models/lookup.py | 86 ++++++++++++++++++++++++++++------ apps/setting/models/setting.py | 68 ++++++++++++++++++++++----- 2 files changed, 128 insertions(+), 26 deletions(-) diff --git a/apps/setting/models/lookup.py b/apps/setting/models/lookup.py index 9840abd..259ae5c 100644 --- a/apps/setting/models/lookup.py +++ b/apps/setting/models/lookup.py @@ -4,13 +4,39 @@ from core.models.base import UUIDPrimaryKeyModel class LookupGroup(UUIDPrimaryKeyModel): - module = models.CharField(max_length=50) - key = models.CharField(max_length=100) - label_zh = models.CharField(max_length=50) - description = models.TextField(blank=True, default="") - sort_order = models.SmallIntegerField(default=0) - created_at = models.DateTimeField(auto_now_add=True) - updated_at = models.DateTimeField(auto_now=True) + module = models.CharField( + max_length=50, + verbose_name="所属模块", + help_text="client / property", + ) + key = models.CharField( + max_length=100, + verbose_name="分组 key", + help_text="如 source / follow_purpose", + ) + label_zh = models.CharField( + max_length=50, + verbose_name="分组中文名", + help_text="界面显示名称,如「客源来源」", + ) + description = models.TextField( + blank=True, + default="", + verbose_name="分组说明", + help_text="前端 tooltip 使用", + ) + sort_order = models.SmallIntegerField( + default=0, + verbose_name="排序", + ) + created_at = models.DateTimeField( + auto_now_add=True, + verbose_name="创建时间", + ) + updated_at = models.DateTimeField( + auto_now=True, + verbose_name="更新时间", + ) class Meta: db_table = "lookup_groups" @@ -25,22 +51,52 @@ class LookupGroup(UUIDPrimaryKeyModel): class LookupItem(UUIDPrimaryKeyModel): group = models.ForeignKey( - LookupGroup, on_delete=models.CASCADE, related_name="items" + LookupGroup, + on_delete=models.CASCADE, + related_name="items", + verbose_name="所属分组", + ) + value = models.CharField( + max_length=100, + verbose_name="存储值", + help_text="英文 snake_case,如 door_to_door;写入后只读", + ) + label_zh = models.CharField( + max_length=50, + verbose_name="显示文本", + help_text="如「上门」", + ) + is_system = models.BooleanField( + default=False, + verbose_name="是否系统预制", + help_text="True=系统预制不可物理删除,仅可停用", + ) + is_active = models.BooleanField( + default=True, + verbose_name="是否启用", + help_text="False 后录入下拉不展示,历史记录保留并展示「(已停用)」后缀", + ) + sort_order = models.SmallIntegerField( + default=0, + verbose_name="排序", ) - value = models.CharField(max_length=100) - label_zh = models.CharField(max_length=50) - is_system = models.BooleanField(default=False) - is_active = models.BooleanField(default=True) - sort_order = models.SmallIntegerField(default=0) created_by = models.ForeignKey( "org.Staff", null=True, blank=True, on_delete=models.SET_NULL, related_name="created_lookup_items", + verbose_name="创建人", + help_text="系统预制时为 NULL", + ) + created_at = models.DateTimeField( + auto_now_add=True, + verbose_name="创建时间", + ) + updated_at = models.DateTimeField( + auto_now=True, + verbose_name="更新时间", ) - created_at = models.DateTimeField(auto_now_add=True) - updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "lookup_items" diff --git a/apps/setting/models/setting.py b/apps/setting/models/setting.py index 7a68ef8..ff11669 100644 --- a/apps/setting/models/setting.py +++ b/apps/setting/models/setting.py @@ -17,18 +17,38 @@ TRADE_STATUS_CHOICES = ( class TenantSetting(UUIDPrimaryKeyModel): - category = models.CharField(max_length=50) - key = models.CharField(max_length=100) - value = models.JSONField() - value_type = models.CharField(max_length=20, choices=SettingValueType.choices) + category = models.CharField( + max_length=50, + verbose_name="配置分类", + help_text="client / property / showroom", + ) + key = models.CharField( + max_length=100, + verbose_name="配置 key", + help_text="如 duplicate_check_scope", + ) + value = models.JSONField( + verbose_name="配置值", + help_text='JSONB,统一格式 {"v": }', + ) + value_type = models.CharField( + max_length=20, + choices=SettingValueType.choices, + verbose_name="值类型", + help_text="bool / int / string / enum,用于前端渲染控件", + ) updated_by = models.ForeignKey( "org.Staff", null=True, blank=True, on_delete=models.SET_NULL, related_name="updated_tenant_settings", + verbose_name="最后修改人", + ) + updated_at = models.DateTimeField( + auto_now=True, + verbose_name="更新时间", ) - updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "tenant_settings" @@ -45,12 +65,34 @@ class TenantSetting(UUIDPrimaryKeyModel): class FieldRequirementRule(UUIDPrimaryKeyModel): - module = models.CharField(max_length=20, choices=FieldRuleModule.choices) - entity_type = models.CharField(max_length=50, choices=FieldRuleEntityType.choices) - trade_status = models.CharField(max_length=20, choices=TRADE_STATUS_CHOICES) - field_key = models.CharField(max_length=50) + module = models.CharField( + max_length=20, + choices=FieldRuleModule.choices, + verbose_name="模块", + help_text="property / client,MVP 仅 property", + ) + entity_type = models.CharField( + max_length=50, + choices=FieldRuleEntityType.choices, + verbose_name="实体类型", + help_text="与 property.property_type 值域完全一致:residential/villa/commercial_residential/shop/office/other", + ) + trade_status = models.CharField( + max_length=20, + choices=TRADE_STATUS_CHOICES, + verbose_name="交易状态", + help_text="sale=出售 / rent=出租 / sale_rent=租售 / *=全部(fallback 通配)", + ) + field_key = models.CharField( + max_length=50, + verbose_name="字段 key", + help_text="如 orientation / decoration / floor / building_area", + ) requirement = models.CharField( - max_length=10, choices=FieldRuleRequirement.choices + max_length=10, + choices=FieldRuleRequirement.choices, + verbose_name="规则", + help_text="required=必填 / optional=选填 / hidden=隐藏", ) updated_by = models.ForeignKey( "org.Staff", @@ -58,8 +100,12 @@ class FieldRequirementRule(UUIDPrimaryKeyModel): blank=True, on_delete=models.SET_NULL, related_name="updated_field_rules", + verbose_name="最后修改人", + ) + updated_at = models.DateTimeField( + auto_now=True, + verbose_name="更新时间", ) - updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "field_requirement_rules"