94 lines
3.1 KiB
Python
94 lines
3.1 KiB
Python
# =============================================================================
|
|
# 企微IT智能服务台 — 欢迎与引导配置模型
|
|
# =============================================================================
|
|
# 说明:存储员工端H5的欢迎页、引导视频、互动教学、主题模板配置
|
|
# 使用 SystemConfig 表存储,config_key 为 welcome_config
|
|
# =============================================================================
|
|
|
|
import json
|
|
import uuid
|
|
from datetime import datetime
|
|
from typing import Any, Optional
|
|
|
|
from sqlalchemy import DateTime, String, Text
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class WelcomeConfig:
|
|
"""欢迎与引导配置数据类。
|
|
|
|
用于在内存中处理配置数据,不直接对应数据库表。
|
|
实际存储使用 SystemConfig 表,config_key 为 "welcome_config"。
|
|
|
|
Attributes:
|
|
welcome_page: 欢迎页配置
|
|
welcome_video: 引导视频配置
|
|
tutorial: 互动教学配置
|
|
theme: 主题模板配置
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
welcome_page: Optional[dict[str, Any]] = None,
|
|
welcome_video: Optional[dict[str, Any]] = None,
|
|
tutorial: Optional[dict[str, Any]] = None,
|
|
theme: Optional[dict[str, Any]] = None,
|
|
):
|
|
self.welcome_page = welcome_page or {
|
|
"enabled": False,
|
|
"title": "欢迎使用IT服务台",
|
|
"content": "在这里您可以提交IT问题申请,获取快速支持",
|
|
"background_color": "#07C160",
|
|
}
|
|
self.welcome_video = welcome_video
|
|
self.tutorial = tutorial or {
|
|
"enabled": False,
|
|
"steps": [],
|
|
}
|
|
self.theme = theme or {
|
|
"theme": "default",
|
|
}
|
|
|
|
def to_dict(self) -> dict[str, Any]:
|
|
"""转换为字典格式。"""
|
|
return {
|
|
"welcome_page": self.welcome_page,
|
|
"welcome_video": self.welcome_video,
|
|
"tutorial": self.tutorial,
|
|
"theme": self.theme,
|
|
}
|
|
|
|
@classmethod
|
|
def from_dict(cls, data: dict[str, Any]) -> "WelcomeConfig":
|
|
"""从字典创建配置对象。"""
|
|
return cls(
|
|
welcome_page=data.get("welcome_page"),
|
|
welcome_video=data.get("welcome_video"),
|
|
tutorial=data.get("tutorial"),
|
|
theme=data.get("theme"),
|
|
)
|
|
|
|
@classmethod
|
|
def get_default(cls) -> "WelcomeConfig":
|
|
"""获取默认配置。"""
|
|
return cls()
|
|
|
|
# 静态方法:用于从 SystemConfig 读取和保存
|
|
CONFIG_KEY = "welcome_config"
|
|
|
|
@staticmethod
|
|
def serialize(config: "WelcomeConfig") -> str:
|
|
"""序列化配置为 JSON 字符串。"""
|
|
return json.dumps(config.to_dict(), ensure_ascii=False)
|
|
|
|
@staticmethod
|
|
def deserialize(config_value: str) -> "WelcomeConfig":
|
|
"""从 JSON 字符串反序列化配置。"""
|
|
try:
|
|
data = json.loads(config_value)
|
|
return WelcomeConfig.from_dict(data)
|
|
except (json.JSONDecodeError, TypeError):
|
|
return WelcomeConfig.get_default()
|