From 6de4f3bef27cd841373584350fbdfd21b09461e3 Mon Sep 17 00:00:00 2001 From: DjangoAdmin Dev Date: Fri, 7 Aug 2026 13:48:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20P3a=20=E6=A8=A1=E5=9E=8B=E5=B1=82?= =?UTF-8?q?=E8=BF=81=E5=85=A5=20src/modules/=EF=BC=8822=20=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 19 个模块目录(system/association/cms/dictionary/configuration/log 等) - 一对一 16 个 + 合并 3 组(dict+dict_item、config+config_item、login_log+operation_log) - 重写模型 import:base_db/base_model→src.common、db→src.core.database、 case_converter/rich_text/request→src.common.utils - application/models/ 全部替换为 shim(指向 src.modules) - src/models_registry.py 改为从 src.modules 全量导入 【修复】codemod 两处 bug:shim 与 registry 的 import 路径含斜杠(已改点分); strip_license 误剥无许可头文件的 docstring 开头(log/models.py 已补回) 【验收】22 表全量识别;应用启动;pytest 5 passed Co-Authored-By: Claude --- application/models/article.py | 186 +---------- application/models/base_db.py | 2 +- application/models/base_model.py | 2 +- application/models/category.py | 122 +------- application/models/city.py | 189 +---------- application/models/config.py | 125 +------- application/models/config_item.py | 173 +--------- application/models/dept.py | 133 +------- application/models/dict.py | 125 +------- application/models/dict_item.py | 140 +-------- application/models/file_template.py | 109 +------ application/models/job.py | 152 +-------- application/models/level.py | 117 +------ application/models/link.py | 157 +--------- application/models/login_log.py | 201 +----------- application/models/menu.py | 188 +---------- application/models/notice.py | 141 +-------- application/models/operation_log.py | 195 +----------- application/models/param.py | 117 +------ application/models/position.py | 295 +----------------- application/models/role.py | 125 +------- application/models/role_menu.py | 108 +------ application/models/user.py | 261 +--------------- application/models/user_role.py | 108 +------ src/models_registry.py | 38 +-- src/modules/association/__init__.py | 1 + src/modules/association/role_menu/__init__.py | 1 + src/modules/association/role_menu/models.py | 108 +++++++ src/modules/association/user_role/__init__.py | 1 + src/modules/association/user_role/models.py | 108 +++++++ src/modules/city/__init__.py | 1 + src/modules/city/models.py | 189 +++++++++++ src/modules/cms/__init__.py | 1 + src/modules/cms/article/__init__.py | 1 + src/modules/cms/article/models.py | 186 +++++++++++ src/modules/cms/category/__init__.py | 1 + src/modules/cms/category/models.py | 122 ++++++++ src/modules/cms/link/__init__.py | 1 + src/modules/cms/link/models.py | 157 ++++++++++ src/modules/configuration/__init__.py | 1 + src/modules/configuration/models.py | 260 +++++++++++++++ src/modules/dictionary/__init__.py | 1 + src/modules/dictionary/models.py | 227 ++++++++++++++ src/modules/file_template/__init__.py | 1 + src/modules/file_template/models.py | 109 +++++++ src/modules/job/__init__.py | 1 + src/modules/job/models.py | 152 +++++++++ src/modules/notice/__init__.py | 1 + src/modules/notice/models.py | 141 +++++++++ src/modules/param/__init__.py | 1 + src/modules/param/models.py | 117 +++++++ src/modules/system/__init__.py | 1 + src/modules/system/dept/__init__.py | 1 + src/modules/system/dept/models.py | 133 ++++++++ src/modules/system/level/__init__.py | 1 + src/modules/system/level/models.py | 117 +++++++ src/modules/system/menu/__init__.py | 1 + src/modules/system/menu/models.py | 188 +++++++++++ src/modules/system/position/__init__.py | 1 + src/modules/system/position/models.py | 295 ++++++++++++++++++ src/modules/system/role/__init__.py | 1 + src/modules/system/role/models.py | 125 ++++++++ src/modules/system/user/__init__.py | 1 + src/modules/system/user/models.py | 261 ++++++++++++++++ 64 files changed, 3126 insertions(+), 3399 deletions(-) create mode 100644 src/modules/association/__init__.py create mode 100644 src/modules/association/role_menu/__init__.py create mode 100644 src/modules/association/role_menu/models.py create mode 100644 src/modules/association/user_role/__init__.py create mode 100644 src/modules/association/user_role/models.py create mode 100644 src/modules/city/__init__.py create mode 100644 src/modules/city/models.py create mode 100644 src/modules/cms/__init__.py create mode 100644 src/modules/cms/article/__init__.py create mode 100644 src/modules/cms/article/models.py create mode 100644 src/modules/cms/category/__init__.py create mode 100644 src/modules/cms/category/models.py create mode 100644 src/modules/cms/link/__init__.py create mode 100644 src/modules/cms/link/models.py create mode 100644 src/modules/configuration/__init__.py create mode 100644 src/modules/configuration/models.py create mode 100644 src/modules/dictionary/__init__.py create mode 100644 src/modules/dictionary/models.py create mode 100644 src/modules/file_template/__init__.py create mode 100644 src/modules/file_template/models.py create mode 100644 src/modules/job/__init__.py create mode 100644 src/modules/job/models.py create mode 100644 src/modules/notice/__init__.py create mode 100644 src/modules/notice/models.py create mode 100644 src/modules/param/__init__.py create mode 100644 src/modules/param/models.py create mode 100644 src/modules/system/__init__.py create mode 100644 src/modules/system/dept/__init__.py create mode 100644 src/modules/system/dept/models.py create mode 100644 src/modules/system/level/__init__.py create mode 100644 src/modules/system/level/models.py create mode 100644 src/modules/system/menu/__init__.py create mode 100644 src/modules/system/menu/models.py create mode 100644 src/modules/system/position/__init__.py create mode 100644 src/modules/system/position/models.py create mode 100644 src/modules/system/role/__init__.py create mode 100644 src/modules/system/role/models.py create mode 100644 src/modules/system/user/__init__.py create mode 100644 src/modules/system/user/models.py diff --git a/application/models/article.py b/application/models/article.py index 3fda4cb..54c4c8a 100644 --- a/application/models/article.py +++ b/application/models/article.py @@ -1,186 +1,8 @@ """ -文章模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供文章管理的数据模型定义,用于管理文章内容。 +模型已迁移至 src.modules.cms.article.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 文章模型 -# ============================================================ - -class Article(BaseModel, BaseDB): - """ - 文章模型 - - 用于存储文章信息,包括:分类、标题、封面、图集、导读、内容、作者、状态等。 - - Attributes: - id: 主键ID(继承自 BaseModel) - category_id: 分类ID(Integer,可选) - title: 文章标题(String(150),可选) - cover: 文章封面(String(255),可选) - images: 文章图集(Text,可选,JSON格式存储多张图片) - intro: 文章导读(String(255),可选) - content: 文章内容(Text,可选,富文本内容) - author: 文章作者(String(100),可选) - status: 文章状态(Integer,0-正常,1-下架,默认0) - click: 文章点击率(Integer,默认0) - sort: 文章排序(Integer,默认0) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "article" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 分类ID - category_id = db.Column( - db.Integer, - nullable=True, - comment="分类ID" - ) - - # 文章标题 - title = db.Column( - db.String(150), - nullable=True, - comment="文章标题" - ) - - # 文章封面 - cover = db.Column( - db.String(255), - nullable=True, - comment="文章封面" - ) - - # 文章图集(JSON格式存储多张图片) - images = db.Column( - db.Text, - nullable=True, - comment="文章图集" - ) - - # 文章导读 - intro = db.Column( - db.String(255), - nullable=True, - comment="文章导读" - ) - - # 文章内容 - content = db.Column( - db.Text, - nullable=True, - comment="文章内容" - ) - - # 文章作者 - author = db.Column( - db.String(100), - nullable=True, - comment="文章作者" - ) - - # 文章状态:0-正常 1-下架 - status = db.Column( - db.Integer, - nullable=False, - default=0, - comment="文章状态:0-正常 1-下架" - ) - - # 文章点击率 - click = db.Column( - db.Integer, - nullable=False, - default=0, - comment="文章点击率" - ) - - # 文章排序 - sort = db.Column( - db.Integer, - nullable=False, - default=0, - comment="文章排序" - ) - - # ============================================================ - # 常量定义 - # ============================================================ - - class Status: - """文章状态常量""" - NORMAL = 0 # 正常 - OFFLINE = 1 # 下架 - - # ============================================================ - # 业务方法 - # ============================================================ - - def increment_click(self): - """ - 增加点击率 - - 每次调用点击量加1 - """ - self.click = (self.click or 0) + 1 - self.save() - - def get_images_list(self): - """ - 获取图集列表 - - Returns: - list: 图集URL列表 - """ - if not self.images: - return [] - return [img.strip() for img in self.images.split(',') if img.strip()] - - def get_cover_url(self): - """ - 获取封面URL - - Returns: - str: 封面URL - """ - from utils.rich_text import get_file_url - return get_file_url(self.cover) if self.cover else "" - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "文章:{title}" 的字符串 - """ - return '文章:{}'.format(self.title or '未命名') - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "文章:{title}" 的字符串 - """ - return self.__repr__() +from src.modules.cms.article.models import * # noqa: F401,F403 diff --git a/application/models/base_db.py b/application/models/base_db.py index 96e0b3f..0b3ff47 100644 --- a/application/models/base_db.py +++ b/application/models/base_db.py @@ -2,7 +2,7 @@ 兼容 shim(绞杀者迁移期间保留) ============================================================= -数据库操作基类已迁移至 src/common/base_db.py。 +数据库操作基类已迁移至 src.common.base_db.py。 本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ from src.common.base_db import * # noqa: F401,F403 diff --git a/application/models/base_model.py b/application/models/base_model.py index 224c786..c91c08a 100644 --- a/application/models/base_model.py +++ b/application/models/base_model.py @@ -2,7 +2,7 @@ 兼容 shim(绞杀者迁移期间保留) ============================================================= -模型基类已迁移至 src/common/base_model.py。 +模型基类已迁移至 src.common.base_model.py。 本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ from src.common.base_model import * # noqa: F401,F403 diff --git a/application/models/category.py b/application/models/category.py index 1cf02e9..0f0cd29 100644 --- a/application/models/category.py +++ b/application/models/category.py @@ -1,122 +1,8 @@ """ -分类模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供文章分类管理的数据模型定义,支持多级分类结构。 +模型已迁移至 src.modules.cms.category.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 分类模型 -# ============================================================ - -class Category(BaseModel, BaseDB): - """ - 分类模型 - - 用于存储文章分类数据,支持多级分类结构(无限级)。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - category_name: 分类名称(String(100),必填) - category_code: 分类编码(String(100),可选) - parent_id: 上级分类ID(Integer,默认0,0表示顶级分类) - sort: 分类排序(Integer,默认0,数值越小越靠前) - note: 分类备注(String(100),可选) - type: 分类类型(Integer,必填,1-公司,2-子公司,3-部门,4-小组) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "category" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 分类名称 - category_name = db.Column( - db.String(100), - nullable=False, - comment="分类名称" - ) - - # 分类编码 - category_code = db.Column( - db.String(100), - nullable=True, - comment="分类编码" - ) - - # 上级分类ID - parent_id = db.Column( - db.Integer, - nullable=False, - default=0, - comment="上级ID" - ) - - # 分类排序 - sort = db.Column( - db.Integer, - nullable=False, - default=0, - comment="排序" - ) - - # 分类备注 - note = db.Column( - db.String(100), - nullable=True, - comment="分类备注" - ) - - # 分类类型 - type = db.Column( - db.Integer, - nullable=False, - comment="分类类型:1-公司 2-子公司 3-部门 4-小组" - ) - - # ============================================================ - # 常量定义 - # ============================================================ - - class Type: - """分类类型常量""" - COMPANY = 1 # 公司 - SUBSIDIARY = 2 # 子公司 - DEPARTMENT = 3 # 部门 - GROUP = 4 # 小组 - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "分类:{category_name}" 的字符串 - """ - return '分类:{}'.format(self.category_name) - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "分类:{category_name}" 的字符串 - """ - return self.__repr__() +from src.modules.cms.category.models import * # noqa: F401,F403 diff --git a/application/models/city.py b/application/models/city.py index a9bb19f..7a884dc 100644 --- a/application/models/city.py +++ b/application/models/city.py @@ -1,189 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -城市模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供城市区域的数据模型定义,支持省、市、县区、街道四级区域结构。 +模型已迁移至 src.modules.city.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 城市模型 -# ============================================================ - -class City(BaseModel, BaseDB): - """ - 城市区域模型 - - 用于存储行政区划数据,支持省、市、县区、街道四级区域结构。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - city_code: 城市区号(String(6),必填) - area_code: 行政编码(String(20),必填) - parent_code: 上级行政编码(String(20),必填) - zip_code: 邮政编码(String(6),必填) - level: 城市级别(Integer,1-省份,2-城市,3-县区,4-街道) - pid: 上级城市ID(Integer,默认0) - name: 城市名称(String(150),必填) - short_name: 城市简称(String(150),必填) - full_name: 城市全称(String(150),可选) - pinyin: 城市拼音(String(150),可选) - lng: 城市经度(String(150),可选) - lat: 城市纬度(String(150),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "city" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 城市区号 - city_code = db.Column( - db.String(6), - nullable=False, - comment="城市区号" - ) - - # 行政编码 - area_code = db.Column( - db.String(20), - nullable=False, - comment="行政编码" - ) - - # 上级行政编码 - parent_code = db.Column( - db.String(20), - nullable=False, - comment="上级行政编码" - ) - - # 邮政编码 - zip_code = db.Column( - db.String(6), - nullable=False, - comment="邮政编码" - ) - - # 城市级别:1-省份 2-城市 3-县区 4-街道 - level = db.Column( - db.Integer, - default=0, - comment="城市级别:1-省份 2-城市 3-县区 4-街道" - ) - - # 城市名称 - name = db.Column( - db.String(150), - nullable=False, - comment="城市名称" - ) - - # 城市简称 - short_name = db.Column( - db.String(150), - nullable=False, - comment="城市简称" - ) - - # 上级城市ID - pid = db.Column( - db.Integer, - default=0, - comment="上级城市ID" - ) - - # 城市全称 - full_name = db.Column( - db.String(150), - nullable=True, - comment="城市全称" - ) - - # 城市拼音 - pinyin = db.Column( - db.String(150), - nullable=True, - comment="城市拼音" - ) - - # 城市经度 - lng = db.Column( - db.String(150), - nullable=True, - comment="城市经度" - ) - - # 城市纬度 - lat = db.Column( - db.String(150), - nullable=True, - comment="城市纬度" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "城市{id}" 的字符串 - """ - return '城市{}'.format(self.id) +from src.modules.city.models import * # noqa: F401,F403 diff --git a/application/models/config.py b/application/models/config.py index dd4973b..8cd5dc1 100644 --- a/application/models/config.py +++ b/application/models/config.py @@ -1,125 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -配置模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供系统配置分组的数据模型定义,用于管理的分类。 +模型已迁移至 src.modules.configuration.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 配置模型 -# ============================================================ - -class Config(BaseModel, BaseDB): - """ - 配置分组模型 - - 用于存储系统配置分组信息,如:基础配置、邮件配置等。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 配置名称(String(100),必填) - code: 配置编码(String(100),必填) - sort: 配置排序(Integer,默认0,数值越小越靠前) - note: 配置备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "config" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 配置名称 - name = db.Column( - db.String(100), - nullable=False, - comment="配置名称" - ) - - # 配置编码 - code = db.Column( - db.String(100), - nullable=False, - comment="配置编码" - ) - - # 配置排序 - sort = db.Column( - db.Integer, - default=0, - comment="配置排序" - ) - - # 配置备注 - note = db.Column( - db.String(255), - nullable=True, - comment="配置备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "配置{id}" 的字符串 - """ - return "配置{}".format(self.id) +from src.modules.configuration.models import * # noqa: F401,F403 diff --git a/application/models/config_item.py b/application/models/config_item.py index 6c5ce03..8cd5dc1 100644 --- a/application/models/config_item.py +++ b/application/models/config_item.py @@ -1,173 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供系统的数据模型定义,用于管理具体的键值对。 +模型已迁移至 src.modules.configuration.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 模型 -# ============================================================ - -class ConfigItem(BaseModel, BaseDB): - """ - 模型 - - 用于存储系统配置的具体项,属于某个配置。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - config_id: 配置ID(Integer,默认0,关联配置ID) - config_code: 配置编码(String(100),默认0,关联配置编码) - name: 名称(String(100),必填) - code: 编码(String(100),必填,唯一标识) - value: 值(String(1000),可选) - options: 配置选项(Text,可选,用于下拉选择等场景) - type: 配置类型(String(100),必填) - status: 配置状态(Integer,1-正常,2-停用,默认1) - sort: 排序(Integer,默认0,数值越小越靠前) - note: 备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "config_item" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 配置ID - config_id = db.Column( - db.Integer, - default=0, - comment="配置ID" - ) - - # 配置编码 - config_code = db.Column( - db.String(100), - nullable=False, - comment="配置编码" - ) - - # 名称 - name = db.Column( - db.String(100), - nullable=False, - comment="名称" - ) - - # 编码 - code = db.Column( - db.String(100), - nullable=False, - comment="编码" - ) - - # 值 - value = db.Column( - db.String(1000), - nullable=True, - comment="值" - ) - - # 配置选项 - options = db.Column( - db.Text, - nullable=True, - comment="配置选项" - ) - - # 配置类型 - type = db.Column( - db.String(100), - nullable=False, - comment="配置类型" - ) - - # 配置状态:1-正常 2-停用 - status = db.Column( - db.Integer, - default=1, - comment="配置状态:1-正常 2-停用" - ) - - # 排序 - sort = db.Column( - db.Integer, - default=0, - comment="顺序" - ) - - # 备注 - note = db.Column( - db.String(255), - nullable=True, - comment="备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "{id}" 的字符串 - """ - return "{}".format(self.id) +from src.modules.configuration.models import * # noqa: F401,F403 diff --git a/application/models/dept.py b/application/models/dept.py index 1f22366..c47f2a8 100644 --- a/application/models/dept.py +++ b/application/models/dept.py @@ -1,133 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -部门模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供部门组织架构的数据模型定义,支持公司、子公司、部门、小组四级结构。 +模型已迁移至 src.modules.system.dept.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 部门模型 -# ============================================================ - -class Dept(BaseModel, BaseDB): - """ - 部门模型 - - 用于存储组织架构数据,支持公司、子公司、部门、小组四级结构。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 部门名称(String(100),必填) - type: 部门类型(Integer,1-公司,2-子公司,3-部门,4-小组,默认0) - parent_id: 上级部门ID(Integer,默认0,0表示顶级部门) - sort: 部门排序(Integer,默认0,数值越小越靠前) - note: 部门备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "dept" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 部门名称 - name = db.Column( - db.String(100), - nullable=False, - comment="部门名称" - ) - - # 部门类型:1-公司 2-子公司 3-部门 4-小组 - type = db.Column( - db.Integer, - default=0, - comment="部门类型:1-公司 2-子公司 3-部门 4-小组" - ) - - # 上级部门ID - parent_id = db.Column( - db.Integer, - default=0, - comment="上级部门ID" - ) - - # 部门排序 - sort = db.Column( - db.Integer, - default=0, - comment="部门排序" - ) - - # 备注 - note = db.Column( - db.String(255), - nullable=True, - comment="备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "部门{name}" 的字符串 - """ - return '部门{}'.format(self.name) +from src.modules.system.dept.models import * # noqa: F401,F403 diff --git a/application/models/dict.py b/application/models/dict.py index 9c1ed89..ceacdff 100644 --- a/application/models/dict.py +++ b/application/models/dict.py @@ -1,125 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -字典模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供数据字典分组的数据模型定义,用于管理字典项的分类。 +模型已迁移至 src.modules.dictionary.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 字典模型 -# ============================================================ - -class Dict(BaseModel, BaseDB): - """ - 字典分组模型 - - 用于存储数据字典分组信息,如:性别、状态等。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 字典名称(String(150),必填) - code: 字典编码(String(150),必填,唯一标识) - sort: 字典排序(Integer,默认0,数值越小越靠前) - note: 字典备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "dict" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 字典名称 - name = db.Column( - db.String(150), - nullable=False, - comment="字典名称" - ) - - # 字典编码 - code = db.Column( - db.String(150), - nullable=False, - comment="字典编码" - ) - - # 字典排序 - sort = db.Column( - db.Integer, - default=0, - comment="字典排序" - ) - - # 字典备注 - note = db.Column( - db.String(255), - nullable=True, - comment="字典备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "字典{id}" 的字符串 - """ - return "字典{}".format(self.id) +from src.modules.dictionary.models import * # noqa: F401,F403 diff --git a/application/models/dict_item.py b/application/models/dict_item.py index 2f5ee49..ceacdff 100644 --- a/application/models/dict_item.py +++ b/application/models/dict_item.py @@ -1,140 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -字典项模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供数据字典项的数据模型定义,用于管理字典的具体选项。 +模型已迁移至 src.modules.dictionary.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 字典项模型 -# ============================================================ - -class DictItem(BaseModel, BaseDB): - """ - 字典项模型 - - 用于存储数据字典的具体项,属于某个字典分组。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 字典项名称(String(100),必填) - value: 字典项值(String(100),必填) - dict_id: 字典ID(Integer,默认0,关联字典分组) - sort: 字典项排序(Integer,默认0,数值越小越靠前) - note: 字典项备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "dict_item" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 字典ID - dict_id = db.Column( - db.Integer, - default=0, - comment="字典ID" - ) - - # 字典编码 - dict_code = db.Column( - db.String(100), - nullable=False, - comment="字典编码" - ) - - # 字典项名称 - name = db.Column( - db.String(100), - nullable=False, - comment="字典项名称" - ) - - # 字典项值 - value = db.Column( - db.String(100), - nullable=False, - comment="字典项值" - ) - - # 字典项排序 - sort = db.Column( - db.Integer, - default=0, - comment="字典项顺序" - ) - - # 字典项备注 - note = db.Column( - db.String(255), - nullable=True, - comment="字典项备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "字典项{id}" 的字符串 - """ - return "字典项{}".format(self.id) +from src.modules.dictionary.models import * # noqa: F401,F403 diff --git a/application/models/file_template.py b/application/models/file_template.py index 319700d..677e8a4 100644 --- a/application/models/file_template.py +++ b/application/models/file_template.py @@ -1,109 +1,8 @@ """ -文件模板模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供文件模板管理的数据模型定义,用于管理文件模板信息。 +模型已迁移至 src.modules.file_template.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 文件模板模型 -# ============================================================ - -class FileTemplate(BaseModel, BaseDB): - """ - 文件模板模型 - - 用于存储文件模板信息,如:导入导出模板、报表模板等。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 模板名称(String(100),可选) - code: 模板编码(String(50),可选,唯一标识) - file_name: 文件名称(String(255),可选) - file_path: 文件路径(String(255),可选) - note: 文件模板备注(String(255),可选) - sort: 文件模板顺序(Integer,必填,默认0) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "file_template" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 模板名称 - name = db.Column( - db.String(100), - nullable=True, - comment="模板名称" - ) - - # 模板编码 - code = db.Column( - db.String(50), - nullable=True, - comment="模板编码" - ) - - # 文件名称 - file_name = db.Column( - db.String(255), - nullable=True, - comment="文件名称" - ) - - # 文件路径 - file_path = db.Column( - db.String(255), - nullable=True, - comment="文件路径" - ) - - # 文件模板备注 - note = db.Column( - db.String(255), - nullable=True, - comment="文件模板备注" - ) - - # 文件模板顺序 - sort = db.Column( - db.Integer, - nullable=False, - default=0, - comment="文件模板顺序" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "文件模板:{name}" 的字符串 - """ - return '文件模板:{}'.format(self.name or self.code) - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "文件模板:{name}" 的字符串 - """ - return self.__repr__() +from src.modules.file_template.models import * # noqa: F401,F403 diff --git a/application/models/job.py b/application/models/job.py index 473d412..d313c07 100644 --- a/application/models/job.py +++ b/application/models/job.py @@ -1,152 +1,8 @@ """ -定时任务模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供定时任务管理的数据模型定义。 +模型已迁移至 src.modules.job.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 定时任务模型 -# ============================================================ - -class Job(BaseModel, BaseDB): - """ - 定时任务模型 - - 用于存储定时任务信息。 - - Attributes: - id: 主键ID(继承自 BaseModel) - job_name: 任务名称(String(255),必填) - job_alias: 任务别名(String(255),可选) - job_group: 任务分组(String(255),可选) - job_trigger: 任务触发器(String(255),可选) - status: 任务状态(Integer,0-未发布 1-运行中 2-暂停 3-删除) - cron_expression: Cron表达式(String(255),可选) - execute_policy: 执行策略(Integer,1-立即执行 2-执行一次 3-放弃执行) - is_sync: 是否同步任务(Integer,0-否 1-是) - url: 任务URL(String(255),可选) - note: 任务备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - __tablename__ = DB_PREFIX + "job" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 任务名称 - job_name = db.Column( - db.String(255), - nullable=False, - comment="任务名称" - ) - - # 任务别名 - job_alias = db.Column( - db.String(255), - nullable=True, - comment="任务别名" - ) - - # 任务分组 - job_group = db.Column( - db.String(255), - nullable=True, - comment="任务分组" - ) - - # 任务触发器 - job_trigger = db.Column( - db.String(255), - nullable=True, - comment="任务触发器" - ) - - # 任务状态:0-未发布 1-运行中 2-暂停 3-删除 - status = db.Column( - db.Integer, - nullable=False, - default=0, - comment="任务状态:0-未发布 1-运行中 2-暂停 3-删除" - ) - - # Cron表达式 - cron_expression = db.Column( - db.String(255), - nullable=True, - comment="Cron表达式" - ) - - # 执行策略:1-立即执行 2-执行一次 3-放弃执行 - execute_policy = db.Column( - db.Integer, - nullable=False, - default=1, - comment="执行策略:1-立即执行 2-执行一次 3-放弃执行" - ) - - # 是否同步任务:0-否 1-是 - is_sync = db.Column( - db.Integer, - nullable=False, - default=0, - comment="是否同步任务:0-否 1-是" - ) - - # 任务URL - url = db.Column( - db.String(255), - nullable=True, - comment="任务URL" - ) - - # 任务备注 - note = db.Column( - db.String(255), - nullable=True, - comment="任务备注" - ) - - # ============================================================ - # 常量定义 - # ============================================================ - - class Status: - """任务状态常量""" - UNPUBLISHED = 0 # 未发布 - RUNNING = 1 # 运行中 - PAUSED = 2 # 暂停 - DELETED = 3 # 删除 - - class ExecutePolicy: - """执行策略常量""" - EXECUTE_NOW = 1 # 立即执行 - EXECUTE_ONCE = 2 # 执行一次 - ABANDON = 3 # 放弃执行 - - class IsSync: - """是否同步任务常量""" - ASYNC = 0 # 异步 - SYNC = 1 # 同步 - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self): - return '定时任务:{}'.format(self.job_name) - - def __str__(self): - return self.__repr__() +from src.modules.job.models import * # noqa: F401,F403 diff --git a/application/models/level.py b/application/models/level.py index 7c3ea5b..ad1846e 100644 --- a/application/models/level.py +++ b/application/models/level.py @@ -1,117 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -职级模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供职级管理的数据模型定义,用于定义员工职级体系。 +模型已迁移至 src.modules.system.level.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 职级模型 -# ============================================================ - -class Level(BaseModel, BaseDB): - """ - 职级模型 - - 用于存储员工职级信息,如:初级、中级、高级等。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 职级名称(String(255),必填) - status: 职级状态(Integer,1-在用,2-停用,默认0) - sort: 职级排序(Integer,默认0,数值越小越靠前) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "level" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 职级名称 - name = db.Column( - db.String(255), - nullable=False, - comment="职级名称" - ) - - # 职级状态:1-在用 2-停用 - status = db.Column( - db.Integer, - default=0, - comment="职级状态:1-在用 2-停用" - ) - - # 职级排序 - sort = db.Column( - db.Integer, - default=0, - comment="职级排序" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "职级:{name}" 的字符串 - """ - return '职级:{}'.format(self.name) +from src.modules.system.level.models import * # noqa: F401,F403 diff --git a/application/models/link.py b/application/models/link.py index eed6428..3075919 100644 --- a/application/models/link.py +++ b/application/models/link.py @@ -1,157 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -友链模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供友情链接的数据模型定义,用于管理网站友情链接和合作伙伴。 +模型已迁移至 src.modules.cms.link.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 友链模型 -# ============================================================ - -class Link(BaseModel, BaseDB): - """ - 友链模型 - - 用于存储友情链接和合作伙伴信息,支持多种投放平台和链接形式。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 友链名称(String(255),必填) - type: 友链类型(Integer,1-友情链接,2-合作伙伴,默认1) - url: 友链URL(String(255),可选) - form: 友链形式(Integer,1-文字链接,2-图片链接,默认1) - image: 友链图片(String(255),可选) - status: 友链状态(Integer,1-正常,2-停用,默认1) - sort: 友链排序(Integer,默认0,数值越小越靠前) - note: 友链备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "link" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 友链名称 - name = db.Column( - db.String(255), - nullable=False, - comment="友链名称" - ) - - # 友链类型:1-友情链接 2-合作伙伴 - type = db.Column( - db.Integer, - default=1, - comment="友链类型:1-友情链接 2-合作伙伴" - ) - - # 友链URL - url = db.Column( - db.String(255), - nullable=True, - comment="友链URL" - ) - - # 友链形式:1-文字链接 2-图片链接 - form = db.Column( - db.Integer, - default=1, - comment="友链形式:1-文字链接 2-图片链接" - ) - - # 友链图片 - image = db.Column( - db.String(255), - nullable=True, - comment="友链图片" - ) - - # 友链状态:1-正常 2-停用 - status = db.Column( - db.Integer, - default=1, - comment="友链状态:1-正常 2-停用" - ) - - # 友链顺序 - sort = db.Column( - db.Integer, - default=0, - comment="友链顺序" - ) - - # 友链备注 - note = db.Column( - db.String(255), - nullable=True, - comment="友链备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "友链{name}" 的字符串 - """ - return "友链{}".format(self.name) +from src.modules.cms.link.models import * # noqa: F401,F403 diff --git a/application/models/login_log.py b/application/models/login_log.py index 3b51fb5..5a94ef5 100644 --- a/application/models/login_log.py +++ b/application/models/login_log.py @@ -1,201 +1,8 @@ """ -登录日志模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供登录日志管理的数据模型定义,用于记录用户登录、退出等操作日志。 +模型已迁移至 src.modules.log.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 登录日志模型 -# ============================================================ - -class LoginLog(BaseModel, BaseDB): - """ - 登录日志模型 - - 用于记录用户登录和退出操作的详细信息,包括:登录账号、日志类型、 - 来源、请求信息、IP地址、归属地、设备信息、请求耗时、操作状态等。 - - Attributes: - id: 主键ID(继承自 BaseModel) - username: 登录账号(String(50),必填) - log_type: 日志类型(Integer,1-登录,2-退出,必填) - source: 登录来源(Integer,0-后台,1-前台,必填) - method: 请求方法(String(10),必填) - request_method: 请求方式(String(255),必填) - url: 请求URL(String(500),必填) - param: 请求参数(Text,可选) - result: 返回结果(Text,必填) - ip: IP地址(String(50),必填) - location: IP归属地(String(100),必填) - os: 操作系统(String(100),必填) - browser: 浏览器(String(100),必填) - consume_time: 请求耗时(Integer,必填) - status: 操作状态(Integer,0-正常,1-异常,必填) - error: 错误信息(Text,可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "login_log" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 登录账号 - username = db.Column( - db.String(50), - nullable=False, - comment="登录账号" - ) - - # 日志类型:1-登录,2-退出 - log_type = db.Column( - db.Integer, - nullable=False, - comment="日志类型:1-登录,2-退出" - ) - - # 登录来源:0-后台,1-前台 - source = db.Column( - db.Integer, - nullable=False, - comment="登录来源:0-后台,1-前台" - ) - - # 请求方法(HTTP方法,如POST/GET) - method = db.Column( - db.String(10), - nullable=False, - comment="请求方法" - ) - - # 请求方式(视图方法路径,如application.views.login.logout) - request_method = db.Column( - db.String(255), - nullable=False, - comment="请求方式" - ) - - # 请求URL - url = db.Column( - db.String(500), - nullable=False, - comment="请求URL" - ) - - # 请求参数 - param = db.Column( - db.Text, - nullable=True, - comment="请求参数" - ) - - # 返回结果 - result = db.Column( - db.Text, - nullable=False, - comment="返回结果" - ) - - # IP地址 - ip = db.Column( - db.String(50), - nullable=False, - comment="IP地址" - ) - - # IP归属地 - location = db.Column( - db.String(100), - nullable=False, - comment="IP归属地" - ) - - # 操作系统 - os = db.Column( - db.String(100), - nullable=False, - comment="操作系统" - ) - - # 浏览器 - browser = db.Column( - db.String(100), - nullable=False, - comment="浏览器" - ) - - # 请求耗时(毫秒) - consume_time = db.Column( - db.Integer, - nullable=False, - comment="请求耗时" - ) - - # 操作状态:0-正常,1-异常 - status = db.Column( - db.Integer, - nullable=False, - comment="操作状态:0-正常,1-异常" - ) - - # 错误信息 - error = db.Column( - db.Text, - nullable=True, - comment="错误信息" - ) - - # ============================================================ - # 常量定义 - # ============================================================ - - class LogType: - """日志类型常量""" - LOGIN = 1 # 登录 - LOGOUT = 2 # 退出 - - class Source: - """登录来源常量""" - ADMIN = 0 # 后台 - FRONT = 1 # 前台 - - class Status: - """操作状态常量""" - NORMAL = 0 # 正常 - ERROR = 1 # 异常 - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "登录日志:{username} - {log_type}" 的字符串 - """ - log_type_name = "登录" if self.log_type == self.LogType.LOGIN else "退出" - return '登录日志:{} - {}'.format(self.username, log_type_name) - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "登录日志:{username} - {log_type}" 的字符串 - """ - return self.__repr__() +from src.modules.log.models import * # noqa: F401,F403 diff --git a/application/models/menu.py b/application/models/menu.py index dd344bc..5e39627 100644 --- a/application/models/menu.py +++ b/application/models/menu.py @@ -1,188 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -菜单模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供系统菜单的数据模型定义,用于管理后台导航菜单和权限节点。 +模型已迁移至 src.modules.system.menu.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db - - -# ============================================================ -# 菜单模型 -# ============================================================ - -class Menu(BaseModel, BaseDB): - """ - 菜单模型 - - 用于存储系统导航菜单和权限节点信息,支持树形结构。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 菜单名称(String(100),必填) - icon: 菜单图标(String(50),可选) - parent_id: 上级ID(Integer,默认0,0表示顶级菜单) - path: 菜单路径(String(255),可选,前端路由地址) - component: 菜单组件(String(255),可选,前端组件路径) - permission: 权限节点(String(100),可选,权限标识符) - target: 打开方式(Integer,0-内部打开,1-外部打开,默认0) - type: 菜单类型(Integer,0-菜单,1-节点,默认0) - status: 菜单状态(Integer,0-正常,1-禁用,默认0) - hide: 是否可见(Integer,0-可见,1-不可见,默认0) - sort: 菜单排序(Integer,默认0,数值越小越靠前) - note: 菜单备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "menu" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 菜单名称 - name = db.Column( - db.String(100), - nullable=False, - comment="菜单名称" - ) - - # 菜单图标 - icon = db.Column( - db.String(50), - nullable=True, - comment="菜单图标" - ) - - # 上级ID - parent_id = db.Column( - db.Integer, - default=0, - comment="上级ID" - ) - - # 菜单路径 - path = db.Column( - db.String(255), - nullable=True, - comment="菜单路径" - ) - - # 菜单组件 - component = db.Column( - db.String(255), - nullable=True, - comment="菜单组件" - ) - - # 权限节点 - permission = db.Column( - db.String(100), - nullable=True, - comment="权限节点" - ) - - # 打开方式:0-内部打开 1-外部打开 - target = db.Column( - db.Integer, - default=0, - comment="打开方式:0-内部打开 1-外部打开" - ) - - # 菜单类型:0-菜单 1-节点 - type = db.Column( - db.Integer, - default=0, - comment="菜单类型:0-菜单 1-节点" - ) - - # 状态选项 - status = db.Column( - db.Integer, - default=0, - comment="菜单状态:0-正常 1-禁用" - ) - - # 是否可见:0-可见 1-不可见 - hide = db.Column( - db.Integer, - default=0, - comment="是否可见:0-可见 1-不可见" - ) - - # 排序 - sort = db.Column( - db.Integer, - default=0, - comment="排序" - ) - - # 备注 - note = db.Column( - db.String(255), - nullable=True, - comment="备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "菜单{id}" 的字符串 - """ - return "菜单{}".format(self.id) +from src.modules.system.menu.models import * # noqa: F401,F403 diff --git a/application/models/notice.py b/application/models/notice.py index c8c775b..6abc98a 100644 --- a/application/models/notice.py +++ b/application/models/notice.py @@ -1,141 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -通知公告模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供通知公告的数据模型定义,用于管理系统通知和公告信息。 +模型已迁移至 src.modules.notice.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 通知公告模型 -# ============================================================ - -class Notice(BaseModel, BaseDB): - """ - 通知公告模型 - - 用于存储系统通知和公告信息,支持置顶、来源分类等功能。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - title: 通知标题(String(150),必填) - cover: 通知封面(String(150),必填) - type: 通知类型(Integer,默认1) - status: 通知状态(Integer,1-正常,2-停用,默认1) - click_num: 点击率(Integer,默认0) - content: 通知公告内容(Text,可选,支持富文本) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "notice" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 通知标题 - title = db.Column( - db.String(150), - nullable=False, - comment="通知标题" - ) - - # 通知封面 - cover = db.Column( - db.String(255), - nullable=False, - comment="通知封面" - ) - - # 通知类型:1-通知 2-公告 - type = db.Column( - db.Integer, - default=1, - comment="通知类型:1-通知 2-公告" - ) - - # 通知状态:1-正常 2-停用 - status = db.Column( - db.Integer, - default=1, - comment="通知状态:1-正常 2-停用" - ) - - # 点击率 - click_num = db.Column( - db.Integer, - default=0, - comment="点击率" - ) - - # 通知公告内容 - content = db.Column( - db.Text, - nullable=True, - comment="通知内容" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "通知公告{title}" 的字符串 - """ - return "通知公告{}".format(self.title) +from src.modules.notice.models import * # noqa: F401,F403 diff --git a/application/models/operation_log.py b/application/models/operation_log.py index 2614680..5a94ef5 100644 --- a/application/models/operation_log.py +++ b/application/models/operation_log.py @@ -1,195 +1,8 @@ """ -操作日志模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供操作日志管理的数据模型定义,用于记录用户操作行为日志。 +模型已迁移至 src.modules.log.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 操作日志模型 -# ============================================================ - -class OperationLog(BaseModel, BaseDB): - """ - 操作日志模型 - - 用于记录用户操作行为的详细信息,包括:操作标题、操作类型、 - 来源、请求信息、IP地址、归属地、设备信息、请求耗时、操作状态等。 - - Attributes: - id: 主键ID(继承自 BaseModel) - title: 请求标题(String(150),必填) - type: 请求类型(Integer,必填) - source: 请求来源(Integer,必填,0-后台,1-前台) - method: 请求方法(String(100),必填) - request_method: 请求方式(String(255),必填) - url: 请求URL(String(1000),必填) - param: 请求参数(Text,必填) - result: 请求结果(Text,必填) - ip: 请求IP(String(100),必填) - location: 请求所在区域(String(255),必填) - os: 操作系统(String(100),必填) - browser: 浏览器(String(100),必填) - consume_time: 请求耗时(Integer,必填,单位毫秒) - status: 请求状态(Integer,必填,0-正常,1-异常) - error: 错误描述(Text,必填) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "operation_log" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 请求标题 - title = db.Column( - db.String(150), - nullable=False, - comment="请求标题" - ) - - # 请求类型 - type = db.Column( - db.Integer, - nullable=False, - comment="请求类型" - ) - - # 请求来源:0-后台,1-前台 - source = db.Column( - db.Integer, - nullable=False, - comment="请求来源:0-后台,1-前台" - ) - - # 请求方法(如:UserController.add) - method = db.Column( - db.String(100), - nullable=False, - comment="请求方法" - ) - - # 请求方式(如:GET、POST、PUT、DELETE) - request_method = db.Column( - db.String(255), - nullable=False, - comment="请求方式" - ) - - # 请求URL - url = db.Column( - db.String(1000), - nullable=False, - comment="请求URL" - ) - - # 请求参数 - param = db.Column( - db.Text, - nullable=False, - comment="请求参数" - ) - - # 请求结果 - result = db.Column( - db.Text, - nullable=False, - comment="请求结果" - ) - - # 请求IP - ip = db.Column( - db.String(100), - nullable=False, - comment="请求IP" - ) - - # 请求所在区域 - location = db.Column( - db.String(255), - nullable=False, - comment="请求所在区域" - ) - - # 操作系统 - os = db.Column( - db.String(100), - nullable=False, - comment="操作系统" - ) - - # 浏览器 - browser = db.Column( - db.String(100), - nullable=False, - comment="浏览器" - ) - - # 请求耗时(毫秒) - consume_time = db.Column( - db.BigInteger, - nullable=False, - comment="请求耗时" - ) - - # 请求状态:0-正常,1-异常 - status = db.Column( - db.Integer, - nullable=False, - comment="请求状态:0-正常,1-异常" - ) - - # 错误描述 - error = db.Column( - db.Text, - nullable=False, - comment="错误描述" - ) - - # ============================================================ - # 常量定义 - # ============================================================ - - class Source: - """请求来源常量""" - ADMIN = 0 # 后台 - FRONT = 1 # 前台 - - class Status: - """请求状态常量""" - NORMAL = 0 # 正常 - ERROR = 1 # 异常 - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "操作日志:{title} - {method}" 的字符串 - """ - return '操作日志:{} - {}'.format(self.title, self.method) - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "操作日志:{title} - {method}" 的字符串 - """ - return self.__repr__() +from src.modules.log.models import * # noqa: F401,F403 diff --git a/application/models/param.py b/application/models/param.py index d180ead..1d39360 100644 --- a/application/models/param.py +++ b/application/models/param.py @@ -1,117 +1,8 @@ """ -参数模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供系统参数管理的数据模型定义,用于管理系统参数和业务参数。 +模型已迁移至 src.modules.param.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 参数模型 -# ============================================================ - -class Param(BaseModel, BaseDB): - """ - 参数模型 - - 用于存储系统参数和业务参数信息,如:系统配置参数、业务规则参数等。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 参数名称(String(100),必填) - code: 参数编码(String(100),必填,唯一标识) - value: 参数值(String(255),必填) - type: 参数类型(Integer,0-系统 1-业务,必填) - status: 参数状态(Integer,1-正常 2-禁用,必填) - sort: 参数排序(Integer,默认0,数值越小越靠前) - note: 参数备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "param" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 参数名称 - name = db.Column( - db.String(100), - nullable=False, - comment="参数名称" - ) - - # 参数编码 - code = db.Column( - db.String(100), - nullable=False, - comment="参数编码" - ) - - # 参数值 - value = db.Column( - db.String(255), - nullable=False, - comment="参数值" - ) - - # 参数类型:0-系统 1-业务 - type = db.Column( - db.Integer, - nullable=False, - comment="参数类型:0-系统 1-业务" - ) - - # 参数状态:1-正常 2-禁用 - status = db.Column( - db.Integer, - nullable=False, - comment="参数状态:1-正常 2-禁用" - ) - - # 参数排序 - sort = db.Column( - db.Integer, - nullable=False, - comment="参数排序" - ) - - # 参数备注 - note = db.Column( - db.String(255), - nullable=True, - comment="参数备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "参数:{name}" 的字符串 - """ - return '参数:{}'.format(self.name) - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "参数:{name}" 的字符串 - """ - return self.__repr__() +from src.modules.param.models import * # noqa: F401,F403 diff --git a/application/models/position.py b/application/models/position.py index 0f2b926..52607af 100644 --- a/application/models/position.py +++ b/application/models/position.py @@ -1,295 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称"本产品")拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -岗位模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供岗位管理的数据模型定义,用于定义员工岗位信息。 - -企业级特性: - 1. 使用枚举类管理状态常量,确保类型安全 - 2. 状态文本自动转换,便于前端展示 - 3. 便捷的查询方法,提高开发效率 - 4. 继承 BaseModel 和 BaseDB,复用通用功能 - 5. __init__ 由 BaseModel 统一管理,无需重复定义 - -模型说明: - 岗位用于标识用户的职位,如:技术总监、产品经理、开发工程师等。 - 通过 sort 字段控制显示顺序,数值越小越靠前。 +模型已迁移至 src.modules.system.position.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from enum import IntEnum -from typing import Optional, List - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.request import like_contains - - -# ============================================================ -# 岗位状态枚举 -# ============================================================ - -class PositionStatus(IntEnum): - """ - 岗位状态枚举 - - 使用 IntEnum 确保类型安全,避免魔法数字。 - 可直接用于数据库查询和比较。 - - Example: - # 查询启用状态的岗位 - Position.query.filter(Position.status == PositionStatus.ENABLED) - - # 创建岗位时设置状态 - position = Position(name='经理', status=PositionStatus.ENABLED) - - # 判断岗位是否启用 - if position.status == PositionStatus.ENABLED: - print("岗位已启用") - """ - DISABLED = 0 # 停用 - ENABLED = 1 # 启用 - - -# ============================================================ -# 岗位模型 -# ============================================================ - -class Position(BaseModel, BaseDB): - """ - 岗位模型 - - 用于存储员工岗位信息,如:技术总监、产品经理等。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 岗位名称(String(255),必填) - status: 岗位状态(使用 PositionStatus 枚举,默认停用) - sort: 岗位排序(Integer,默认0,数值越小越靠前) - - 便捷属性: - status_text: 获取状态文本("启用"/"停用") - is_enabled: 判断是否启用 - is_disabled: 判断是否停用 - - 自定义查询: - get_enabled(): 获取所有启用的岗位 - get_by_name(): 根据名称精确查询 - search_by_name(): 根据名称模糊搜索 - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 表名:使用配置前缀 + 模型名 - __tablename__ = DB_PREFIX + "position" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 岗位名称:必填字段,最长255字符 - name = db.Column( - db.String(255), - nullable=False, - comment="岗位名称" - ) - - # 岗位状态:使用枚举确保类型安全 - # 默认值为停用,创建后需手动启用 - status = db.Column( - db.Integer, - default=PositionStatus.DISABLED, - comment="岗位状态:0-停用 1-启用" - ) - - # 岗位排序:数值越小越靠前 - # 用于列表展示时的排序控制 - sort = db.Column( - db.Integer, - default=0, - comment="岗位排序" - ) - - # ============================================================ - # 注意:__init__ 方法在 BaseModel 中已实现,无需重复定义 - # BaseModel 已处理驼峰转换、字段过滤等逻辑 - # ============================================================ - - # ============================================================ - # 便捷属性 - # ============================================================ - - @property - def status_text(self) -> str: - """ - 获取岗位状态文本 - - 将数字状态转换为可读的中文文本。 - 用于前端展示或日志记录。 - - Returns: - str: "启用" 或 "停用" - """ - status_map = { - PositionStatus.DISABLED: '停用', - PositionStatus.ENABLED: '启用' - } - return status_map.get(self.status, '未知') - - @property - def is_enabled(self) -> bool: - """ - 判断岗位是否启用 - - Returns: - bool: 启用返回 True,否则返回 False - """ - return self.status == PositionStatus.ENABLED - - @property - def is_disabled(self) -> bool: - """ - 判断岗位是否停用 - - Returns: - bool: 停用返回 True,否则返回 False - """ - return self.status == PositionStatus.DISABLED - - # ============================================================ - # 自定义查询方法 - # ============================================================ - - @classmethod - def get_enabled(cls) -> List['Position']: - """ - 获取所有启用的岗位 - - 按排序值升序排列,适用于下拉选择框等场景。 - 只返回未删除且状态为启用的岗位。 - - Returns: - List[Position]: 启用的岗位列表 - - Example: - positions = Position.get_enabled() - for pos in positions: - print(pos.name, pos.status_text) - """ - return cls.query.filter( - cls.is_delete == 0, - cls.status == PositionStatus.ENABLED - ).order_by(cls.sort.asc()).all() - - @classmethod - def get_by_name(cls, name: Optional[str]) -> Optional['Position']: - """ - 根据岗位名称精确查询 - - 用于检查岗位名称是否已存在等场景。 - - Args: - name: 岗位名称 - - Returns: - Optional[Position]: 岗位对象,不存在或名称为空时返回 None - - Example: - position = Position.get_by_name('经理') - if position: - print("岗位已存在") - """ - if not name: - return None - - return cls.query.filter( - cls.name == name, - cls.is_delete == 0 - ).first() - - @classmethod - def search_by_name(cls, name: Optional[str]) -> List['Position']: - """ - 根据岗位名称模糊搜索 - - 支持名称关键字匹配,按排序值升序排列。 - 适用于搜索建议或筛选场景。 - - Args: - name: 岗位名称关键字 - - Returns: - List[Position]: 匹配的岗位列表 - - Example: - positions = Position.search_by_name('经理') - for pos in positions: - print(pos.name) - """ - if not name: - return [] - - return cls.query.filter( - cls.name.like(like_contains(name), escape='\\'), - cls.is_delete == 0 - ).order_by(cls.sort.asc()).all() - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __repr__(self) -> str: - """ - 返回模型的字符串表示 - - 用于调试和日志输出。 - - Returns: - str: 格式为 "岗位:{name}" - """ - return f'岗位:{self.name}' +from src.modules.system.position.models import * # noqa: F401,F403 diff --git a/application/models/role.py b/application/models/role.py index 0ced7ef..7fc6a9a 100644 --- a/application/models/role.py +++ b/application/models/role.py @@ -1,125 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -角色模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供角色管理的数据模型定义,用于定义系统角色和权限分配。 +模型已迁移至 src.modules.system.role.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 角色模型 -# ============================================================ - -class Role(BaseModel, BaseDB): - """ - 角色模型 - - 用于存储系统角色信息,角色是权限分配的基本单位。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - name: 角色名称(String(150),必填) - code: 角色编码(String(30),必填,唯一标识) - sort: 角色排序(Integer,默认0,数值越小越靠前) - note: 角色备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "role" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 角色名称 - name = db.Column( - db.String(150), - nullable=False, - comment="角色名称" - ) - - # 角色编码 - code = db.Column( - db.String(30), - nullable=False, - comment="角色编码" - ) - - # 角色排序 - sort = db.Column( - db.Integer, - default=0, - comment="角色排序" - ) - - # 角色备注 - note = db.Column( - db.String(255), - nullable=True, - comment="角色备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "角色{name}:" 的字符串 - """ - return '角色{}:'.format(self.name) +from src.modules.system.role.models import * # noqa: F401,F403 diff --git a/application/models/role_menu.py b/application/models/role_menu.py index 2b430e6..deb3efd 100644 --- a/application/models/role_menu.py +++ b/application/models/role_menu.py @@ -1,108 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -角色菜单关联模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供角色与菜单的关联关系数据模型定义,用于实现角色权限分配。 +模型已迁移至 src.modules.association.role_menu.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db - - -# ============================================================ -# 角色菜单关联模型 -# ============================================================ - -class RoleMenu(BaseModel, BaseDB): - """ - 角色菜单关联模型 - - 用于存储角色与菜单的关联关系,实现角色的权限分配。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - role_id: 角色ID(Integer,默认0) - menu_id: 菜单ID(Integer,默认0) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "role_menu" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 角色ID - role_id = db.Column( - db.Integer, - default=0, - comment="角色ID" - ) - - # 菜单ID - menu_id = db.Column( - db.Integer, - default=0, - comment="菜单ID" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "角色菜单表{role_id}" 的字符串 - """ - return "角色菜单表{}".format(self.role_id) +from src.modules.association.role_menu.models import * # noqa: F401,F403 diff --git a/application/models/user.py b/application/models/user.py index 0a254c0..e588269 100644 --- a/application/models/user.py +++ b/application/models/user.py @@ -1,261 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -用户模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供用户管理的数据模型定义,用于存储系统用户基本信息。 +模型已迁移至 src.modules.system.user.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db -from utils.case_converter import convert_camel_to_snake - - -# ============================================================ -# 用户模型 -# ============================================================ - -class User(BaseModel, BaseDB): - """ - 用户模型 - - 用于存储系统用户信息,包括基本信息、联系方式、地址等。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - realname: 用户姓名(String(150),必填) - gender: 性别(Integer,1-男,2-女,3-保密,默认1) - avatar: 用户头像(String(255),必填) - mobile: 手机号(String(30),必填) - email: 邮箱(String(30),必填) - dept_id: 部门ID(Integer,默认0) - level_id: 职级ID(Integer,默认0) - position_id: 岗位ID(Integer,默认0) - province_code: 省份编码(String(30),必填) - city_code: 城市编码(String(30),必填) - district_code: 县区编码(String(30),必填) - street_code: 街道编码(String(30),必填) - city_info: 省市区信息(String(255),可选) - address: 详细地址(String(255),必填) - username: 用户名(String(30),可选,登录账号) - password: 密码(String(255),可选,加密存储) - salt: 加密盐(String(30),可选) - intro: 个人简介(String(255),可选) - status: 用户状态(Integer,1-正常,2-禁用,默认1) - sort: 排序(Integer,默认0,数值越小越靠前) - note: 个人备注(String(255),可选) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "user" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 用户姓名 - realname = db.Column( - db.String(150), - nullable=False, - comment="用户姓名" - ) - - # 性别:1-男 2-女 3-保密 - gender = db.Column( - db.Integer, - default=1, - comment="性别:1-男 2-女 3-保密" - ) - - # 用户头像 - avatar = db.Column( - db.String(255), - nullable=False, - comment="用户头像" - ) - - # 手机号 - mobile = db.Column( - db.String(30), - nullable=False, - comment="手机号" - ) - - # 邮箱 - email = db.Column( - db.String(30), - nullable=False, - comment="邮箱" - ) - - # 部门ID - dept_id = db.Column( - db.Integer, - default=0, - comment="部门ID" - ) - - # 职级ID - level_id = db.Column( - db.Integer, - default=0, - comment="职级ID" - ) - - # 岗位ID - position_id = db.Column( - db.Integer, - default=0, - comment="岗位ID" - ) - - # 省份编码 - province_code = db.Column( - db.String(30), - nullable=False, - comment="省份编码" - ) - - # 城市编码 - city_code = db.Column( - db.String(30), - nullable=False, - comment="城市编码" - ) - - # 县区编码 - district_code = db.Column( - db.String(30), - nullable=False, - comment="县区编码" - ) - - # 街道编码 - street_code = db.Column( - db.String(30), - nullable=False, - comment="街道编码" - ) - - # 省市区信息 - city_info = db.Column( - db.String(255), - nullable=True, - comment="省市区信息" - ) - - # 详细地址 - address = db.Column( - db.String(255), - nullable=False, - comment="详细地址" - ) - - # 用户名 - username = db.Column( - db.String(30), - nullable=True, - comment="用户名" - ) - - # 密码 - password = db.Column( - db.String(255), - nullable=True, - comment="密码" - ) - - # 加密盐 - salt = db.Column( - db.String(30), - nullable=True, - comment="加密盐" - ) - - # 个人简介 - intro = db.Column( - db.String(255), - nullable=True, - comment="个人简介" - ) - - # 状态:1-正常 2-禁用 - status = db.Column( - db.Integer, - default=1, - comment="状态:1-正常 2-禁用" - ) - - # 排序 - sort = db.Column( - db.Integer, - default=0, - comment="排序" - ) - - # 个人备注 - note = db.Column( - db.String(255), - nullable=True, - comment="个人备注" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "用户{id}" 的字符串 - """ - return "用户{}".format(self.id) +from src.modules.system.user.models import * # noqa: F401,F403 diff --git a/application/models/user_role.py b/application/models/user_role.py index ffaf9b3..9b17cb4 100644 --- a/application/models/user_role.py +++ b/application/models/user_role.py @@ -1,108 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -用户角色关联模型模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供用户与角色的关联关系数据模型定义,用于实现用户角色分配。 +模型已迁移至 src.modules.association.user_role.models。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from application.models.base_db import BaseDB -from application.models.base_model import BaseModel -from config import DB_PREFIX -from extensions import db - - -# ============================================================ -# 用户角色关联模型 -# ============================================================ - -class UserRole(BaseModel, BaseDB): - """ - 用户角色关联模型 - - 用于存储用户与角色的关联关系,实现用户的角色分配。 - 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 - - Attributes: - id: 主键ID(继承自 BaseModel) - user_id: 用户ID(Integer,默认0) - role_id: 角色ID(Integer,默认0) - """ - - # ============================================================ - # 表配置 - # ============================================================ - - # 设置表名 - __tablename__ = DB_PREFIX + "user_role" - - # ============================================================ - # 字段定义 - # ============================================================ - - # 用户ID - user_id = db.Column( - db.Integer, - default=0, - comment="用户ID" - ) - - # 角色ID - role_id = db.Column( - db.Integer, - default=0, - comment="角色ID" - ) - - # ============================================================ - # 魔法方法 - # ============================================================ - - def __str__(self): - """ - 返回模型的字符串表示 - - Returns: - str: 格式为 "用户角色表{user_id}" 的字符串 - """ - return "用户角色表{}".format(self.user_id) +from src.modules.association.user_role.models import * # noqa: F401,F403 diff --git a/src/models_registry.py b/src/models_registry.py index 05c921c..4faa7df 100644 --- a/src/models_registry.py +++ b/src/models_registry.py @@ -4,22 +4,24 @@ 统一在此导入全部数据库模型,确保 Flask-Migrate 能全量识别表结构 (migrations/env.py 依赖 db.metadata 收集所有表)。 - -P2 阶段:模型仍位于 application/models/,经其 __init__ 全量导入。 -P3 阶段:随模块逐个迁入 src/modules/,此处逐行改为 - from modules...models import * 并移除对应旧行。 -P7 阶段:application/ 删除后,仅保留 src.modules 导入。 """ - -# ============================================================ -# P2:模型仍位于 application/models/(经其 __init__ 全量导入) -# ============================================================ -import application.models # noqa: F401 (P3 起逐步替换为 src.modules 导入) - -# ============================================================ -# P3 起按此格式逐模块替换: -# from modules.system.user.models import * # noqa: F401,F403 -# from modules.system.role.models import * # noqa: F401,F403 -# from modules.system.menu.models import * # noqa: F401,F403 -# ... -# ============================================================ +# 全量导入(P3a 起:模型位于 src/modules/ 各模块 models.py) +from src.modules.association.role_menu.models import * # noqa: F401,F403 (role_menu) +from src.modules.association.user_role.models import * # noqa: F401,F403 (user_role) +from src.modules.city.models import * # noqa: F401,F403 (city) +from src.modules.cms.article.models import * # noqa: F401,F403 (article) +from src.modules.cms.category.models import * # noqa: F401,F403 (category) +from src.modules.cms.link.models import * # noqa: F401,F403 (link) +from src.modules.file_template.models import * # noqa: F401,F403 (file_template) +from src.modules.job.models import * # noqa: F401,F403 (job) +from src.modules.notice.models import * # noqa: F401,F403 (notice) +from src.modules.param.models import * # noqa: F401,F403 (param) +from src.modules.system.dept.models import * # noqa: F401,F403 (dept) +from src.modules.system.level.models import * # noqa: F401,F403 (level) +from src.modules.system.menu.models import * # noqa: F401,F403 (menu) +from src.modules.system.position.models import * # noqa: F401,F403 (position) +from src.modules.system.role.models import * # noqa: F401,F403 (role) +from src.modules.system.user.models import * # noqa: F401,F403 (user) +from src.modules.dictionary.models import * # noqa: F401,F403 (dict+dict_item) +from src.modules.configuration.models import * # noqa: F401,F403 (config+config_item) +from src.modules.log.models import * # noqa: F401,F403 (login_log+operation_log) diff --git a/src/modules/association/__init__.py b/src/modules/association/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/association/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/association/role_menu/__init__.py b/src/modules/association/role_menu/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/association/role_menu/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/association/role_menu/models.py b/src/modules/association/role_menu/models.py new file mode 100644 index 0000000..b198733 --- /dev/null +++ b/src/modules/association/role_menu/models.py @@ -0,0 +1,108 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +角色菜单关联模型模块 +============================================================= + +提供角色与菜单的关联关系数据模型定义,用于实现角色权限分配。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db + + +# ============================================================ +# 角色菜单关联模型 +# ============================================================ + +class RoleMenu(BaseModel, BaseDB): + """ + 角色菜单关联模型 + + 用于存储角色与菜单的关联关系,实现角色的权限分配。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + role_id: 角色ID(Integer,默认0) + menu_id: 菜单ID(Integer,默认0) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "role_menu" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 角色ID + role_id = db.Column( + db.Integer, + default=0, + comment="角色ID" + ) + + # 菜单ID + menu_id = db.Column( + db.Integer, + default=0, + comment="菜单ID" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "角色菜单表{role_id}" 的字符串 + """ + return "角色菜单表{}".format(self.role_id) diff --git a/src/modules/association/user_role/__init__.py b/src/modules/association/user_role/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/association/user_role/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/association/user_role/models.py b/src/modules/association/user_role/models.py new file mode 100644 index 0000000..ce0ad3f --- /dev/null +++ b/src/modules/association/user_role/models.py @@ -0,0 +1,108 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +用户角色关联模型模块 +============================================================= + +提供用户与角色的关联关系数据模型定义,用于实现用户角色分配。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db + + +# ============================================================ +# 用户角色关联模型 +# ============================================================ + +class UserRole(BaseModel, BaseDB): + """ + 用户角色关联模型 + + 用于存储用户与角色的关联关系,实现用户的角色分配。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + user_id: 用户ID(Integer,默认0) + role_id: 角色ID(Integer,默认0) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "user_role" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 用户ID + user_id = db.Column( + db.Integer, + default=0, + comment="用户ID" + ) + + # 角色ID + role_id = db.Column( + db.Integer, + default=0, + comment="角色ID" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "用户角色表{user_id}" 的字符串 + """ + return "用户角色表{}".format(self.user_id) diff --git a/src/modules/city/__init__.py b/src/modules/city/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/city/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/city/models.py b/src/modules/city/models.py new file mode 100644 index 0000000..2d7b773 --- /dev/null +++ b/src/modules/city/models.py @@ -0,0 +1,189 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +城市模型模块 +============================================================= + +提供城市区域的数据模型定义,支持省、市、县区、街道四级区域结构。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 城市模型 +# ============================================================ + +class City(BaseModel, BaseDB): + """ + 城市区域模型 + + 用于存储行政区划数据,支持省、市、县区、街道四级区域结构。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + city_code: 城市区号(String(6),必填) + area_code: 行政编码(String(20),必填) + parent_code: 上级行政编码(String(20),必填) + zip_code: 邮政编码(String(6),必填) + level: 城市级别(Integer,1-省份,2-城市,3-县区,4-街道) + pid: 上级城市ID(Integer,默认0) + name: 城市名称(String(150),必填) + short_name: 城市简称(String(150),必填) + full_name: 城市全称(String(150),可选) + pinyin: 城市拼音(String(150),可选) + lng: 城市经度(String(150),可选) + lat: 城市纬度(String(150),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "city" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 城市区号 + city_code = db.Column( + db.String(6), + nullable=False, + comment="城市区号" + ) + + # 行政编码 + area_code = db.Column( + db.String(20), + nullable=False, + comment="行政编码" + ) + + # 上级行政编码 + parent_code = db.Column( + db.String(20), + nullable=False, + comment="上级行政编码" + ) + + # 邮政编码 + zip_code = db.Column( + db.String(6), + nullable=False, + comment="邮政编码" + ) + + # 城市级别:1-省份 2-城市 3-县区 4-街道 + level = db.Column( + db.Integer, + default=0, + comment="城市级别:1-省份 2-城市 3-县区 4-街道" + ) + + # 城市名称 + name = db.Column( + db.String(150), + nullable=False, + comment="城市名称" + ) + + # 城市简称 + short_name = db.Column( + db.String(150), + nullable=False, + comment="城市简称" + ) + + # 上级城市ID + pid = db.Column( + db.Integer, + default=0, + comment="上级城市ID" + ) + + # 城市全称 + full_name = db.Column( + db.String(150), + nullable=True, + comment="城市全称" + ) + + # 城市拼音 + pinyin = db.Column( + db.String(150), + nullable=True, + comment="城市拼音" + ) + + # 城市经度 + lng = db.Column( + db.String(150), + nullable=True, + comment="城市经度" + ) + + # 城市纬度 + lat = db.Column( + db.String(150), + nullable=True, + comment="城市纬度" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "城市{id}" 的字符串 + """ + return '城市{}'.format(self.id) diff --git a/src/modules/cms/__init__.py b/src/modules/cms/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/cms/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/cms/article/__init__.py b/src/modules/cms/article/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/cms/article/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/cms/article/models.py b/src/modules/cms/article/models.py new file mode 100644 index 0000000..e956094 --- /dev/null +++ b/src/modules/cms/article/models.py @@ -0,0 +1,186 @@ +""" +文章模型模块 +============================================================= + +提供文章管理的数据模型定义,用于管理文章内容。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 文章模型 +# ============================================================ + +class Article(BaseModel, BaseDB): + """ + 文章模型 + + 用于存储文章信息,包括:分类、标题、封面、图集、导读、内容、作者、状态等。 + + Attributes: + id: 主键ID(继承自 BaseModel) + category_id: 分类ID(Integer,可选) + title: 文章标题(String(150),可选) + cover: 文章封面(String(255),可选) + images: 文章图集(Text,可选,JSON格式存储多张图片) + intro: 文章导读(String(255),可选) + content: 文章内容(Text,可选,富文本内容) + author: 文章作者(String(100),可选) + status: 文章状态(Integer,0-正常,1-下架,默认0) + click: 文章点击率(Integer,默认0) + sort: 文章排序(Integer,默认0) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "article" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 分类ID + category_id = db.Column( + db.Integer, + nullable=True, + comment="分类ID" + ) + + # 文章标题 + title = db.Column( + db.String(150), + nullable=True, + comment="文章标题" + ) + + # 文章封面 + cover = db.Column( + db.String(255), + nullable=True, + comment="文章封面" + ) + + # 文章图集(JSON格式存储多张图片) + images = db.Column( + db.Text, + nullable=True, + comment="文章图集" + ) + + # 文章导读 + intro = db.Column( + db.String(255), + nullable=True, + comment="文章导读" + ) + + # 文章内容 + content = db.Column( + db.Text, + nullable=True, + comment="文章内容" + ) + + # 文章作者 + author = db.Column( + db.String(100), + nullable=True, + comment="文章作者" + ) + + # 文章状态:0-正常 1-下架 + status = db.Column( + db.Integer, + nullable=False, + default=0, + comment="文章状态:0-正常 1-下架" + ) + + # 文章点击率 + click = db.Column( + db.Integer, + nullable=False, + default=0, + comment="文章点击率" + ) + + # 文章排序 + sort = db.Column( + db.Integer, + nullable=False, + default=0, + comment="文章排序" + ) + + # ============================================================ + # 常量定义 + # ============================================================ + + class Status: + """文章状态常量""" + NORMAL = 0 # 正常 + OFFLINE = 1 # 下架 + + # ============================================================ + # 业务方法 + # ============================================================ + + def increment_click(self): + """ + 增加点击率 + + 每次调用点击量加1 + """ + self.click = (self.click or 0) + 1 + self.save() + + def get_images_list(self): + """ + 获取图集列表 + + Returns: + list: 图集URL列表 + """ + if not self.images: + return [] + return [img.strip() for img in self.images.split(',') if img.strip()] + + def get_cover_url(self): + """ + 获取封面URL + + Returns: + str: 封面URL + """ + from src.common.utils.rich_text import get_file_url + return get_file_url(self.cover) if self.cover else "" + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __repr__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "文章:{title}" 的字符串 + """ + return '文章:{}'.format(self.title or '未命名') + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "文章:{title}" 的字符串 + """ + return self.__repr__() diff --git a/src/modules/cms/category/__init__.py b/src/modules/cms/category/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/cms/category/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/cms/category/models.py b/src/modules/cms/category/models.py new file mode 100644 index 0000000..73251cd --- /dev/null +++ b/src/modules/cms/category/models.py @@ -0,0 +1,122 @@ +""" +分类模型模块 +============================================================= + +提供文章分类管理的数据模型定义,支持多级分类结构。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 分类模型 +# ============================================================ + +class Category(BaseModel, BaseDB): + """ + 分类模型 + + 用于存储文章分类数据,支持多级分类结构(无限级)。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + category_name: 分类名称(String(100),必填) + category_code: 分类编码(String(100),可选) + parent_id: 上级分类ID(Integer,默认0,0表示顶级分类) + sort: 分类排序(Integer,默认0,数值越小越靠前) + note: 分类备注(String(100),可选) + type: 分类类型(Integer,必填,1-公司,2-子公司,3-部门,4-小组) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "category" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 分类名称 + category_name = db.Column( + db.String(100), + nullable=False, + comment="分类名称" + ) + + # 分类编码 + category_code = db.Column( + db.String(100), + nullable=True, + comment="分类编码" + ) + + # 上级分类ID + parent_id = db.Column( + db.Integer, + nullable=False, + default=0, + comment="上级ID" + ) + + # 分类排序 + sort = db.Column( + db.Integer, + nullable=False, + default=0, + comment="排序" + ) + + # 分类备注 + note = db.Column( + db.String(100), + nullable=True, + comment="分类备注" + ) + + # 分类类型 + type = db.Column( + db.Integer, + nullable=False, + comment="分类类型:1-公司 2-子公司 3-部门 4-小组" + ) + + # ============================================================ + # 常量定义 + # ============================================================ + + class Type: + """分类类型常量""" + COMPANY = 1 # 公司 + SUBSIDIARY = 2 # 子公司 + DEPARTMENT = 3 # 部门 + GROUP = 4 # 小组 + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __repr__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "分类:{category_name}" 的字符串 + """ + return '分类:{}'.format(self.category_name) + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "分类:{category_name}" 的字符串 + """ + return self.__repr__() diff --git a/src/modules/cms/link/__init__.py b/src/modules/cms/link/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/cms/link/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/cms/link/models.py b/src/modules/cms/link/models.py new file mode 100644 index 0000000..7356cf2 --- /dev/null +++ b/src/modules/cms/link/models.py @@ -0,0 +1,157 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +友链模型模块 +============================================================= + +提供友情链接的数据模型定义,用于管理网站友情链接和合作伙伴。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 友链模型 +# ============================================================ + +class Link(BaseModel, BaseDB): + """ + 友链模型 + + 用于存储友情链接和合作伙伴信息,支持多种投放平台和链接形式。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 友链名称(String(255),必填) + type: 友链类型(Integer,1-友情链接,2-合作伙伴,默认1) + url: 友链URL(String(255),可选) + form: 友链形式(Integer,1-文字链接,2-图片链接,默认1) + image: 友链图片(String(255),可选) + status: 友链状态(Integer,1-正常,2-停用,默认1) + sort: 友链排序(Integer,默认0,数值越小越靠前) + note: 友链备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "link" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 友链名称 + name = db.Column( + db.String(255), + nullable=False, + comment="友链名称" + ) + + # 友链类型:1-友情链接 2-合作伙伴 + type = db.Column( + db.Integer, + default=1, + comment="友链类型:1-友情链接 2-合作伙伴" + ) + + # 友链URL + url = db.Column( + db.String(255), + nullable=True, + comment="友链URL" + ) + + # 友链形式:1-文字链接 2-图片链接 + form = db.Column( + db.Integer, + default=1, + comment="友链形式:1-文字链接 2-图片链接" + ) + + # 友链图片 + image = db.Column( + db.String(255), + nullable=True, + comment="友链图片" + ) + + # 友链状态:1-正常 2-停用 + status = db.Column( + db.Integer, + default=1, + comment="友链状态:1-正常 2-停用" + ) + + # 友链顺序 + sort = db.Column( + db.Integer, + default=0, + comment="友链顺序" + ) + + # 友链备注 + note = db.Column( + db.String(255), + nullable=True, + comment="友链备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "友链{name}" 的字符串 + """ + return "友链{}".format(self.name) diff --git a/src/modules/configuration/__init__.py b/src/modules/configuration/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/configuration/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/configuration/models.py b/src/modules/configuration/models.py new file mode 100644 index 0000000..0f2cb18 --- /dev/null +++ b/src/modules/configuration/models.py @@ -0,0 +1,260 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +配置模型模块 +============================================================= + +提供系统配置分组的数据模型定义,用于管理的分类。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 配置模型 +# ============================================================ + +class Config(BaseModel, BaseDB): + """ + 配置分组模型 + + 用于存储系统配置分组信息,如:基础配置、邮件配置等。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 配置名称(String(100),必填) + code: 配置编码(String(100),必填) + sort: 配置排序(Integer,默认0,数值越小越靠前) + note: 配置备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "config" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 配置名称 + name = db.Column( + db.String(100), + nullable=False, + comment="配置名称" + ) + + # 配置编码 + code = db.Column( + db.String(100), + nullable=False, + comment="配置编码" + ) + + # 配置排序 + sort = db.Column( + db.Integer, + default=0, + comment="配置排序" + ) + + # 配置备注 + note = db.Column( + db.String(255), + nullable=True, + comment="配置备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "配置{id}" 的字符串 + """ + return "配置{}".format(self.id) + + + +""" +模型模块 +============================================================= + +提供系统的数据模型定义,用于管理具体的键值对。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 模型 +# ============================================================ + +class ConfigItem(BaseModel, BaseDB): + """ + 模型 + + 用于存储系统配置的具体项,属于某个配置。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + config_id: 配置ID(Integer,默认0,关联配置ID) + config_code: 配置编码(String(100),默认0,关联配置编码) + name: 名称(String(100),必填) + code: 编码(String(100),必填,唯一标识) + value: 值(String(1000),可选) + options: 配置选项(Text,可选,用于下拉选择等场景) + type: 配置类型(String(100),必填) + status: 配置状态(Integer,1-正常,2-停用,默认1) + sort: 排序(Integer,默认0,数值越小越靠前) + note: 备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "config_item" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 配置ID + config_id = db.Column( + db.Integer, + default=0, + comment="配置ID" + ) + + # 配置编码 + config_code = db.Column( + db.String(100), + nullable=False, + comment="配置编码" + ) + + # 名称 + name = db.Column( + db.String(100), + nullable=False, + comment="名称" + ) + + # 编码 + code = db.Column( + db.String(100), + nullable=False, + comment="编码" + ) + + # 值 + value = db.Column( + db.String(1000), + nullable=True, + comment="值" + ) + + # 配置选项 + options = db.Column( + db.Text, + nullable=True, + comment="配置选项" + ) + + # 配置类型 + type = db.Column( + db.String(100), + nullable=False, + comment="配置类型" + ) + + # 配置状态:1-正常 2-停用 + status = db.Column( + db.Integer, + default=1, + comment="配置状态:1-正常 2-停用" + ) + + # 排序 + sort = db.Column( + db.Integer, + default=0, + comment="顺序" + ) + + # 备注 + note = db.Column( + db.String(255), + nullable=True, + comment="备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "{id}" 的字符串 + """ + return "{}".format(self.id) diff --git a/src/modules/dictionary/__init__.py b/src/modules/dictionary/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/dictionary/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/dictionary/models.py b/src/modules/dictionary/models.py new file mode 100644 index 0000000..1a9fa0e --- /dev/null +++ b/src/modules/dictionary/models.py @@ -0,0 +1,227 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +字典模型模块 +============================================================= + +提供数据字典分组的数据模型定义,用于管理字典项的分类。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 字典模型 +# ============================================================ + +class Dict(BaseModel, BaseDB): + """ + 字典分组模型 + + 用于存储数据字典分组信息,如:性别、状态等。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 字典名称(String(150),必填) + code: 字典编码(String(150),必填,唯一标识) + sort: 字典排序(Integer,默认0,数值越小越靠前) + note: 字典备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "dict" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 字典名称 + name = db.Column( + db.String(150), + nullable=False, + comment="字典名称" + ) + + # 字典编码 + code = db.Column( + db.String(150), + nullable=False, + comment="字典编码" + ) + + # 字典排序 + sort = db.Column( + db.Integer, + default=0, + comment="字典排序" + ) + + # 字典备注 + note = db.Column( + db.String(255), + nullable=True, + comment="字典备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "字典{id}" 的字符串 + """ + return "字典{}".format(self.id) + + + +""" +字典项模型模块 +============================================================= + +提供数据字典项的数据模型定义,用于管理字典的具体选项。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 字典项模型 +# ============================================================ + +class DictItem(BaseModel, BaseDB): + """ + 字典项模型 + + 用于存储数据字典的具体项,属于某个字典分组。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 字典项名称(String(100),必填) + value: 字典项值(String(100),必填) + dict_id: 字典ID(Integer,默认0,关联字典分组) + sort: 字典项排序(Integer,默认0,数值越小越靠前) + note: 字典项备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "dict_item" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 字典ID + dict_id = db.Column( + db.Integer, + default=0, + comment="字典ID" + ) + + # 字典编码 + dict_code = db.Column( + db.String(100), + nullable=False, + comment="字典编码" + ) + + # 字典项名称 + name = db.Column( + db.String(100), + nullable=False, + comment="字典项名称" + ) + + # 字典项值 + value = db.Column( + db.String(100), + nullable=False, + comment="字典项值" + ) + + # 字典项排序 + sort = db.Column( + db.Integer, + default=0, + comment="字典项顺序" + ) + + # 字典项备注 + note = db.Column( + db.String(255), + nullable=True, + comment="字典项备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "字典项{id}" 的字符串 + """ + return "字典项{}".format(self.id) diff --git a/src/modules/file_template/__init__.py b/src/modules/file_template/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/file_template/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/file_template/models.py b/src/modules/file_template/models.py new file mode 100644 index 0000000..a29af4c --- /dev/null +++ b/src/modules/file_template/models.py @@ -0,0 +1,109 @@ +""" +文件模板模型模块 +============================================================= + +提供文件模板管理的数据模型定义,用于管理文件模板信息。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 文件模板模型 +# ============================================================ + +class FileTemplate(BaseModel, BaseDB): + """ + 文件模板模型 + + 用于存储文件模板信息,如:导入导出模板、报表模板等。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 模板名称(String(100),可选) + code: 模板编码(String(50),可选,唯一标识) + file_name: 文件名称(String(255),可选) + file_path: 文件路径(String(255),可选) + note: 文件模板备注(String(255),可选) + sort: 文件模板顺序(Integer,必填,默认0) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "file_template" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 模板名称 + name = db.Column( + db.String(100), + nullable=True, + comment="模板名称" + ) + + # 模板编码 + code = db.Column( + db.String(50), + nullable=True, + comment="模板编码" + ) + + # 文件名称 + file_name = db.Column( + db.String(255), + nullable=True, + comment="文件名称" + ) + + # 文件路径 + file_path = db.Column( + db.String(255), + nullable=True, + comment="文件路径" + ) + + # 文件模板备注 + note = db.Column( + db.String(255), + nullable=True, + comment="文件模板备注" + ) + + # 文件模板顺序 + sort = db.Column( + db.Integer, + nullable=False, + default=0, + comment="文件模板顺序" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __repr__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "文件模板:{name}" 的字符串 + """ + return '文件模板:{}'.format(self.name or self.code) + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "文件模板:{name}" 的字符串 + """ + return self.__repr__() diff --git a/src/modules/job/__init__.py b/src/modules/job/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/job/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/job/models.py b/src/modules/job/models.py new file mode 100644 index 0000000..fb8a7be --- /dev/null +++ b/src/modules/job/models.py @@ -0,0 +1,152 @@ +""" +定时任务模型模块 +============================================================= + +提供定时任务管理的数据模型定义。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 定时任务模型 +# ============================================================ + +class Job(BaseModel, BaseDB): + """ + 定时任务模型 + + 用于存储定时任务信息。 + + Attributes: + id: 主键ID(继承自 BaseModel) + job_name: 任务名称(String(255),必填) + job_alias: 任务别名(String(255),可选) + job_group: 任务分组(String(255),可选) + job_trigger: 任务触发器(String(255),可选) + status: 任务状态(Integer,0-未发布 1-运行中 2-暂停 3-删除) + cron_expression: Cron表达式(String(255),可选) + execute_policy: 执行策略(Integer,1-立即执行 2-执行一次 3-放弃执行) + is_sync: 是否同步任务(Integer,0-否 1-是) + url: 任务URL(String(255),可选) + note: 任务备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + __tablename__ = DB_PREFIX + "job" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 任务名称 + job_name = db.Column( + db.String(255), + nullable=False, + comment="任务名称" + ) + + # 任务别名 + job_alias = db.Column( + db.String(255), + nullable=True, + comment="任务别名" + ) + + # 任务分组 + job_group = db.Column( + db.String(255), + nullable=True, + comment="任务分组" + ) + + # 任务触发器 + job_trigger = db.Column( + db.String(255), + nullable=True, + comment="任务触发器" + ) + + # 任务状态:0-未发布 1-运行中 2-暂停 3-删除 + status = db.Column( + db.Integer, + nullable=False, + default=0, + comment="任务状态:0-未发布 1-运行中 2-暂停 3-删除" + ) + + # Cron表达式 + cron_expression = db.Column( + db.String(255), + nullable=True, + comment="Cron表达式" + ) + + # 执行策略:1-立即执行 2-执行一次 3-放弃执行 + execute_policy = db.Column( + db.Integer, + nullable=False, + default=1, + comment="执行策略:1-立即执行 2-执行一次 3-放弃执行" + ) + + # 是否同步任务:0-否 1-是 + is_sync = db.Column( + db.Integer, + nullable=False, + default=0, + comment="是否同步任务:0-否 1-是" + ) + + # 任务URL + url = db.Column( + db.String(255), + nullable=True, + comment="任务URL" + ) + + # 任务备注 + note = db.Column( + db.String(255), + nullable=True, + comment="任务备注" + ) + + # ============================================================ + # 常量定义 + # ============================================================ + + class Status: + """任务状态常量""" + UNPUBLISHED = 0 # 未发布 + RUNNING = 1 # 运行中 + PAUSED = 2 # 暂停 + DELETED = 3 # 删除 + + class ExecutePolicy: + """执行策略常量""" + EXECUTE_NOW = 1 # 立即执行 + EXECUTE_ONCE = 2 # 执行一次 + ABANDON = 3 # 放弃执行 + + class IsSync: + """是否同步任务常量""" + ASYNC = 0 # 异步 + SYNC = 1 # 同步 + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __repr__(self): + return '定时任务:{}'.format(self.job_name) + + def __str__(self): + return self.__repr__() diff --git a/src/modules/notice/__init__.py b/src/modules/notice/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/notice/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/notice/models.py b/src/modules/notice/models.py new file mode 100644 index 0000000..f3025a7 --- /dev/null +++ b/src/modules/notice/models.py @@ -0,0 +1,141 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +通知公告模型模块 +============================================================= + +提供通知公告的数据模型定义,用于管理系统通知和公告信息。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 通知公告模型 +# ============================================================ + +class Notice(BaseModel, BaseDB): + """ + 通知公告模型 + + 用于存储系统通知和公告信息,支持置顶、来源分类等功能。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + title: 通知标题(String(150),必填) + cover: 通知封面(String(150),必填) + type: 通知类型(Integer,默认1) + status: 通知状态(Integer,1-正常,2-停用,默认1) + click_num: 点击率(Integer,默认0) + content: 通知公告内容(Text,可选,支持富文本) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "notice" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 通知标题 + title = db.Column( + db.String(150), + nullable=False, + comment="通知标题" + ) + + # 通知封面 + cover = db.Column( + db.String(255), + nullable=False, + comment="通知封面" + ) + + # 通知类型:1-通知 2-公告 + type = db.Column( + db.Integer, + default=1, + comment="通知类型:1-通知 2-公告" + ) + + # 通知状态:1-正常 2-停用 + status = db.Column( + db.Integer, + default=1, + comment="通知状态:1-正常 2-停用" + ) + + # 点击率 + click_num = db.Column( + db.Integer, + default=0, + comment="点击率" + ) + + # 通知公告内容 + content = db.Column( + db.Text, + nullable=True, + comment="通知内容" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "通知公告{title}" 的字符串 + """ + return "通知公告{}".format(self.title) diff --git a/src/modules/param/__init__.py b/src/modules/param/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/param/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/param/models.py b/src/modules/param/models.py new file mode 100644 index 0000000..583bce0 --- /dev/null +++ b/src/modules/param/models.py @@ -0,0 +1,117 @@ +""" +参数模型模块 +============================================================= + +提供系统参数管理的数据模型定义,用于管理系统参数和业务参数。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 参数模型 +# ============================================================ + +class Param(BaseModel, BaseDB): + """ + 参数模型 + + 用于存储系统参数和业务参数信息,如:系统配置参数、业务规则参数等。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 参数名称(String(100),必填) + code: 参数编码(String(100),必填,唯一标识) + value: 参数值(String(255),必填) + type: 参数类型(Integer,0-系统 1-业务,必填) + status: 参数状态(Integer,1-正常 2-禁用,必填) + sort: 参数排序(Integer,默认0,数值越小越靠前) + note: 参数备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "param" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 参数名称 + name = db.Column( + db.String(100), + nullable=False, + comment="参数名称" + ) + + # 参数编码 + code = db.Column( + db.String(100), + nullable=False, + comment="参数编码" + ) + + # 参数值 + value = db.Column( + db.String(255), + nullable=False, + comment="参数值" + ) + + # 参数类型:0-系统 1-业务 + type = db.Column( + db.Integer, + nullable=False, + comment="参数类型:0-系统 1-业务" + ) + + # 参数状态:1-正常 2-禁用 + status = db.Column( + db.Integer, + nullable=False, + comment="参数状态:1-正常 2-禁用" + ) + + # 参数排序 + sort = db.Column( + db.Integer, + nullable=False, + comment="参数排序" + ) + + # 参数备注 + note = db.Column( + db.String(255), + nullable=True, + comment="参数备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __repr__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "参数:{name}" 的字符串 + """ + return '参数:{}'.format(self.name) + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "参数:{name}" 的字符串 + """ + return self.__repr__() diff --git a/src/modules/system/__init__.py b/src/modules/system/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/system/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/system/dept/__init__.py b/src/modules/system/dept/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/system/dept/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/system/dept/models.py b/src/modules/system/dept/models.py new file mode 100644 index 0000000..c8e83a0 --- /dev/null +++ b/src/modules/system/dept/models.py @@ -0,0 +1,133 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +部门模型模块 +============================================================= + +提供部门组织架构的数据模型定义,支持公司、子公司、部门、小组四级结构。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 部门模型 +# ============================================================ + +class Dept(BaseModel, BaseDB): + """ + 部门模型 + + 用于存储组织架构数据,支持公司、子公司、部门、小组四级结构。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 部门名称(String(100),必填) + type: 部门类型(Integer,1-公司,2-子公司,3-部门,4-小组,默认0) + parent_id: 上级部门ID(Integer,默认0,0表示顶级部门) + sort: 部门排序(Integer,默认0,数值越小越靠前) + note: 部门备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "dept" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 部门名称 + name = db.Column( + db.String(100), + nullable=False, + comment="部门名称" + ) + + # 部门类型:1-公司 2-子公司 3-部门 4-小组 + type = db.Column( + db.Integer, + default=0, + comment="部门类型:1-公司 2-子公司 3-部门 4-小组" + ) + + # 上级部门ID + parent_id = db.Column( + db.Integer, + default=0, + comment="上级部门ID" + ) + + # 部门排序 + sort = db.Column( + db.Integer, + default=0, + comment="部门排序" + ) + + # 备注 + note = db.Column( + db.String(255), + nullable=True, + comment="备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "部门{name}" 的字符串 + """ + return '部门{}'.format(self.name) diff --git a/src/modules/system/level/__init__.py b/src/modules/system/level/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/system/level/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/system/level/models.py b/src/modules/system/level/models.py new file mode 100644 index 0000000..9e21e7a --- /dev/null +++ b/src/modules/system/level/models.py @@ -0,0 +1,117 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +职级模型模块 +============================================================= + +提供职级管理的数据模型定义,用于定义员工职级体系。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 职级模型 +# ============================================================ + +class Level(BaseModel, BaseDB): + """ + 职级模型 + + 用于存储员工职级信息,如:初级、中级、高级等。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 职级名称(String(255),必填) + status: 职级状态(Integer,1-在用,2-停用,默认0) + sort: 职级排序(Integer,默认0,数值越小越靠前) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "level" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 职级名称 + name = db.Column( + db.String(255), + nullable=False, + comment="职级名称" + ) + + # 职级状态:1-在用 2-停用 + status = db.Column( + db.Integer, + default=0, + comment="职级状态:1-在用 2-停用" + ) + + # 职级排序 + sort = db.Column( + db.Integer, + default=0, + comment="职级排序" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __repr__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "职级:{name}" 的字符串 + """ + return '职级:{}'.format(self.name) diff --git a/src/modules/system/menu/__init__.py b/src/modules/system/menu/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/system/menu/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/system/menu/models.py b/src/modules/system/menu/models.py new file mode 100644 index 0000000..071f0f7 --- /dev/null +++ b/src/modules/system/menu/models.py @@ -0,0 +1,188 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +菜单模型模块 +============================================================= + +提供系统菜单的数据模型定义,用于管理后台导航菜单和权限节点。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db + + +# ============================================================ +# 菜单模型 +# ============================================================ + +class Menu(BaseModel, BaseDB): + """ + 菜单模型 + + 用于存储系统导航菜单和权限节点信息,支持树形结构。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 菜单名称(String(100),必填) + icon: 菜单图标(String(50),可选) + parent_id: 上级ID(Integer,默认0,0表示顶级菜单) + path: 菜单路径(String(255),可选,前端路由地址) + component: 菜单组件(String(255),可选,前端组件路径) + permission: 权限节点(String(100),可选,权限标识符) + target: 打开方式(Integer,0-内部打开,1-外部打开,默认0) + type: 菜单类型(Integer,0-菜单,1-节点,默认0) + status: 菜单状态(Integer,0-正常,1-禁用,默认0) + hide: 是否可见(Integer,0-可见,1-不可见,默认0) + sort: 菜单排序(Integer,默认0,数值越小越靠前) + note: 菜单备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "menu" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 菜单名称 + name = db.Column( + db.String(100), + nullable=False, + comment="菜单名称" + ) + + # 菜单图标 + icon = db.Column( + db.String(50), + nullable=True, + comment="菜单图标" + ) + + # 上级ID + parent_id = db.Column( + db.Integer, + default=0, + comment="上级ID" + ) + + # 菜单路径 + path = db.Column( + db.String(255), + nullable=True, + comment="菜单路径" + ) + + # 菜单组件 + component = db.Column( + db.String(255), + nullable=True, + comment="菜单组件" + ) + + # 权限节点 + permission = db.Column( + db.String(100), + nullable=True, + comment="权限节点" + ) + + # 打开方式:0-内部打开 1-外部打开 + target = db.Column( + db.Integer, + default=0, + comment="打开方式:0-内部打开 1-外部打开" + ) + + # 菜单类型:0-菜单 1-节点 + type = db.Column( + db.Integer, + default=0, + comment="菜单类型:0-菜单 1-节点" + ) + + # 状态选项 + status = db.Column( + db.Integer, + default=0, + comment="菜单状态:0-正常 1-禁用" + ) + + # 是否可见:0-可见 1-不可见 + hide = db.Column( + db.Integer, + default=0, + comment="是否可见:0-可见 1-不可见" + ) + + # 排序 + sort = db.Column( + db.Integer, + default=0, + comment="排序" + ) + + # 备注 + note = db.Column( + db.String(255), + nullable=True, + comment="备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "菜单{id}" 的字符串 + """ + return "菜单{}".format(self.id) diff --git a/src/modules/system/position/__init__.py b/src/modules/system/position/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/system/position/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/system/position/models.py b/src/modules/system/position/models.py new file mode 100644 index 0000000..eb9bfb1 --- /dev/null +++ b/src/modules/system/position/models.py @@ -0,0 +1,295 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称"本产品")拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +岗位模型模块 +============================================================= + +提供岗位管理的数据模型定义,用于定义员工岗位信息。 + +企业级特性: + 1. 使用枚举类管理状态常量,确保类型安全 + 2. 状态文本自动转换,便于前端展示 + 3. 便捷的查询方法,提高开发效率 + 4. 继承 BaseModel 和 BaseDB,复用通用功能 + 5. __init__ 由 BaseModel 统一管理,无需重复定义 + +模型说明: + 岗位用于标识用户的职位,如:技术总监、产品经理、开发工程师等。 + 通过 sort 字段控制显示顺序,数值越小越靠前。 +""" + +from enum import IntEnum +from typing import Optional, List + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.request import like_contains + + +# ============================================================ +# 岗位状态枚举 +# ============================================================ + +class PositionStatus(IntEnum): + """ + 岗位状态枚举 + + 使用 IntEnum 确保类型安全,避免魔法数字。 + 可直接用于数据库查询和比较。 + + Example: + # 查询启用状态的岗位 + Position.query.filter(Position.status == PositionStatus.ENABLED) + + # 创建岗位时设置状态 + position = Position(name='经理', status=PositionStatus.ENABLED) + + # 判断岗位是否启用 + if position.status == PositionStatus.ENABLED: + print("岗位已启用") + """ + DISABLED = 0 # 停用 + ENABLED = 1 # 启用 + + +# ============================================================ +# 岗位模型 +# ============================================================ + +class Position(BaseModel, BaseDB): + """ + 岗位模型 + + 用于存储员工岗位信息,如:技术总监、产品经理等。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 岗位名称(String(255),必填) + status: 岗位状态(使用 PositionStatus 枚举,默认停用) + sort: 岗位排序(Integer,默认0,数值越小越靠前) + + 便捷属性: + status_text: 获取状态文本("启用"/"停用") + is_enabled: 判断是否启用 + is_disabled: 判断是否停用 + + 自定义查询: + get_enabled(): 获取所有启用的岗位 + get_by_name(): 根据名称精确查询 + search_by_name(): 根据名称模糊搜索 + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 表名:使用配置前缀 + 模型名 + __tablename__ = DB_PREFIX + "position" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 岗位名称:必填字段,最长255字符 + name = db.Column( + db.String(255), + nullable=False, + comment="岗位名称" + ) + + # 岗位状态:使用枚举确保类型安全 + # 默认值为停用,创建后需手动启用 + status = db.Column( + db.Integer, + default=PositionStatus.DISABLED, + comment="岗位状态:0-停用 1-启用" + ) + + # 岗位排序:数值越小越靠前 + # 用于列表展示时的排序控制 + sort = db.Column( + db.Integer, + default=0, + comment="岗位排序" + ) + + # ============================================================ + # 注意:__init__ 方法在 BaseModel 中已实现,无需重复定义 + # BaseModel 已处理驼峰转换、字段过滤等逻辑 + # ============================================================ + + # ============================================================ + # 便捷属性 + # ============================================================ + + @property + def status_text(self) -> str: + """ + 获取岗位状态文本 + + 将数字状态转换为可读的中文文本。 + 用于前端展示或日志记录。 + + Returns: + str: "启用" 或 "停用" + """ + status_map = { + PositionStatus.DISABLED: '停用', + PositionStatus.ENABLED: '启用' + } + return status_map.get(self.status, '未知') + + @property + def is_enabled(self) -> bool: + """ + 判断岗位是否启用 + + Returns: + bool: 启用返回 True,否则返回 False + """ + return self.status == PositionStatus.ENABLED + + @property + def is_disabled(self) -> bool: + """ + 判断岗位是否停用 + + Returns: + bool: 停用返回 True,否则返回 False + """ + return self.status == PositionStatus.DISABLED + + # ============================================================ + # 自定义查询方法 + # ============================================================ + + @classmethod + def get_enabled(cls) -> List['Position']: + """ + 获取所有启用的岗位 + + 按排序值升序排列,适用于下拉选择框等场景。 + 只返回未删除且状态为启用的岗位。 + + Returns: + List[Position]: 启用的岗位列表 + + Example: + positions = Position.get_enabled() + for pos in positions: + print(pos.name, pos.status_text) + """ + return cls.query.filter( + cls.is_delete == 0, + cls.status == PositionStatus.ENABLED + ).order_by(cls.sort.asc()).all() + + @classmethod + def get_by_name(cls, name: Optional[str]) -> Optional['Position']: + """ + 根据岗位名称精确查询 + + 用于检查岗位名称是否已存在等场景。 + + Args: + name: 岗位名称 + + Returns: + Optional[Position]: 岗位对象,不存在或名称为空时返回 None + + Example: + position = Position.get_by_name('经理') + if position: + print("岗位已存在") + """ + if not name: + return None + + return cls.query.filter( + cls.name == name, + cls.is_delete == 0 + ).first() + + @classmethod + def search_by_name(cls, name: Optional[str]) -> List['Position']: + """ + 根据岗位名称模糊搜索 + + 支持名称关键字匹配,按排序值升序排列。 + 适用于搜索建议或筛选场景。 + + Args: + name: 岗位名称关键字 + + Returns: + List[Position]: 匹配的岗位列表 + + Example: + positions = Position.search_by_name('经理') + for pos in positions: + print(pos.name) + """ + if not name: + return [] + + return cls.query.filter( + cls.name.like(like_contains(name), escape='\\'), + cls.is_delete == 0 + ).order_by(cls.sort.asc()).all() + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __repr__(self) -> str: + """ + 返回模型的字符串表示 + + 用于调试和日志输出。 + + Returns: + str: 格式为 "岗位:{name}" + """ + return f'岗位:{self.name}' diff --git a/src/modules/system/role/__init__.py b/src/modules/system/role/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/system/role/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/system/role/models.py b/src/modules/system/role/models.py new file mode 100644 index 0000000..6c00c2a --- /dev/null +++ b/src/modules/system/role/models.py @@ -0,0 +1,125 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +角色模型模块 +============================================================= + +提供角色管理的数据模型定义,用于定义系统角色和权限分配。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 角色模型 +# ============================================================ + +class Role(BaseModel, BaseDB): + """ + 角色模型 + + 用于存储系统角色信息,角色是权限分配的基本单位。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + name: 角色名称(String(150),必填) + code: 角色编码(String(30),必填,唯一标识) + sort: 角色排序(Integer,默认0,数值越小越靠前) + note: 角色备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "role" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 角色名称 + name = db.Column( + db.String(150), + nullable=False, + comment="角色名称" + ) + + # 角色编码 + code = db.Column( + db.String(30), + nullable=False, + comment="角色编码" + ) + + # 角色排序 + sort = db.Column( + db.Integer, + default=0, + comment="角色排序" + ) + + # 角色备注 + note = db.Column( + db.String(255), + nullable=True, + comment="角色备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "角色{name}:" 的字符串 + """ + return '角色{}:'.format(self.name) diff --git a/src/modules/system/user/__init__.py b/src/modules/system/user/__init__.py new file mode 100644 index 0000000..56ff4f7 --- /dev/null +++ b/src/modules/system/user/__init__.py @@ -0,0 +1 @@ +"""模块包。""" diff --git a/src/modules/system/user/models.py b/src/modules/system/user/models.py new file mode 100644 index 0000000..6c42c5e --- /dev/null +++ b/src/modules/system/user/models.py @@ -0,0 +1,261 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +用户模型模块 +============================================================= + +提供用户管理的数据模型定义,用于存储系统用户基本信息。 +""" + +from src.common.base_db import BaseDB +from src.common.base_model import BaseModel +from config import DB_PREFIX +from src.core.database import db +from src.common.utils.case_converter import convert_camel_to_snake + + +# ============================================================ +# 用户模型 +# ============================================================ + +class User(BaseModel, BaseDB): + """ + 用户模型 + + 用于存储系统用户信息,包括基本信息、联系方式、地址等。 + 继承自 BaseModel(通用字段)和 BaseDB(数据库操作方法)。 + + Attributes: + id: 主键ID(继承自 BaseModel) + realname: 用户姓名(String(150),必填) + gender: 性别(Integer,1-男,2-女,3-保密,默认1) + avatar: 用户头像(String(255),必填) + mobile: 手机号(String(30),必填) + email: 邮箱(String(30),必填) + dept_id: 部门ID(Integer,默认0) + level_id: 职级ID(Integer,默认0) + position_id: 岗位ID(Integer,默认0) + province_code: 省份编码(String(30),必填) + city_code: 城市编码(String(30),必填) + district_code: 县区编码(String(30),必填) + street_code: 街道编码(String(30),必填) + city_info: 省市区信息(String(255),可选) + address: 详细地址(String(255),必填) + username: 用户名(String(30),可选,登录账号) + password: 密码(String(255),可选,加密存储) + salt: 加密盐(String(30),可选) + intro: 个人简介(String(255),可选) + status: 用户状态(Integer,1-正常,2-禁用,默认1) + sort: 排序(Integer,默认0,数值越小越靠前) + note: 个人备注(String(255),可选) + """ + + # ============================================================ + # 表配置 + # ============================================================ + + # 设置表名 + __tablename__ = DB_PREFIX + "user" + + # ============================================================ + # 字段定义 + # ============================================================ + + # 用户姓名 + realname = db.Column( + db.String(150), + nullable=False, + comment="用户姓名" + ) + + # 性别:1-男 2-女 3-保密 + gender = db.Column( + db.Integer, + default=1, + comment="性别:1-男 2-女 3-保密" + ) + + # 用户头像 + avatar = db.Column( + db.String(255), + nullable=False, + comment="用户头像" + ) + + # 手机号 + mobile = db.Column( + db.String(30), + nullable=False, + comment="手机号" + ) + + # 邮箱 + email = db.Column( + db.String(30), + nullable=False, + comment="邮箱" + ) + + # 部门ID + dept_id = db.Column( + db.Integer, + default=0, + comment="部门ID" + ) + + # 职级ID + level_id = db.Column( + db.Integer, + default=0, + comment="职级ID" + ) + + # 岗位ID + position_id = db.Column( + db.Integer, + default=0, + comment="岗位ID" + ) + + # 省份编码 + province_code = db.Column( + db.String(30), + nullable=False, + comment="省份编码" + ) + + # 城市编码 + city_code = db.Column( + db.String(30), + nullable=False, + comment="城市编码" + ) + + # 县区编码 + district_code = db.Column( + db.String(30), + nullable=False, + comment="县区编码" + ) + + # 街道编码 + street_code = db.Column( + db.String(30), + nullable=False, + comment="街道编码" + ) + + # 省市区信息 + city_info = db.Column( + db.String(255), + nullable=True, + comment="省市区信息" + ) + + # 详细地址 + address = db.Column( + db.String(255), + nullable=False, + comment="详细地址" + ) + + # 用户名 + username = db.Column( + db.String(30), + nullable=True, + comment="用户名" + ) + + # 密码 + password = db.Column( + db.String(255), + nullable=True, + comment="密码" + ) + + # 加密盐 + salt = db.Column( + db.String(30), + nullable=True, + comment="加密盐" + ) + + # 个人简介 + intro = db.Column( + db.String(255), + nullable=True, + comment="个人简介" + ) + + # 状态:1-正常 2-禁用 + status = db.Column( + db.Integer, + default=1, + comment="状态:1-正常 2-禁用" + ) + + # 排序 + sort = db.Column( + db.Integer, + default=0, + comment="排序" + ) + + # 个人备注 + note = db.Column( + db.String(255), + nullable=True, + comment="个人备注" + ) + + # ============================================================ + # 魔法方法 + # ============================================================ + + def __str__(self): + """ + 返回模型的字符串表示 + + Returns: + str: 格式为 "用户{id}" 的字符串 + """ + return "用户{}".format(self.id)