2026-10-19 23:06:01 -04:00
|
|
|
|
"""系统设置模型:公司信息 + 站点信息单例行。
|
2026-10-15 05:25:23 -04:00
|
|
|
|
|
|
|
|
|
|
与 M1 计提参数体系刻意分离:公司名称/logo 是「展示事实」,没有按生效日期
|
|
|
|
|
|
时点化演算的语义(参数体系按 effective_date 取值快照),且参数值列
|
2026-10-19 23:06:01 -04:00
|
|
|
|
value_text 为 String(64) 装不下;故独立单行表。logo/favicon 只存相对路径——
|
|
|
|
|
|
文件在 `backend/uploads/{logo,favicon}/`,独立于数据库备份体积且可单独替换
|
|
|
|
|
|
(见 system_setting_service)。整个系统恒为单行(迁移种子 id=1 保底)。
|
|
|
|
|
|
|
|
|
|
|
|
2026-10-20 精简(用户确认):企业档案字段(信用代码/地址/电话/邮箱)与
|
|
|
|
|
|
系统副标题删除,新增**站点标题**(浏览器标签页/侧边栏副标题)与**站点图标**
|
|
|
|
|
|
(浏览器标签页 favicon,独立于登录页 logo)。
|
2026-10-15 05:25:23 -04:00
|
|
|
|
"""
|
|
|
|
|
|
|
2026-10-19 23:06:01 -04:00
|
|
|
|
from sqlalchemy import Integer, String
|
2026-10-15 05:25:23 -04:00
|
|
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
|
|
|
|
|
|
|
|
from app.models.base import BIGINT_UNSIGNED, Base, TimestampMixin, mysql_table_args
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SystemSetting(Base, TimestampMixin):
|
2026-10-19 23:06:01 -04:00
|
|
|
|
"""系统设置表:公司信息 + 站点信息,全系统单行 id=1。
|
|
|
|
|
|
|
|
|
|
|
|
brand_slogan/footer_text/icp_no/site_title 均可空:null 表示前端回退
|
|
|
|
|
|
内置默认值,存量行为零变化。
|
|
|
|
|
|
"""
|
2026-10-15 05:25:23 -04:00
|
|
|
|
|
|
|
|
|
|
__tablename__ = "system_settings"
|
2026-10-19 23:06:01 -04:00
|
|
|
|
__table_args__ = mysql_table_args("系统设置表(公司信息与站点信息,全系统单行)")
|
2026-10-15 05:25:23 -04:00
|
|
|
|
|
|
|
|
|
|
id: Mapped[int] = mapped_column(
|
|
|
|
|
|
BIGINT_UNSIGNED, primary_key=True, autoincrement=True, comment="主键ID"
|
|
|
|
|
|
)
|
|
|
|
|
|
company_name: Mapped[str] = mapped_column(
|
2026-10-19 23:06:01 -04:00
|
|
|
|
String(64), nullable=False, comment="公司名称(登录页/侧边栏/浏览器标题展示)"
|
2026-10-15 05:25:23 -04:00
|
|
|
|
)
|
|
|
|
|
|
logo_path: Mapped[str | None] = mapped_column(
|
|
|
|
|
|
String(255),
|
2026-10-19 23:06:01 -04:00
|
|
|
|
comment="公司 logo 相对路径(文件存 uploads/logo/,null=未上传使用默认)",
|
|
|
|
|
|
)
|
|
|
|
|
|
logo_version: Mapped[int] = mapped_column(
|
|
|
|
|
|
Integer,
|
|
|
|
|
|
nullable=False,
|
|
|
|
|
|
server_default="0",
|
|
|
|
|
|
comment="logo 版本号(每次上传 +1;图片 URL 用它破缓存——同扩展名覆盖时路径不变,update_time 也不变)",
|
|
|
|
|
|
)
|
|
|
|
|
|
site_title: Mapped[str | None] = mapped_column(
|
|
|
|
|
|
String(64), comment="站点标题(浏览器标签页与侧边栏副标题;null=内置默认)"
|
|
|
|
|
|
)
|
|
|
|
|
|
brand_slogan: Mapped[str | None] = mapped_column(
|
|
|
|
|
|
String(64), comment="品牌标语(登录页与品牌预览;null=内置默认)"
|
|
|
|
|
|
)
|
|
|
|
|
|
footer_text: Mapped[str | None] = mapped_column(
|
|
|
|
|
|
String(64), comment="页脚版权文本(登录页;null=自动生成 © 公司名 · 内部系统)"
|
|
|
|
|
|
)
|
|
|
|
|
|
icp_no: Mapped[str | None] = mapped_column(
|
|
|
|
|
|
String(32), comment="ICP 备案号(登录页页脚,空=不显示)"
|
|
|
|
|
|
)
|
|
|
|
|
|
favicon_path: Mapped[str | None] = mapped_column(
|
|
|
|
|
|
String(255),
|
|
|
|
|
|
comment="站点图标相对路径(文件存 uploads/favicon/,null=跟随公司 logo / 内置 favicon.svg)",
|
|
|
|
|
|
)
|
|
|
|
|
|
favicon_version: Mapped[int] = mapped_column(
|
|
|
|
|
|
Integer,
|
|
|
|
|
|
nullable=False,
|
|
|
|
|
|
server_default="0",
|
|
|
|
|
|
comment="站点图标版本号(每次上传 +1;图片 URL 用它破缓存)",
|
2026-10-15 05:25:23 -04:00
|
|
|
|
)
|