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
@@ -1,186 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
文章模型模块
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
提供文章管理的数据模型定义,用于管理文章内容。
|
模型已迁移至 src.modules.cms.article.models。
|
||||||
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
|
from src.modules.cms.article.models import * # noqa: F401,F403
|
||||||
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__()
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
兼容 shim(绞杀者迁移期间保留)
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
数据库操作基类已迁移至 src/common/base_db.py。
|
数据库操作基类已迁移至 src.common.base_db.py。
|
||||||
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
from src.common.base_db import * # noqa: F401,F403
|
from src.common.base_db import * # noqa: F401,F403
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
兼容 shim(绞杀者迁移期间保留)
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
模型基类已迁移至 src/common/base_model.py。
|
模型基类已迁移至 src.common.base_model.py。
|
||||||
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
from src.common.base_model import * # noqa: F401,F403
|
from src.common.base_model import * # noqa: F401,F403
|
||||||
|
|||||||
@@ -1,122 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
分类模型模块
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
提供文章分类管理的数据模型定义,支持多级分类结构。
|
模型已迁移至 src.modules.cms.category.models。
|
||||||
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
|
from src.modules.cms.category.models import * # noqa: F401,F403
|
||||||
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__()
|
|
||||||
|
|||||||
+4
-185
@@ -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 src.modules.city.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -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 src.modules.configuration.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -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 src.modules.configuration.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
+4
-129
@@ -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 src.modules.system.dept.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
+4
-121
@@ -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 src.modules.dictionary.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -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 src.modules.dictionary.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -1,109 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
文件模板模型模块
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
提供文件模板管理的数据模型定义,用于管理文件模板信息。
|
模型已迁移至 src.modules.file_template.models。
|
||||||
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
|
from src.modules.file_template.models import * # noqa: F401,F403
|
||||||
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__()
|
|
||||||
|
|||||||
+4
-148
@@ -1,152 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
定时任务模型模块
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
提供定时任务管理的数据模型定义。
|
模型已迁移至 src.modules.job.models。
|
||||||
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
|
from src.modules.job.models import * # noqa: F401,F403
|
||||||
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__()
|
|
||||||
|
|||||||
+4
-113
@@ -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 src.modules.system.level.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
+4
-153
@@ -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 src.modules.cms.link.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -1,201 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
登录日志模型模块
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
提供登录日志管理的数据模型定义,用于记录用户登录、退出等操作日志。
|
模型已迁移至 src.modules.log.models。
|
||||||
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
|
from src.modules.log.models import * # noqa: F401,F403
|
||||||
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__()
|
|
||||||
|
|||||||
+4
-184
@@ -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 src.modules.system.menu.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -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 src.modules.notice.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -1,195 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
操作日志模型模块
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
提供操作日志管理的数据模型定义,用于记录用户操作行为日志。
|
模型已迁移至 src.modules.log.models。
|
||||||
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
|
from src.modules.log.models import * # noqa: F401,F403
|
||||||
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__()
|
|
||||||
|
|||||||
+4
-113
@@ -1,117 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
参数模型模块
|
兼容 shim(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
提供系统参数管理的数据模型定义,用于管理系统参数和业务参数。
|
模型已迁移至 src.modules.param.models。
|
||||||
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
"""
|
"""
|
||||||
|
from src.modules.param.models import * # noqa: F401,F403
|
||||||
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__()
|
|
||||||
|
|||||||
@@ -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(绞杀者迁移期间保留)
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
提供岗位管理的数据模型定义,用于定义员工岗位信息。
|
模型已迁移至 src.modules.system.position.models。
|
||||||
|
本文件仅作兼容转发,最终在 P7(切尾)阶段删除。
|
||||||
企业级特性:
|
|
||||||
1. 使用枚举类管理状态常量,确保类型安全
|
|
||||||
2. 状态文本自动转换,便于前端展示
|
|
||||||
3. 便捷的查询方法,提高开发效率
|
|
||||||
4. 继承 BaseModel 和 BaseDB,复用通用功能
|
|
||||||
5. __init__ 由 BaseModel 统一管理,无需重复定义
|
|
||||||
|
|
||||||
模型说明:
|
|
||||||
岗位用于标识用户的职位,如:技术总监、产品经理、开发工程师等。
|
|
||||||
通过 sort 字段控制显示顺序,数值越小越靠前。
|
|
||||||
"""
|
"""
|
||||||
|
from src.modules.system.position.models import * # noqa: F401,F403
|
||||||
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}'
|
|
||||||
|
|||||||
+4
-121
@@ -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 src.modules.system.role.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -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 src.modules.association.role_menu.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
+4
-257
@@ -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 src.modules.system.user.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
@@ -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 src.modules.association.user_role.models import * # noqa: F401,F403
|
||||||
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)
|
|
||||||
|
|||||||
+20
-18
@@ -4,22 +4,24 @@
|
|||||||
|
|
||||||
统一在此导入全部数据库模型,确保 Flask-Migrate 能全量识别表结构
|
统一在此导入全部数据库模型,确保 Flask-Migrate 能全量识别表结构
|
||||||
(migrations/env.py 依赖 db.metadata 收集所有表)。
|
(migrations/env.py 依赖 db.metadata 收集所有表)。
|
||||||
|
|
||||||
P2 阶段:模型仍位于 application/models/,经其 __init__ 全量导入。
|
|
||||||
P3 阶段:随模块逐个迁入 src/modules/,此处逐行改为
|
|
||||||
from modules.<domain>.<name>.models import * 并移除对应旧行。
|
|
||||||
P7 阶段:application/ 删除后,仅保留 src.modules 导入。
|
|
||||||
"""
|
"""
|
||||||
|
# 全量导入(P3a 起:模型位于 src/modules/ 各模块 models.py)
|
||||||
# ============================================================
|
from src.modules.association.role_menu.models import * # noqa: F401,F403 (role_menu)
|
||||||
# P2:模型仍位于 application/models/(经其 __init__ 全量导入)
|
from src.modules.association.user_role.models import * # noqa: F401,F403 (user_role)
|
||||||
# ============================================================
|
from src.modules.city.models import * # noqa: F401,F403 (city)
|
||||||
import application.models # noqa: F401 (P3 起逐步替换为 src.modules 导入)
|
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)
|
||||||
# P3 起按此格式逐模块替换:
|
from src.modules.file_template.models import * # noqa: F401,F403 (file_template)
|
||||||
# from modules.system.user.models import * # noqa: F401,F403
|
from src.modules.job.models import * # noqa: F401,F403 (job)
|
||||||
# from modules.system.role.models import * # noqa: F401,F403
|
from src.modules.notice.models import * # noqa: F401,F403 (notice)
|
||||||
# from modules.system.menu.models import * # noqa: F401,F403
|
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)
|
||||||
|
|||||||
@@ -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