From d33dc1fc34c342adf6baded6b099883d7bdf47c5 Mon Sep 17 00:00:00 2001 From: DjangoAdmin Dev Date: Fri, 7 Aug 2026 14:23:53 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20P3d=20=E8=A7=86=E5=9B=BE=E5=B1=82?= =?UTF-8?q?=E8=BF=81=E5=85=A5=20src/modules/=20=E2=86=92=20router.py?= =?UTF-8?q?=EF=BC=8826=20=E8=A7=86=E5=9B=BE=EF=BC=89=E2=80=94=E2=80=94P3?= =?UTF-8?q?=20=E5=85=A8=E9=83=A8=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 17 个单视图 + 4 组合并(login+index→auth、config+config_item→configuration、 dict+dict_item→dictionary、login_log+operation_log→log) - 重写:服务引用→src.modules(module 别名保留)、models/forms→src.modules - 中间件引用保持 application.middleware(P5 迁移) - application/views/__init__.py 蓝图注册加去重(合并模块 shim 重复导出) - application/views/ 全部替换为 shim 【修复】index.py 组合导入 menu,user 被单名替换先命中残留 user,已修复 【验收】25 蓝图无重复注册;应用启动;pytest 5 passed;接口冒烟(登录校验、 鉴权 401)正常。P3 四层(models/forms/services/views)全部迁入 src/modules/ Co-Authored-By: Claude --- application/views/__init__.py | 5 + application/views/article.py | 203 +--------- application/views/category.py | 174 +-------- application/views/city.py | 190 +-------- application/views/config.py | 228 +---------- application/views/config_item.py | 215 +---------- application/views/dept.py | 187 +-------- application/views/dict.py | 193 +--------- application/views/dict_item.py | 193 +--------- application/views/file_template.py | 156 +------- application/views/index.py | 172 +-------- application/views/job.py | 203 +--------- application/views/level.py | 278 +------------- application/views/link.py | 216 +---------- application/views/login.py | 172 +-------- application/views/login_log.py | 125 +----- application/views/menu.py | 166 +------- application/views/notice.py | 193 +--------- application/views/operation_log.py | 125 +----- application/views/param.py | 218 +---------- application/views/position.py | 236 +----------- application/views/role.py | 214 +---------- application/views/role_menu.py | 105 +---- application/views/upload.py | 91 +---- application/views/user.py | 237 +----------- application/views/user_role.py | 87 +---- src/modules/association/role_menu/router.py | 105 +++++ src/modules/association/user_role/router.py | 87 +++++ src/modules/auth/router.py | 307 +++++++++++++++ src/modules/city/router.py | 190 +++++++++ src/modules/cms/article/router.py | 203 ++++++++++ src/modules/cms/category/router.py | 174 +++++++++ src/modules/cms/link/router.py | 216 +++++++++++ src/modules/configuration/router.py | 405 ++++++++++++++++++++ src/modules/dictionary/router.py | 348 +++++++++++++++++ src/modules/file_template/router.py | 156 ++++++++ src/modules/job/router.py | 203 ++++++++++ src/modules/notice/router.py | 193 ++++++++++ src/modules/param/router.py | 218 +++++++++++ src/modules/system/dept/router.py | 187 +++++++++ src/modules/system/level/router.py | 278 ++++++++++++++ src/modules/system/menu/router.py | 166 ++++++++ src/modules/system/position/router.py | 236 ++++++++++++ src/modules/system/role/router.py | 214 +++++++++++ src/modules/system/user/router.py | 237 ++++++++++++ src/modules/upload/router.py | 91 +++++ 重构方案-v2.md | 2 +- 47 files changed, 4320 insertions(+), 4478 deletions(-) create mode 100644 src/modules/association/role_menu/router.py create mode 100644 src/modules/association/user_role/router.py create mode 100644 src/modules/auth/router.py create mode 100644 src/modules/city/router.py create mode 100644 src/modules/cms/article/router.py create mode 100644 src/modules/cms/category/router.py create mode 100644 src/modules/cms/link/router.py create mode 100644 src/modules/configuration/router.py create mode 100644 src/modules/dictionary/router.py create mode 100644 src/modules/file_template/router.py create mode 100644 src/modules/job/router.py create mode 100644 src/modules/notice/router.py create mode 100644 src/modules/param/router.py create mode 100644 src/modules/system/dept/router.py create mode 100644 src/modules/system/level/router.py create mode 100644 src/modules/system/menu/router.py create mode 100644 src/modules/system/position/router.py create mode 100644 src/modules/system/role/router.py create mode 100644 src/modules/system/user/router.py create mode 100644 src/modules/upload/router.py diff --git a/application/views/__init__.py b/application/views/__init__.py index 5e2c0ed..79f849d 100644 --- a/application/views/__init__.py +++ b/application/views/__init__.py @@ -123,10 +123,15 @@ def register_blueprint(app): register_blueprint(app) return app """ + registered = set() for module_name in _blueprint_modules: mod = importlib.import_module(f'application.views.{module_name}') for attr_name in dir(mod): attr = getattr(mod, attr_name) if isinstance(attr, Blueprint): + # 合并模块的 shim 会重复导出同一批 Blueprint,按名去重 + if attr.name in registered: + continue app.register_blueprint(attr) + registered.add(attr.name) return app diff --git a/application/views/article.py b/application/views/article.py index a27aac6..798bb4c 100644 --- a/application/views/article.py +++ b/application/views/article.py @@ -1,203 +1,8 @@ """ -文章管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供文章(Article)相关的API接口,包括: -- 文章分页查询 -- 文章详情查询 -- 文章添加、更新、删除 -- 文章状态设置 -- 文章点击量增加 -- 文章列表获取 -- 根据分类获取文章 - -所属包: application.views -依赖模块: application.services.article - 文章业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.cms.article.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import article -from utils.request import parse_batch_ids -article_blue = Blueprint('article', __name__, url_prefix='/article') - -from utils import R - - -# ============================================================ -# 文章分页查询 -# ============================================================ - -@article_blue.route('/page', methods=["GET"]) -@check_permission("sys:article:page") -def page(): - """ - 查询文章分页数据 - - 功能说明: - 获取文章列表的分页数据,支持关键词搜索和分类、状态筛选。 - - Query Parameters: - pageNo: 当前页码(可选,默认1) - pageSize: 每页记录数(可选,默认PAGE_SIZE) - title: 文章标题(可选,模糊查询) - category_id: 分类ID(可选,精确查询) - status: 文章状态(可选,0-正常,1-下架) - startTime: 开始时间(可选) - endTime: 结束时间(可选) - - Returns: - JSON: 文章分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = article.get_article_page() - return result - - -# ============================================================ -# 文章详情查询 -# ============================================================ - -@article_blue.route('/detail/', methods=["GET"]) -def detail(id): - """ - 查询文章详情 - - 功能说明: - 获取文章的详细信息,同时增加文章点击量。 - - Args: - id: 文章ID - - Returns: - JSON: 文章详细信息 - """ - data = article.get_article_detail(id) - if data: - return R.ok(data=data) - return R.failed("文章不存在") - - -# ============================================================ -# 文章添加 -# ============================================================ - -@article_blue.route('/add', methods=["POST"]) -@check_permission("sys:article:add") -@check_demo -def add(): - """ - 添加文章 - - 功能说明: - 创建新的文章记录。 - - Request Body: - { - "category_id": 1, - "title": "文章标题", - "cover": "封面图片URL", - "images": ["image1.jpg", "image2.jpg"], - "intro": "文章导读", - "content": "文章内容", - "author": "作者", - "status": 0, - "sort": 0 - } - - Returns: - JSON: 操作结果 - """ - result = article.add_article() - return result - - -# ============================================================ -# 文章更新 -# ============================================================ - -@article_blue.route('/update', methods=["PUT"]) -@check_permission("sys:article:update") -@check_demo -def update(): - """ - 更新文章 - - 功能说明: - 修改已有文章的信息。 - - Returns: - JSON: 操作结果 - """ - result = article.update_article() - return result - - -# ============================================================ -# 文章删除 -# ============================================================ - -@article_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:article:delete") -@check_demo -def delete(id): - """ - 删除文章 - - Args: - id: 文章ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = article.delete_articles(id) - return result - - -# ============================================================ -# 文章批量删除 -# ============================================================ - -@article_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:article:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除文章 - - 功能说明: - 批量删除文章记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 文章ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return article.delete_articles(id_str) - - -# ============================================================ -# 文章状态设置 -# ============================================================ - -@article_blue.route('/status', methods=["PUT"]) -@check_permission("sys:article:status") -@check_demo -def status(): - """ - 设置文章状态 - - 功能说明: - 启用或下架文章。 - - Returns: - JSON: 操作结果 - """ - result = article.update_article_status() - return result +from src.modules.cms.article.router import * # noqa: F401,F403 diff --git a/application/views/category.py b/application/views/category.py index 1f211ff..546c994 100644 --- a/application/views/category.py +++ b/application/views/category.py @@ -1,174 +1,8 @@ """ -分类管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供分类(Category)相关的API接口,包括: -- 分类列表查询 -- 分类详情查询 -- 分类添加、更新、删除 -- 分类数据列表获取(用于下拉选择、树形展示) -- 分类树获取 -- 子分类列表获取 - -所属包: application.views -依赖模块: application.services.category - 分类业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.cms.category.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import category -category_blue = Blueprint('category', __name__, url_prefix='/category') - -from utils import R - - -# ============================================================ -# 分类列表查询 -# ============================================================ - -@category_blue.route('/list', methods=["GET"]) -@check_permission("sys:category:list") -def list(): - """ - 查询分类列表 - - 功能说明: - 获取分类列表数据,支持按名称模糊搜索。 - - Query Parameters: - category_name: 分类名称(可选,模糊查询) - type: 分类类型(可选,精确查询) - - Returns: - JSON: 分类列表数据 - """ - result = category.get_category_list() - return result - - -# ============================================================ -# 分类详情查询 -# ============================================================ - -@category_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:category:detail") -def detail(id): - """ - 查询分类详情 - - Args: - id: 分类ID - - Returns: - JSON: 分类详细信息 - """ - data = category.get_category_detail(id) - if data: - return R.ok(data=data) - return R.failed("分类不存在") - - -# ============================================================ -# 分类添加 -# ============================================================ - -@category_blue.route('/add', methods=["POST"]) -@check_permission("sys:category:add") -@check_demo -def add(): - """ - 添加分类 - - 功能说明: - 创建新的分类记录。 - - Request Body: - { - "category_name": "分类名称", - "category_code": "分类编码(可选)", - "parent_id": 0, - "sort": 0, - "note": "备注(可选)", - "type": 1 - } - - Returns: - JSON: 操作结果 - """ - result = category.add_category() - return result - - -# ============================================================ -# 分类更新 -# ============================================================ - -@category_blue.route('/update', methods=["PUT"]) -@check_permission("sys:category:update") -@check_demo -def update(): - """ - 更新分类 - - 功能说明: - 修改已有分类的信息。 - - Request Body: - { - "id": 1, - "category_name": "分类名称", - "category_code": "分类编码(可选)", - "parent_id": 0, - "sort": 0, - "note": "备注(可选)", - "type": 1 - } - - Returns: - JSON: 操作结果 - """ - result = category.update_category() - return result - - -# ============================================================ -# 分类删除 -# ============================================================ - -@category_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:category:delete") -@check_demo -def delete(id): - """ - 删除分类 - - Args: - id: 分类ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = category.delete_categories(id) - return result - - -# ============================================================ -# 分类数据列表获取 -# ============================================================ - -@category_blue.route('/getCategoryList', methods=["GET"]) -def get_category_list(): - """ - 获取分类数据列表 - - 功能说明: - 获取所有分类列表,常用于下拉选择框。 - - Returns: - JSON: 分类列表数据 - """ - result = category.get_category_data() - return R.ok(data=result) +from src.modules.cms.category.router import * # noqa: F401,F403 diff --git a/application/views/city.py b/application/views/city.py index 52fb4ce..798a855 100644 --- a/application/views/city.py +++ b/application/views/city.py @@ -1,190 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -城市管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供城市(City)相关的API接口,包括: -- 城市分页查询 -- 城市详情查询 -- 城市添加、更新、删除 -- 根据城市编码查询子级城市列表 - -所属包: application.views -依赖模块: application.services.city - 城市业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.city.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import city -city_blue = Blueprint('city', __name__, url_prefix='/city') - -from utils import R - - -# ============================================================ -# 城市分页查询 -# ============================================================ - -@city_blue.route('/page', methods=["GET"]) -@check_permission("sys:city:page") -def page(): - """ - 查询城市分页数据 - - 功能说明: - 获取城市列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 城市分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = city.get_city_list() - return result - - -# ============================================================ -# 城市详情查询 -# ============================================================ - -@city_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:city:detail") -def detail(id): - """ - 查询城市详情 - - Args: - id: 城市ID - - Returns: - JSON: 城市详细信息 - """ - data = city.get_city_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 城市添加 -# ============================================================ - -@city_blue.route('/add', methods=["POST"]) -@check_permission("sys:city:add") -@check_demo -def add(): - """ - 添加城市 - - 功能说明: - 创建新的城市记录。 - - Returns: - JSON: 操作结果 - """ - result = city.add_city() - return result - - -# ============================================================ -# 城市更新 -# ============================================================ - -@city_blue.route('/update', methods=["PUT"]) -@check_permission("sys:city:update") -@check_demo -def update(): - """ - 更新城市 - - 功能说明: - 修改已有城市的信息。 - - Returns: - JSON: 操作结果 - """ - result = city.update_city() - return result - - -# ============================================================ -# 城市删除 -# ============================================================ - -@city_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:city:delete") -@check_demo -def delete(id): - """ - 删除城市 - - Args: - id: 城市ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = city.delete_cities(id) - return result - - -# ============================================================ -# 子级城市查询 -# ============================================================ - -@city_blue.route('/getCityList/', methods=["GET"]) -def get_child_list(city_code): - """ - 根据城市编码查询子级城市 - - 功能说明: - 获取指定城市编码下的子级城市列表,用于省市联动选择。 - - Args: - city_code: 城市编码(如:'110000' 查询北京市下的区县) - - Returns: - JSON: 子级城市列表 - """ - data = city.get_child_cities(city_code) - return R.ok(data=data) +from src.modules.city.router import * # noqa: F401,F403 diff --git a/application/views/config.py b/application/views/config.py index c59feee..f81e01e 100644 --- a/application/views/config.py +++ b/application/views/config.py @@ -1,228 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -参数配置控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供系统参数配置(Config)相关的API接口,包括: -- 参数配置分页查询 -- 参数配置详情查询 -- 参数配置添加、更新、删除 - -所属包: application.views -依赖模块: application.services.config - 参数配置业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.configuration.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import config -from utils.request import parse_batch_ids -config_blue = Blueprint('config', __name__, url_prefix='/config') - -from utils import R - - -# ============================================================ -# 参数配置分页查询 -# ============================================================ - -@config_blue.route('/page', methods=["GET"]) -@check_permission("sys:config:page") -def page(): - """ - 查询参数配置分页数据 - - 功能说明: - 获取系统参数配置列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 参数配置分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = config.get_config_page() - return result - - -# ============================================================ -# 参数配置详情查询 -# ============================================================ - -@config_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:config:detail") -def detail(id): - """ - 查询参数配置详情 - - Args: - id: 参数配置ID - - Returns: - JSON: 参数配置详细信息 - """ - data = config.get_config_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 参数配置添加 -# ============================================================ - -@config_blue.route('/add', methods=["POST"]) -@check_permission("sys:config:add") -@check_demo -def add(): - """ - 添加参数配置 - - 功能说明: - 创建新的系统参数配置记录。 - - Returns: - JSON: 操作结果 - """ - result = config.add_config() - return result - - -# ============================================================ -# 参数配置更新 -# ============================================================ - -@config_blue.route('/update', methods=["PUT"]) -@check_permission("sys:config:update") -@check_demo -def update(): - """ - 更新参数配置 - - 功能说明: - 修改已有的参数配置信息。 - - Returns: - JSON: 操作结果 - """ - result = config.update_config() - return result - - -# ============================================================ -# 参数配置删除 -# ============================================================ - -@config_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:config:delete") -@check_demo -def delete(id): - """ - 删除参数配置 - - Args: - id: 参数配置ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = config.delete_configs(id) - return result - - -# ============================================================ -# 配置批量删除 -# ============================================================ - -@config_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:config:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除配置 - - 功能说明: - 批量删除配置记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 配置ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return config.delete_configs(id_str) - - -# ============================================================ -# 网站配置查询 -# ============================================================ - -@config_blue.route('/web/index', methods=["GET"]) -@check_permission("sys:configweb:index") -def web_index(): - """ - 获取网站配置信息 - - Returns: - JSON: 网站配置信息 - """ - result = config.get_config_data() - return R.ok(result) - - -# ============================================================ -# 网站配置保存 -# ============================================================ - -@config_blue.route('/web/save', methods=["POST"]) -@check_permission("sys:configweb:save") -@check_demo -def web_save(): - """ - 保存网站配置信息 - - Returns: - JSON: 操作结果 - """ - result = config.save_config_data() - return result +from src.modules.configuration.router import * # noqa: F401,F403 diff --git a/application/views/config_item.py b/application/views/config_item.py index e1462d0..f81e01e 100644 --- a/application/views/config_item.py +++ b/application/views/config_item.py @@ -1,215 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -配置项数据控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供配置项数据(ConfigItem)相关的API接口,包括: -- 配置项分页查询 -- 配置项详情查询 -- 配置项添加、更新、删除 -- 配置项状态设置 - -所属包: application.views -依赖模块: application.services.config_item - 配置项业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.configuration.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import config_item -from utils.request import parse_batch_ids -config_item_blue = Blueprint('config_item', __name__, url_prefix='/config/item') - -from utils import R - - -# ============================================================ -# 配置项分页查询 -# ============================================================ - -@config_item_blue.route('/page', methods=["GET"]) -@check_permission("sys:configitem:page") -def page(): - """ - 查询配置项分页数据 - - 功能说明: - 获取配置项列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 配置项分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = config_item.get_config_item_page() - return result - - -# ============================================================ -# 配置项详情查询 -# ============================================================ - -@config_item_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:configitem:detail") -def detail(id): - """ - 查询配置项详情 - - Args: - id: 配置项ID - - Returns: - JSON: 配置项详细信息 - """ - data = config_item.get_config_item_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 配置项添加 -# ============================================================ - -@config_item_blue.route('/add', methods=["POST"]) -@check_permission("sys:configitem:add") -@check_demo -def add(): - """ - 添加配置项 - - 功能说明: - 创建新的配置项记录。 - - Returns: - JSON: 操作结果 - """ - result = config_item.add_config_item() - return result - - -# ============================================================ -# 配置项更新 -# ============================================================ - -@config_item_blue.route('/update', methods=["PUT"]) -@check_permission("sys:configitem:update") -@check_demo -def update(): - """ - 更新配置项 - - 功能说明: - 修改已有的配置项信息。 - - Returns: - JSON: 操作结果 - """ - result = config_item.update_config_item() - return result - - -# ============================================================ -# 配置项删除 -# ============================================================ - -@config_item_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:configitem:delete") -@check_demo -def delete(id): - """ - 删除配置项 - - Args: - id: 配置项ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = config_item.delete_config_items(id) - return result - - -# ============================================================ -# 配置项批量删除 -# ============================================================ - -@config_item_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:configitem:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除配置项 - - 功能说明: - 批量删除配置项记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 配置项ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return config_item.delete_config_items(id_str) - - -# ============================================================ -# 配置项状态设置 -# ============================================================ - -@config_item_blue.route('/status', methods=["PUT"]) -@check_permission("sys:configitem:status") -@check_demo -def status(): - """ - 设置配置项状态 - - 功能说明: - 启用或禁用配置项。 - - Returns: - JSON: 操作结果 - """ - result = config_item.update_config_item_status() - return result +from src.modules.configuration.router import * # noqa: F401,F403 diff --git a/application/views/dept.py b/application/views/dept.py index c455fcd..a2757a3 100644 --- a/application/views/dept.py +++ b/application/views/dept.py @@ -1,187 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -部门管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供部门(Dept)相关的API接口,包括: -- 部门列表查询 -- 部门详情查询 -- 部门添加、更新、删除 -- 部门数据列表获取(用于树形选择) - -所属包: application.views -依赖模块: application.services.dept - 部门业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.system.dept.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import dept -dept_blue = Blueprint('dept', __name__, url_prefix='/dept') - -from utils import R - - -# ============================================================ -# 部门列表查询 -# ============================================================ - -@dept_blue.route('/list', methods=["GET"]) -@check_permission("sys:dept:list") -def list(): - """ - 查询部门列表 - - 功能说明: - 获取部门列表数据,支持树形结构展示。 - - Returns: - JSON: 部门列表数据 - """ - result = dept.get_dept_list() - return result - - -# ============================================================ -# 部门详情查询 -# ============================================================ - -@dept_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:dept:detail") -def detail(id): - """ - 查询部门详情 - - Args: - id: 部门ID - - Returns: - JSON: 部门详细信息 - """ - data = dept.get_dept_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 部门添加 -# ============================================================ - -@dept_blue.route('/add', methods=["POST"]) -@check_permission("sys:dept:add") -@check_demo -def add(): - """ - 添加部门 - - 功能说明: - 创建新的部门记录。 - - Returns: - JSON: 操作结果 - """ - result = dept.add_dept() - return result - - -# ============================================================ -# 部门更新 -# ============================================================ - -@dept_blue.route('/update', methods=["PUT"]) -@check_permission("sys:dept:update") -@check_demo -def update(): - """ - 更新部门 - - 功能说明: - 修改已有部门的信息。 - - Returns: - JSON: 操作结果 - """ - result = dept.update_dept() - return result - - -# ============================================================ -# 部门删除 -# ============================================================ - -@dept_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:dept:delete") -@check_demo -def delete(id): - """ - 删除部门 - - Args: - id: 部门ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = dept.delete_depts(id) - return result - - -# ============================================================ -# 部门数据列表获取 -# ============================================================ - -@dept_blue.route('/getDeptList', methods=["GET"]) -def get_dept_list(): - """ - 获取部门数据列表 - - 功能说明: - 获取所有部门列表,常用于下拉选择框或树形组件。 - - Returns: - JSON: 部门列表数据 - """ - result = dept.get_dept_data() - return R.ok(data=result) +from src.modules.system.dept.router import * # noqa: F401,F403 diff --git a/application/views/dict.py b/application/views/dict.py index a6c2f55..806f769 100644 --- a/application/views/dict.py +++ b/application/views/dict.py @@ -1,193 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -字典管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供字典(Dict)相关的API接口,包括: -- 字典分页查询 -- 字典详情查询 -- 字典添加、更新、删除 - -所属包: application.views -依赖模块: application.services.dicts - 字典业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.dictionary.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import dict -from utils.request import parse_batch_ids -dict_blue = Blueprint('dict', __name__, url_prefix='/dict') - -from utils import R - - -# ============================================================ -# 字典分页查询 -# ============================================================ - -@dict_blue.route('/page', methods=["GET"]) -@check_permission("sys:dict:page") -def page(): - """ - 查询字典分页数据 - - 功能说明: - 获取字典列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 字典分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = dict.get_dict_page() - return result - - -# ============================================================ -# 字典详情查询 -# ============================================================ - -@dict_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:dict:detail") -def detail(id): - """ - 查询字典详情 - - Args: - id: 字典ID - - Returns: - JSON: 字典详细信息 - """ - data = dict.get_dict_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 字典添加 -# ============================================================ - -@dict_blue.route('/add', methods=["POST"]) -@check_permission("sys:dict:add") -@check_demo -def add(): - """ - 添加字典 - - 功能说明: - 创建新的字典记录。 - - Returns: - JSON: 操作结果 - """ - result = dict.add_dict() - return result - - -# ============================================================ -# 字典更新 -# ============================================================ - -@dict_blue.route('/update', methods=["PUT"]) -@check_permission("sys:dict:update") -@check_demo -def update(): - """ - 更新字典 - - 功能说明: - 修改已有的字典信息。 - - Returns: - JSON: 操作结果 - """ - result = dict.update_dict() - return result - - -# ============================================================ -# 字典删除 -# ============================================================ - -@dict_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:dict:delete") -@check_demo -def delete(id): - """ - 删除字典 - - Args: - id: 字典ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = dict.delete_dicts(id) - return result - - -# ============================================================ -# 字典批量删除 -# ============================================================ - -@dict_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:dict:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除字典 - - 功能说明: - 批量删除字典记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 字典ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return dict.delete_dicts(id_str) +from src.modules.dictionary.router import * # noqa: F401,F403 diff --git a/application/views/dict_item.py b/application/views/dict_item.py index d0a5ead..806f769 100644 --- a/application/views/dict_item.py +++ b/application/views/dict_item.py @@ -1,193 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -字典项数据控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供字典项数据(DictItem)相关的API接口,包括: -- 字典项分页查询 -- 字典项详情查询 -- 字典项添加、更新、删除 - -所属包: application.views -依赖模块: application.services.dicts_data - 字典项业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.dictionary.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import dict_item -from utils.request import parse_batch_ids -dict_item_blue = Blueprint('dict_item', __name__, url_prefix='/dict/item') - -from utils import R - - -# ============================================================ -# 字典项分页查询 -# ============================================================ - -@dict_item_blue.route('/page', methods=["GET"]) -@check_permission("sys:dictitem:page") -def page(): - """ - 查询字典项分页数据 - - 功能说明: - 获取字典项列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 字典项分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = dict_item.get_dict_item_page() - return result - - -# ============================================================ -# 字典项详情查询 -# ============================================================ - -@dict_item_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:dictitem:detail") -def detail(id): - """ - 查询字典项详情 - - Args: - id: 字典项ID - - Returns: - JSON: 字典项详细信息 - """ - data = dict_item.get_dict_item_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 字典项添加 -# ============================================================ - -@dict_item_blue.route('/add', methods=["POST"]) -@check_permission("sys:dictitem:add") -@check_demo -def add(): - """ - 添加字典项 - - 功能说明: - 创建新的字典项记录。 - - Returns: - JSON: 操作结果 - """ - result = dict_item.add_dict_item() - return result - - -# ============================================================ -# 字典项更新 -# ============================================================ - -@dict_item_blue.route('/update', methods=["PUT"]) -@check_permission("sys:dictitem:update") -@check_demo -def update(): - """ - 更新字典项 - - 功能说明: - 修改已有的字典项信息。 - - Returns: - JSON: 操作结果 - """ - result = dict_item.update_dict_item() - return result - - -# ============================================================ -# 字典项删除 -# ============================================================ - -@dict_item_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:dictitem:delete") -@check_demo -def delete(id): - """ - 删除字典项 - - Args: - id: 字典项ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = dict_item.delete_dict_items(id) - return result - - -# ============================================================ -# 字典项批量删除 -# ============================================================ - -@dict_item_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:dictitem:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除字典项 - - 功能说明: - 批量删除字典项记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 字典项ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return dict_item.delete_dict_items(id_str) +from src.modules.dictionary.router import * # noqa: F401,F403 diff --git a/application/views/file_template.py b/application/views/file_template.py index f3c4b1f..f14262a 100644 --- a/application/views/file_template.py +++ b/application/views/file_template.py @@ -1,156 +1,8 @@ """ -文件模板管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供文件模板(FileTemplate)相关的API接口,包括: -- 文件模板分页查询 -- 文件模板详情查询 -- 文件模板添加、更新、删除 -- 文件模板列表获取 -- 模板文件上传 -- 模板文件下载 - -所属包: application.views -依赖模块: application.services.file_template - 文件模板业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.file_template.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import file_template -from utils.request import parse_batch_ids -file_template_blue = Blueprint('file_template', __name__, url_prefix='/file/template') - -from utils import R - - -# ============================================================ -# 文件模板分页查询 -# ============================================================ - -@file_template_blue.route('/page', methods=["GET"]) -@check_permission("sys:filetemplate:page") -def page(): - """ - 查询文件模板分页数据 - - 功能说明: - 获取文件模板列表的分页数据,支持关键词搜索。 - - Returns: - JSON: 文件模板分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = file_template.get_file_template_page() - return result - - -# ============================================================ -# 文件模板详情查询 -# ============================================================ - -@file_template_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:filetemplate:detail") -def detail(id): - """ - 查询文件模板详情 - - Args: - id: 文件模板ID - - Returns: - JSON: 文件模板详细信息 - """ - data = file_template.get_file_template_detail(id) - if data: - return R.ok(data=data) - return R.failed("模板不存在") - - -# ============================================================ -# 文件模板添加 -# ============================================================ - -@file_template_blue.route('/add', methods=["POST"]) -@check_permission("sys:filetemplate:add") -@check_demo -def add(): - """ - 添加文件模板 - - 功能说明: - 创建新的文件模板记录。 - - Returns: - JSON: 操作结果 - """ - result = file_template.add_file_template() - return result - - -# ============================================================ -# 文件模板更新 -# ============================================================ - -@file_template_blue.route('/update', methods=["PUT"]) -@check_permission("sys:filetemplate:update") -@check_demo -def update(): - """ - 更新文件模板 - - 功能说明: - 修改已有文件模板的信息。 - - Returns: - JSON: 操作结果 - """ - result = file_template.update_file_template() - return result - - -# ============================================================ -# 文件模板删除 -# ============================================================ - -@file_template_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:filetemplate:delete") -@check_demo -def delete(id): - """ - 删除文件模板 - - Args: - id: 文件模板ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = file_template.delete_file_templates(id) - return result - - -# ============================================================ -# 文件模板批量删除 -# ============================================================ - -@file_template_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:filetemplate:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除文件模板 - - 功能说明: - 批量删除文件模板记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 文件模板ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return file_template.delete_file_templates(id_str) +from src.modules.file_template.router import * # noqa: F401,F403 diff --git a/application/views/index.py b/application/views/index.py index a2fcaca..b4faac3 100644 --- a/application/views/index.py +++ b/application/views/index.py @@ -1,172 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -首页控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供系统首页相关的API接口,包括: -- 系统菜单获取 -- 当前用户信息获取 -- 个人中心信息更新 -- 密码更新 -- 退出登录 - -所属包: application.views -依赖模块: application.services.menu - 菜单业务逻辑层 - application.services.user - 用户业务逻辑层 - application.models.user - 用户数据模型 +路由已迁移至 src.modules.auth.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from sqlalchemy import and_ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.models.user import User -from application.services import menu, user - -index_blue = Blueprint('index', __name__, url_prefix='/index') -from utils import R -from utils.rich_text import get_file_url -from utils.security import get_user_id - - -# ============================================================ -# 系统菜单获取 -# ============================================================ - -@index_blue.route('/getMenu', methods=["GET"]) -def get_menus(): - """ - 获取系统菜单列表 - - 功能说明: - 根据当前用户的权限,获取可访问的系统菜单树。 - - Returns: - JSON: 菜单树形结构数据 - """ - menu_list = menu.get_user_permission_menus(get_user_id()) - return R.ok(data=menu_list) - - -# ============================================================ -# 用户信息获取 -# ============================================================ - -@index_blue.route('/getUser', methods=["GET"]) -def get_user(): - """ - 获取当前用户信息 - - 功能说明: - 获取当前登录用户的详细信息,包括: - - 基本信息(姓名、头像、性别、手机号等) - - 权限节点列表 - - Returns: - JSON: 用户详细信息 - """ - # 查询用户信息 - current_user = User.query.filter( - and_(User.id == get_user_id(), User.is_delete == 0) - ).first() - - if not current_user: - return R.failed("用户不存在") - - # 获取权限节点列表 - permissions = menu.get_user_permissions(get_user_id()) - - # 构建用户信息 - info = { - 'realname': current_user.realname, - 'avatar': get_file_url(current_user.avatar), - 'gender': current_user.gender, - 'mobile': current_user.mobile, - 'email': current_user.email, - 'intro': current_user.intro, - 'address': current_user.address, - 'roles': [], - 'permissions': permissions, - } - - return R.ok(data=info) - - -# ============================================================ -# 个人中心信息更新 -# ============================================================ - -@index_blue.route('/userInfo', methods=["PUT"]) -@check_demo -def update_user_info(): - """ - 更新个人中心信息 - - 功能说明: - 修改当前登录用户的基本信息。 - - Returns: - JSON: 操作结果 - """ - result = user.update_user_info() - return result - - -# ============================================================ -# 密码更新 -# ============================================================ - -@index_blue.route('/updatePwd', methods=["PUT"]) -@check_demo -def update_pwd(): - """ - 更新用户密码 - - 功能说明: - 修改当前登录用户的登录密码。 - - Returns: - JSON: 操作结果 - """ - result = user.update_password() - return result +from src.modules.auth.router import * # noqa: F401,F403 diff --git a/application/views/job.py b/application/views/job.py index 3bfa45e..e2e768f 100644 --- a/application/views/job.py +++ b/application/views/job.py @@ -1,203 +1,8 @@ """ -定时任务管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供定时任务(Job)相关的API接口。 +路由已迁移至 src.modules.job.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -import logging - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import job -from utils.request import parse_batch_ids -job_blue = Blueprint('job', __name__, url_prefix='/job') -from utils import R - - -# ============================================================ -# 任务分页查询 -# ============================================================ - -@job_blue.route('/page', methods=["GET"]) -@check_permission("sys:job:page") -def page(): - """查询定时任务分页数据""" - result = job.get_job_page() - return result - - -# ============================================================ -# 任务详情查询 -# ============================================================ - -@job_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:job:detail") -def detail(id): - """查询定时任务详情""" - data = job.get_job_detail(id) - if data: - return R.ok(data=data) - return R.failed("任务不存在") - - -# ============================================================ -# 任务添加 -# ============================================================ - -@job_blue.route('/add', methods=["POST"]) -@check_permission("sys:job:add") -@check_demo -def add(): - """添加定时任务""" - result = job.add_job() - return result - - -# ============================================================ -# 任务更新 -# ============================================================ - -@job_blue.route('/update', methods=["PUT"]) -@check_permission("sys:job:update") -@check_demo -def update(): - """更新定时任务""" - result = job.update_job() - return result - - -# ============================================================ -# 任务删除 -# ============================================================ - -@job_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:job:delete") -@check_demo -def delete(id): - """删除定时任务""" - result = job.delete_jobs(id) - return result - - -# ============================================================ -# 任务批量删除 -# ============================================================ - -@job_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:job:batch_delete") -@check_demo -def batch_delete(): - """批量删除定时任务""" - id_str, err = parse_batch_ids() - if err: - return err - return job.delete_jobs(id_str) - - -# ============================================================ -# 任务状态设置 -# ============================================================ - -@job_blue.route('/status', methods=["POST"]) -@check_permission("sys:job:status") -@check_demo -def status(): - """设置任务状态""" - result = job.update_job_status() - return result - - -# ============================================================ -# 暂停任务 -# ============================================================ - -@job_blue.route('/pause/', methods=["GET"]) -@check_permission("sys:job:pause") -@check_demo -def pause(id): - """暂停任务""" - result = job.pause_job(id) - return result - - -# ============================================================ -# 恢复任务 -# ============================================================ - -@job_blue.route('/resume/', methods=["GET"]) -@check_permission("sys:job:resume") -@check_demo -def resume(id): - """恢复任务""" - result = job.resume_job(id) - return result - - -# ============================================================ -# 立即执行 -# ============================================================ - -@job_blue.route('/runOnce/', methods=["GET"]) -@check_permission("sys:job:runOnce") -@check_demo -def run_once(id): - """立即执行一次任务""" - result = job.run_job_once(id) - return result - - -# ============================================================ -# 重新加载调度器 -# ============================================================ - -@job_blue.route('/reload', methods=["GET"]) -@check_permission("sys:job:reload") -@check_demo -def reload(): - """重新加载所有任务到调度器""" - result = job.reload_all_jobs() - return result - - -# ============================================================ -# 发送测试短信 -# ============================================================ - -@job_blue.route('/sendSms', methods=["POST"]) -@check_permission("sys:job:sendSms") -def sendSms(): - """ - 发送测试短信 - - Request Body: - { - "phone": "13800138000", - "template_code": "SMS_123456", - "template_params": {"code": "123456"} - } - """ - from application.services import sms_svc - from utils.request import get_json_data - - data = get_json_data() - if not data: - return R.failed("参数不能为空") - - phone = data.get('phone') - template_code = data.get('template_code') - template_params = data.get('template_params') - - if not phone or not template_code: - return R.failed("手机号和模板CODE不能为空") - - success = sms_svc.send_sms( - phone=phone, - template_code=template_code, - template_params=template_params, - ) - - if success: - return R.ok(msg="短信发送成功") - return R.failed("短信发送失败,请检查配置") +from src.modules.job.router import * # noqa: F401,F403 diff --git a/application/views/level.py b/application/views/level.py index 536ec92..ec1c0c6 100644 --- a/application/views/level.py +++ b/application/views/level.py @@ -1,278 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -职级管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供职级(Level)相关的API接口,包括: -- 职级分页查询 -- 职级详情查询 -- 职级添加、更新、删除 -- 职级状态设置 -- 职级导入导出 -- 职级列表获取 - -所属包: application.views -依赖模块: application.services.level - 职级业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.system.level.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import level -from utils.request import parse_batch_ids -level_blue = Blueprint('level', __name__, url_prefix='/level') - -from utils import R - - -# ============================================================ -# 职级分页查询 -# ============================================================ - -@level_blue.route('/page', methods=["GET"]) -@check_permission("sys:level:page") -def page(): - """ - 查询职级分页数据 - - 功能说明: - 获取职级列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 职级分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = level.get_level_page() - return result - - -# ============================================================ -# 职级详情查询 -# ============================================================ - -@level_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:level:detail") -def detail(id): - """ - 查询职级详情 - - Args: - id: 职级ID - - Returns: - JSON: 职级详细信息 - """ - data = level.get_level_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 职级添加 -# ============================================================ - -@level_blue.route('/add', methods=["POST"]) -@check_permission("sys:level:add") -@check_demo -def add(): - """ - 添加职级 - - 功能说明: - 创建新的职级记录。 - - Returns: - JSON: 操作结果 - """ - result = level.add_level() - return result - - -# ============================================================ -# 职级更新 -# ============================================================ - -@level_blue.route('/update', methods=["PUT"]) -@check_permission("sys:level:update") -@check_demo -def update(): - """ - 更新职级 - - 功能说明: - 修改已有职级的信息。 - - Returns: - JSON: 操作结果 - """ - result = level.update_level() - return result - - -# ============================================================ -# 职级删除 -# ============================================================ - -@level_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:level:delete") -@check_demo -def delete(id): - """ - 删除职级 - - Args: - id: 职级ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = level.delete_levels(id) - return result - - -# ============================================================ -# 职级批量删除 -# ============================================================ - -@level_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:level:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除职级 - - 功能说明: - 批量删除职级记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 职级ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return level.delete_levels(id_str) - - -# ============================================================ -# 职级状态设置 -# ============================================================ - -@level_blue.route('/status', methods=["PUT"]) -@check_permission("sys:level:status") -@check_demo -def status(): - """ - 设置职级状态 - - 功能说明: - 启用或禁用职级。 - - Returns: - JSON: 操作结果 - """ - result = level.update_level_status() - return result - - -# ============================================================ -# Excel导入 -# ============================================================ - -@level_blue.route('/import', methods=["POST"]) -@check_permission("sys:level:import") -@check_demo -def imports(): - """ - 导入Excel文件 - - 功能说明: - 通过上传Excel文件批量导入职级数据。 - - Returns: - JSON: 导入结果,包含成功/失败数量 - """ - result = level.import_levels() - return result - - -# ============================================================ -# Excel导出 -# ============================================================ - -@level_blue.route('/export', methods=["POST"]) -@check_permission("sys:level:export") -@check_demo -def export(): - """ - 导出Excel文件 - - 功能说明: - 将职级数据导出为Excel文件。 - - Returns: - Response: Excel文件下载响应 - """ - result = level.export_levels() - return result - - -# ============================================================ -# 职级列表获取(无分页) -# ============================================================ - -@level_blue.route('/list', methods=["GET"]) -def get_level_list(): - """ - 获取职级数据列表(无分页) - - 功能说明: - 获取所有职级列表,常用于下拉选择框。 - - Returns: - JSON: 职级列表数据 - """ - result = level.get_level_list() - return R.ok(data=result) +from src.modules.system.level.router import * # noqa: F401,F403 diff --git a/application/views/link.py b/application/views/link.py index a923b2d..d575a6a 100644 --- a/application/views/link.py +++ b/application/views/link.py @@ -1,216 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -友链管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供友情链接(Link)相关的API接口,包括: -- 友链分页查询 -- 友链详情查询 -- 友链添加、更新、删除 -- 友链状态设置 - -所属包: application.views -依赖模块: application.services.link - 友链业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.cms.link.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import link -from utils.request import parse_batch_ids -link_blue = Blueprint('link', __name__, url_prefix='/link') - -from utils import R - - -# ============================================================ -# 友链分页查询 -# ============================================================ - -@link_blue.route('/page', methods=["GET"]) -@check_permission("sys:link:page") -def page(): - """ - 查询友链分页数据 - - 功能说明: - 获取友情链接列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 友链分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = link.get_link_page() - return result - - -# ============================================================ -# 友链详情查询 -# ============================================================ - -@link_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:link:detail") -def detail(id): - """ - 查询友链详情 - - Args: - id: 友链ID - - Returns: - JSON: 友链详细信息 - """ - data = link.get_link_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 友链添加 -# ============================================================ - -@link_blue.route('/add', methods=["POST"]) -@check_permission("sys:link:add") -@check_demo -def add(): - """ - 添加友链 - - 功能说明: - 创建新的友情链接记录。 - - Returns: - JSON: 操作结果 - """ - result = link.add_link() - return result - - -# ============================================================ -# 友链更新 -# ============================================================ - -@link_blue.route('/update', methods=["PUT"]) -@check_permission("sys:link:update") -@check_demo -def update(): - """ - 更新友链 - - 功能说明: - 修改已有的友情链接信息。 - - Returns: - JSON: 操作结果 - """ - result = link.update_link() - return result - - -# ============================================================ -# 友链删除 -# ============================================================ - -@link_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:link:delete") -@check_demo -def delete(id): - """ - 删除友链 - - Args: - id: 友链ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = link.delete_links(id) - return result - - -# ============================================================ -# 友链批量删除 -# ============================================================ - -@link_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:link:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除友链 - - 功能说明: - 批量删除友链记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 友链ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return link.delete_links(id_str) - - -# ============================================================ -# 友链状态设置 -# ============================================================ - -@link_blue.route('/status', methods=["PUT"]) -@check_permission("sys:link:status") -@check_demo -def status(): - """ - 设置友链状态 - - 功能说明: - 启用或禁用友情链接。 - - Returns: - JSON: 操作结果 - """ - result = link.update_link_status() - return result +from src.modules.cms.link.router import * # noqa: F401,F403 diff --git a/application/views/login.py b/application/views/login.py index 4067108..b4faac3 100644 --- a/application/views/login.py +++ b/application/views/login.py @@ -1,172 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -登录认证控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供系统登录相关的API接口,包括: -- 用户登录认证 -- 验证码生成 - -所属包: application.views -依赖模块: application.services.logins - 登录业务逻辑层 - utils.captcha - 验证码生成工具 +路由已迁移至 src.modules.auth.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.services import login - -login_blue = Blueprint('login', __name__, url_prefix='/') -from utils import R -from utils.captcha import generate_captcha -from utils.jwt import add_token_to_blacklist, get_access_token - - -# ============================================================ -# 用户登录 -# ============================================================ - -@login_blue.route('/login', methods=["POST"]) -def user_login(): - """ - 用户登录认证 - - 功能说明: - 验证用户名、密码和验证码,登录成功后返回访问令牌。 - - Returns: - JSON: 登录结果,成功时返回 token,失败时返回错误信息 - """ - result = login.login() - return result - - -# ============================================================ -# 验证码获取 -# ============================================================ - -@login_blue.route('/captcha', methods=["GET"]) -def captcha(): - """ - 获取图形验证码 - - 功能说明: - 生成图形验证码图片,返回 Base64 编码的图片数据和唯一标识 Key。 - - Returns: - JSON: 验证码信息 - - captcha: Base64 编码的图片数据(data:image/png;base64,xxx) - - key: 验证码唯一标识,用于登录时校验 - """ - result = generate_captcha() - - id_key = result['idKey'] # 验证码唯一标识 - data = result['data'] # 验证码图片 Base64 数据 - - # 拼接完整的图片 DataURL 格式 - img_str = "data:image/png;base64," + data - - return R.ok(data={"captcha": img_str, "key": id_key}) - - -# ============================================================ -# 退出登录 -# ============================================================ - -@login_blue.route('/logout', methods=["GET"]) -def logout(): - """ - 用户退出登录 - - 功能说明: - 将当前Token加入黑名单使其立即失效,确保退出后旧Token无法继续使用。 - - Returns: - JSON: 操作结果 - """ - # 从请求头获取Token并加入黑名单 - success, access_token, _ = get_access_token() - if success and access_token: - add_token_to_blacklist(access_token) - - # 记录退出登录日志 - try: - import time - from flask import g, request - from application.models.login_log import LoginLog - from application.services import login_log - from utils.security import get_username - from utils.ip import get_client_ip - from utils.ip2region import get_ip_location - from utils.user_agent import parse_user_agent - - username = get_username() or '未知' - client_ip = get_client_ip() - ua_info = parse_user_agent() - - # 请求耗时 - start_time = getattr(g, 'request_start_time', None) - consume_time = int((time.time() - start_time) * 1000) if start_time else 0 - - login_log.record_login_log( - username=username, - source=LoginLog.Source.ADMIN, - status=LoginLog.Status.NORMAL, - log_type=LoginLog.LogType.LOGOUT, - method=request.method, - request_method=request.endpoint or '', - url=request.path, - param='', - result='退出成功', - ip=client_ip, - location=get_ip_location(client_ip), - os=ua_info.get('os', '未知'), - browser=ua_info.get('browser', '未知'), - consume_time=consume_time, - error='', - ) - except Exception as e: - import logging - logging.getLogger(__name__).warning(f"记录退出日志失败: {str(e)}") - - return R.ok(msg="注销成功") +from src.modules.auth.router import * # noqa: F401,F403 diff --git a/application/views/login_log.py b/application/views/login_log.py index ac1392f..19514d2 100644 --- a/application/views/login_log.py +++ b/application/views/login_log.py @@ -1,125 +1,8 @@ """ -登录日志管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供登录日志(LoginLog)相关的API接口,包括: -- 登录日志分页查询 -- 登录日志详情查询 -- 登录日志删除(支持批量) -- 登录日志清空 -- 登录日志统计 -- 登录趋势分析 - -所属包: application.views -依赖模块: application.services.login_log - 登录日志业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.log.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import login_log -from utils.request import parse_batch_ids -login_log_blue = Blueprint('login_log', __name__, url_prefix='/login/log') - -from utils import R - - -# ============================================================ -# 登录日志分页查询 -# ============================================================ - -@login_log_blue.route('/page', methods=["GET"]) -@check_permission("sys:login_log:page") -def page(): - """ - 查询登录日志分页数据 - - 功能说明: - 获取登录日志列表的分页数据,支持按账号、日志类型、来源、 - 状态、时间范围等条件筛选。 - - Query Parameters: - pageNo: 当前页码(可选,默认1) - pageSize: 每页记录数(可选,默认PAGE_SIZE) - username: 登录账号(可选,模糊查询) - logType: 日志类型(可选,1-登录,2-退出) - source: 登录来源(可选,0-后台,1-前台) - status: 操作状态(可选,0-正常,1-异常) - startTime: 开始时间(可选) - endTime: 结束时间(可选) - - Returns: - JSON: 登录日志分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = login_log.get_login_log_page() - return result - - -# ============================================================ -# 登录日志详情查询 -# ============================================================ - -@login_log_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:login_log:detail") -def detail(id): - """ - 查询登录日志详情 - - Args: - id: 登录日志ID - - Returns: - JSON: 登录日志详细信息 - """ - data = login_log.get_login_log_detail(id) - if data: - return R.ok(data=data) - return R.failed("日志不存在") - - -# ============================================================ -# 登录日志删除 -# ============================================================ - -@login_log_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:login_log:delete") -@check_demo -def delete(id): - """ - 删除登录日志 - - Args: - id: 登录日志ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = login_log.delete_login_logs(id) - return result - - -# ============================================================ -# 登录日志批量删除 -# ============================================================ - -@login_log_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:login_log:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除登录日志 - - 功能说明: - 批量删除登录日志记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 登录日志ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return login_log.delete_login_logs(id_str) +from src.modules.log.router import * # noqa: F401,F403 diff --git a/application/views/menu.py b/application/views/menu.py index 4a084a4..e02a8c1 100644 --- a/application/views/menu.py +++ b/application/views/menu.py @@ -1,166 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -菜单管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供系统菜单(Menu)相关的API接口,包括: -- 菜单列表查询 -- 菜单详情查询 -- 菜单添加、更新、删除 - -所属包: application.views -依赖模块: application.services.menu - 菜单业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.system.menu.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import menu -menu_blue = Blueprint('menu', __name__, url_prefix='/menu') - -from utils import R - - -# ============================================================ -# 菜单列表查询 -# ============================================================ - -@menu_blue.route('/list', methods=["GET"]) -@check_permission("sys:menu:list") -def list(): - """ - 查询菜单列表 - - 功能说明: - 获取系统菜单列表数据,支持树形结构展示。 - - Returns: - JSON: 菜单列表数据 - """ - result = menu.get_menu_list() - return result - - -# ============================================================ -# 菜单详情查询 -# ============================================================ - -@menu_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:menu:detail") -def detail(id): - """ - 查询菜单详情 - - Args: - id: 菜单ID - - Returns: - JSON: 菜单详细信息 - """ - data = menu.get_menu_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 菜单添加 -# ============================================================ - -@menu_blue.route('/add', methods=["POST"]) -@check_permission("sys:menu:add") -@check_demo -def add(): - """ - 添加菜单 - - 功能说明: - 创建新的菜单记录。 - - Returns: - JSON: 操作结果 - """ - result = menu.add_menu() - return result - - -# ============================================================ -# 菜单更新 -# ============================================================ - -@menu_blue.route('/update', methods=["PUT"]) -@check_permission("sys:menu:update") -@check_demo -def update(): - """ - 更新菜单 - - 功能说明: - 修改已有的菜单信息。 - - Returns: - JSON: 操作结果 - """ - result = menu.update_menu() - return result - - -# ============================================================ -# 菜单删除 -# ============================================================ - -@menu_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:menu:delete") -@check_demo -def delete(id): - """ - 删除菜单 - - Args: - id: 菜单ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = menu.delete_menus(id) - return result +from src.modules.system.menu.router import * # noqa: F401,F403 diff --git a/application/views/notice.py b/application/views/notice.py index a8f56cf..641886c 100644 --- a/application/views/notice.py +++ b/application/views/notice.py @@ -1,193 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -通知公告控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供通知公告(Notice)相关的API接口,包括: -- 通知分页查询 -- 通知详情查询 -- 通知添加、更新、删除 - -所属包: application.views -依赖模块: application.services.notice - 通知业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.notice.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import notice -from utils.request import parse_batch_ids -notice_blue = Blueprint('notice', __name__, url_prefix='/notice') - -from utils import R - - -# ============================================================ -# 通知分页查询 -# ============================================================ - -@notice_blue.route('/page', methods=["GET"]) -@check_permission("sys:notice:page") -def page(): - """ - 查询通知分页数据 - - 功能说明: - 获取通知公告列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 通知分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = notice.get_notice_page() - return result - - -# ============================================================ -# 通知详情查询 -# ============================================================ - -@notice_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:notice:detail") -def detail(id): - """ - 查询通知详情 - - Args: - id: 通知ID - - Returns: - JSON: 通知详细信息 - """ - data = notice.get_notice_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 通知添加 -# ============================================================ - -@notice_blue.route('/add', methods=["POST"]) -@check_permission("sys:notice:add") -@check_demo -def add(): - """ - 添加通知 - - 功能说明: - 创建新的通知公告记录。 - - Returns: - JSON: 操作结果 - """ - result = notice.add_notice() - return result - - -# ============================================================ -# 通知更新 -# ============================================================ - -@notice_blue.route('/update', methods=["PUT"]) -@check_permission("sys:notice:update") -@check_demo -def update(): - """ - 更新通知 - - 功能说明: - 修改已有的通知公告信息。 - - Returns: - JSON: 操作结果 - """ - result = notice.update_notice() - return result - - -# ============================================================ -# 通知删除 -# ============================================================ - -@notice_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:notice:delete") -@check_demo -def delete(id): - """ - 删除通知 - - Args: - id: 通知ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = notice.delete_notices(id) - return result - - -# ============================================================ -# 通知公告批量删除 -# ============================================================ - -@notice_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:notice:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除通知公告 - - 功能说明: - 批量删除通知公告记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 通知公告ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return notice.delete_notices(id_str) +from src.modules.notice.router import * # noqa: F401,F403 diff --git a/application/views/operation_log.py b/application/views/operation_log.py index 06aae2d..19514d2 100644 --- a/application/views/operation_log.py +++ b/application/views/operation_log.py @@ -1,125 +1,8 @@ """ -操作日志管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供操作日志(OperationLog)相关的API接口,包括: -- 操作日志分页查询 -- 操作日志详情查询 -- 操作日志删除(支持批量) -- 操作日志清空 -- 操作日志统计 -- 操作日志类型列表 - -所属包: application.views -依赖模块: application.services.operation_log - 操作日志业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.log.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import operation_log -from utils.request import parse_batch_ids - -operation_log_blue = Blueprint('operation_log', __name__, url_prefix='/oper/log') -from utils import R - - -# ============================================================ -# 操作日志分页查询 -# ============================================================ - -@operation_log_blue.route('/page', methods=["GET"]) -@check_permission("sys:operation_log:page") -def page(): - """ - 查询操作日志分页数据 - - 功能说明: - 获取操作日志列表的分页数据,支持按标题、操作类型、来源、 - 状态、时间范围等条件筛选。 - - Query Parameters: - pageNo: 当前页码(可选,默认1) - pageSize: 每页记录数(可选,默认PAGE_SIZE) - title: 请求标题(可选,模糊查询) - type: 请求类型(可选,精确查询) - source: 请求来源(可选,0-后台,1-前台) - status: 请求状态(可选,0-正常,1-异常) - startTime: 开始时间(可选) - endTime: 结束时间(可选) - - Returns: - JSON: 操作日志分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = operation_log.get_operation_log_page() - return result - - -# ============================================================ -# 操作日志详情查询 -# ============================================================ - -@operation_log_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:operation_log:detail") -def detail(id): - """ - 查询操作日志详情 - - Args: - id: 操作日志ID - - Returns: - JSON: 操作日志详细信息 - """ - data = operation_log.get_operation_log_detail(id) - if data: - return R.ok(data=data) - return R.failed("日志不存在") - - -# ============================================================ -# 操作日志删除 -# ============================================================ - -@operation_log_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:operation_log:delete") -@check_demo -def delete(id): - """ - 删除操作日志 - - Args: - id: 操作日志ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = operation_log.delete_operation_logs(id) - return result - - -# ============================================================ -# 操作日志批量删除 -# ============================================================ - -@operation_log_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:operation_log:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除操作日志 - - 功能说明: - 批量删除操作日志记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 操作日志ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return operation_log.delete_operation_logs(id_str) +from src.modules.log.router import * # noqa: F401,F403 diff --git a/application/views/param.py b/application/views/param.py index 51ac595..3fa7d31 100644 --- a/application/views/param.py +++ b/application/views/param.py @@ -1,218 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -参数管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供参数(Param)相关的API接口,包括: -- 参数分页查询 -- 参数详情查询 -- 参数添加、更新、删除 -- 参数状态设置 -- 参数导入导出 -- 参数列表获取 -- 根据编码获取参数值 - -所属包: application.views -依赖模块: application.services.param - 参数业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.param.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import param -from utils.request import parse_batch_ids -param_blue = Blueprint('param', __name__, url_prefix='/param') - -from utils import R - - -# ============================================================ -# 参数分页查询 -# ============================================================ - -@param_blue.route('/page', methods=["GET"]) -@check_permission("sys:param:page") -def page(): - """ - 查询参数分页数据 - - 功能说明: - 获取参数列表的分页数据,支持关键词搜索和类型、状态筛选。 - - Returns: - JSON: 参数分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = param.get_param_page() - return result - - -# ============================================================ -# 参数详情查询 -# ============================================================ - -@param_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:param:detail") -def detail(id): - """ - 查询参数详情 - - Args: - id: 参数ID - - Returns: - JSON: 参数详细信息 - """ - data = param.get_param_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 参数添加 -# ============================================================ - -@param_blue.route('/add', methods=["POST"]) -@check_permission("sys:param:add") -@check_demo -def add(): - """ - 添加参数 - - 功能说明: - 创建新的参数记录。 - - Returns: - JSON: 操作结果 - """ - result = param.add_param() - return result - - -# ============================================================ -# 参数更新 -# ============================================================ - -@param_blue.route('/update', methods=["PUT"]) -@check_permission("sys:param:update") -@check_demo -def update(): - """ - 更新参数 - - 功能说明: - 修改已有参数的信息。 - - Returns: - JSON: 操作结果 - """ - result = param.update_param() - return result - - -# ============================================================ -# 参数删除 -# ============================================================ - -@param_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:param:delete") -@check_demo -def delete(id): - """ - 删除参数 - - Args: - id: 参数ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = param.delete_params(id) - return result - - -# ============================================================ -# 参数批量删除 -# ============================================================ - -@param_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:param:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除参数 - - 功能说明: - 批量删除参数记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 参数ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return param.delete_params(id_str) - - -# ============================================================ -# 参数状态设置 -# ============================================================ - -@param_blue.route('/status', methods=["PUT"]) -@check_permission("sys:param:status") -@check_demo -def status(): - """ - 设置参数状态 - - 功能说明: - 启用或禁用参数。 - - Returns: - JSON: 操作结果 - """ - result = param.update_param_status() - return result +from src.modules.param.router import * # noqa: F401,F403 diff --git a/application/views/position.py b/application/views/position.py index 70e8a17..44ff690 100644 --- a/application/views/position.py +++ b/application/views/position.py @@ -1,236 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -岗位管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供岗位(Position)相关的API接口,包括: -- 岗位分页查询 -- 岗位详情查询 -- 岗位添加、更新、删除 -- 岗位状态设置 -- 岗位数据列表获取 - -所属包: application.views -依赖模块: application.services.position - 岗位业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.system.position.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import position -from utils.request import parse_batch_ids - -from utils import R - -position_blue = Blueprint('position', __name__, url_prefix='/position') - - -# ============================================================ -# 岗位分页查询 -# ============================================================ - -@position_blue.route('/page', methods=["GET"]) -@check_permission("sys:position:page") -def page(): - """ - 查询岗位分页数据 - - 功能说明: - 获取岗位列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 岗位分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = position.get_position_page() - return result - - -# ============================================================ -# 岗位详情查询 -# ============================================================ - -@position_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:position:detail") -def detail(id): - """ - 查询岗位详情 - - Args: - id: 岗位ID - - Returns: - JSON: 岗位详细信息 - """ - data = position.get_position_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 岗位添加 -# ============================================================ - -@position_blue.route('/add', methods=["POST"]) -@check_permission("sys:position:add") -@check_demo -def add(): - """ - 添加岗位 - - 功能说明: - 创建新的岗位记录。 - - Returns: - JSON: 操作结果 - """ - result = position.add_position() - return result - - -# ============================================================ -# 岗位更新 -# ============================================================ - -@position_blue.route('/update', methods=["PUT"]) -@check_permission("sys:position:update") -@check_demo -def update(): - """ - 更新岗位 - - 功能说明: - 修改已有的岗位信息。 - - Returns: - JSON: 操作结果 - """ - result = position.update_position() - return result - - -# ============================================================ -# 岗位删除 -# ============================================================ - -@position_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:position:delete") -@check_demo -def delete(id): - """ - 删除岗位 - - Args: - id: 岗位ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = position.delete_positions(id) - return result - - -# ============================================================ -# 岗位批量删除 -# ============================================================ - -@position_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:position:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除岗位 - - 功能说明: - 批量删除岗位记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 岗位ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return position.delete_positions(id_str) - - -# ============================================================ -# 岗位状态设置 -# ============================================================ - -@position_blue.route('/status', methods=["PUT"]) -@check_permission("sys:position:status") -@check_demo -def status(): - """ - 设置岗位状态 - - 功能说明: - 启用或禁用岗位。 - - Returns: - JSON: 操作结果 - """ - result = position.update_position_status() - return result - - -# ============================================================ -# 岗位列表获取(无分页) -# ============================================================ - -@position_blue.route('/list', methods=["GET"]) -def get_position_list(): - """ - 获取岗位数据列表(无分页) - - 功能说明: - 获取所有岗位列表,常用于下拉选择框。 - - Returns: - JSON: 岗位列表数据 - """ - result = position.get_position_list() - return R.ok(data=result) +from src.modules.system.position.router import * # noqa: F401,F403 diff --git a/application/views/role.py b/application/views/role.py index 5a86fa3..472a90b 100644 --- a/application/views/role.py +++ b/application/views/role.py @@ -1,214 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -角色管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供角色(Role)相关的API接口,包括: -- 角色分页查询 -- 角色详情查询 -- 角色添加、更新、删除 -- 角色状态设置 -- 角色列表获取 - -所属包: application.views -依赖模块: application.services.role - 角色业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.system.role.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import role -from utils.request import parse_batch_ids -role_blue = Blueprint('role', __name__, url_prefix='/role') - -from utils import R - - -# ============================================================ -# 角色分页查询 -# ============================================================ - -@role_blue.route('/page', methods=["GET"]) -@check_permission("sys:role:page") -def page(): - """ - 查询角色分页数据 - - 功能说明: - 获取角色列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 角色分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = role.get_role_page() - return result - - -# ============================================================ -# 角色详情查询 -# ============================================================ - -@role_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:role:detail") -def detail(id): - """ - 查询角色详情 - - Args: - id: 角色ID - - Returns: - JSON: 角色详细信息 - """ - data = role.get_role_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 角色添加 -# ============================================================ - -@role_blue.route('/add', methods=["POST"]) -@check_permission("sys:role:add") -@check_demo -def add(): - """ - 添加角色 - - 功能说明: - 创建新的角色记录。 - - Returns: - JSON: 操作结果 - """ - result = role.add_role() - return result - - -# ============================================================ -# 角色更新 -# ============================================================ - -@role_blue.route('/update', methods=["PUT"]) -@check_permission("sys:role:update") -@check_demo -def update(): - """ - 更新角色 - - 功能说明: - 修改已有的角色信息。 - - Returns: - JSON: 操作结果 - """ - result = role.update_role() - return result - - -# ============================================================ -# 角色删除 -# ============================================================ - -@role_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:role:delete") -@check_demo -def delete(id): - """ - 删除角色 - - Args: - id: 角色ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = role.delete_roles(id) - return result - - -# ============================================================ -# 角色批量删除 -# ============================================================ - -@role_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:role:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除角色 - - 功能说明: - 批量删除角色记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 角色ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return role.delete_roles(id_str) - - -# ============================================================ -# 角色列表获取(无分页) -# ============================================================ - -@role_blue.route('/list', methods=["GET"]) -def get_role_list(): - """ - 获取角色数据列表(无分页) - - 功能说明: - 获取所有角色列表,常用于下拉选择框。 - - Returns: - JSON: 角色列表数据 - """ - result = role.get_role_list() - return R.ok(data=result) +from src.modules.system.role.router import * # noqa: F401,F403 diff --git a/application/views/role_menu.py b/application/views/role_menu.py index 6410f06..10c4d90 100644 --- a/application/views/role_menu.py +++ b/application/views/role_menu.py @@ -1,105 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -角色菜单权限控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供角色菜单权限(RoleMenu)相关的API接口,包括: -- 角色菜单列表查询 -- 角色菜单权限保存 - -所属包: application.views -依赖模块: application.services.role_menu - 角色菜单业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.association.role_menu.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware import check_permission -from application.middleware.check_demo import check_demo -from application.services import role_menu -role_menu_blue = Blueprint('role_menu', __name__, url_prefix='/role/menu') -from utils import R - - -# ============================================================ -# 角色菜单列表查询 -# ============================================================ - -@role_menu_blue.route('/list/', methods=["GET"]) -@check_permission("sys:role:list") -def list(role_id): - """ - 查询角色的菜单权限列表 - - 功能说明: - 获取指定角色已分配的菜单权限ID列表。 - - Args: - role_id: 角色ID - - Returns: - JSON: 菜单权限ID列表 - """ - menu_list = role_menu.get_role_menus(role_id) - return R.ok(data=menu_list) - - -# ============================================================ -# 角色菜单权限保存 -# ============================================================ - -@role_menu_blue.route('/save', methods=["POST"]) -@check_permission("sys:role:save") -@check_demo -def save(): - """ - 保存角色菜单权限 - - 功能说明: - 为指定角色分配菜单权限。 - - Returns: - JSON: 操作结果 - """ - result = role_menu.save_role_menu() - return result +from src.modules.association.role_menu.router import * # noqa: F401,F403 diff --git a/application/views/upload.py b/application/views/upload.py index 12c47b1..331de73 100644 --- a/application/views/upload.py +++ b/application/views/upload.py @@ -1,91 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - """ -文件上传控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供文件上传相关的API接口,包括: -- 文件上传 - -所属包: application.views -依赖模块: application.services.upload - 文件上传业务逻辑层 +路由已迁移至 src.modules.upload.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.services import upload -upload_blue = Blueprint('upload', __name__, url_prefix='/upload') -from config import UPLOAD_ALLOWED_EXTS -from utils import R - - -# ============================================================ -# 文件上传 -# ============================================================ - -@upload_blue.route('/uploadFile', methods=["POST"]) -@check_demo -def upload_file(): - """ - 上传文件 - - 功能说明: - 上传文件到服务器,仅允许指定扩展名的文件上传,返回文件访问URL及详细信息。 - 允许的文件类型通过 UPLOAD_ALLOWED_EXTS 环境变量配置。 - - Request Parameters: - file: 上传的文件(form-data格式,字段名为'file') - - Returns: - JSON: 上传结果 - - originalName: 原始文件名 - - fileExtension: 文件扩展名 - - fileType: 文件MIME类型 - - fileSize: 文件大小(字节) - - fileName: 生成的文件名 - - filePath: 文件相对路径 - - fileUrl: 文件访问URL - """ - result = upload.upload_file(file_exts=UPLOAD_ALLOWED_EXTS) - - return result +from src.modules.upload.router import * # noqa: F401,F403 diff --git a/application/views/user.py b/application/views/user.py index c2cf742..a3502e0 100644 --- a/application/views/user.py +++ b/application/views/user.py @@ -1,237 +1,8 @@ -# +====================================================================== -# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] -# +---------------------------------------------------------------------- -# | Copyright (c) 2021-2026 一米阳光团队 版权所有 -# +---------------------------------------------------------------------- -# | 开源协议: Apache-2.0 -# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 -# +---------------------------------------------------------------------- -# | 官方网站: https://www.djangoadmin.cn -# +---------------------------------------------------------------------- -# | 研发团队: 一米阳光团队 荣誉出品 -# +====================================================================== -# | 版权和免责声明: -# | 一、知识产权声明 -# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 -# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, -# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 -# | 二、使用限制与禁止条款 -# | 您理解并同意,禁止将本产品用于以下任何行为: -# | 1. 任何违反中华人民共和国法律法规的用途; -# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; -# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 -# | 三、责任豁免 -# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 -# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 -# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 -# | 四、违约与法律责任 -# | 如发现任何违反本声明的行为,本团队有权: -# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; -# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; -# | 3. 保留进一步采取刑事控告等法律措施的权利。 -# | 五、许可范围说明 -# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 -# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 -# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 -# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 -# | 成的一切经济损失及商誉损害。 -# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 -# | 许可协议》附件为准。 -# +====================================================================== - - """ -用户管理控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供用户(User)相关的API接口,包括: -- 用户分页查询 -- 用户详情查询 -- 用户添加、更新、删除 -- 用户状态设置 -- 用户密码重置 - -所属包: application.views -依赖模块: application.services.user - 用户业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.system.user.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import user -from utils.request import parse_batch_ids -user_blue = Blueprint('user', __name__, url_prefix='/user') -from utils import R - - -# ============================================================ -# 用户分页查询 -# ============================================================ - -@user_blue.route('/page', methods=["GET"]) -@check_permission("sys:user:page") -def page(): - """ - 查询用户分页数据 - - 功能说明: - 获取用户列表的分页数据,支持关键词搜索和状态筛选。 - - Returns: - JSON: 用户分页数据,包含 records(数据列表)、total(总记录数)等 - """ - result = user.get_user_page() - return result - - -# ============================================================ -# 用户详情查询 -# ============================================================ - -@user_blue.route('/detail/', methods=["GET"]) -@check_permission("sys:user:detail") -def detail(id): - """ - 查询用户详情 - - Args: - id: 用户ID - - Returns: - JSON: 用户详细信息 - """ - data = user.get_user_detail(id) - return R.ok(data=data) - - -# ============================================================ -# 用户添加 -# ============================================================ - -@user_blue.route('/add', methods=["POST"]) -@check_permission("sys:user:add") -@check_demo -def add(): - """ - 添加用户 - - 功能说明: - 创建新的用户记录。 - - Returns: - JSON: 操作结果 - """ - result = user.add_user() - return result - - -# ============================================================ -# 用户更新 -# ============================================================ - -@user_blue.route('/update', methods=["PUT"]) -@check_permission("sys:user:update") -@check_demo -def update(): - """ - 更新用户 - - 功能说明: - 修改已有的用户信息。 - - Returns: - JSON: 操作结果 - """ - result = user.update_user() - return result - - -# ============================================================ -# 用户删除 -# ============================================================ - -@user_blue.route('/delete/', methods=["DELETE"]) -@check_permission("sys:user:delete") -@check_demo -def delete(id): - """ - 删除用户 - - Args: - id: 用户ID(支持逗号分隔的多个ID) - - Returns: - JSON: 操作结果 - """ - result = user.delete_users(id) - return result - - -# ============================================================ -# 用户批量删除 -# ============================================================ - -@user_blue.route('/batchDelete', methods=["DELETE"]) -@check_permission("sys:user:batch_delete") -@check_demo -def batch_delete(): - """ - 批量删除用户 - - 功能说明: - 批量删除用户记录,支持传入ID数组。 - - Request Body: - [1, 2, 3] # 用户ID数组 - - Returns: - JSON: 操作结果 - """ - id_str, err = parse_batch_ids() - if err: - return err - return user.delete_users(id_str) - - -# ============================================================ -# 用户状态设置 -# ============================================================ - -@user_blue.route('/status', methods=["PUT"]) -@check_permission("sys:user:status") -@check_demo -def status(): - """ - 设置用户状态 - - 功能说明: - 启用或禁用用户账号。 - - Returns: - JSON: 操作结果 - """ - result = user.update_user_status() - return result - - -# ============================================================ -# 用户密码重置 -# ============================================================ - -@user_blue.route('/resetPwd', methods=["PUT"]) -@check_permission("sys:user:resetPwd") -@check_demo -def reset_pwd(): - """ - 重置用户密码 - - 功能说明: - 重置指定用户的登录密码。 - - Returns: - JSON: 操作结果 - """ - result = user.reset_user_password() - return result +from src.modules.system.user.router import * # noqa: F401,F403 diff --git a/application/views/user_role.py b/application/views/user_role.py index 23b8a95..0b1e05d 100644 --- a/application/views/user_role.py +++ b/application/views/user_role.py @@ -1,87 +1,8 @@ """ -用户角色权限控制器模块 +兼容 shim(绞杀者迁移期间保留) ============================================================= -提供用户角色权限(UserRole)相关的API接口,包括: -- 用户角色列表查询 -- 用户角色权限保存 - -所属包: application.views -依赖模块: application.services.user_role - 用户角色业务逻辑层 - application.middleware.check_permission - 权限校验中间件 +路由已迁移至 src.modules.association.user_role.router。 +本文件仅作兼容转发,最终在 P7(切尾)阶段删除。 """ - -from flask import Blueprint - -from application.middleware.check_demo import check_demo -from application.middleware.check_permission import check_permission -from application.services import user_role -user_role_blue = Blueprint('user_role', __name__, url_prefix='/user/role') -from utils import R - - -# ============================================================ -# 用户角色列表查询 -# ============================================================ - -@user_role_blue.route('/list/', methods=["GET"]) -@check_permission("sys:user:list") -def list(user_id): - """ - 查询用户的角色列表 - - 功能说明: - 获取指定用户已分配的角色ID列表。 - - Args: - user_id: 用户ID - - Returns: - JSON: 角色列表 - """ - role_list = user_role.get_user_role_list(user_id) - return R.ok(data=role_list) - - -# ============================================================ -# 用户角色权限保存 -# ============================================================ - -@user_role_blue.route('/save', methods=["POST"]) -@check_permission("sys:user:save") -@check_demo -def save(): - """ - 保存用户角色权限 - - 功能说明: - 为指定用户分配角色权限。 - - Request Body: - { - "userId": 1, - "roleIds": [1, 2, 3] - } - - Returns: - JSON: 操作结果 - """ - from application.forms.user_role import UserRoleForm - from utils.request import get_json_data - - data = get_json_data() - if not data: - return R.failed("参数不能为空") - - form = UserRoleForm(data=data) - if not form.validate(): - from utils.regular import get_error - return R.failed(get_error(form)) - - user_id = form.userId.data - role_ids = form.roleIds.data or [] - - result = user_role.save_user_roles(user_id, role_ids) - if result: - return R.ok(msg="保存成功") - return R.failed("保存失败") +from src.modules.association.user_role.router import * # noqa: F401,F403 diff --git a/src/modules/association/role_menu/router.py b/src/modules/association/role_menu/router.py new file mode 100644 index 0000000..d7991e9 --- /dev/null +++ b/src/modules/association/role_menu/router.py @@ -0,0 +1,105 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +角色菜单权限控制器模块 +============================================================= + +提供角色菜单权限(RoleMenu)相关的API接口,包括: +- 角色菜单列表查询 +- 角色菜单权限保存 + +所属包: application.views +依赖模块: application.services.role_menu - 角色菜单业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware import check_permission +from application.middleware.check_demo import check_demo +from src.modules.system.role import service as role_menu +role_menu_blue = Blueprint('role_menu', __name__, url_prefix='/role/menu') +from src.core import response as R + + +# ============================================================ +# 角色菜单列表查询 +# ============================================================ + +@role_menu_blue.route('/list/', methods=["GET"]) +@check_permission("sys:role:list") +def list(role_id): + """ + 查询角色的菜单权限列表 + + 功能说明: + 获取指定角色已分配的菜单权限ID列表。 + + Args: + role_id: 角色ID + + Returns: + JSON: 菜单权限ID列表 + """ + menu_list = role_menu.get_role_menus(role_id) + return R.ok(data=menu_list) + + +# ============================================================ +# 角色菜单权限保存 +# ============================================================ + +@role_menu_blue.route('/save', methods=["POST"]) +@check_permission("sys:role:save") +@check_demo +def save(): + """ + 保存角色菜单权限 + + 功能说明: + 为指定角色分配菜单权限。 + + Returns: + JSON: 操作结果 + """ + result = role_menu.save_role_menu() + return result diff --git a/src/modules/association/user_role/router.py b/src/modules/association/user_role/router.py new file mode 100644 index 0000000..9d23755 --- /dev/null +++ b/src/modules/association/user_role/router.py @@ -0,0 +1,87 @@ +""" +用户角色权限控制器模块 +============================================================= + +提供用户角色权限(UserRole)相关的API接口,包括: +- 用户角色列表查询 +- 用户角色权限保存 + +所属包: application.views +依赖模块: application.services.user_role - 用户角色业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.system.user import service as user_role +user_role_blue = Blueprint('user_role', __name__, url_prefix='/user/role') +from src.core import response as R + + +# ============================================================ +# 用户角色列表查询 +# ============================================================ + +@user_role_blue.route('/list/', methods=["GET"]) +@check_permission("sys:user:list") +def list(user_id): + """ + 查询用户的角色列表 + + 功能说明: + 获取指定用户已分配的角色ID列表。 + + Args: + user_id: 用户ID + + Returns: + JSON: 角色列表 + """ + role_list = user_role.get_user_role_list(user_id) + return R.ok(data=role_list) + + +# ============================================================ +# 用户角色权限保存 +# ============================================================ + +@user_role_blue.route('/save', methods=["POST"]) +@check_permission("sys:user:save") +@check_demo +def save(): + """ + 保存用户角色权限 + + 功能说明: + 为指定用户分配角色权限。 + + Request Body: + { + "userId": 1, + "roleIds": [1, 2, 3] + } + + Returns: + JSON: 操作结果 + """ + from src.modules.association.user_role.schema import UserRoleForm + from src.common.utils.request import get_json_data + + data = get_json_data() + if not data: + return R.failed("参数不能为空") + + form = UserRoleForm(data=data) + if not form.validate(): + from src.common.utils.regular import get_error + return R.failed(get_error(form)) + + user_id = form.userId.data + role_ids = form.roleIds.data or [] + + result = user_role.save_user_roles(user_id, role_ids) + if result: + return R.ok(msg="保存成功") + return R.failed("保存失败") diff --git a/src/modules/auth/router.py b/src/modules/auth/router.py new file mode 100644 index 0000000..e95d418 --- /dev/null +++ b/src/modules/auth/router.py @@ -0,0 +1,307 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +登录认证控制器模块 +============================================================= + +提供系统登录相关的API接口,包括: +- 用户登录认证 +- 验证码生成 + +所属包: application.views +依赖模块: application.services.logins - 登录业务逻辑层 + utils.captcha - 验证码生成工具 +""" + +from flask import Blueprint + +from src.modules.auth import service as login + +login_blue = Blueprint('login', __name__, url_prefix='/') +from src.core import response as R +from src.common.utils.captcha import generate_captcha +from src.core.jwt import add_token_to_blacklist, get_access_token + + +# ============================================================ +# 用户登录 +# ============================================================ + +@login_blue.route('/login', methods=["POST"]) +def user_login(): + """ + 用户登录认证 + + 功能说明: + 验证用户名、密码和验证码,登录成功后返回访问令牌。 + + Returns: + JSON: 登录结果,成功时返回 token,失败时返回错误信息 + """ + result = login.login() + return result + + +# ============================================================ +# 验证码获取 +# ============================================================ + +@login_blue.route('/captcha', methods=["GET"]) +def captcha(): + """ + 获取图形验证码 + + 功能说明: + 生成图形验证码图片,返回 Base64 编码的图片数据和唯一标识 Key。 + + Returns: + JSON: 验证码信息 + - captcha: Base64 编码的图片数据(data:image/png;base64,xxx) + - key: 验证码唯一标识,用于登录时校验 + """ + result = generate_captcha() + + id_key = result['idKey'] # 验证码唯一标识 + data = result['data'] # 验证码图片 Base64 数据 + + # 拼接完整的图片 DataURL 格式 + img_str = "data:image/png;base64," + data + + return R.ok(data={"captcha": img_str, "key": id_key}) + + +# ============================================================ +# 退出登录 +# ============================================================ + +@login_blue.route('/logout', methods=["GET"]) +def logout(): + """ + 用户退出登录 + + 功能说明: + 将当前Token加入黑名单使其立即失效,确保退出后旧Token无法继续使用。 + + Returns: + JSON: 操作结果 + """ + # 从请求头获取Token并加入黑名单 + success, access_token, _ = get_access_token() + if success and access_token: + add_token_to_blacklist(access_token) + + # 记录退出登录日志 + try: + import time + from flask import g, request + from src.modules.log.models import LoginLog + from src.modules.auth import service as login_log + from src.core.security import get_username + from src.common.utils.ip import get_client_ip + from src.common.utils.ip2region import get_ip_location + from src.common.utils.user_agent import parse_user_agent + + username = get_username() or '未知' + client_ip = get_client_ip() + ua_info = parse_user_agent() + + # 请求耗时 + start_time = getattr(g, 'request_start_time', None) + consume_time = int((time.time() - start_time) * 1000) if start_time else 0 + + login_log.record_login_log( + username=username, + source=LoginLog.Source.ADMIN, + status=LoginLog.Status.NORMAL, + log_type=LoginLog.LogType.LOGOUT, + method=request.method, + request_method=request.endpoint or '', + url=request.path, + param='', + result='退出成功', + ip=client_ip, + location=get_ip_location(client_ip), + os=ua_info.get('os', '未知'), + browser=ua_info.get('browser', '未知'), + consume_time=consume_time, + error='', + ) + except Exception as e: + import logging + logging.getLogger(__name__).warning(f"记录退出日志失败: {str(e)}") + + return R.ok(msg="注销成功") + + + +""" +首页控制器模块 +============================================================= + +提供系统首页相关的API接口,包括: +- 系统菜单获取 +- 当前用户信息获取 +- 个人中心信息更新 +- 密码更新 +- 退出登录 + +所属包: application.views +依赖模块: application.services.menu - 菜单业务逻辑层 + application.services.user - 用户业务逻辑层 + application.models.user - 用户数据模型 +""" +from sqlalchemy import and_ + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from src.modules.system.user.models import User +from src.modules.system.menu import service as menu +from src.modules.system.user import service as user + +index_blue = Blueprint('index', __name__, url_prefix='/index') +from src.core import response as R +from src.common.utils.rich_text import get_file_url +from src.core.security import get_user_id + + +# ============================================================ +# 系统菜单获取 +# ============================================================ + +@index_blue.route('/getMenu', methods=["GET"]) +def get_menus(): + """ + 获取系统菜单列表 + + 功能说明: + 根据当前用户的权限,获取可访问的系统菜单树。 + + Returns: + JSON: 菜单树形结构数据 + """ + menu_list = menu.get_user_permission_menus(get_user_id()) + return R.ok(data=menu_list) + + +# ============================================================ +# 用户信息获取 +# ============================================================ + +@index_blue.route('/getUser', methods=["GET"]) +def get_user(): + """ + 获取当前用户信息 + + 功能说明: + 获取当前登录用户的详细信息,包括: + - 基本信息(姓名、头像、性别、手机号等) + - 权限节点列表 + + Returns: + JSON: 用户详细信息 + """ + # 查询用户信息 + current_user = User.query.filter( + and_(User.id == get_user_id(), User.is_delete == 0) + ).first() + + if not current_user: + return R.failed("用户不存在") + + # 获取权限节点列表 + permissions = menu.get_user_permissions(get_user_id()) + + # 构建用户信息 + info = { + 'realname': current_user.realname, + 'avatar': get_file_url(current_user.avatar), + 'gender': current_user.gender, + 'mobile': current_user.mobile, + 'email': current_user.email, + 'intro': current_user.intro, + 'address': current_user.address, + 'roles': [], + 'permissions': permissions, + } + + return R.ok(data=info) + + +# ============================================================ +# 个人中心信息更新 +# ============================================================ + +@index_blue.route('/userInfo', methods=["PUT"]) +@check_demo +def update_user_info(): + """ + 更新个人中心信息 + + 功能说明: + 修改当前登录用户的基本信息。 + + Returns: + JSON: 操作结果 + """ + result = user.update_user_info() + return result + + +# ============================================================ +# 密码更新 +# ============================================================ + +@index_blue.route('/updatePwd', methods=["PUT"]) +@check_demo +def update_pwd(): + """ + 更新用户密码 + + 功能说明: + 修改当前登录用户的登录密码。 + + Returns: + JSON: 操作结果 + """ + result = user.update_password() + return result diff --git a/src/modules/city/router.py b/src/modules/city/router.py new file mode 100644 index 0000000..8566ac8 --- /dev/null +++ b/src/modules/city/router.py @@ -0,0 +1,190 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +城市管理控制器模块 +============================================================= + +提供城市(City)相关的API接口,包括: +- 城市分页查询 +- 城市详情查询 +- 城市添加、更新、删除 +- 根据城市编码查询子级城市列表 + +所属包: application.views +依赖模块: application.services.city - 城市业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.city import service as city +city_blue = Blueprint('city', __name__, url_prefix='/city') + +from src.core import response as R + + +# ============================================================ +# 城市分页查询 +# ============================================================ + +@city_blue.route('/page', methods=["GET"]) +@check_permission("sys:city:page") +def page(): + """ + 查询城市分页数据 + + 功能说明: + 获取城市列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 城市分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = city.get_city_list() + return result + + +# ============================================================ +# 城市详情查询 +# ============================================================ + +@city_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:city:detail") +def detail(id): + """ + 查询城市详情 + + Args: + id: 城市ID + + Returns: + JSON: 城市详细信息 + """ + data = city.get_city_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 城市添加 +# ============================================================ + +@city_blue.route('/add', methods=["POST"]) +@check_permission("sys:city:add") +@check_demo +def add(): + """ + 添加城市 + + 功能说明: + 创建新的城市记录。 + + Returns: + JSON: 操作结果 + """ + result = city.add_city() + return result + + +# ============================================================ +# 城市更新 +# ============================================================ + +@city_blue.route('/update', methods=["PUT"]) +@check_permission("sys:city:update") +@check_demo +def update(): + """ + 更新城市 + + 功能说明: + 修改已有城市的信息。 + + Returns: + JSON: 操作结果 + """ + result = city.update_city() + return result + + +# ============================================================ +# 城市删除 +# ============================================================ + +@city_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:city:delete") +@check_demo +def delete(id): + """ + 删除城市 + + Args: + id: 城市ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = city.delete_cities(id) + return result + + +# ============================================================ +# 子级城市查询 +# ============================================================ + +@city_blue.route('/getCityList/', methods=["GET"]) +def get_child_list(city_code): + """ + 根据城市编码查询子级城市 + + 功能说明: + 获取指定城市编码下的子级城市列表,用于省市联动选择。 + + Args: + city_code: 城市编码(如:'110000' 查询北京市下的区县) + + Returns: + JSON: 子级城市列表 + """ + data = city.get_child_cities(city_code) + return R.ok(data=data) diff --git a/src/modules/cms/article/router.py b/src/modules/cms/article/router.py new file mode 100644 index 0000000..5e11781 --- /dev/null +++ b/src/modules/cms/article/router.py @@ -0,0 +1,203 @@ +""" +文章管理控制器模块 +============================================================= + +提供文章(Article)相关的API接口,包括: +- 文章分页查询 +- 文章详情查询 +- 文章添加、更新、删除 +- 文章状态设置 +- 文章点击量增加 +- 文章列表获取 +- 根据分类获取文章 + +所属包: application.views +依赖模块: application.services.article - 文章业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.cms.article import service as article +from src.common.utils.request import parse_batch_ids +article_blue = Blueprint('article', __name__, url_prefix='/article') + +from src.core import response as R + + +# ============================================================ +# 文章分页查询 +# ============================================================ + +@article_blue.route('/page', methods=["GET"]) +@check_permission("sys:article:page") +def page(): + """ + 查询文章分页数据 + + 功能说明: + 获取文章列表的分页数据,支持关键词搜索和分类、状态筛选。 + + Query Parameters: + pageNo: 当前页码(可选,默认1) + pageSize: 每页记录数(可选,默认PAGE_SIZE) + title: 文章标题(可选,模糊查询) + category_id: 分类ID(可选,精确查询) + status: 文章状态(可选,0-正常,1-下架) + startTime: 开始时间(可选) + endTime: 结束时间(可选) + + Returns: + JSON: 文章分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = article.get_article_page() + return result + + +# ============================================================ +# 文章详情查询 +# ============================================================ + +@article_blue.route('/detail/', methods=["GET"]) +def detail(id): + """ + 查询文章详情 + + 功能说明: + 获取文章的详细信息,同时增加文章点击量。 + + Args: + id: 文章ID + + Returns: + JSON: 文章详细信息 + """ + data = article.get_article_detail(id) + if data: + return R.ok(data=data) + return R.failed("文章不存在") + + +# ============================================================ +# 文章添加 +# ============================================================ + +@article_blue.route('/add', methods=["POST"]) +@check_permission("sys:article:add") +@check_demo +def add(): + """ + 添加文章 + + 功能说明: + 创建新的文章记录。 + + Request Body: + { + "category_id": 1, + "title": "文章标题", + "cover": "封面图片URL", + "images": ["image1.jpg", "image2.jpg"], + "intro": "文章导读", + "content": "文章内容", + "author": "作者", + "status": 0, + "sort": 0 + } + + Returns: + JSON: 操作结果 + """ + result = article.add_article() + return result + + +# ============================================================ +# 文章更新 +# ============================================================ + +@article_blue.route('/update', methods=["PUT"]) +@check_permission("sys:article:update") +@check_demo +def update(): + """ + 更新文章 + + 功能说明: + 修改已有文章的信息。 + + Returns: + JSON: 操作结果 + """ + result = article.update_article() + return result + + +# ============================================================ +# 文章删除 +# ============================================================ + +@article_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:article:delete") +@check_demo +def delete(id): + """ + 删除文章 + + Args: + id: 文章ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = article.delete_articles(id) + return result + + +# ============================================================ +# 文章批量删除 +# ============================================================ + +@article_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:article:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除文章 + + 功能说明: + 批量删除文章记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 文章ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return article.delete_articles(id_str) + + +# ============================================================ +# 文章状态设置 +# ============================================================ + +@article_blue.route('/status', methods=["PUT"]) +@check_permission("sys:article:status") +@check_demo +def status(): + """ + 设置文章状态 + + 功能说明: + 启用或下架文章。 + + Returns: + JSON: 操作结果 + """ + result = article.update_article_status() + return result diff --git a/src/modules/cms/category/router.py b/src/modules/cms/category/router.py new file mode 100644 index 0000000..33a303c --- /dev/null +++ b/src/modules/cms/category/router.py @@ -0,0 +1,174 @@ +""" +分类管理控制器模块 +============================================================= + +提供分类(Category)相关的API接口,包括: +- 分类列表查询 +- 分类详情查询 +- 分类添加、更新、删除 +- 分类数据列表获取(用于下拉选择、树形展示) +- 分类树获取 +- 子分类列表获取 + +所属包: application.views +依赖模块: application.services.category - 分类业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.cms.category import service as category +category_blue = Blueprint('category', __name__, url_prefix='/category') + +from src.core import response as R + + +# ============================================================ +# 分类列表查询 +# ============================================================ + +@category_blue.route('/list', methods=["GET"]) +@check_permission("sys:category:list") +def list(): + """ + 查询分类列表 + + 功能说明: + 获取分类列表数据,支持按名称模糊搜索。 + + Query Parameters: + category_name: 分类名称(可选,模糊查询) + type: 分类类型(可选,精确查询) + + Returns: + JSON: 分类列表数据 + """ + result = category.get_category_list() + return result + + +# ============================================================ +# 分类详情查询 +# ============================================================ + +@category_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:category:detail") +def detail(id): + """ + 查询分类详情 + + Args: + id: 分类ID + + Returns: + JSON: 分类详细信息 + """ + data = category.get_category_detail(id) + if data: + return R.ok(data=data) + return R.failed("分类不存在") + + +# ============================================================ +# 分类添加 +# ============================================================ + +@category_blue.route('/add', methods=["POST"]) +@check_permission("sys:category:add") +@check_demo +def add(): + """ + 添加分类 + + 功能说明: + 创建新的分类记录。 + + Request Body: + { + "category_name": "分类名称", + "category_code": "分类编码(可选)", + "parent_id": 0, + "sort": 0, + "note": "备注(可选)", + "type": 1 + } + + Returns: + JSON: 操作结果 + """ + result = category.add_category() + return result + + +# ============================================================ +# 分类更新 +# ============================================================ + +@category_blue.route('/update', methods=["PUT"]) +@check_permission("sys:category:update") +@check_demo +def update(): + """ + 更新分类 + + 功能说明: + 修改已有分类的信息。 + + Request Body: + { + "id": 1, + "category_name": "分类名称", + "category_code": "分类编码(可选)", + "parent_id": 0, + "sort": 0, + "note": "备注(可选)", + "type": 1 + } + + Returns: + JSON: 操作结果 + """ + result = category.update_category() + return result + + +# ============================================================ +# 分类删除 +# ============================================================ + +@category_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:category:delete") +@check_demo +def delete(id): + """ + 删除分类 + + Args: + id: 分类ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = category.delete_categories(id) + return result + + +# ============================================================ +# 分类数据列表获取 +# ============================================================ + +@category_blue.route('/getCategoryList', methods=["GET"]) +def get_category_list(): + """ + 获取分类数据列表 + + 功能说明: + 获取所有分类列表,常用于下拉选择框。 + + Returns: + JSON: 分类列表数据 + """ + result = category.get_category_data() + return R.ok(data=result) diff --git a/src/modules/cms/link/router.py b/src/modules/cms/link/router.py new file mode 100644 index 0000000..e2ce6ac --- /dev/null +++ b/src/modules/cms/link/router.py @@ -0,0 +1,216 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +友链管理控制器模块 +============================================================= + +提供友情链接(Link)相关的API接口,包括: +- 友链分页查询 +- 友链详情查询 +- 友链添加、更新、删除 +- 友链状态设置 + +所属包: application.views +依赖模块: application.services.link - 友链业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.cms.link import service as link +from src.common.utils.request import parse_batch_ids +link_blue = Blueprint('link', __name__, url_prefix='/link') + +from src.core import response as R + + +# ============================================================ +# 友链分页查询 +# ============================================================ + +@link_blue.route('/page', methods=["GET"]) +@check_permission("sys:link:page") +def page(): + """ + 查询友链分页数据 + + 功能说明: + 获取友情链接列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 友链分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = link.get_link_page() + return result + + +# ============================================================ +# 友链详情查询 +# ============================================================ + +@link_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:link:detail") +def detail(id): + """ + 查询友链详情 + + Args: + id: 友链ID + + Returns: + JSON: 友链详细信息 + """ + data = link.get_link_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 友链添加 +# ============================================================ + +@link_blue.route('/add', methods=["POST"]) +@check_permission("sys:link:add") +@check_demo +def add(): + """ + 添加友链 + + 功能说明: + 创建新的友情链接记录。 + + Returns: + JSON: 操作结果 + """ + result = link.add_link() + return result + + +# ============================================================ +# 友链更新 +# ============================================================ + +@link_blue.route('/update', methods=["PUT"]) +@check_permission("sys:link:update") +@check_demo +def update(): + """ + 更新友链 + + 功能说明: + 修改已有的友情链接信息。 + + Returns: + JSON: 操作结果 + """ + result = link.update_link() + return result + + +# ============================================================ +# 友链删除 +# ============================================================ + +@link_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:link:delete") +@check_demo +def delete(id): + """ + 删除友链 + + Args: + id: 友链ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = link.delete_links(id) + return result + + +# ============================================================ +# 友链批量删除 +# ============================================================ + +@link_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:link:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除友链 + + 功能说明: + 批量删除友链记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 友链ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return link.delete_links(id_str) + + +# ============================================================ +# 友链状态设置 +# ============================================================ + +@link_blue.route('/status', methods=["PUT"]) +@check_permission("sys:link:status") +@check_demo +def status(): + """ + 设置友链状态 + + 功能说明: + 启用或禁用友情链接。 + + Returns: + JSON: 操作结果 + """ + result = link.update_link_status() + return result diff --git a/src/modules/configuration/router.py b/src/modules/configuration/router.py new file mode 100644 index 0000000..205ea27 --- /dev/null +++ b/src/modules/configuration/router.py @@ -0,0 +1,405 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +参数配置控制器模块 +============================================================= + +提供系统参数配置(Config)相关的API接口,包括: +- 参数配置分页查询 +- 参数配置详情查询 +- 参数配置添加、更新、删除 + +所属包: application.views +依赖模块: application.services.config - 参数配置业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.configuration import service as config +from src.common.utils.request import parse_batch_ids +config_blue = Blueprint('config', __name__, url_prefix='/config') + +from src.core import response as R + + +# ============================================================ +# 参数配置分页查询 +# ============================================================ + +@config_blue.route('/page', methods=["GET"]) +@check_permission("sys:config:page") +def page(): + """ + 查询参数配置分页数据 + + 功能说明: + 获取系统参数配置列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 参数配置分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = config.get_config_page() + return result + + +# ============================================================ +# 参数配置详情查询 +# ============================================================ + +@config_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:config:detail") +def detail(id): + """ + 查询参数配置详情 + + Args: + id: 参数配置ID + + Returns: + JSON: 参数配置详细信息 + """ + data = config.get_config_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 参数配置添加 +# ============================================================ + +@config_blue.route('/add', methods=["POST"]) +@check_permission("sys:config:add") +@check_demo +def add(): + """ + 添加参数配置 + + 功能说明: + 创建新的系统参数配置记录。 + + Returns: + JSON: 操作结果 + """ + result = config.add_config() + return result + + +# ============================================================ +# 参数配置更新 +# ============================================================ + +@config_blue.route('/update', methods=["PUT"]) +@check_permission("sys:config:update") +@check_demo +def update(): + """ + 更新参数配置 + + 功能说明: + 修改已有的参数配置信息。 + + Returns: + JSON: 操作结果 + """ + result = config.update_config() + return result + + +# ============================================================ +# 参数配置删除 +# ============================================================ + +@config_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:config:delete") +@check_demo +def delete(id): + """ + 删除参数配置 + + Args: + id: 参数配置ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = config.delete_configs(id) + return result + + +# ============================================================ +# 配置批量删除 +# ============================================================ + +@config_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:config:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除配置 + + 功能说明: + 批量删除配置记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 配置ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return config.delete_configs(id_str) + + +# ============================================================ +# 网站配置查询 +# ============================================================ + +@config_blue.route('/web/index', methods=["GET"]) +@check_permission("sys:configweb:index") +def web_index(): + """ + 获取网站配置信息 + + Returns: + JSON: 网站配置信息 + """ + result = config.get_config_data() + return R.ok(result) + + +# ============================================================ +# 网站配置保存 +# ============================================================ + +@config_blue.route('/web/save', methods=["POST"]) +@check_permission("sys:configweb:save") +@check_demo +def web_save(): + """ + 保存网站配置信息 + + Returns: + JSON: 操作结果 + """ + result = config.save_config_data() + return result + + + + +""" +配置项数据控制器模块 +============================================================= + +提供配置项数据(ConfigItem)相关的API接口,包括: +- 配置项分页查询 +- 配置项详情查询 +- 配置项添加、更新、删除 +- 配置项状态设置 + +所属包: application.views +依赖模块: application.services.config_item - 配置项业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.configuration import service as config_item +from src.common.utils.request import parse_batch_ids +config_item_blue = Blueprint('config_item', __name__, url_prefix='/config/item') + +from src.core import response as R + + +# ============================================================ +# 配置项分页查询 +# ============================================================ + +@config_item_blue.route('/page', methods=["GET"]) +@check_permission("sys:configitem:page") +def page(): + """ + 查询配置项分页数据 + + 功能说明: + 获取配置项列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 配置项分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = config_item.get_config_item_page() + return result + + +# ============================================================ +# 配置项详情查询 +# ============================================================ + +@config_item_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:configitem:detail") +def detail(id): + """ + 查询配置项详情 + + Args: + id: 配置项ID + + Returns: + JSON: 配置项详细信息 + """ + data = config_item.get_config_item_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 配置项添加 +# ============================================================ + +@config_item_blue.route('/add', methods=["POST"]) +@check_permission("sys:configitem:add") +@check_demo +def add(): + """ + 添加配置项 + + 功能说明: + 创建新的配置项记录。 + + Returns: + JSON: 操作结果 + """ + result = config_item.add_config_item() + return result + + +# ============================================================ +# 配置项更新 +# ============================================================ + +@config_item_blue.route('/update', methods=["PUT"]) +@check_permission("sys:configitem:update") +@check_demo +def update(): + """ + 更新配置项 + + 功能说明: + 修改已有的配置项信息。 + + Returns: + JSON: 操作结果 + """ + result = config_item.update_config_item() + return result + + +# ============================================================ +# 配置项删除 +# ============================================================ + +@config_item_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:configitem:delete") +@check_demo +def delete(id): + """ + 删除配置项 + + Args: + id: 配置项ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = config_item.delete_config_items(id) + return result + + +# ============================================================ +# 配置项批量删除 +# ============================================================ + +@config_item_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:configitem:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除配置项 + + 功能说明: + 批量删除配置项记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 配置项ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return config_item.delete_config_items(id_str) + + +# ============================================================ +# 配置项状态设置 +# ============================================================ + +@config_item_blue.route('/status', methods=["PUT"]) +@check_permission("sys:configitem:status") +@check_demo +def status(): + """ + 设置配置项状态 + + 功能说明: + 启用或禁用配置项。 + + Returns: + JSON: 操作结果 + """ + result = config_item.update_config_item_status() + return result diff --git a/src/modules/dictionary/router.py b/src/modules/dictionary/router.py new file mode 100644 index 0000000..50e7952 --- /dev/null +++ b/src/modules/dictionary/router.py @@ -0,0 +1,348 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +字典管理控制器模块 +============================================================= + +提供字典(Dict)相关的API接口,包括: +- 字典分页查询 +- 字典详情查询 +- 字典添加、更新、删除 + +所属包: application.views +依赖模块: application.services.dicts - 字典业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.dictionary import service as dict +from src.common.utils.request import parse_batch_ids +dict_blue = Blueprint('dict', __name__, url_prefix='/dict') + +from src.core import response as R + + +# ============================================================ +# 字典分页查询 +# ============================================================ + +@dict_blue.route('/page', methods=["GET"]) +@check_permission("sys:dict:page") +def page(): + """ + 查询字典分页数据 + + 功能说明: + 获取字典列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 字典分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = dict.get_dict_page() + return result + + +# ============================================================ +# 字典详情查询 +# ============================================================ + +@dict_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:dict:detail") +def detail(id): + """ + 查询字典详情 + + Args: + id: 字典ID + + Returns: + JSON: 字典详细信息 + """ + data = dict.get_dict_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 字典添加 +# ============================================================ + +@dict_blue.route('/add', methods=["POST"]) +@check_permission("sys:dict:add") +@check_demo +def add(): + """ + 添加字典 + + 功能说明: + 创建新的字典记录。 + + Returns: + JSON: 操作结果 + """ + result = dict.add_dict() + return result + + +# ============================================================ +# 字典更新 +# ============================================================ + +@dict_blue.route('/update', methods=["PUT"]) +@check_permission("sys:dict:update") +@check_demo +def update(): + """ + 更新字典 + + 功能说明: + 修改已有的字典信息。 + + Returns: + JSON: 操作结果 + """ + result = dict.update_dict() + return result + + +# ============================================================ +# 字典删除 +# ============================================================ + +@dict_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:dict:delete") +@check_demo +def delete(id): + """ + 删除字典 + + Args: + id: 字典ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = dict.delete_dicts(id) + return result + + +# ============================================================ +# 字典批量删除 +# ============================================================ + +@dict_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:dict:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除字典 + + 功能说明: + 批量删除字典记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 字典ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return dict.delete_dicts(id_str) + + + + +""" +字典项数据控制器模块 +============================================================= + +提供字典项数据(DictItem)相关的API接口,包括: +- 字典项分页查询 +- 字典项详情查询 +- 字典项添加、更新、删除 + +所属包: application.views +依赖模块: application.services.dicts_data - 字典项业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.dictionary import service as dict_item +from src.common.utils.request import parse_batch_ids +dict_item_blue = Blueprint('dict_item', __name__, url_prefix='/dict/item') + +from src.core import response as R + + +# ============================================================ +# 字典项分页查询 +# ============================================================ + +@dict_item_blue.route('/page', methods=["GET"]) +@check_permission("sys:dictitem:page") +def page(): + """ + 查询字典项分页数据 + + 功能说明: + 获取字典项列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 字典项分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = dict_item.get_dict_item_page() + return result + + +# ============================================================ +# 字典项详情查询 +# ============================================================ + +@dict_item_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:dictitem:detail") +def detail(id): + """ + 查询字典项详情 + + Args: + id: 字典项ID + + Returns: + JSON: 字典项详细信息 + """ + data = dict_item.get_dict_item_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 字典项添加 +# ============================================================ + +@dict_item_blue.route('/add', methods=["POST"]) +@check_permission("sys:dictitem:add") +@check_demo +def add(): + """ + 添加字典项 + + 功能说明: + 创建新的字典项记录。 + + Returns: + JSON: 操作结果 + """ + result = dict_item.add_dict_item() + return result + + +# ============================================================ +# 字典项更新 +# ============================================================ + +@dict_item_blue.route('/update', methods=["PUT"]) +@check_permission("sys:dictitem:update") +@check_demo +def update(): + """ + 更新字典项 + + 功能说明: + 修改已有的字典项信息。 + + Returns: + JSON: 操作结果 + """ + result = dict_item.update_dict_item() + return result + + +# ============================================================ +# 字典项删除 +# ============================================================ + +@dict_item_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:dictitem:delete") +@check_demo +def delete(id): + """ + 删除字典项 + + Args: + id: 字典项ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = dict_item.delete_dict_items(id) + return result + + +# ============================================================ +# 字典项批量删除 +# ============================================================ + +@dict_item_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:dictitem:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除字典项 + + 功能说明: + 批量删除字典项记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 字典项ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return dict_item.delete_dict_items(id_str) diff --git a/src/modules/file_template/router.py b/src/modules/file_template/router.py new file mode 100644 index 0000000..9eb117a --- /dev/null +++ b/src/modules/file_template/router.py @@ -0,0 +1,156 @@ +""" +文件模板管理控制器模块 +============================================================= + +提供文件模板(FileTemplate)相关的API接口,包括: +- 文件模板分页查询 +- 文件模板详情查询 +- 文件模板添加、更新、删除 +- 文件模板列表获取 +- 模板文件上传 +- 模板文件下载 + +所属包: application.views +依赖模块: application.services.file_template - 文件模板业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.file_template import service as file_template +from src.common.utils.request import parse_batch_ids +file_template_blue = Blueprint('file_template', __name__, url_prefix='/file/template') + +from src.core import response as R + + +# ============================================================ +# 文件模板分页查询 +# ============================================================ + +@file_template_blue.route('/page', methods=["GET"]) +@check_permission("sys:filetemplate:page") +def page(): + """ + 查询文件模板分页数据 + + 功能说明: + 获取文件模板列表的分页数据,支持关键词搜索。 + + Returns: + JSON: 文件模板分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = file_template.get_file_template_page() + return result + + +# ============================================================ +# 文件模板详情查询 +# ============================================================ + +@file_template_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:filetemplate:detail") +def detail(id): + """ + 查询文件模板详情 + + Args: + id: 文件模板ID + + Returns: + JSON: 文件模板详细信息 + """ + data = file_template.get_file_template_detail(id) + if data: + return R.ok(data=data) + return R.failed("模板不存在") + + +# ============================================================ +# 文件模板添加 +# ============================================================ + +@file_template_blue.route('/add', methods=["POST"]) +@check_permission("sys:filetemplate:add") +@check_demo +def add(): + """ + 添加文件模板 + + 功能说明: + 创建新的文件模板记录。 + + Returns: + JSON: 操作结果 + """ + result = file_template.add_file_template() + return result + + +# ============================================================ +# 文件模板更新 +# ============================================================ + +@file_template_blue.route('/update', methods=["PUT"]) +@check_permission("sys:filetemplate:update") +@check_demo +def update(): + """ + 更新文件模板 + + 功能说明: + 修改已有文件模板的信息。 + + Returns: + JSON: 操作结果 + """ + result = file_template.update_file_template() + return result + + +# ============================================================ +# 文件模板删除 +# ============================================================ + +@file_template_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:filetemplate:delete") +@check_demo +def delete(id): + """ + 删除文件模板 + + Args: + id: 文件模板ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = file_template.delete_file_templates(id) + return result + + +# ============================================================ +# 文件模板批量删除 +# ============================================================ + +@file_template_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:filetemplate:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除文件模板 + + 功能说明: + 批量删除文件模板记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 文件模板ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return file_template.delete_file_templates(id_str) diff --git a/src/modules/job/router.py b/src/modules/job/router.py new file mode 100644 index 0000000..a221457 --- /dev/null +++ b/src/modules/job/router.py @@ -0,0 +1,203 @@ +""" +定时任务管理控制器模块 +============================================================= + +提供定时任务(Job)相关的API接口。 +""" +import logging + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.job import service as job +from src.common.utils.request import parse_batch_ids +job_blue = Blueprint('job', __name__, url_prefix='/job') +from src.core import response as R + + +# ============================================================ +# 任务分页查询 +# ============================================================ + +@job_blue.route('/page', methods=["GET"]) +@check_permission("sys:job:page") +def page(): + """查询定时任务分页数据""" + result = job.get_job_page() + return result + + +# ============================================================ +# 任务详情查询 +# ============================================================ + +@job_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:job:detail") +def detail(id): + """查询定时任务详情""" + data = job.get_job_detail(id) + if data: + return R.ok(data=data) + return R.failed("任务不存在") + + +# ============================================================ +# 任务添加 +# ============================================================ + +@job_blue.route('/add', methods=["POST"]) +@check_permission("sys:job:add") +@check_demo +def add(): + """添加定时任务""" + result = job.add_job() + return result + + +# ============================================================ +# 任务更新 +# ============================================================ + +@job_blue.route('/update', methods=["PUT"]) +@check_permission("sys:job:update") +@check_demo +def update(): + """更新定时任务""" + result = job.update_job() + return result + + +# ============================================================ +# 任务删除 +# ============================================================ + +@job_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:job:delete") +@check_demo +def delete(id): + """删除定时任务""" + result = job.delete_jobs(id) + return result + + +# ============================================================ +# 任务批量删除 +# ============================================================ + +@job_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:job:batch_delete") +@check_demo +def batch_delete(): + """批量删除定时任务""" + id_str, err = parse_batch_ids() + if err: + return err + return job.delete_jobs(id_str) + + +# ============================================================ +# 任务状态设置 +# ============================================================ + +@job_blue.route('/status', methods=["POST"]) +@check_permission("sys:job:status") +@check_demo +def status(): + """设置任务状态""" + result = job.update_job_status() + return result + + +# ============================================================ +# 暂停任务 +# ============================================================ + +@job_blue.route('/pause/', methods=["GET"]) +@check_permission("sys:job:pause") +@check_demo +def pause(id): + """暂停任务""" + result = job.pause_job(id) + return result + + +# ============================================================ +# 恢复任务 +# ============================================================ + +@job_blue.route('/resume/', methods=["GET"]) +@check_permission("sys:job:resume") +@check_demo +def resume(id): + """恢复任务""" + result = job.resume_job(id) + return result + + +# ============================================================ +# 立即执行 +# ============================================================ + +@job_blue.route('/runOnce/', methods=["GET"]) +@check_permission("sys:job:runOnce") +@check_demo +def run_once(id): + """立即执行一次任务""" + result = job.run_job_once(id) + return result + + +# ============================================================ +# 重新加载调度器 +# ============================================================ + +@job_blue.route('/reload', methods=["GET"]) +@check_permission("sys:job:reload") +@check_demo +def reload(): + """重新加载所有任务到调度器""" + result = job.reload_all_jobs() + return result + + +# ============================================================ +# 发送测试短信 +# ============================================================ + +@job_blue.route('/sendSms', methods=["POST"]) +@check_permission("sys:job:sendSms") +def sendSms(): + """ + 发送测试短信 + + Request Body: + { + "phone": "13800138000", + "template_code": "SMS_123456", + "template_params": {"code": "123456"} + } + """ + from src.modules.job import sms_service + from src.common.utils.request import get_json_data + + data = get_json_data() + if not data: + return R.failed("参数不能为空") + + phone = data.get('phone') + template_code = data.get('template_code') + template_params = data.get('template_params') + + if not phone or not template_code: + return R.failed("手机号和模板CODE不能为空") + + success = sms_service.send_sms( + phone=phone, + template_code=template_code, + template_params=template_params, + ) + + if success: + return R.ok(msg="短信发送成功") + return R.failed("短信发送失败,请检查配置") diff --git a/src/modules/notice/router.py b/src/modules/notice/router.py new file mode 100644 index 0000000..3a19796 --- /dev/null +++ b/src/modules/notice/router.py @@ -0,0 +1,193 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +通知公告控制器模块 +============================================================= + +提供通知公告(Notice)相关的API接口,包括: +- 通知分页查询 +- 通知详情查询 +- 通知添加、更新、删除 + +所属包: application.views +依赖模块: application.services.notice - 通知业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.notice import service as notice +from src.common.utils.request import parse_batch_ids +notice_blue = Blueprint('notice', __name__, url_prefix='/notice') + +from src.core import response as R + + +# ============================================================ +# 通知分页查询 +# ============================================================ + +@notice_blue.route('/page', methods=["GET"]) +@check_permission("sys:notice:page") +def page(): + """ + 查询通知分页数据 + + 功能说明: + 获取通知公告列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 通知分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = notice.get_notice_page() + return result + + +# ============================================================ +# 通知详情查询 +# ============================================================ + +@notice_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:notice:detail") +def detail(id): + """ + 查询通知详情 + + Args: + id: 通知ID + + Returns: + JSON: 通知详细信息 + """ + data = notice.get_notice_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 通知添加 +# ============================================================ + +@notice_blue.route('/add', methods=["POST"]) +@check_permission("sys:notice:add") +@check_demo +def add(): + """ + 添加通知 + + 功能说明: + 创建新的通知公告记录。 + + Returns: + JSON: 操作结果 + """ + result = notice.add_notice() + return result + + +# ============================================================ +# 通知更新 +# ============================================================ + +@notice_blue.route('/update', methods=["PUT"]) +@check_permission("sys:notice:update") +@check_demo +def update(): + """ + 更新通知 + + 功能说明: + 修改已有的通知公告信息。 + + Returns: + JSON: 操作结果 + """ + result = notice.update_notice() + return result + + +# ============================================================ +# 通知删除 +# ============================================================ + +@notice_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:notice:delete") +@check_demo +def delete(id): + """ + 删除通知 + + Args: + id: 通知ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = notice.delete_notices(id) + return result + + +# ============================================================ +# 通知公告批量删除 +# ============================================================ + +@notice_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:notice:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除通知公告 + + 功能说明: + 批量删除通知公告记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 通知公告ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return notice.delete_notices(id_str) diff --git a/src/modules/param/router.py b/src/modules/param/router.py new file mode 100644 index 0000000..fbea281 --- /dev/null +++ b/src/modules/param/router.py @@ -0,0 +1,218 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +参数管理控制器模块 +============================================================= + +提供参数(Param)相关的API接口,包括: +- 参数分页查询 +- 参数详情查询 +- 参数添加、更新、删除 +- 参数状态设置 +- 参数导入导出 +- 参数列表获取 +- 根据编码获取参数值 + +所属包: application.views +依赖模块: application.services.param - 参数业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.param import service as param +from src.common.utils.request import parse_batch_ids +param_blue = Blueprint('param', __name__, url_prefix='/param') + +from src.core import response as R + + +# ============================================================ +# 参数分页查询 +# ============================================================ + +@param_blue.route('/page', methods=["GET"]) +@check_permission("sys:param:page") +def page(): + """ + 查询参数分页数据 + + 功能说明: + 获取参数列表的分页数据,支持关键词搜索和类型、状态筛选。 + + Returns: + JSON: 参数分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = param.get_param_page() + return result + + +# ============================================================ +# 参数详情查询 +# ============================================================ + +@param_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:param:detail") +def detail(id): + """ + 查询参数详情 + + Args: + id: 参数ID + + Returns: + JSON: 参数详细信息 + """ + data = param.get_param_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 参数添加 +# ============================================================ + +@param_blue.route('/add', methods=["POST"]) +@check_permission("sys:param:add") +@check_demo +def add(): + """ + 添加参数 + + 功能说明: + 创建新的参数记录。 + + Returns: + JSON: 操作结果 + """ + result = param.add_param() + return result + + +# ============================================================ +# 参数更新 +# ============================================================ + +@param_blue.route('/update', methods=["PUT"]) +@check_permission("sys:param:update") +@check_demo +def update(): + """ + 更新参数 + + 功能说明: + 修改已有参数的信息。 + + Returns: + JSON: 操作结果 + """ + result = param.update_param() + return result + + +# ============================================================ +# 参数删除 +# ============================================================ + +@param_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:param:delete") +@check_demo +def delete(id): + """ + 删除参数 + + Args: + id: 参数ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = param.delete_params(id) + return result + + +# ============================================================ +# 参数批量删除 +# ============================================================ + +@param_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:param:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除参数 + + 功能说明: + 批量删除参数记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 参数ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return param.delete_params(id_str) + + +# ============================================================ +# 参数状态设置 +# ============================================================ + +@param_blue.route('/status', methods=["PUT"]) +@check_permission("sys:param:status") +@check_demo +def status(): + """ + 设置参数状态 + + 功能说明: + 启用或禁用参数。 + + Returns: + JSON: 操作结果 + """ + result = param.update_param_status() + return result diff --git a/src/modules/system/dept/router.py b/src/modules/system/dept/router.py new file mode 100644 index 0000000..f80f2cf --- /dev/null +++ b/src/modules/system/dept/router.py @@ -0,0 +1,187 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +部门管理控制器模块 +============================================================= + +提供部门(Dept)相关的API接口,包括: +- 部门列表查询 +- 部门详情查询 +- 部门添加、更新、删除 +- 部门数据列表获取(用于树形选择) + +所属包: application.views +依赖模块: application.services.dept - 部门业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.system.dept import service as dept +dept_blue = Blueprint('dept', __name__, url_prefix='/dept') + +from src.core import response as R + + +# ============================================================ +# 部门列表查询 +# ============================================================ + +@dept_blue.route('/list', methods=["GET"]) +@check_permission("sys:dept:list") +def list(): + """ + 查询部门列表 + + 功能说明: + 获取部门列表数据,支持树形结构展示。 + + Returns: + JSON: 部门列表数据 + """ + result = dept.get_dept_list() + return result + + +# ============================================================ +# 部门详情查询 +# ============================================================ + +@dept_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:dept:detail") +def detail(id): + """ + 查询部门详情 + + Args: + id: 部门ID + + Returns: + JSON: 部门详细信息 + """ + data = dept.get_dept_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 部门添加 +# ============================================================ + +@dept_blue.route('/add', methods=["POST"]) +@check_permission("sys:dept:add") +@check_demo +def add(): + """ + 添加部门 + + 功能说明: + 创建新的部门记录。 + + Returns: + JSON: 操作结果 + """ + result = dept.add_dept() + return result + + +# ============================================================ +# 部门更新 +# ============================================================ + +@dept_blue.route('/update', methods=["PUT"]) +@check_permission("sys:dept:update") +@check_demo +def update(): + """ + 更新部门 + + 功能说明: + 修改已有部门的信息。 + + Returns: + JSON: 操作结果 + """ + result = dept.update_dept() + return result + + +# ============================================================ +# 部门删除 +# ============================================================ + +@dept_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:dept:delete") +@check_demo +def delete(id): + """ + 删除部门 + + Args: + id: 部门ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = dept.delete_depts(id) + return result + + +# ============================================================ +# 部门数据列表获取 +# ============================================================ + +@dept_blue.route('/getDeptList', methods=["GET"]) +def get_dept_list(): + """ + 获取部门数据列表 + + 功能说明: + 获取所有部门列表,常用于下拉选择框或树形组件。 + + Returns: + JSON: 部门列表数据 + """ + result = dept.get_dept_data() + return R.ok(data=result) diff --git a/src/modules/system/level/router.py b/src/modules/system/level/router.py new file mode 100644 index 0000000..9f49d0a --- /dev/null +++ b/src/modules/system/level/router.py @@ -0,0 +1,278 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +职级管理控制器模块 +============================================================= + +提供职级(Level)相关的API接口,包括: +- 职级分页查询 +- 职级详情查询 +- 职级添加、更新、删除 +- 职级状态设置 +- 职级导入导出 +- 职级列表获取 + +所属包: application.views +依赖模块: application.services.level - 职级业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.system.level import service as level +from src.common.utils.request import parse_batch_ids +level_blue = Blueprint('level', __name__, url_prefix='/level') + +from src.core import response as R + + +# ============================================================ +# 职级分页查询 +# ============================================================ + +@level_blue.route('/page', methods=["GET"]) +@check_permission("sys:level:page") +def page(): + """ + 查询职级分页数据 + + 功能说明: + 获取职级列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 职级分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = level.get_level_page() + return result + + +# ============================================================ +# 职级详情查询 +# ============================================================ + +@level_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:level:detail") +def detail(id): + """ + 查询职级详情 + + Args: + id: 职级ID + + Returns: + JSON: 职级详细信息 + """ + data = level.get_level_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 职级添加 +# ============================================================ + +@level_blue.route('/add', methods=["POST"]) +@check_permission("sys:level:add") +@check_demo +def add(): + """ + 添加职级 + + 功能说明: + 创建新的职级记录。 + + Returns: + JSON: 操作结果 + """ + result = level.add_level() + return result + + +# ============================================================ +# 职级更新 +# ============================================================ + +@level_blue.route('/update', methods=["PUT"]) +@check_permission("sys:level:update") +@check_demo +def update(): + """ + 更新职级 + + 功能说明: + 修改已有职级的信息。 + + Returns: + JSON: 操作结果 + """ + result = level.update_level() + return result + + +# ============================================================ +# 职级删除 +# ============================================================ + +@level_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:level:delete") +@check_demo +def delete(id): + """ + 删除职级 + + Args: + id: 职级ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = level.delete_levels(id) + return result + + +# ============================================================ +# 职级批量删除 +# ============================================================ + +@level_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:level:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除职级 + + 功能说明: + 批量删除职级记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 职级ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return level.delete_levels(id_str) + + +# ============================================================ +# 职级状态设置 +# ============================================================ + +@level_blue.route('/status', methods=["PUT"]) +@check_permission("sys:level:status") +@check_demo +def status(): + """ + 设置职级状态 + + 功能说明: + 启用或禁用职级。 + + Returns: + JSON: 操作结果 + """ + result = level.update_level_status() + return result + + +# ============================================================ +# Excel导入 +# ============================================================ + +@level_blue.route('/import', methods=["POST"]) +@check_permission("sys:level:import") +@check_demo +def imports(): + """ + 导入Excel文件 + + 功能说明: + 通过上传Excel文件批量导入职级数据。 + + Returns: + JSON: 导入结果,包含成功/失败数量 + """ + result = level.import_levels() + return result + + +# ============================================================ +# Excel导出 +# ============================================================ + +@level_blue.route('/export', methods=["POST"]) +@check_permission("sys:level:export") +@check_demo +def export(): + """ + 导出Excel文件 + + 功能说明: + 将职级数据导出为Excel文件。 + + Returns: + Response: Excel文件下载响应 + """ + result = level.export_levels() + return result + + +# ============================================================ +# 职级列表获取(无分页) +# ============================================================ + +@level_blue.route('/list', methods=["GET"]) +def get_level_list(): + """ + 获取职级数据列表(无分页) + + 功能说明: + 获取所有职级列表,常用于下拉选择框。 + + Returns: + JSON: 职级列表数据 + """ + result = level.get_level_list() + return R.ok(data=result) diff --git a/src/modules/system/menu/router.py b/src/modules/system/menu/router.py new file mode 100644 index 0000000..7eb3538 --- /dev/null +++ b/src/modules/system/menu/router.py @@ -0,0 +1,166 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +菜单管理控制器模块 +============================================================= + +提供系统菜单(Menu)相关的API接口,包括: +- 菜单列表查询 +- 菜单详情查询 +- 菜单添加、更新、删除 + +所属包: application.views +依赖模块: application.services.menu - 菜单业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.system.menu import service as menu +menu_blue = Blueprint('menu', __name__, url_prefix='/menu') + +from src.core import response as R + + +# ============================================================ +# 菜单列表查询 +# ============================================================ + +@menu_blue.route('/list', methods=["GET"]) +@check_permission("sys:menu:list") +def list(): + """ + 查询菜单列表 + + 功能说明: + 获取系统菜单列表数据,支持树形结构展示。 + + Returns: + JSON: 菜单列表数据 + """ + result = menu.get_menu_list() + return result + + +# ============================================================ +# 菜单详情查询 +# ============================================================ + +@menu_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:menu:detail") +def detail(id): + """ + 查询菜单详情 + + Args: + id: 菜单ID + + Returns: + JSON: 菜单详细信息 + """ + data = menu.get_menu_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 菜单添加 +# ============================================================ + +@menu_blue.route('/add', methods=["POST"]) +@check_permission("sys:menu:add") +@check_demo +def add(): + """ + 添加菜单 + + 功能说明: + 创建新的菜单记录。 + + Returns: + JSON: 操作结果 + """ + result = menu.add_menu() + return result + + +# ============================================================ +# 菜单更新 +# ============================================================ + +@menu_blue.route('/update', methods=["PUT"]) +@check_permission("sys:menu:update") +@check_demo +def update(): + """ + 更新菜单 + + 功能说明: + 修改已有的菜单信息。 + + Returns: + JSON: 操作结果 + """ + result = menu.update_menu() + return result + + +# ============================================================ +# 菜单删除 +# ============================================================ + +@menu_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:menu:delete") +@check_demo +def delete(id): + """ + 删除菜单 + + Args: + id: 菜单ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = menu.delete_menus(id) + return result diff --git a/src/modules/system/position/router.py b/src/modules/system/position/router.py new file mode 100644 index 0000000..0f9d0bb --- /dev/null +++ b/src/modules/system/position/router.py @@ -0,0 +1,236 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +岗位管理控制器模块 +============================================================= + +提供岗位(Position)相关的API接口,包括: +- 岗位分页查询 +- 岗位详情查询 +- 岗位添加、更新、删除 +- 岗位状态设置 +- 岗位数据列表获取 + +所属包: application.views +依赖模块: application.services.position - 岗位业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.system.position import service as position +from src.common.utils.request import parse_batch_ids + +from src.core import response as R + +position_blue = Blueprint('position', __name__, url_prefix='/position') + + +# ============================================================ +# 岗位分页查询 +# ============================================================ + +@position_blue.route('/page', methods=["GET"]) +@check_permission("sys:position:page") +def page(): + """ + 查询岗位分页数据 + + 功能说明: + 获取岗位列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 岗位分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = position.get_position_page() + return result + + +# ============================================================ +# 岗位详情查询 +# ============================================================ + +@position_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:position:detail") +def detail(id): + """ + 查询岗位详情 + + Args: + id: 岗位ID + + Returns: + JSON: 岗位详细信息 + """ + data = position.get_position_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 岗位添加 +# ============================================================ + +@position_blue.route('/add', methods=["POST"]) +@check_permission("sys:position:add") +@check_demo +def add(): + """ + 添加岗位 + + 功能说明: + 创建新的岗位记录。 + + Returns: + JSON: 操作结果 + """ + result = position.add_position() + return result + + +# ============================================================ +# 岗位更新 +# ============================================================ + +@position_blue.route('/update', methods=["PUT"]) +@check_permission("sys:position:update") +@check_demo +def update(): + """ + 更新岗位 + + 功能说明: + 修改已有的岗位信息。 + + Returns: + JSON: 操作结果 + """ + result = position.update_position() + return result + + +# ============================================================ +# 岗位删除 +# ============================================================ + +@position_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:position:delete") +@check_demo +def delete(id): + """ + 删除岗位 + + Args: + id: 岗位ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = position.delete_positions(id) + return result + + +# ============================================================ +# 岗位批量删除 +# ============================================================ + +@position_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:position:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除岗位 + + 功能说明: + 批量删除岗位记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 岗位ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return position.delete_positions(id_str) + + +# ============================================================ +# 岗位状态设置 +# ============================================================ + +@position_blue.route('/status', methods=["PUT"]) +@check_permission("sys:position:status") +@check_demo +def status(): + """ + 设置岗位状态 + + 功能说明: + 启用或禁用岗位。 + + Returns: + JSON: 操作结果 + """ + result = position.update_position_status() + return result + + +# ============================================================ +# 岗位列表获取(无分页) +# ============================================================ + +@position_blue.route('/list', methods=["GET"]) +def get_position_list(): + """ + 获取岗位数据列表(无分页) + + 功能说明: + 获取所有岗位列表,常用于下拉选择框。 + + Returns: + JSON: 岗位列表数据 + """ + result = position.get_position_list() + return R.ok(data=result) diff --git a/src/modules/system/role/router.py b/src/modules/system/role/router.py new file mode 100644 index 0000000..32acdb5 --- /dev/null +++ b/src/modules/system/role/router.py @@ -0,0 +1,214 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +角色管理控制器模块 +============================================================= + +提供角色(Role)相关的API接口,包括: +- 角色分页查询 +- 角色详情查询 +- 角色添加、更新、删除 +- 角色状态设置 +- 角色列表获取 + +所属包: application.views +依赖模块: application.services.role - 角色业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.system.role import service as role +from src.common.utils.request import parse_batch_ids +role_blue = Blueprint('role', __name__, url_prefix='/role') + +from src.core import response as R + + +# ============================================================ +# 角色分页查询 +# ============================================================ + +@role_blue.route('/page', methods=["GET"]) +@check_permission("sys:role:page") +def page(): + """ + 查询角色分页数据 + + 功能说明: + 获取角色列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 角色分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = role.get_role_page() + return result + + +# ============================================================ +# 角色详情查询 +# ============================================================ + +@role_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:role:detail") +def detail(id): + """ + 查询角色详情 + + Args: + id: 角色ID + + Returns: + JSON: 角色详细信息 + """ + data = role.get_role_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 角色添加 +# ============================================================ + +@role_blue.route('/add', methods=["POST"]) +@check_permission("sys:role:add") +@check_demo +def add(): + """ + 添加角色 + + 功能说明: + 创建新的角色记录。 + + Returns: + JSON: 操作结果 + """ + result = role.add_role() + return result + + +# ============================================================ +# 角色更新 +# ============================================================ + +@role_blue.route('/update', methods=["PUT"]) +@check_permission("sys:role:update") +@check_demo +def update(): + """ + 更新角色 + + 功能说明: + 修改已有的角色信息。 + + Returns: + JSON: 操作结果 + """ + result = role.update_role() + return result + + +# ============================================================ +# 角色删除 +# ============================================================ + +@role_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:role:delete") +@check_demo +def delete(id): + """ + 删除角色 + + Args: + id: 角色ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = role.delete_roles(id) + return result + + +# ============================================================ +# 角色批量删除 +# ============================================================ + +@role_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:role:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除角色 + + 功能说明: + 批量删除角色记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 角色ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return role.delete_roles(id_str) + + +# ============================================================ +# 角色列表获取(无分页) +# ============================================================ + +@role_blue.route('/list', methods=["GET"]) +def get_role_list(): + """ + 获取角色数据列表(无分页) + + 功能说明: + 获取所有角色列表,常用于下拉选择框。 + + Returns: + JSON: 角色列表数据 + """ + result = role.get_role_list() + return R.ok(data=result) diff --git a/src/modules/system/user/router.py b/src/modules/system/user/router.py new file mode 100644 index 0000000..87d6d7e --- /dev/null +++ b/src/modules/system/user/router.py @@ -0,0 +1,237 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + + +""" +用户管理控制器模块 +============================================================= + +提供用户(User)相关的API接口,包括: +- 用户分页查询 +- 用户详情查询 +- 用户添加、更新、删除 +- 用户状态设置 +- 用户密码重置 + +所属包: application.views +依赖模块: application.services.user - 用户业务逻辑层 + application.middleware.check_permission - 权限校验中间件 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from application.middleware.check_permission import check_permission +from src.modules.system.user import service as user +from src.common.utils.request import parse_batch_ids +user_blue = Blueprint('user', __name__, url_prefix='/user') +from src.core import response as R + + +# ============================================================ +# 用户分页查询 +# ============================================================ + +@user_blue.route('/page', methods=["GET"]) +@check_permission("sys:user:page") +def page(): + """ + 查询用户分页数据 + + 功能说明: + 获取用户列表的分页数据,支持关键词搜索和状态筛选。 + + Returns: + JSON: 用户分页数据,包含 records(数据列表)、total(总记录数)等 + """ + result = user.get_user_page() + return result + + +# ============================================================ +# 用户详情查询 +# ============================================================ + +@user_blue.route('/detail/', methods=["GET"]) +@check_permission("sys:user:detail") +def detail(id): + """ + 查询用户详情 + + Args: + id: 用户ID + + Returns: + JSON: 用户详细信息 + """ + data = user.get_user_detail(id) + return R.ok(data=data) + + +# ============================================================ +# 用户添加 +# ============================================================ + +@user_blue.route('/add', methods=["POST"]) +@check_permission("sys:user:add") +@check_demo +def add(): + """ + 添加用户 + + 功能说明: + 创建新的用户记录。 + + Returns: + JSON: 操作结果 + """ + result = user.add_user() + return result + + +# ============================================================ +# 用户更新 +# ============================================================ + +@user_blue.route('/update', methods=["PUT"]) +@check_permission("sys:user:update") +@check_demo +def update(): + """ + 更新用户 + + 功能说明: + 修改已有的用户信息。 + + Returns: + JSON: 操作结果 + """ + result = user.update_user() + return result + + +# ============================================================ +# 用户删除 +# ============================================================ + +@user_blue.route('/delete/', methods=["DELETE"]) +@check_permission("sys:user:delete") +@check_demo +def delete(id): + """ + 删除用户 + + Args: + id: 用户ID(支持逗号分隔的多个ID) + + Returns: + JSON: 操作结果 + """ + result = user.delete_users(id) + return result + + +# ============================================================ +# 用户批量删除 +# ============================================================ + +@user_blue.route('/batchDelete', methods=["DELETE"]) +@check_permission("sys:user:batch_delete") +@check_demo +def batch_delete(): + """ + 批量删除用户 + + 功能说明: + 批量删除用户记录,支持传入ID数组。 + + Request Body: + [1, 2, 3] # 用户ID数组 + + Returns: + JSON: 操作结果 + """ + id_str, err = parse_batch_ids() + if err: + return err + return user.delete_users(id_str) + + +# ============================================================ +# 用户状态设置 +# ============================================================ + +@user_blue.route('/status', methods=["PUT"]) +@check_permission("sys:user:status") +@check_demo +def status(): + """ + 设置用户状态 + + 功能说明: + 启用或禁用用户账号。 + + Returns: + JSON: 操作结果 + """ + result = user.update_user_status() + return result + + +# ============================================================ +# 用户密码重置 +# ============================================================ + +@user_blue.route('/resetPwd', methods=["PUT"]) +@check_permission("sys:user:resetPwd") +@check_demo +def reset_pwd(): + """ + 重置用户密码 + + 功能说明: + 重置指定用户的登录密码。 + + Returns: + JSON: 操作结果 + """ + result = user.reset_user_password() + return result diff --git a/src/modules/upload/router.py b/src/modules/upload/router.py new file mode 100644 index 0000000..dc4fde7 --- /dev/null +++ b/src/modules/upload/router.py @@ -0,0 +1,91 @@ +# +====================================================================== +# | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] +# +---------------------------------------------------------------------- +# | Copyright (c) 2021-2026 一米阳光团队 版权所有 +# +---------------------------------------------------------------------- +# | 开源协议: Apache-2.0 +# | 重要声明: 未经书面许可,不得移除或修改本框架相关版权标识。 +# +---------------------------------------------------------------------- +# | 官方网站: https://www.djangoadmin.cn +# +---------------------------------------------------------------------- +# | 研发团队: 一米阳光团队 荣誉出品 +# +====================================================================== +# | 版权和免责声明: +# | 一、知识产权声明 +# | 本团队对该软件框架产品(以下简称“本产品”)拥有完整知识产权,包括但不限于商标权、专利权、 +# | 著作权、商业秘密等。前述权利均受中华人民共和国及相关国际法律法规保护。未经本团队书面授权, +# | 任何个人或单位不得基于本产品本身申请任何形式的知识产权。 +# | 二、使用限制与禁止条款 +# | 您理解并同意,禁止将本产品用于以下任何行为: +# | 1. 任何违反中华人民共和国法律法规的用途; +# | 2. 任何侵害他人合法权益(包括但不限于人身权、财产权、知识产权等)的行为; +# | 3. 任何危害国家安全、公共利益及社会道德风尚的行为。 +# | 三、责任豁免 +# | 因使用本产品而产生的任何损失或法律纠纷(包括但不限于直接损失、间接损失、附带损失、衍生损失 +# | 以及因违约、侵权等引发的责任),本团队均不承担任何法律责任。若因违规使用本产品导致任何第三 +# | 方提起索赔或行政机关进行调查,您应独立承担全部责任。 +# | 四、违约与法律责任 +# | 如发现任何违反本声明的行为,本团队有权: +# | 1. 无条件配合公安机关及其他有权机关的调查取证工作; +# | 2. 依法追究相关方的民事责任,并要求赔偿全部损失; +# | 3. 保留进一步采取刑事控告等法律措施的权利。 +# | 五、许可范围说明 +# | 1、被授权方应视本产品源代码为核心机密信息,负有最高标准的保密与保管义务。禁止以任何形式(包 +# | 括但不限于直接或间接的分享、复制、传播、分发、转售、出租、开源、反向工程、反编译、反汇编或通 +# | 过网络服务提供给任何第三方)泄露、披露或处置源代码的全部或部分内容。任何未经授权的复制、使用、 +# | 传播行为均构成对本团队知识产权的严重侵权,本团队有权依法追究其全部法律责任,并要求赔偿因此造 +# | 成的一切经济损失及商誉损害。 +# | 2、本产品仅限于公司或个人在法律允许范围内,用于内部且合规的软件产品研发。具体权利义务以《软件 +# | 许可协议》附件为准。 +# +====================================================================== + +""" +文件上传控制器模块 +============================================================= + +提供文件上传相关的API接口,包括: +- 文件上传 + +所属包: application.views +依赖模块: application.services.upload - 文件上传业务逻辑层 +""" + +from flask import Blueprint + +from application.middleware.check_demo import check_demo +from src.modules.upload import service as upload +upload_blue = Blueprint('upload', __name__, url_prefix='/upload') +from config import UPLOAD_ALLOWED_EXTS +from src.core import response as R + + +# ============================================================ +# 文件上传 +# ============================================================ + +@upload_blue.route('/uploadFile', methods=["POST"]) +@check_demo +def upload_file(): + """ + 上传文件 + + 功能说明: + 上传文件到服务器,仅允许指定扩展名的文件上传,返回文件访问URL及详细信息。 + 允许的文件类型通过 UPLOAD_ALLOWED_EXTS 环境变量配置。 + + Request Parameters: + file: 上传的文件(form-data格式,字段名为'file') + + Returns: + JSON: 上传结果 + - originalName: 原始文件名 + - fileExtension: 文件扩展名 + - fileType: 文件MIME类型 + - fileSize: 文件大小(字节) + - fileName: 生成的文件名 + - filePath: 文件相对路径 + - fileUrl: 文件访问URL + """ + result = upload.upload_file(file_exts=UPLOAD_ALLOWED_EXTS) + + return result diff --git a/重构方案-v2.md b/重构方案-v2.md index 7359788..af79138 100644 --- a/重构方案-v2.md +++ b/重构方案-v2.md @@ -353,7 +353,7 @@ from src.core.database import db # 统一 db 单例 | **P0 基线** | `git init`;`.gitignore` 补 `logs/ instance/ *.pyc`;基线提交 | git 仓库可用,可 `git reset --hard` 回滚 | 无 | | **P1 工具链** | pyproject.toml / requirements-dev.txt / .flake8 / .pre-commit / Makefile / pytest 骨架 | 现有代码 `flake8` 通过(或登记存量告警);`pytest` 空跑通过。**已登记存量告警:154 条(F401×111 / E402×36 / 其余 7);pytest 5 passed** | 低 | | **P2 core+common** | 建 `src/core/` `src/common/`;extensions/utils 打 shim;模型聚合器建 `src/models_registry.py` | 已验收:22 模型表全量识别且 DB 全部存在;src/ flake8 零告警;pytest 5 passed;应用启动;/login 表单校验与 /user/page 鉴权拦截冒烟正常。**基线修复**:application/models + middleware 原被嵌套 `.gitignore`(`*`)误排除,已补入。**登记既有缺陷**:① `flask db` CLI 因 .env 的 FLASK_VERSION 与 --version 冲突报错(Makefile 已加 FLASK_SKIP_DOTENV 规避);② 本机 Redis 未设密码但 REDIS_AUTH=True,/captcha 报 AUTH 错误(环境问题,非重构) | 高(依赖面最大,已完成) | -| **P3 模块搬迁** | 按 §2.5 顺序逐组迁移 23 个模块(models→forms→services→views),每批打 shim + 验证 | 每批后 `python app.py` 启动 + 该模块接口回归通过 | 中 | +| **P3 模块搬迁** | 按 §2.5 顺序逐组迁移 23 个模块(models→forms→services→views),每批打 shim + 验证 | 已验收:22 模型→19 模块 models.py;23 表单→schema.py;29 服务→service.py(含 executor/scheduler_service/mail_service/sms_service);26 视图→router.py(login+index 合并入 auth)。应用启动、25 蓝图无重复注册(views/__init__.py 已加去重)、pytest 5 passed、接口冒烟(登录校验/鉴权 401)正常 | 中(已完成) | | **P4 服务层改造** | 26 个服务文件改「入参数据/出参数据」;router 取参包 R;引入 base_service/base_repository + BizError | 核心服务(auth/user/role/menu)单测可写可跑;接口回归全绿 | 高(最大工作量) | | **P5 DI 注入** | core/permission.py + op_log 接口化;app 工厂注入 menu 服务 | `grep -r "from application" src/core/` 为空;权限/日志行为与现状一致 | 中 | | **P6 API v1** | routes/v1.py + `/api/v1`;白名单/内部调用/前端前缀同步 | 全部接口路径 `curl /api/v1/...` 通过;`/login` 白名单放行 | 中 |