refactor: P3a 模型层迁入 src/modules/(22 模型)
- 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 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude
parent
658ee6d596
commit
6de4f3bef2
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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__()
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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__()
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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__()
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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__()
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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__()
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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}'
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
"""模块包。"""
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user