62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
扩展属性数据模型
|
||
用于存储动作点的扩展属性定义
|
||
"""
|
||
|
||
from sqlalchemy import Column, String, Text, Boolean, Integer, Enum
|
||
from sqlalchemy.dialects.mysql import VARCHAR
|
||
from data.models.base import BaseModel
|
||
from enum import Enum as PyEnum
|
||
|
||
|
||
class ExtendedPropertyTypeEnum(PyEnum):
|
||
"""扩展属性类型枚举"""
|
||
STRING = "string" # 字符串
|
||
INTEGER = "integer" # 整数
|
||
FLOAT = "float" # 浮点数
|
||
BOOLEAN = "boolean" # 布尔值
|
||
DATE = "date" # 日期
|
||
DATETIME = "datetime" # 日期时间
|
||
TEXT = "text" # 长文本
|
||
SELECT = "select" # 下拉选择
|
||
MULTISELECT = "multiselect" # 多选
|
||
|
||
|
||
class ExtendedProperty(BaseModel):
|
||
"""扩展属性模型"""
|
||
|
||
__tablename__ = "extended_properties"
|
||
|
||
# 基本信息
|
||
property_key = Column(VARCHAR(200),nullable=False, index=True, comment="属性键(与属性名称相同)")
|
||
property_name = Column(VARCHAR(200), nullable=False, index=True, comment="属性名称(唯一标识)")
|
||
property_type = Column(Enum(ExtendedPropertyTypeEnum), nullable=False, comment="属性类型")
|
||
|
||
# 属性设置
|
||
is_required = Column(Boolean, default=False, comment="是否必填")
|
||
is_enabled = Column(Boolean, default=True, comment="是否启用")
|
||
|
||
# 描述信息
|
||
description = Column(Text, comment="属性描述")
|
||
placeholder = Column(VARCHAR(500), comment="输入提示")
|
||
|
||
# 默认值和选项
|
||
default_value = Column(Text, comment="默认值")
|
||
options = Column(Text, comment="选项值(JSON格式,用于select和multiselect类型)")
|
||
|
||
# 验证规则
|
||
validation_rules = Column(Text, comment="验证规则(JSON格式)")
|
||
|
||
# 分类和排序
|
||
category = Column(VARCHAR(100), comment="属性分类")
|
||
sort_order = Column(Integer, default=0, comment="排序顺序")
|
||
|
||
# 显示设置
|
||
display_width = Column(Integer, default=200, comment="显示宽度(像素)")
|
||
display_format = Column(VARCHAR(100), comment="显示格式")
|
||
|
||
def __repr__(self):
|
||
return f"<ExtendedProperty(property_key='{self.property_key}', property_name='{self.property_name}', property_type='{self.property_type}')>" |