diff --git a/ruoyi-fastapi-backend/config/constant.py b/ruoyi-fastapi-backend/config/constant.py new file mode 100644 index 0000000..552d717 --- /dev/null +++ b/ruoyi-fastapi-backend/config/constant.py @@ -0,0 +1,76 @@ +class CommonConstant: + """ + 常用常量 + WWW: www主域 + HTTP: http请求 + HTTPS: https请求 + UNIQUE: 校验是否唯一的返回标识(是) + NOT_UNIQUE: 校验是否唯一的返回标识(否) + """ + WWW = 'www.' + HTTP = 'http://' + HTTPS = 'https://' + UNIQUE = True + NOT_UNIQUE = False + + +class HttpStatusConstant: + """ + 返回状态码 + SUCCESS: 操作成功 + CREATED: 对象创建成功 + ACCEPTED: 请求已经被接受 + NO_CONTENT: 操作已经执行成功,但是没有返回数据 + MOVED_PERM: 资源已被移除 + SEE_OTHER: 重定向 + NOT_MODIFIED: 资源没有被修改 + BAD_REQUEST: 参数列表错误(缺少,格式不匹配) + UNAUTHORIZED: 未授权 + FORBIDDEN: 访问受限,授权过期 + NOT_FOUND: 资源,服务未找到 + BAD_METHOD: 不允许的http方法 + CONFLICT: 资源冲突,或者资源被锁 + UNSUPPORTED_TYPE: 不支持的数据,媒体类型 + ERROR: 系统内部错误 + NOT_IMPLEMENTED: 接口未实现 + WARN: 系统警告消息 + """ + SUCCESS = 200 + CREATED = 201 + ACCEPTED = 202 + NO_CONTENT = 204 + MOVED_PERM = 301 + SEE_OTHER = 303 + NOT_MODIFIED = 304 + BAD_REQUEST = 400 + UNAUTHORIZED = 401 + FORBIDDEN = 403 + NOT_FOUND = 404 + BAD_METHOD = 405 + CONFLICT = 409 + UNSUPPORTED_TYPE = 415 + ERROR = 500 + NOT_IMPLEMENTED = 501 + WARN = 601 + + +class MenuConstant: + """ + 菜单常量 + TYPE_DIR: 菜单类型(目录) + TYPE_MENU: 菜单类型(菜单) + TYPE_BUTTON: 菜单类型(按钮) + YES_FRAME: 是否菜单外链(是) + NO_FRAME: 是否菜单外链(否) + LAYOUT: Layout组件标识 + PARENT_VIEW: ParentView组件标识 + INNER_LINK: InnerLink组件标识 + """ + TYPE_DIR = 'M' + TYPE_MENU = 'C' + TYPE_BUTTON = 'F' + YES_FRAME = 0 + NO_FRAME = 1 + LAYOUT = 'Layout' + PARENT_VIEW = 'ParentView' + INNER_LINK = 'InnerLink' diff --git a/ruoyi-fastapi-backend/module_admin/service/login_service.py b/ruoyi-fastapi-backend/module_admin/service/login_service.py index 9870351..358d840 100644 --- a/ruoyi-fastapi-backend/module_admin/service/login_service.py +++ b/ruoyi-fastapi-backend/module_admin/service/login_service.py @@ -10,6 +10,7 @@ from module_admin.entity.vo.login_vo import * from module_admin.entity.vo.common_vo import CrudResponseModel from module_admin.dao.login_dao import * from exceptions.exception import LoginException, AuthException +from config.constant import CommonConstant, MenuConstant from config.env import AppConfig, JwtConfig, RedisInitKeyConfig from config.get_db import get_db from utils.common_util import CamelCaseUtil @@ -231,7 +232,7 @@ class LoginService: :return: 当前用户路由信息对象 """ query_user = await UserDao.get_user_by_id(query_db, user_id=user_id) - user_router_menu = sorted([row for row in query_user.get('user_menu_info') if row.menu_type in ['M', 'C']], key=lambda x: x.order_num) + user_router_menu = sorted([row for row in query_user.get('user_menu_info') if row.menu_type in [MenuConstant.TYPE_DIR, MenuConstant.TYPE_MENU]], key=lambda x: x.order_num) menus = cls.__generate_menus(0, user_router_menu) user_router = cls.__generate_user_router_menu(menus) return [router.model_dump(exclude_unset=True, by_alias=True) for router in user_router] @@ -278,7 +279,7 @@ class LoginService: ) ) c_menus = permission.children - if c_menus and permission.menu_type == 'M': + if c_menus and permission.menu_type == MenuConstant.TYPE_DIR: router.always_show = True router.redirect = 'noRedirect' router.children = cls.__generate_user_router_menu(c_menus) @@ -309,7 +310,7 @@ class LoginService: router_path = RouterUtil.inner_link_replace_each(permission.path) children = RouterModel( path=router_path, - component='InnerLink', + component=MenuConstant.INNER_LINK, name=router_path.capitalize(), meta=MetaModel( title=permission.menu_name, @@ -457,7 +458,7 @@ class RouterUtil: if menu.parent_id != 0 and cls.is_inner_link(menu): router_path = cls.inner_link_replace_each(router_path) # 非外链并且是一级目录(类型为目录) - if menu.parent_id == 0 and menu.menu_type == 'M' and menu.is_frame == 1: + if menu.parent_id == 0 and menu.menu_type == MenuConstant.TYPE_DIR and menu.is_frame == MenuConstant.NO_FRAME: router_path = f'/{menu.path}' # 非外链并且是一级目录(类型为菜单) elif cls.is_menu_frame(menu): @@ -471,13 +472,13 @@ class RouterUtil: :param menu: 菜单数对象 :return: 组件信息 """ - component = 'Layout' + component = MenuConstant.LAYOUT if menu.component and not cls.is_menu_frame(menu): component = menu.component elif (menu.component is None or menu.component == '') and menu.parent_id != 0 and cls.is_inner_link(menu): - component = 'InnerLink' + component = MenuConstant.INNER_LINK elif (menu.component is None or menu.component == '') and cls.is_parent_view(menu): - component = 'ParentView' + component = MenuConstant.PARENT_VIEW return component @classmethod @@ -487,7 +488,7 @@ class RouterUtil: :param menu: 菜单数对象 :return: 是否为菜单内部跳转 """ - return menu.parent_id == 0 and menu.menu_type == 'C' and menu.is_frame == 1 + return menu.parent_id == 0 and menu.menu_type == MenuConstant.TYPE_MENU and menu.is_frame == MenuConstant.NO_FRAME @classmethod def is_inner_link(cls, menu: MenuTreeModel): @@ -496,7 +497,7 @@ class RouterUtil: :param menu: 菜单数对象 :return: 是否为内链组件 """ - return menu.is_frame == 1 and cls.is_http(menu.path) + return menu.is_frame == MenuConstant.NO_FRAME and cls.is_http(menu.path) @classmethod def is_parent_view(cls, menu: MenuTreeModel): @@ -505,7 +506,7 @@ class RouterUtil: :param menu: 菜单数对象 :return: 是否为parent_view组件 """ - return menu.parent_id != 0 and menu.menu_type == 'M' + return menu.parent_id != 0 and menu.menu_type == MenuConstant.TYPE_DIR @classmethod def is_http(cls, link: str): @@ -514,7 +515,7 @@ class RouterUtil: :param link: 链接 :return: 是否为http(s)://开头 """ - return link.startswith('http://') or link.startswith('https://') + return link.startswith(CommonConstant.HTTP) or link.startswith(CommonConstant.HTTPS) @classmethod def inner_link_replace_each(cls, path: str): @@ -523,7 +524,7 @@ class RouterUtil: :param path: 内链域名 :return: 替换后的内链域名 """ - old_values = ["http://", "https://", "www.", ".", ":"] + old_values = [CommonConstant.HTTP, CommonConstant.HTTPS, CommonConstant.WWW, ".", ":"] new_values = ["", "", "", "/", "/"] for old, new in zip(old_values, new_values): path = path.replace(old, new) diff --git a/ruoyi-fastapi-backend/utils/response_util.py b/ruoyi-fastapi-backend/utils/response_util.py index a741074..512c939 100644 --- a/ruoyi-fastapi-backend/utils/response_util.py +++ b/ruoyi-fastapi-backend/utils/response_util.py @@ -4,6 +4,7 @@ from fastapi.encoders import jsonable_encoder from typing import Any, Dict, Optional from pydantic import BaseModel from datetime import datetime +from config.constant import HttpStatusConstant class ResponseUtil: @@ -24,7 +25,7 @@ class ResponseUtil: :return: 成功响应结果 """ result = { - 'code': 200, + 'code': HttpStatusConstant.SUCCESS, 'msg': msg } @@ -57,7 +58,7 @@ class ResponseUtil: :return: 失败响应结果 """ result = { - 'code': 601, + 'code': HttpStatusConstant.WARN, 'msg': msg } @@ -90,7 +91,7 @@ class ResponseUtil: :return: 未认证响应结果 """ result = { - 'code': 401, + 'code': HttpStatusConstant.UNAUTHORIZED, 'msg': msg } @@ -123,7 +124,7 @@ class ResponseUtil: :return: 未认证响应结果 """ result = { - 'code': 403, + 'code': HttpStatusConstant.FORBIDDEN, 'msg': msg } @@ -156,7 +157,7 @@ class ResponseUtil: :return: 错误响应结果 """ result = { - 'code': 500, + 'code': HttpStatusConstant.ERROR, 'msg': msg }