From 93cbe5d987a7937cde73e55a37a935c57f2679da Mon Sep 17 00:00:00 2001 From: zhangtao <9480807882@qq.com> Date: Sun, 18 May 2025 18:51:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(operation=5Flog):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E4=BD=8D=E7=BD=AE=E5=92=8C=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在操作日志中新增登录位置和处理时间字段,以提供更详细的日志信息。同时优化了IP地址归属地获取逻辑,并调整了日志展示界面的列宽。 --- .../v1/models/system/operation_log_model.py | 4 +- .../v1/schemas/system/operation_log_schema.py | 2 + .../services/system/operation_log_service.py | 4 +- backend/app/config/setting.py | 9 +- backend/app/core/middlewares.py | 10 +- backend/app/core/router_class.py | 18 +- backend/app/scripts/data/system_config.json | 6 +- backend/app/utils/ip_local_util.py | 40 +-- backend/dev_sql.db | Bin 1351680 -> 1363968 bytes backend/env/.env.dev | 2 + backend/env/.env.prod | 2 + ...190223.sql => mysql_2025-05-18_182614.sql} | 32 +- ...357.sql => postgres_2025-05-18_182902.sql} | 336 +++++++++--------- frontend/src/views/current/profile.vue | 7 +- frontend/src/views/system/log/index.vue | 22 +- frontend/src/views/system/log/types.ts | 2 + 16 files changed, 273 insertions(+), 223 deletions(-) rename backend/sql/{mysql_2025-04-15_190223.sql => mysql_2025-05-18_182614.sql} (65%) rename backend/sql/{postgres_2025-04-15_190357.sql => postgres_2025-05-18_182902.sql} (82%) diff --git a/backend/app/api/v1/models/system/operation_log_model.py b/backend/app/api/v1/models/system/operation_log_model.py index 9433752b..95589481 100644 --- a/backend/app/api/v1/models/system/operation_log_model.py +++ b/backend/app/api/v1/models/system/operation_log_model.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from datetime import datetime -from sqlalchemy import Column, ForeignKey, String, Integer, Text, DateTime +from sqlalchemy import Column, ForeignKey, String, Integer, Text, DateTime, Float from sqlalchemy.orm import relationship from app.core.base_model import ModelBase @@ -17,10 +17,12 @@ class OperationLogModel(ModelBase): request_method = Column(String(10), nullable=True, comment="请求方式", index=True) request_payload = Column(Text, nullable=True, comment="请求体") request_ip = Column(String(50), nullable=True, comment="请求IP地址") + login_location=Column(String(255), nullable=True, comment="登录位置") request_os = Column(String(64), nullable=True, comment="操作系统") request_browser = Column(String(64), nullable=True, comment="浏览器") response_code = Column(Integer, nullable=True, comment="响应状态码") response_json = Column(Text, nullable=True, comment="响应体") + process_time = Column(Float, nullable=True, comment="处理时间") # 审计字段 description = Column(Text, nullable=True, comment="备注说明") diff --git a/backend/app/api/v1/schemas/system/operation_log_schema.py b/backend/app/api/v1/schemas/system/operation_log_schema.py index 7a9abab3..fd421109 100644 --- a/backend/app/api/v1/schemas/system/operation_log_schema.py +++ b/backend/app/api/v1/schemas/system/operation_log_schema.py @@ -12,10 +12,12 @@ class OperationLogCreateSchema(BaseModel): request_method: Optional[str] = Field(default=None, description="请求方法") request_payload: Optional[str] = Field(default=None, description="请求负载") request_ip: Optional[str] = Field(default=None, description="请求 IP 地址") + login_location: Optional[str] = Field(default=None, description="登录位置") request_os: Optional[str] = Field(default=None, description="请求操作系统") request_browser: Optional[str] = Field(default=None, description="请求浏览器") response_code: Optional[int] = Field(default=None, description="响应状态码") response_json: Optional[str] = Field(default=None, description="响应 JSON 数据") + process_time: Optional[float] = Field(default=None, description="处理时间") description: Optional[str] = Field(default=None, max_length=255, description="备注") creator_id: Optional[int] = Field(default=None, description="创建人ID") diff --git a/backend/app/api/v1/services/system/operation_log_service.py b/backend/app/api/v1/services/system/operation_log_service.py index 9bcba4bb..5f59b9bb 100644 --- a/backend/app/api/v1/services/system/operation_log_service.py +++ b/backend/app/api/v1/services/system/operation_log_service.py @@ -66,10 +66,12 @@ class OperationLogService: 'request_method': '请求方式', 'request_payload': '请求参数', 'request_ip': '操作地址', + 'login_location': '登录位置', 'request_os': '操作系统', 'request_browser': '浏览器', 'response_json': '返回参数', - 'response_code': '操作状态', + 'response_code': '相应状态', + 'process_time': '处理时间', 'description': '备注', 'created_at': '创建时间', 'updated_at': '更新时间', diff --git a/backend/app/config/setting.py b/backend/app/config/setting.py index 5deda25d..93d9b760 100755 --- a/backend/app/config/setting.py +++ b/backend/app/config/setting.py @@ -172,11 +172,12 @@ class Settings(BaseSettings): # ================================================= # # ***************** 演示模型配置 ***************** # # ================================================= # - DEMO_ENABLE: bool = False # 是否开启演示模式 + DEMO_ENABLE: bool # 是否开启演示模式 DEMO_WHITE_LIST_PATH: List[str] = [ # 演示白名单 - "/system/auth/login", - "/system/auth/token/refresh", - "/system/auth/captcha/get" + "/api/v1/system/auth/login", + "/api/v1/system/auth/token/refresh", + "/api/v1/system/auth/captcha/get", + "/api/v1/system/auth/logout", ] DEMO_BLACK_LIST_PATH: List[str] = [ # 演示黑名单 "/auth/login" diff --git a/backend/app/core/middlewares.py b/backend/app/core/middlewares.py index b6f31170..9ee21dba 100644 --- a/backend/app/core/middlewares.py +++ b/backend/app/core/middlewares.py @@ -79,15 +79,9 @@ class DemoEnvMiddleware(BaseHTTPMiddleware): if settings.DEMO_ENABLE and request.method != "GET": path = request.scope.get("path") if path in settings.DEMO_BLACK_LIST_PATH: - return ErrorResponse( - msg="演示环境,该接口已被禁用", - status=status.HTTP_403_FORBIDDEN - ) + return ErrorResponse(msg="演示环境,禁止操作",) elif path not in settings.DEMO_WHITE_LIST_PATH: - return ErrorResponse( - msg="演示环境,禁止修改操作", - status=status.HTTP_403_FORBIDDEN - ) + return ErrorResponse(msg="演示环境,禁止操作",) return await call_next(request) diff --git a/backend/app/core/router_class.py b/backend/app/core/router_class.py index 027eeabf..18759b4b 100644 --- a/backend/app/core/router_class.py +++ b/backend/app/core/router_class.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +import time from typing import Any, Callable, Coroutine from fastapi import Request, Response from fastapi.routing import APIRoute @@ -10,6 +11,7 @@ from app.api.v1.schemas.system.operation_log_schema import OperationLogCreateSch from app.api.v1.services.system.operation_log_service import OperationLogService from app.core.database import session_connect from app.config.setting import settings +from app.utils.ip_local_util import IpLocalUtil """ 在 FastAPI 中,route_class 参数用于自定义路由的行为。 @@ -23,6 +25,7 @@ class OperationLogRoute(APIRoute): original_route_handler = super().get_route_handler() async def custom_route_handler(request: Request) -> Response: + start_time = time.time() # 请求前的处理 response: Response = await original_route_handler(request) @@ -53,22 +56,31 @@ class OperationLogRoute(APIRoute): payload = str(oper_param) response_data = response.body if "application/json" in response.headers.get("Content-Type", "") else b"{}" - + process_time = time.time() - start_time + async with session_connect() as session: async with session.begin(): auth = AuthSchema(db=session) # 获取当前用户ID,如果是登录接口则为空 - current_user_id = request.scope.get("user_id") if "user_id" in request.scope else None - + login_location = None + current_user_id = None + if "user_id" in request.scope: + current_user_id = request.scope.get("user_id") + if request.url.path == '/api/v1/system/auth/login': + # 只有登录的才会获取登录地址 + login_location = IpLocalUtil.get_ip_location(request.client.host) + await OperationLogService.create_log_service(data=OperationLogCreateSchema( request_path = request.url.path, request_method = request.method, request_payload = payload, request_ip = request.client.host, + login_location=login_location, request_os = user_agent.os.family, request_browser = user_agent.browser.family, response_code = response.status_code, response_json = response_data.decode(), + process_time = process_time, description = route.summary, creator_id = current_user_id ), auth = auth) diff --git a/backend/app/scripts/data/system_config.json b/backend/app/scripts/data/system_config.json index b88eb1ea..376f6090 100644 --- a/backend/app/scripts/data/system_config.json +++ b/backend/app/scripts/data/system_config.json @@ -2,9 +2,9 @@ { "id": 1, "title": "FastAPI Vue Admin", - "favicon": "http://localhost:8000/api/v1/static/image/favicon.ico", - "logo": "http://localhost:8000/api/v1/static/image/logo.png", - "background": "http://localhost:8000/api/v1/static/image/background.png", + "favicon": "http://localhost:8001/api/v1/static/image/favicon.ico", + "logo": "http://localhost:8001/api/v1/static/image/logo.png", + "background": "http://localhost:8001/api/v1/static/image/background.png", "description": "FastAPI Vue Admin 是完全开源的权限管理系统", "copyright": "Copyright © 2021-2025 fastapi-vue-admin.com 版权所有", "keep_record": "晋ICP备18005113号-3", diff --git a/backend/app/utils/ip_local_util.py b/backend/app/utils/ip_local_util.py index 00a86cc1..898b765d 100644 --- a/backend/app/utils/ip_local_util.py +++ b/backend/app/utils/ip_local_util.py @@ -36,7 +36,7 @@ class IpLocalUtil: return "未知" # 内网IP直接返回 - if ip == '127.0.0.1' or ip.startswith('192.168.') or ip.startswith('10.') or ip.startswith('172.'): + if ip == '127.0.0.1' or ip == 'localhost': return '内网IP' try: @@ -46,25 +46,25 @@ class IpLocalUtil: timeout=5 ) if ip_result.status_code == 200: - data = ip_result.json().get('data', {}) - prov = data.get('prov', '') - city = data.get('city', '') - if prov or city: - return f'{prov}-{city}' - - # 备用淘宝API - response = requests.get( - f"http://ip.taobao.com/service/getIpInfo.php?ip={ip}", - timeout=5 - ) - if response.status_code == 200: - data = response.json().get('data', {}) - country = data.get('country', '') - region = data.get('region', '') - city = data.get('city', '') - return f"{country}{region}{city}" + data = ip_result.json().get('data', {}) + # "continent": "亚洲", + # "country": "中国", + # "zipcode": "710061", + # "owner": "中国移动", + # "isp": "中国移动", + # "adcode": "610113", + # "prov": "陕西省", + # "city": "西安市", + # "district": "雁塔区" + country = data.get('country', '未知国家') + owner = data.get('owner', '未知运营商') + prov = data.get('prov', '未知省份') + city = data.get('city', '未知城市') + district = data.get('district', '未知地区') + + return f'【{owner}】-{country}-{prov}-{city}-{district}' + except Exception as e: logger.error(f"获取IP归属地失败: {e}") - - return "未知" \ No newline at end of file + return "未知" diff --git a/backend/dev_sql.db b/backend/dev_sql.db index 36072a6466a1481c0580c665b29d17b74c48ce6b..94cf245f6668e3c6fc78a81704f0b154baa735da 100644 GIT binary patch delta 33688 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 NH`uTKJ@#k){{i;WCcppy diff --git a/backend/env/.env.dev b/backend/env/.env.dev index 3bea3593..ff8df3ee 100644 --- a/backend/env/.env.dev +++ b/backend/env/.env.dev @@ -26,6 +26,8 @@ DOCS_URL = "/docs" # Swagger UI路径 REDOC_URL = "/redoc" # ReDoc路径 ROOT_PATH = "/api/v1" # API路由前缀 +DEMO_ENABLE = False # 是否启用演示模式 + # 数据库配置 DB_DRIVER = "sqlite" # sqlite、mysql、postgresql diff --git a/backend/env/.env.prod b/backend/env/.env.prod index 13c75217..75c9d08a 100644 --- a/backend/env/.env.prod +++ b/backend/env/.env.prod @@ -26,6 +26,8 @@ DOCS_URL = "/docs" # Swagger UI路径 REDOC_URL = "/redoc" # ReDoc路径 ROOT_PATH = "/api/v1" # API路由前缀 +DEMO_ENABLE = True # 是否启用演示模式 + # 数据库配置 DB_DRIVER = "mysql" # sqlite、mysql、postgresql diff --git a/backend/sql/mysql_2025-04-15_190223.sql b/backend/sql/mysql_2025-05-18_182614.sql similarity index 65% rename from backend/sql/mysql_2025-04-15_190223.sql rename to backend/sql/mysql_2025-05-18_182614.sql index 9adccaa7..e53319be 100644 --- a/backend/sql/mysql_2025-04-15_190223.sql +++ b/backend/sql/mysql_2025-05-18_182614.sql @@ -49,7 +49,7 @@ CREATE TABLE `system_config` ( -- /*!40000 ALTER TABLE `system_config` DISABLE KEYS */; -INSERT INTO `system_config` VALUES (1,'FastAPI Vue Admin','http://localhost:8000/api/v1/static/image/favicon.ico','http://localhost:8000/api/v1/static/image/logo.png','http://localhost:8000/api/v1/static/image/background.png','Copyright © 2021-2025 fastapi-vue-admin.com 版权所有','晋ICP备18005113号-3','https://gitee.com/tao__tao/fastapi_vue3_admin.git','https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE','https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE','https://gitee.com/tao__tao/fastapi_vue3_admin.git','FastAPI Vue Admin 是完全开源的权限管理系统','2025-04-15 19:02:14','2025-04-15 19:02:14',1); +INSERT INTO `system_config` VALUES (1,'FastAPI Vue Admin','http://8.137.99.5:8001/api/v1/static/image/favicon.ico','http://8.137.99.5:8001/api/v1/static/image/logo.png','http://8.137.99.5:8001/api/v1/static/image/background.png','Copyright © 2021-2025 fastapi-vue-admin.com 版权所有','晋ICP备18005113号-3','https://gitee.com/tao__tao/fastapi_vue3_admin.git','https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE','https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE','https://gitee.com/tao__tao/fastapi_vue3_admin.git','FastAPI Vue Admin 是完全开源的权限管理系统','2025-05-18 18:24:56','2025-05-18 18:24:56',1); /*!40000 ALTER TABLE `system_config` ENABLE KEYS */; -- @@ -80,7 +80,7 @@ CREATE TABLE `system_dept` ( -- /*!40000 ALTER TABLE `system_dept` DISABLE KEYS */; -INSERT INTO `system_dept` VALUES (1,'集团总公司',1,NULL,1,'集团总公司','2025-04-15 19:02:13','2025-04-15 19:02:13'),(2,'西安分公司',1,1,1,'西安分公司','2025-04-15 19:02:13','2025-04-15 19:02:13'),(3,'深圳分公司',2,1,1,'深圳分公司','2025-04-15 19:02:13','2025-04-15 19:02:13'),(4,'开发组',1,2,1,'开发组','2025-04-15 19:02:13','2025-04-15 19:02:13'),(5,'测试组',2,2,1,'测试组','2025-04-15 19:02:13','2025-04-15 19:02:13'),(6,'演示组',3,2,1,'演示组','2025-04-15 19:02:13','2025-04-15 19:02:13'),(7,'销售部',1,3,1,'销售部','2025-04-15 19:02:13','2025-04-15 19:02:13'),(8,'市场部',2,3,1,'市场部','2025-04-15 19:02:13','2025-04-15 19:02:13'),(9,'财务部',3,3,1,'财务部','2025-04-15 19:02:13','2025-04-15 19:02:13'),(10,'研发部',4,3,1,'研发部','2025-04-15 19:02:13','2025-04-15 19:02:13'),(11,'运维部',5,3,1,'研发部','2025-04-15 19:02:13','2025-04-15 19:02:13'); +INSERT INTO `system_dept` VALUES (1,'集团总公司',1,NULL,1,'集团总公司','2025-05-18 18:24:56','2025-05-18 18:24:56'),(2,'西安分公司',1,1,1,'西安分公司','2025-05-18 18:24:56','2025-05-18 18:24:56'),(3,'深圳分公司',2,1,1,'深圳分公司','2025-05-18 18:24:56','2025-05-18 18:24:56'),(4,'开发组',1,2,1,'开发组','2025-05-18 18:24:56','2025-05-18 18:24:56'),(5,'测试组',2,2,1,'测试组','2025-05-18 18:24:56','2025-05-18 18:24:56'),(6,'演示组',3,2,1,'演示组','2025-05-18 18:24:56','2025-05-18 18:24:56'),(7,'销售部',1,3,1,'销售部','2025-05-18 18:24:56','2025-05-18 18:24:56'),(8,'市场部',2,3,1,'市场部','2025-05-18 18:24:56','2025-05-18 18:24:56'),(9,'财务部',3,3,1,'财务部','2025-05-18 18:24:56','2025-05-18 18:24:56'),(10,'研发部',4,3,1,'研发部','2025-05-18 18:24:56','2025-05-18 18:24:56'),(11,'运维部',5,3,1,'研发部','2025-05-18 18:24:56','2025-05-18 18:24:56'); /*!40000 ALTER TABLE `system_dept` ENABLE KEYS */; -- @@ -115,7 +115,7 @@ CREATE TABLE `system_dict_data` ( -- /*!40000 ALTER TABLE `system_dict_data` DISABLE KEYS */; -INSERT INTO `system_dict_data` VALUES (1,1,'男','0','sys_user_sex','blue',NULL,1,1,'性别男','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(2,2,'女','1','sys_user_sex','pink',NULL,0,1,'性别女','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(3,3,'未知','2','sys_user_sex','red',NULL,0,1,'性别未知','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(4,4,'显示','0','sys_show_hide','btn btn-success btn-xs','primary',1,1,'显示菜单','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(5,2,'隐藏','1','sys_show_hide','','danger',0,1,'隐藏菜单','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(6,1,'正常','0','sys_normal_disable','','primary',1,1,'正常状态','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(7,2,'停用','1','sys_normal_disable','','danger',0,1,'停用状态','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(8,1,'正常','0','sys_job_status','','primary',1,1,'正常状态','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(9,2,'暂停','1','sys_job_status','','danger',0,1,'停用状态','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(10,1,'默认(Memory)','default','sys_job_group','',NULL,1,1,'默认分组','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(11,2,'数据库','sqlalchemy','sys_job_group','',NULL,0,1,'数据库分组','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(12,3,'redis','redis','sys_job_group','',NULL,0,1,'reids分组','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(13,1,'默认','default','sys_job_executor','',NULL,0,1,'线程池','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(14,2,'进程池','processpool','sys_job_executor','',NULL,0,1,'进程池','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(15,1,'是','true','sys_yes_no','','primary',1,1,'系统默认是','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(16,2,'否','false','sys_yes_no','','danger',0,1,'系统默认否','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(17,1,'通知','1','sys_notice_type','blue','warning',1,1,'通知','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(18,2,'公告','2','sys_notice_type','orange','success',0,1,'公告','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(19,1,'正常','0','sys_notice_status','','primary',1,1,'正常状态','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(20,2,'关闭','1','sys_notice_status','','danger',0,1,'关闭状态','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(21,99,'其他','0','sys_oper_type','','info',0,1,'其他操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(22,1,'新增','1','sys_oper_type','','info',0,1,'新增操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(23,2,'修改','2','sys_oper_type','','info',0,1,'修改操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(24,3,'删除','3','sys_oper_type','','danger',0,1,'删除操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(25,4,'授权','4','sys_oper_type','','primary',0,1,'授权操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(26,5,'导出','5','sys_oper_type','','warning',0,1,'导出操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(27,6,'导入','6','sys_oper_type','','warning',0,1,'导入操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(28,7,'强退','7','sys_oper_type','','danger',0,1,'强退操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(29,8,'生成代码','8','sys_oper_type','','warning',0,1,'生成操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(30,9,'清空数据','9','sys_oper_type','','danger',0,1,'清空操作','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(31,1,'成功','0','sys_common_status','','primary',0,1,'正常状态','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(32,2,'失败','1','sys_common_status','','danger',0,1,'停用状态','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(33,1,'初始化演示函数','scheduler_test.job','sys_job_function','',NULL,1,1,'演示函数','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(34,1,'指定日期(date)','date','sys_job_trigger','',NULL,1,1,'指定日期任务触发器','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(35,2,'间隔触发器(interval)','interval','sys_job_trigger','',NULL,0,1,'间隔触发器任务触发器','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(36,3,'cron表达式','cron','sys_job_trigger','',NULL,0,1,'间隔触发器任务触发器','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(37,1,'默认(default)','default','sys_dictdata_list_class','',NULL,1,1,'默认表格回显样式','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(38,2,'主要(primary)','primary','sys_dictdata_list_class','',NULL,0,1,'主要表格回显样式','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(39,3,'成功(success)','success','sys_dictdata_list_class','',NULL,0,1,'成功表格回显样式','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(40,4,'信息(info)','info','sys_dictdata_list_class','',NULL,0,1,'信息表格回显样式','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(41,5,'警告(warning)','warning','sys_dictdata_list_class','',NULL,0,1,'警告表格回显样式','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(42,6,'危险(danger)','danger','sys_dictdata_list_class','',NULL,0,1,'危险表格回显样式','2025-04-15 19:02:14','2025-04-15 19:02:14',1); +INSERT INTO `system_dict_data` VALUES (1,1,'男','0','sys_user_sex','blue',NULL,1,1,'性别男','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(2,2,'女','1','sys_user_sex','pink',NULL,0,1,'性别女','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(3,3,'未知','2','sys_user_sex','red',NULL,0,1,'性别未知','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(4,4,'显示','0','sys_show_hide','btn btn-success btn-xs','primary',1,1,'显示菜单','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(5,2,'隐藏','1','sys_show_hide','','danger',0,1,'隐藏菜单','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(6,1,'正常','0','sys_normal_disable','','primary',1,1,'正常状态','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(7,2,'停用','1','sys_normal_disable','','danger',0,1,'停用状态','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(8,1,'正常','0','sys_job_status','','primary',1,1,'正常状态','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(9,2,'暂停','1','sys_job_status','','danger',0,1,'停用状态','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(10,1,'默认(Memory)','default','sys_job_group','',NULL,1,1,'默认分组','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(11,2,'数据库','sqlalchemy','sys_job_group','',NULL,0,1,'数据库分组','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(12,3,'redis','redis','sys_job_group','',NULL,0,1,'reids分组','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(13,1,'默认','default','sys_job_executor','',NULL,0,1,'线程池','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(14,2,'进程池','processpool','sys_job_executor','',NULL,0,1,'进程池','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(15,1,'是','true','sys_yes_no','','primary',1,1,'系统默认是','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(16,2,'否','false','sys_yes_no','','danger',0,1,'系统默认否','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(17,1,'通知','1','sys_notice_type','blue','warning',1,1,'通知','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(18,2,'公告','2','sys_notice_type','orange','success',0,1,'公告','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(19,1,'正常','0','sys_notice_status','','primary',1,1,'正常状态','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(20,2,'关闭','1','sys_notice_status','','danger',0,1,'关闭状态','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(21,99,'其他','0','sys_oper_type','','info',0,1,'其他操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(22,1,'新增','1','sys_oper_type','','info',0,1,'新增操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(23,2,'修改','2','sys_oper_type','','info',0,1,'修改操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(24,3,'删除','3','sys_oper_type','','danger',0,1,'删除操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(25,4,'授权','4','sys_oper_type','','primary',0,1,'授权操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(26,5,'导出','5','sys_oper_type','','warning',0,1,'导出操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(27,6,'导入','6','sys_oper_type','','warning',0,1,'导入操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(28,7,'强退','7','sys_oper_type','','danger',0,1,'强退操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(29,8,'生成代码','8','sys_oper_type','','warning',0,1,'生成操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(30,9,'清空数据','9','sys_oper_type','','danger',0,1,'清空操作','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(31,1,'成功','0','sys_common_status','','primary',0,1,'正常状态','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(32,2,'失败','1','sys_common_status','','danger',0,1,'停用状态','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(33,1,'初始化演示函数','scheduler_test.job','sys_job_function','',NULL,1,1,'演示函数','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(34,1,'指定日期(date)','date','sys_job_trigger','',NULL,1,1,'指定日期任务触发器','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(35,2,'间隔触发器(interval)','interval','sys_job_trigger','',NULL,0,1,'间隔触发器任务触发器','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(36,3,'cron表达式','cron','sys_job_trigger','',NULL,0,1,'间隔触发器任务触发器','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(37,1,'默认(default)','default','sys_dictdata_list_class','',NULL,1,1,'默认表格回显样式','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(38,2,'主要(primary)','primary','sys_dictdata_list_class','',NULL,0,1,'主要表格回显样式','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(39,3,'成功(success)','success','sys_dictdata_list_class','',NULL,0,1,'成功表格回显样式','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(40,4,'信息(info)','info','sys_dictdata_list_class','',NULL,0,1,'信息表格回显样式','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(41,5,'警告(warning)','warning','sys_dictdata_list_class','',NULL,0,1,'警告表格回显样式','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(42,6,'危险(danger)','danger','sys_dictdata_list_class','',NULL,0,1,'危险表格回显样式','2025-05-18 18:24:56','2025-05-18 18:24:56',1); /*!40000 ALTER TABLE `system_dict_data` ENABLE KEYS */; -- @@ -145,7 +145,7 @@ CREATE TABLE `system_dict_type` ( -- /*!40000 ALTER TABLE `system_dict_type` DISABLE KEYS */; -INSERT INTO `system_dict_type` VALUES (1,'用户性别','sys_user_sex',1,'用户性别列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(2,'菜单状态','sys_show_hide',1,'菜单状态列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(3,'系统开关','sys_normal_disable',1,'系统开关列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(4,'任务状态','sys_job_status',1,'任务状态列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(5,'任务分组','sys_job_group',1,'任务分组列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(6,'任务执行器','sys_job_executor',1,'任务执行器列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(7,'系统是否','sys_yes_no',1,'系统是否列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(8,'通知类型','sys_notice_type',1,'通知类型列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(9,'通知状态','sys_notice_status',1,'通知状态列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(10,'操作类型','sys_oper_type',1,'操作类型列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(11,'系统状态','sys_common_status',1,'登录状态列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(12,'任务函数','sys_job_function',1,'任务函数列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(13,'任务触发器','sys_job_trigger',1,'任务触发器列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(14,'字典配置表格回显样式','sys_dictdata_list_class',1,'字典配置表格回显样式列表','2025-04-15 19:02:14','2025-04-15 19:02:14',1); +INSERT INTO `system_dict_type` VALUES (1,'用户性别','sys_user_sex',1,'用户性别列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(2,'菜单状态','sys_show_hide',1,'菜单状态列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(3,'系统开关','sys_normal_disable',1,'系统开关列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(4,'任务状态','sys_job_status',1,'任务状态列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(5,'任务分组','sys_job_group',1,'任务分组列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(6,'任务执行器','sys_job_executor',1,'任务执行器列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(7,'系统是否','sys_yes_no',1,'系统是否列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(8,'通知类型','sys_notice_type',1,'通知类型列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(9,'通知状态','sys_notice_status',1,'通知状态列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(10,'操作类型','sys_oper_type',1,'操作类型列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(11,'系统状态','sys_common_status',1,'登录状态列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(12,'任务函数','sys_job_function',1,'任务函数列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(13,'任务触发器','sys_job_trigger',1,'任务触发器列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(14,'字典配置表格回显样式','sys_dictdata_list_class',1,'字典配置表格回显样式列表','2025-05-18 18:24:56','2025-05-18 18:24:56',1); /*!40000 ALTER TABLE `system_dict_type` ENABLE KEYS */; -- @@ -186,7 +186,7 @@ CREATE TABLE `system_job` ( -- /*!40000 ALTER TABLE `system_job` DISABLE KEYS */; -INSERT INTO `system_job` VALUES (1,'系统默认(无参)','default','default','cron','0 0 12 * * ?','scheduler_test.job',NULL,NULL,0,1,NULL,NULL,0,NULL,NULL,'2025-04-15 19:02:14','2025-04-15 19:02:14',1),(2,'系统默认(有参)','default','default','cron','0 0 12 * * ?','scheduler_test.job','test',NULL,0,1,NULL,NULL,0,NULL,NULL,'2025-04-15 19:02:14','2025-04-15 19:02:14',1),(3,'系统默认(多参)','default','default','cron','0 0 12 * * ?','scheduler_test.job','new','{\"test\": 111}',0,1,NULL,NULL,0,NULL,NULL,'2025-04-15 19:02:14','2025-04-15 19:02:14',1); +INSERT INTO `system_job` VALUES (1,'系统默认(无参)','default','default','cron','0 0 12 * * ?','scheduler_test.job',NULL,NULL,0,1,NULL,NULL,0,NULL,NULL,'2025-05-18 18:24:56','2025-05-18 18:24:56',1),(2,'系统默认(有参)','default','default','cron','0 0 12 * * ?','scheduler_test.job','test',NULL,0,1,NULL,NULL,0,NULL,NULL,'2025-05-18 18:24:56','2025-05-18 18:24:56',1),(3,'系统默认(多参)','default','default','cron','0 0 12 * * ?','scheduler_test.job','new','{\"test\": 111}',0,1,NULL,NULL,0,NULL,NULL,'2025-05-18 18:24:56','2025-05-18 18:24:56',1); /*!40000 ALTER TABLE `system_job` ENABLE KEYS */; -- @@ -226,7 +226,7 @@ CREATE TABLE `system_menu` ( -- /*!40000 ALTER TABLE `system_menu` DISABLE KEYS */; -INSERT INTO `system_menu` VALUES (1,'仪表盘',1,1,'',1,'DashboardOutlined','Dashboard','/dashboard',NULL,'/dashboard/workplace',0,1,NULL,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(2,'系统管理',1,2,NULL,1,'SettingOutlined','System','/system',NULL,'/system/menu',0,1,NULL,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(3,'菜单管理',2,1,'system:menu:query',1,NULL,'Menu','/system/menu','system/menu/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(4,'部门管理',2,2,'system:dept:query',1,NULL,'Dept','/system/dept','system/dept/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(5,'岗位管理',2,3,'system:position:query',1,NULL,'Position','/system/position','system/position/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(6,'角色管理',2,4,'system:role:query',1,NULL,'Role','/system/role','system/role/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(7,'用户管理',2,5,'system:user:query',1,NULL,'User','/system/user','system/user/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(8,'日志管理',2,6,'system:log:query',1,NULL,'Log','/system/log','system/log/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(9,'创建菜单',3,1,'system:menu:create',1,NULL,NULL,NULL,NULL,NULL,0,1,3,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(10,'修改菜单',3,2,'system:menu:update',1,NULL,NULL,NULL,NULL,NULL,0,1,3,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(11,'删除菜单',3,3,'system:menu:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,3,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(12,'批量修改菜单状态',3,4,'system:menu:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,3,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(13,'创建部门',3,1,'system:dept:create',1,NULL,NULL,NULL,NULL,NULL,0,1,4,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(14,'修改部门',3,2,'system:dept:update',1,NULL,NULL,NULL,NULL,NULL,0,1,4,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(15,'删除部门',3,3,'system:dept:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,4,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(16,'批量修改部门状态',3,4,'system:dept:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,4,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(17,'创建岗位',3,1,'system:position:create',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(18,'修改岗位',3,2,'system:position:update',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(19,'删除岗位',3,3,'system:position:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(20,'批量修改岗位状态',3,4,'system:position:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(21,'岗位导出',3,5,'system:position:export',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(22,'创建角色',3,1,'system:role:create',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(23,'修改角色',3,2,'system:role:update',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(24,'删除角色',3,3,'system:role:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(25,'批量修改角色状态',3,4,'system:role:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(26,'设置角色权限',3,5,'system:role:permission',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(27,'角色导出',3,6,'system:role:export',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(28,'创建用户',3,1,'system:user:create',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(29,'修改用户',3,2,'system:user:update',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(30,'删除用户',3,3,'system:user:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(31,'批量修改用户状态',3,4,'system:user:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(32,'导出用户',3,5,'system:user:export',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(33,'导入用户',3,6,'system:user:import',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(34,'日志删除',3,1,'system:operation_log:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,8,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(35,'日志导出',3,2,'system:operation_log:export',1,NULL,NULL,NULL,NULL,NULL,0,1,8,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(36,'监控管理',1,3,NULL,1,'MonitorOutlined','Monitor','/monitor',NULL,'/monitor/online',0,1,NULL,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(37,'在线用户',2,1,'monitor:online:query',1,NULL,'MonitorOnline','/monitor/online','monitor/online/index',NULL,0,1,36,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(38,'在线用户强制下线',3,1,'monitor:online:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,37,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(39,'服务器监控',2,2,'monitor:server:query',1,NULL,'MonitorServer','/monitor/server','monitor/server/index',NULL,0,1,36,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(40,'缓存监控',2,3,'monitor:cache:query',1,NULL,'MonitorCache','/monitor/cache','monitor/cache/index',NULL,0,1,36,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(41,'清除缓存',3,1,'monitor:cache:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,40,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(42,'公共模块',1,4,NULL,1,'ApiOutlined','Common','/common',NULL,'/common/docs',0,1,NULL,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(43,'接口管理',2,1,'common:docs:query',1,NULL,'Docs','/common/docs','common/docs/index',NULL,0,1,42,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(44,'文档管理',2,2,'common:redoc:query',1,NULL,'Redoc','/common/redoc','common/redoc/index',NULL,0,1,42,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(45,'公告管理',2,7,'system:notice:query',1,NULL,'Notice','/system/notice','system/notice/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(46,'公告创建',3,1,'system:notice:create',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(47,'公告修改',3,2,'system:notice:update',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(48,'公告删除',3,3,'system:notice:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(49,'公告导出',3,4,'system:notice:export',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(50,'公告批量修改状态',3,5,'system:notice:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(51,'配置管理',2,8,'system:config:query',1,NULL,'Config','/system/config','system/config/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(52,'创建配置',3,1,'system:config:create',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(53,'修改配置',3,2,'system:config:update',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(54,'删除配置',3,3,'system:config:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(55,'批量更新配置',3,4,'system:config:update',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(56,'文件上传',3,5,'system:config:upload',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(57,'字典管理',2,9,'system:dict_type:query',1,NULL,'Dict','/system/dict','system/dict/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(58,'创建字典类型',3,1,'system:dict_type:create',1,NULL,NULL,NULL,NULL,NULL,0,1,57,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(59,'修改字典类型',3,2,'system:dict_type:update',1,NULL,NULL,NULL,NULL,NULL,0,1,57,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(60,'删除字典类型',3,3,'system:dict_type:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,57,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(61,'导出字典类型',3,4,'system:dict_type:export',1,NULL,NULL,NULL,NULL,NULL,0,1,57,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(62,'字典数据',2,10,'system:dict_data:query',1,NULL,'DictData','/system/dict_data','system/dict/data',NULL,1,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(63,'创建字典数据',3,1,'system:dict_data:create',1,NULL,NULL,NULL,NULL,NULL,0,1,62,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(64,'修改字典数据',3,2,'system:dict_data:update',1,NULL,NULL,NULL,NULL,NULL,0,1,62,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(65,'删除字典数据',3,3,'system:dict_data:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,62,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(66,'导出字典数据',3,4,'system:dict_data:export',1,NULL,NULL,NULL,NULL,NULL,0,1,62,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(67,'任务管理',2,11,'system:job:query',1,NULL,'Job','/system/job','system/job/index',NULL,0,1,2,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(68,'创建任务',3,1,'system:job:create',1,NULL,NULL,NULL,NULL,NULL,0,1,67,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(69,'修改和操作任务',3,2,'system:job:update',1,NULL,NULL,NULL,NULL,NULL,0,1,67,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(70,'删除和清除任务',3,3,'system:job:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,67,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(71,'导出定时任务',3,4,'system:job:export',1,NULL,NULL,NULL,NULL,NULL,0,1,67,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(72,'工作台',2,1,'dashboard:workplace:query',1,'','Workplace','/dashboard/workplace','dashboard/workplace',NULL,0,1,1,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'),(73,'分析页',2,2,'dashboard:analysis:query',1,'','Analysis','/dashboard/analysis','dashboard/analysis',NULL,0,1,1,'初始化数据','2025-04-15 19:02:13','2025-04-15 19:02:13'); +INSERT INTO `system_menu` VALUES (1,'仪表盘',1,1,'',1,'DashboardOutlined','Dashboard','/dashboard',NULL,'/dashboard/workplace',0,1,NULL,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(2,'系统管理',1,2,NULL,1,'SettingOutlined','System','/system',NULL,'/system/menu',0,1,NULL,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(3,'菜单管理',2,1,'system:menu:query',1,NULL,'Menu','/system/menu','system/menu/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(4,'部门管理',2,2,'system:dept:query',1,NULL,'Dept','/system/dept','system/dept/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(5,'岗位管理',2,3,'system:position:query',1,NULL,'Position','/system/position','system/position/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(6,'角色管理',2,4,'system:role:query',1,NULL,'Role','/system/role','system/role/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(7,'用户管理',2,5,'system:user:query',1,NULL,'User','/system/user','system/user/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(8,'日志管理',2,6,'system:log:query',1,NULL,'Log','/system/log','system/log/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(9,'创建菜单',3,1,'system:menu:create',1,NULL,NULL,NULL,NULL,NULL,0,1,3,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(10,'修改菜单',3,2,'system:menu:update',1,NULL,NULL,NULL,NULL,NULL,0,1,3,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(11,'删除菜单',3,3,'system:menu:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,3,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(12,'批量修改菜单状态',3,4,'system:menu:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,3,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(13,'创建部门',3,1,'system:dept:create',1,NULL,NULL,NULL,NULL,NULL,0,1,4,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(14,'修改部门',3,2,'system:dept:update',1,NULL,NULL,NULL,NULL,NULL,0,1,4,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(15,'删除部门',3,3,'system:dept:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,4,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(16,'批量修改部门状态',3,4,'system:dept:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,4,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(17,'创建岗位',3,1,'system:position:create',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(18,'修改岗位',3,2,'system:position:update',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(19,'删除岗位',3,3,'system:position:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(20,'批量修改岗位状态',3,4,'system:position:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(21,'岗位导出',3,5,'system:position:export',1,NULL,NULL,NULL,NULL,NULL,0,1,5,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(22,'创建角色',3,1,'system:role:create',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(23,'修改角色',3,2,'system:role:update',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(24,'删除角色',3,3,'system:role:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(25,'批量修改角色状态',3,4,'system:role:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(26,'设置角色权限',3,5,'system:role:permission',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(27,'角色导出',3,6,'system:role:export',1,NULL,NULL,NULL,NULL,NULL,0,1,6,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(28,'创建用户',3,1,'system:user:create',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(29,'修改用户',3,2,'system:user:update',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(30,'删除用户',3,3,'system:user:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(31,'批量修改用户状态',3,4,'system:user:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(32,'导出用户',3,5,'system:user:export',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(33,'导入用户',3,6,'system:user:import',1,NULL,NULL,NULL,NULL,NULL,0,1,7,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(34,'日志删除',3,1,'system:operation_log:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,8,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(35,'日志导出',3,2,'system:operation_log:export',1,NULL,NULL,NULL,NULL,NULL,0,1,8,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(36,'监控管理',1,3,NULL,1,'MonitorOutlined','Monitor','/monitor',NULL,'/monitor/online',0,1,NULL,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(37,'在线用户',2,1,'monitor:online:query',1,NULL,'MonitorOnline','/monitor/online','monitor/online/index',NULL,0,1,36,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(38,'在线用户强制下线',3,1,'monitor:online:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,37,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(39,'服务器监控',2,2,'monitor:server:query',1,NULL,'MonitorServer','/monitor/server','monitor/server/index',NULL,0,1,36,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(40,'缓存监控',2,3,'monitor:cache:query',1,NULL,'MonitorCache','/monitor/cache','monitor/cache/index',NULL,0,1,36,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(41,'清除缓存',3,1,'monitor:cache:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,40,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(42,'公共模块',1,4,NULL,1,'ApiOutlined','Common','/common',NULL,'/common/docs',0,1,NULL,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(43,'接口管理',2,1,'common:docs:query',1,NULL,'Docs','/common/docs','common/docs/index',NULL,0,1,42,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(44,'文档管理',2,2,'common:redoc:query',1,NULL,'Redoc','/common/redoc','common/redoc/index',NULL,0,1,42,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(45,'公告管理',2,7,'system:notice:query',1,NULL,'Notice','/system/notice','system/notice/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(46,'公告创建',3,1,'system:notice:create',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(47,'公告修改',3,2,'system:notice:update',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(48,'公告删除',3,3,'system:notice:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(49,'公告导出',3,4,'system:notice:export',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(50,'公告批量修改状态',3,5,'system:notice:patch',1,NULL,NULL,NULL,NULL,NULL,0,1,45,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(51,'配置管理',2,8,'system:config:query',1,NULL,'Config','/system/config','system/config/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(52,'创建配置',3,1,'system:config:create',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(53,'修改配置',3,2,'system:config:update',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(54,'删除配置',3,3,'system:config:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(55,'批量更新配置',3,4,'system:config:update',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(56,'文件上传',3,5,'system:config:upload',1,NULL,NULL,NULL,NULL,NULL,0,1,51,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(57,'字典管理',2,9,'system:dict_type:query',1,NULL,'Dict','/system/dict','system/dict/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(58,'创建字典类型',3,1,'system:dict_type:create',1,NULL,NULL,NULL,NULL,NULL,0,1,57,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(59,'修改字典类型',3,2,'system:dict_type:update',1,NULL,NULL,NULL,NULL,NULL,0,1,57,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(60,'删除字典类型',3,3,'system:dict_type:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,57,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(61,'导出字典类型',3,4,'system:dict_type:export',1,NULL,NULL,NULL,NULL,NULL,0,1,57,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(62,'字典数据',2,10,'system:dict_data:query',1,NULL,'DictData','/system/dict_data','system/dict/data',NULL,1,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(63,'创建字典数据',3,1,'system:dict_data:create',1,NULL,NULL,NULL,NULL,NULL,0,1,62,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(64,'修改字典数据',3,2,'system:dict_data:update',1,NULL,NULL,NULL,NULL,NULL,0,1,62,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(65,'删除字典数据',3,3,'system:dict_data:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,62,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(66,'导出字典数据',3,4,'system:dict_data:export',1,NULL,NULL,NULL,NULL,NULL,0,1,62,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(67,'任务管理',2,11,'system:job:query',1,NULL,'Job','/system/job','system/job/index',NULL,0,1,2,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(68,'创建任务',3,1,'system:job:create',1,NULL,NULL,NULL,NULL,NULL,0,1,67,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(69,'修改和操作任务',3,2,'system:job:update',1,NULL,NULL,NULL,NULL,NULL,0,1,67,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(70,'删除和清除任务',3,3,'system:job:delete',1,NULL,NULL,NULL,NULL,NULL,0,1,67,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(71,'导出定时任务',3,4,'system:job:export',1,NULL,NULL,NULL,NULL,NULL,0,1,67,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(72,'工作台',2,1,'dashboard:workplace:query',1,'','Workplace','/dashboard/workplace','dashboard/workplace',NULL,0,1,1,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'),(73,'分析页',2,2,'dashboard:analysis:query',1,'','Analysis','/dashboard/analysis','dashboard/analysis',NULL,0,1,1,'初始化数据','2025-05-18 18:24:56','2025-05-18 18:24:56'); /*!40000 ALTER TABLE `system_menu` ENABLE KEYS */; -- @@ -257,7 +257,7 @@ CREATE TABLE `system_notice` ( -- /*!40000 ALTER TABLE `system_notice` DISABLE KEYS */; -INSERT INTO `system_notice` VALUES (1,'系统更新','1','2099年9月9日,晚上12:00,系统更新',1,'系统更新','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(2,'系统维护','2','2099年9月9日,晚上12:00,系统维护',1,'系统维护','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(3,'系统更新完成','1','2099年9月9日,晚上12:00,系统更新完成',0,'系统更新完成','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(4,'系统维护完成','2','2099年9月9日,晚上12:00,系统维护完成',0,'系统维护完成','2025-04-15 19:02:14','2025-04-15 19:02:14',1); +INSERT INTO `system_notice` VALUES (1,'系统更新','1','2099年9月9日,晚上12:00,系统更新',1,'系统更新','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(2,'系统维护','2','2099年9月9日,晚上12:00,系统维护',1,'系统维护','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(3,'系统更新完成','1','2099年9月9日,晚上12:00,系统更新完成',0,'系统更新完成','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(4,'系统维护完成','2','2099年9月9日,晚上12:00,系统维护完成',0,'系统维护完成','2025-05-18 18:24:56','2025-05-18 18:24:56',1); /*!40000 ALTER TABLE `system_notice` ENABLE KEYS */; -- @@ -273,17 +273,19 @@ CREATE TABLE `system_operation_log` ( `request_method` varchar(10) DEFAULT NULL COMMENT '请求方式', `request_payload` text COMMENT '请求体', `request_ip` varchar(50) DEFAULT NULL COMMENT '请求IP地址', + `login_location` varchar(255) DEFAULT NULL COMMENT '登录位置', `request_os` varchar(64) DEFAULT NULL COMMENT '操作系统', `request_browser` varchar(64) DEFAULT NULL COMMENT '浏览器', `response_code` int DEFAULT NULL COMMENT '响应状态码', `response_json` text COMMENT '响应体', + `process_time` float DEFAULT NULL COMMENT '处理时间', `description` text COMMENT '备注说明', `created_at` datetime DEFAULT NULL COMMENT '创建时间', `updated_at` datetime DEFAULT NULL COMMENT '更新时间', `creator_id` int DEFAULT NULL COMMENT '创建人ID', PRIMARY KEY (`id`), - KEY `ix_system_operation_log_request_method` (`request_method`), KEY `ix_system_operation_log_creator_id` (`creator_id`), + KEY `ix_system_operation_log_request_method` (`request_method`), KEY `ix_system_operation_log_request_path` (`request_path`), CONSTRAINT `system_operation_log_ibfk_1` FOREIGN KEY (`creator_id`) REFERENCES `system_users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='操作日志表'; @@ -324,7 +326,7 @@ CREATE TABLE `system_position` ( -- /*!40000 ALTER TABLE `system_position` DISABLE KEYS */; -INSERT INTO `system_position` VALUES (1,'董事长岗',1,1,'董事长岗位','2025-04-15 19:02:13','2025-04-15 19:02:13',1),(2,'运营岗',2,1,'运营岗位','2025-04-15 19:02:13','2025-04-15 19:02:13',1),(3,'销售岗',3,1,'销售岗','2025-04-15 19:02:13','2025-04-15 19:02:13',1),(4,'人事行政岗',4,1,'人事行政岗','2025-04-15 19:02:13','2025-04-15 19:02:13',1),(5,'开发岗',5,1,'开发岗','2025-04-15 19:02:13','2025-04-15 19:02:13',1),(6,'测试岗',6,1,'测试岗','2025-04-15 19:02:13','2025-04-15 19:02:13',1),(7,'演示岗',7,1,'演示岗','2025-04-15 19:02:13','2025-04-15 19:02:13',1); +INSERT INTO `system_position` VALUES (1,'董事长岗',1,1,'董事长岗位','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(2,'运营岗',2,1,'运营岗位','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(3,'销售岗',3,1,'销售岗','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(4,'人事行政岗',4,1,'人事行政岗','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(5,'开发岗',5,1,'开发岗','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(6,'测试岗',6,1,'测试岗','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(7,'演示岗',7,1,'演示岗','2025-05-18 18:24:56','2025-05-18 18:24:56',1); /*!40000 ALTER TABLE `system_position` ENABLE KEYS */; -- @@ -356,7 +358,7 @@ CREATE TABLE `system_role` ( -- /*!40000 ALTER TABLE `system_role` DISABLE KEYS */; -INSERT INTO `system_role` VALUES (1,'管理员角色',1,4,1,'管理员','2025-04-15 19:02:14','2025-04-15 19:02:14',1),(2,'演示角色',2,5,1,'演示角色','2025-04-15 19:02:14','2025-04-15 19:02:14',1); +INSERT INTO `system_role` VALUES (1,'管理员角色',1,4,1,'管理员','2025-05-18 18:24:56','2025-05-18 18:24:56',1),(2,'演示角色',2,5,1,'演示角色','2025-05-18 18:24:56','2025-05-18 18:24:56',1); /*!40000 ALTER TABLE `system_role` ENABLE KEYS */; -- @@ -370,8 +372,8 @@ CREATE TABLE `system_role_depts` ( `role_id` int NOT NULL COMMENT '角色ID', `dept_id` int NOT NULL COMMENT '部门ID', PRIMARY KEY (`role_id`,`dept_id`), - KEY `ix_system_role_depts_role_id` (`role_id`), KEY `ix_system_role_depts_dept_id` (`dept_id`), + KEY `ix_system_role_depts_role_id` (`role_id`), CONSTRAINT `system_role_depts_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `system_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `system_role_depts_ibfk_2` FOREIGN KEY (`dept_id`) REFERENCES `system_dept` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色部门关联表'; @@ -422,8 +424,8 @@ CREATE TABLE `system_user_positions` ( `user_id` int NOT NULL COMMENT '用户ID', `position_id` int NOT NULL COMMENT '岗位ID', PRIMARY KEY (`user_id`,`position_id`), - KEY `ix_system_user_positions_user_id` (`user_id`), KEY `ix_system_user_positions_position_id` (`position_id`), + KEY `ix_system_user_positions_user_id` (`user_id`), CONSTRAINT `system_user_positions_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `system_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `system_user_positions_ibfk_2` FOREIGN KEY (`position_id`) REFERENCES `system_position` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户岗位关联表'; @@ -448,8 +450,8 @@ CREATE TABLE `system_user_roles` ( `user_id` int NOT NULL COMMENT '用户ID', `role_id` int NOT NULL COMMENT '角色ID', PRIMARY KEY (`user_id`,`role_id`), - KEY `ix_system_user_roles_role_id` (`role_id`), KEY `ix_system_user_roles_user_id` (`user_id`), + KEY `ix_system_user_roles_role_id` (`role_id`), CONSTRAINT `system_user_roles_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `system_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `system_user_roles_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `system_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户角色关联表'; @@ -501,7 +503,7 @@ CREATE TABLE `system_users` ( -- /*!40000 ALTER TABLE `system_users` DISABLE KEYS */; -INSERT INTO `system_users` VALUES (1,'admin','$2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk6N/NX3IZRtubBDElA0VLZhkNOa','管理员','15382112222','admin@qq.com','0','https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',1,1,NULL,1,'超级管理员','2025-04-15 19:02:13','2025-04-15 19:02:13',NULL),(2,'demo','$2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk6N/NX3IZRtubBDElA0VLZhkNOa','演示用户','15382112121','demo@qq.com','1','https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',1,0,NULL,6,'演示用户','2025-04-15 19:02:13','2025-04-15 19:02:13',1); +INSERT INTO `system_users` VALUES (1,'admin','$2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk6N/NX3IZRtubBDElA0VLZhkNOa','管理员','15382112222','admin@qq.com','0','https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',1,1,NULL,1,'超级管理员','2025-05-18 18:24:56','2025-05-18 18:24:56',NULL),(2,'demo','$2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk6N/NX3IZRtubBDElA0VLZhkNOa','演示用户','15382112121','demo@qq.com','1','https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',1,0,NULL,6,'演示用户','2025-05-18 18:24:56','2025-05-18 18:24:56',1); /*!40000 ALTER TABLE `system_users` ENABLE KEYS */; -- @@ -517,4 +519,4 @@ INSERT INTO `system_users` VALUES (1,'admin','$2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-04-15 19:02:35 +-- Dump completed on 2025-05-18 18:26:27 diff --git a/backend/sql/postgres_2025-04-15_190357.sql b/backend/sql/postgres_2025-05-18_182902.sql similarity index 82% rename from backend/sql/postgres_2025-04-15_190357.sql rename to backend/sql/postgres_2025-05-18_182902.sql index 6705e63c..5de1083a 100644 --- a/backend/sql/postgres_2025-04-15_190357.sql +++ b/backend/sql/postgres_2025-05-18_182902.sql @@ -1016,10 +1016,12 @@ CREATE TABLE public.system_operation_log ( request_method character varying(10), request_payload text, request_ip character varying(50), + login_location character varying(255), request_os character varying(64), request_browser character varying(64), response_code integer, response_json text, + process_time double precision, description text, created_at timestamp without time zone, updated_at timestamp without time zone, @@ -1071,6 +1073,13 @@ COMMENT ON COLUMN public.system_operation_log.request_payload IS '请求体'; COMMENT ON COLUMN public.system_operation_log.request_ip IS '请求IP地址'; +-- +-- Name: COLUMN system_operation_log.login_location; Type: COMMENT; Schema: public; Owner: tao +-- + +COMMENT ON COLUMN public.system_operation_log.login_location IS '登录位置'; + + -- -- Name: COLUMN system_operation_log.request_os; Type: COMMENT; Schema: public; Owner: tao -- @@ -1099,6 +1108,13 @@ COMMENT ON COLUMN public.system_operation_log.response_code IS '响应状态码' COMMENT ON COLUMN public.system_operation_log.response_json IS '响应体'; +-- +-- Name: COLUMN system_operation_log.process_time; Type: COMMENT; Schema: public; Owner: tao +-- + +COMMENT ON COLUMN public.system_operation_log.process_time IS '处理时间'; + + -- -- Name: COLUMN system_operation_log.description; Type: COMMENT; Schema: public; Owner: tao -- @@ -1744,7 +1760,7 @@ ALTER TABLE ONLY public.system_users ALTER COLUMN id SET DEFAULT nextval('public -- COPY public.system_config (id, title, favicon, logo, background, copyright, keep_record, help_url, privacy_url, clause_url, code_url, description, created_at, updated_at, creator_id) FROM stdin; -1 FastAPI Vue Admin http://localhost:8000/api/v1/static/image/favicon.ico http://localhost:8000/api/v1/static/image/logo.png http://localhost:8000/api/v1/static/image/background.png Copyright © 2021-2025 fastapi-vue-admin.com 版权所有 晋ICP备18005113号-3 https://gitee.com/tao__tao/fastapi_vue3_admin.git https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE https://gitee.com/tao__tao/fastapi_vue3_admin.git FastAPI Vue Admin 是完全开源的权限管理系统 2025-04-15 19:03:45.917465 2025-04-15 19:03:45.917466 1 +1 FastAPI Vue Admin http://8.137.99.5:8001/api/v1/static/image/favicon.ico http://8.137.99.5:8001/api/v1/static/image/logo.png http://8.137.99.5:8001/api/v1/static/image/background.png Copyright © 2021-2025 fastapi-vue-admin.com 版权所有 晋ICP备18005113号-3 https://gitee.com/tao__tao/fastapi_vue3_admin.git https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE https://gitee.com/tao__tao/fastapi_vue3_admin/blob/master/LICENSE https://gitee.com/tao__tao/fastapi_vue3_admin.git FastAPI Vue Admin 是完全开源的权限管理系统 2025-05-18 18:28:07.914297 2025-05-18 18:28:07.914298 1 \. @@ -1753,17 +1769,17 @@ COPY public.system_config (id, title, favicon, logo, background, copyright, keep -- COPY public.system_dept (id, name, "order", parent_id, available, description, created_at, updated_at) FROM stdin; -1 集团总公司 1 \N t 集团总公司 2025-04-15 19:03:45.888171 2025-04-15 19:03:45.888175 -2 西安分公司 1 1 t 西安分公司 2025-04-15 19:03:45.888175 2025-04-15 19:03:45.888176 -3 深圳分公司 2 1 t 深圳分公司 2025-04-15 19:03:45.888176 2025-04-15 19:03:45.888177 -4 开发组 1 2 t 开发组 2025-04-15 19:03:45.888177 2025-04-15 19:03:45.888177 -5 测试组 2 2 t 测试组 2025-04-15 19:03:45.888178 2025-04-15 19:03:45.888178 -6 演示组 3 2 t 演示组 2025-04-15 19:03:45.888179 2025-04-15 19:03:45.888179 -7 销售部 1 3 t 销售部 2025-04-15 19:03:45.888179 2025-04-15 19:03:45.88818 -8 市场部 2 3 t 市场部 2025-04-15 19:03:45.88818 2025-04-15 19:03:45.88818 -9 财务部 3 3 t 财务部 2025-04-15 19:03:45.888181 2025-04-15 19:03:45.888181 -10 研发部 4 3 t 研发部 2025-04-15 19:03:45.888181 2025-04-15 19:03:45.888182 -11 运维部 5 3 t 研发部 2025-04-15 19:03:45.888182 2025-04-15 19:03:45.888182 +1 集团总公司 1 \N t 集团总公司 2025-05-18 18:28:07.885848 2025-05-18 18:28:07.885852 +2 西安分公司 1 1 t 西安分公司 2025-05-18 18:28:07.885853 2025-05-18 18:28:07.885853 +3 深圳分公司 2 1 t 深圳分公司 2025-05-18 18:28:07.885854 2025-05-18 18:28:07.885854 +4 开发组 1 2 t 开发组 2025-05-18 18:28:07.885854 2025-05-18 18:28:07.885855 +5 测试组 2 2 t 测试组 2025-05-18 18:28:07.885855 2025-05-18 18:28:07.885855 +6 演示组 3 2 t 演示组 2025-05-18 18:28:07.885856 2025-05-18 18:28:07.885856 +7 销售部 1 3 t 销售部 2025-05-18 18:28:07.885856 2025-05-18 18:28:07.885857 +8 市场部 2 3 t 市场部 2025-05-18 18:28:07.885857 2025-05-18 18:28:07.885857 +9 财务部 3 3 t 财务部 2025-05-18 18:28:07.885858 2025-05-18 18:28:07.885858 +10 研发部 4 3 t 研发部 2025-05-18 18:28:07.885859 2025-05-18 18:28:07.885859 +11 运维部 5 3 t 研发部 2025-05-18 18:28:07.885859 2025-05-18 18:28:07.88586 \. @@ -1772,48 +1788,48 @@ COPY public.system_dept (id, name, "order", parent_id, available, description, c -- COPY public.system_dict_data (id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, available, description, created_at, updated_at, creator_id) FROM stdin; -1 1 男 0 sys_user_sex blue \N t t 性别男 2025-04-15 19:03:45.922912 2025-04-15 19:03:45.922913 1 -2 2 女 1 sys_user_sex pink \N f t 性别女 2025-04-15 19:03:45.922913 2025-04-15 19:03:45.922914 1 -3 3 未知 2 sys_user_sex red \N f t 性别未知 2025-04-15 19:03:45.922914 2025-04-15 19:03:45.922915 1 -4 4 显示 0 sys_show_hide btn btn-success btn-xs primary t t 显示菜单 2025-04-15 19:03:45.922915 2025-04-15 19:03:45.922915 1 -5 2 隐藏 1 sys_show_hide danger f t 隐藏菜单 2025-04-15 19:03:45.922916 2025-04-15 19:03:45.922916 1 -6 1 正常 0 sys_normal_disable primary t t 正常状态 2025-04-15 19:03:45.922917 2025-04-15 19:03:45.922917 1 -7 2 停用 1 sys_normal_disable danger f t 停用状态 2025-04-15 19:03:45.922917 2025-04-15 19:03:45.922918 1 -8 1 正常 0 sys_job_status primary t t 正常状态 2025-04-15 19:03:45.922918 2025-04-15 19:03:45.922918 1 -9 2 暂停 1 sys_job_status danger f t 停用状态 2025-04-15 19:03:45.922919 2025-04-15 19:03:45.922919 1 -10 1 默认(Memory) default sys_job_group \N t t 默认分组 2025-04-15 19:03:45.92292 2025-04-15 19:03:45.92292 1 -11 2 数据库 sqlalchemy sys_job_group \N f t 数据库分组 2025-04-15 19:03:45.92292 2025-04-15 19:03:45.922921 1 -12 3 redis redis sys_job_group \N f t reids分组 2025-04-15 19:03:45.922921 2025-04-15 19:03:45.922921 1 -13 1 默认 default sys_job_executor \N f t 线程池 2025-04-15 19:03:45.922922 2025-04-15 19:03:45.922922 1 -14 2 进程池 processpool sys_job_executor \N f t 进程池 2025-04-15 19:03:45.922922 2025-04-15 19:03:45.922923 1 -15 1 是 true sys_yes_no primary t t 系统默认是 2025-04-15 19:03:45.922923 2025-04-15 19:03:45.922923 1 -16 2 否 false sys_yes_no danger f t 系统默认否 2025-04-15 19:03:45.922924 2025-04-15 19:03:45.922924 1 -17 1 通知 1 sys_notice_type blue warning t t 通知 2025-04-15 19:03:45.922924 2025-04-15 19:03:45.922925 1 -18 2 公告 2 sys_notice_type orange success f t 公告 2025-04-15 19:03:45.922925 2025-04-15 19:03:45.922926 1 -19 1 正常 0 sys_notice_status primary t t 正常状态 2025-04-15 19:03:45.922926 2025-04-15 19:03:45.922926 1 -20 2 关闭 1 sys_notice_status danger f t 关闭状态 2025-04-15 19:03:45.922927 2025-04-15 19:03:45.922927 1 -21 99 其他 0 sys_oper_type info f t 其他操作 2025-04-15 19:03:45.922927 2025-04-15 19:03:45.922928 1 -22 1 新增 1 sys_oper_type info f t 新增操作 2025-04-15 19:03:45.922928 2025-04-15 19:03:45.922928 1 -23 2 修改 2 sys_oper_type info f t 修改操作 2025-04-15 19:03:45.922929 2025-04-15 19:03:45.922929 1 -24 3 删除 3 sys_oper_type danger f t 删除操作 2025-04-15 19:03:45.922929 2025-04-15 19:03:45.92293 1 -25 4 授权 4 sys_oper_type primary f t 授权操作 2025-04-15 19:03:45.92293 2025-04-15 19:03:45.92293 1 -26 5 导出 5 sys_oper_type warning f t 导出操作 2025-04-15 19:03:45.922931 2025-04-15 19:03:45.922931 1 -27 6 导入 6 sys_oper_type warning f t 导入操作 2025-04-15 19:03:45.922932 2025-04-15 19:03:45.922932 1 -28 7 强退 7 sys_oper_type danger f t 强退操作 2025-04-15 19:03:45.922932 2025-04-15 19:03:45.922933 1 -29 8 生成代码 8 sys_oper_type warning f t 生成操作 2025-04-15 19:03:45.922933 2025-04-15 19:03:45.922933 1 -30 9 清空数据 9 sys_oper_type danger f t 清空操作 2025-04-15 19:03:45.922934 2025-04-15 19:03:45.922934 1 -31 1 成功 0 sys_common_status primary f t 正常状态 2025-04-15 19:03:45.922934 2025-04-15 19:03:45.922935 1 -32 2 失败 1 sys_common_status danger f t 停用状态 2025-04-15 19:03:45.922935 2025-04-15 19:03:45.922935 1 -33 1 初始化演示函数 scheduler_test.job sys_job_function \N t t 演示函数 2025-04-15 19:03:45.922936 2025-04-15 19:03:45.922936 1 -34 1 指定日期(date) date sys_job_trigger \N t t 指定日期任务触发器 2025-04-15 19:03:45.922936 2025-04-15 19:03:45.922937 1 -35 2 间隔触发器(interval) interval sys_job_trigger \N f t 间隔触发器任务触发器 2025-04-15 19:03:45.922937 2025-04-15 19:03:45.922937 1 -36 3 cron表达式 cron sys_job_trigger \N f t 间隔触发器任务触发器 2025-04-15 19:03:45.922938 2025-04-15 19:03:45.922938 1 -37 1 默认(default) default sys_dictdata_list_class \N t t 默认表格回显样式 2025-04-15 19:03:45.922938 2025-04-15 19:03:45.922939 1 -38 2 主要(primary) primary sys_dictdata_list_class \N f t 主要表格回显样式 2025-04-15 19:03:45.922939 2025-04-15 19:03:45.92294 1 -39 3 成功(success) success sys_dictdata_list_class \N f t 成功表格回显样式 2025-04-15 19:03:45.92294 2025-04-15 19:03:45.92294 1 -40 4 信息(info) info sys_dictdata_list_class \N f t 信息表格回显样式 2025-04-15 19:03:45.922941 2025-04-15 19:03:45.922941 1 -41 5 警告(warning) warning sys_dictdata_list_class \N f t 警告表格回显样式 2025-04-15 19:03:45.922941 2025-04-15 19:03:45.922942 1 -42 6 危险(danger) danger sys_dictdata_list_class \N f t 危险表格回显样式 2025-04-15 19:03:45.922942 2025-04-15 19:03:45.922942 1 +1 1 男 0 sys_user_sex blue \N t t 性别男 2025-05-18 18:28:07.919332 2025-05-18 18:28:07.919333 1 +2 2 女 1 sys_user_sex pink \N f t 性别女 2025-05-18 18:28:07.919333 2025-05-18 18:28:07.919333 1 +3 3 未知 2 sys_user_sex red \N f t 性别未知 2025-05-18 18:28:07.919334 2025-05-18 18:28:07.919334 1 +4 4 显示 0 sys_show_hide btn btn-success btn-xs primary t t 显示菜单 2025-05-18 18:28:07.919335 2025-05-18 18:28:07.919335 1 +5 2 隐藏 1 sys_show_hide danger f t 隐藏菜单 2025-05-18 18:28:07.919335 2025-05-18 18:28:07.919336 1 +6 1 正常 0 sys_normal_disable primary t t 正常状态 2025-05-18 18:28:07.919336 2025-05-18 18:28:07.919336 1 +7 2 停用 1 sys_normal_disable danger f t 停用状态 2025-05-18 18:28:07.919337 2025-05-18 18:28:07.919337 1 +8 1 正常 0 sys_job_status primary t t 正常状态 2025-05-18 18:28:07.919337 2025-05-18 18:28:07.919337 1 +9 2 暂停 1 sys_job_status danger f t 停用状态 2025-05-18 18:28:07.919338 2025-05-18 18:28:07.919338 1 +10 1 默认(Memory) default sys_job_group \N t t 默认分组 2025-05-18 18:28:07.919338 2025-05-18 18:28:07.919339 1 +11 2 数据库 sqlalchemy sys_job_group \N f t 数据库分组 2025-05-18 18:28:07.919339 2025-05-18 18:28:07.919339 1 +12 3 redis redis sys_job_group \N f t reids分组 2025-05-18 18:28:07.91934 2025-05-18 18:28:07.91934 1 +13 1 默认 default sys_job_executor \N f t 线程池 2025-05-18 18:28:07.91934 2025-05-18 18:28:07.919341 1 +14 2 进程池 processpool sys_job_executor \N f t 进程池 2025-05-18 18:28:07.919341 2025-05-18 18:28:07.919341 1 +15 1 是 true sys_yes_no primary t t 系统默认是 2025-05-18 18:28:07.919342 2025-05-18 18:28:07.919342 1 +16 2 否 false sys_yes_no danger f t 系统默认否 2025-05-18 18:28:07.919342 2025-05-18 18:28:07.919343 1 +17 1 通知 1 sys_notice_type blue warning t t 通知 2025-05-18 18:28:07.919343 2025-05-18 18:28:07.919343 1 +18 2 公告 2 sys_notice_type orange success f t 公告 2025-05-18 18:28:07.919344 2025-05-18 18:28:07.919344 1 +19 1 正常 0 sys_notice_status primary t t 正常状态 2025-05-18 18:28:07.919344 2025-05-18 18:28:07.919345 1 +20 2 关闭 1 sys_notice_status danger f t 关闭状态 2025-05-18 18:28:07.919345 2025-05-18 18:28:07.919345 1 +21 99 其他 0 sys_oper_type info f t 其他操作 2025-05-18 18:28:07.919346 2025-05-18 18:28:07.919346 1 +22 1 新增 1 sys_oper_type info f t 新增操作 2025-05-18 18:28:07.919346 2025-05-18 18:28:07.919347 1 +23 2 修改 2 sys_oper_type info f t 修改操作 2025-05-18 18:28:07.919347 2025-05-18 18:28:07.919347 1 +24 3 删除 3 sys_oper_type danger f t 删除操作 2025-05-18 18:28:07.919348 2025-05-18 18:28:07.919348 1 +25 4 授权 4 sys_oper_type primary f t 授权操作 2025-05-18 18:28:07.919348 2025-05-18 18:28:07.919349 1 +26 5 导出 5 sys_oper_type warning f t 导出操作 2025-05-18 18:28:07.919349 2025-05-18 18:28:07.919349 1 +27 6 导入 6 sys_oper_type warning f t 导入操作 2025-05-18 18:28:07.91935 2025-05-18 18:28:07.91935 1 +28 7 强退 7 sys_oper_type danger f t 强退操作 2025-05-18 18:28:07.91935 2025-05-18 18:28:07.91935 1 +29 8 生成代码 8 sys_oper_type warning f t 生成操作 2025-05-18 18:28:07.919351 2025-05-18 18:28:07.919351 1 +30 9 清空数据 9 sys_oper_type danger f t 清空操作 2025-05-18 18:28:07.919351 2025-05-18 18:28:07.919352 1 +31 1 成功 0 sys_common_status primary f t 正常状态 2025-05-18 18:28:07.919352 2025-05-18 18:28:07.919352 1 +32 2 失败 1 sys_common_status danger f t 停用状态 2025-05-18 18:28:07.919353 2025-05-18 18:28:07.919353 1 +33 1 初始化演示函数 scheduler_test.job sys_job_function \N t t 演示函数 2025-05-18 18:28:07.919353 2025-05-18 18:28:07.919354 1 +34 1 指定日期(date) date sys_job_trigger \N t t 指定日期任务触发器 2025-05-18 18:28:07.919354 2025-05-18 18:28:07.919354 1 +35 2 间隔触发器(interval) interval sys_job_trigger \N f t 间隔触发器任务触发器 2025-05-18 18:28:07.919355 2025-05-18 18:28:07.919355 1 +36 3 cron表达式 cron sys_job_trigger \N f t 间隔触发器任务触发器 2025-05-18 18:28:07.919355 2025-05-18 18:28:07.919356 1 +37 1 默认(default) default sys_dictdata_list_class \N t t 默认表格回显样式 2025-05-18 18:28:07.919356 2025-05-18 18:28:07.919356 1 +38 2 主要(primary) primary sys_dictdata_list_class \N f t 主要表格回显样式 2025-05-18 18:28:07.919357 2025-05-18 18:28:07.919357 1 +39 3 成功(success) success sys_dictdata_list_class \N f t 成功表格回显样式 2025-05-18 18:28:07.919357 2025-05-18 18:28:07.919358 1 +40 4 信息(info) info sys_dictdata_list_class \N f t 信息表格回显样式 2025-05-18 18:28:07.919358 2025-05-18 18:28:07.919358 1 +41 5 警告(warning) warning sys_dictdata_list_class \N f t 警告表格回显样式 2025-05-18 18:28:07.919358 2025-05-18 18:28:07.919359 1 +42 6 危险(danger) danger sys_dictdata_list_class \N f t 危险表格回显样式 2025-05-18 18:28:07.919359 2025-05-18 18:28:07.919359 1 \. @@ -1822,20 +1838,20 @@ COPY public.system_dict_data (id, dict_sort, dict_label, dict_value, dict_type, -- COPY public.system_dict_type (id, dict_name, dict_type, available, description, created_at, updated_at, creator_id) FROM stdin; -1 用户性别 sys_user_sex t 用户性别列表 2025-04-15 19:03:45.919629 2025-04-15 19:03:45.91963 1 -2 菜单状态 sys_show_hide t 菜单状态列表 2025-04-15 19:03:45.91963 2025-04-15 19:03:45.919631 1 -3 系统开关 sys_normal_disable t 系统开关列表 2025-04-15 19:03:45.919631 2025-04-15 19:03:45.919632 1 -4 任务状态 sys_job_status t 任务状态列表 2025-04-15 19:03:45.919632 2025-04-15 19:03:45.919632 1 -5 任务分组 sys_job_group t 任务分组列表 2025-04-15 19:03:45.919633 2025-04-15 19:03:45.919633 1 -6 任务执行器 sys_job_executor t 任务执行器列表 2025-04-15 19:03:45.919634 2025-04-15 19:03:45.919634 1 -7 系统是否 sys_yes_no t 系统是否列表 2025-04-15 19:03:45.919634 2025-04-15 19:03:45.919635 1 -8 通知类型 sys_notice_type t 通知类型列表 2025-04-15 19:03:45.919635 2025-04-15 19:03:45.919636 1 -9 通知状态 sys_notice_status t 通知状态列表 2025-04-15 19:03:45.919636 2025-04-15 19:03:45.919636 1 -10 操作类型 sys_oper_type t 操作类型列表 2025-04-15 19:03:45.919637 2025-04-15 19:03:45.919637 1 -11 系统状态 sys_common_status t 登录状态列表 2025-04-15 19:03:45.919637 2025-04-15 19:03:45.919638 1 -12 任务函数 sys_job_function t 任务函数列表 2025-04-15 19:03:45.919638 2025-04-15 19:03:45.919638 1 -13 任务触发器 sys_job_trigger t 任务触发器列表 2025-04-15 19:03:45.919639 2025-04-15 19:03:45.919639 1 -14 字典配置表格回显样式 sys_dictdata_list_class t 字典配置表格回显样式列表 2025-04-15 19:03:45.91964 2025-04-15 19:03:45.91964 1 +1 用户性别 sys_user_sex t 用户性别列表 2025-05-18 18:28:07.916168 2025-05-18 18:28:07.916169 1 +2 菜单状态 sys_show_hide t 菜单状态列表 2025-05-18 18:28:07.916169 2025-05-18 18:28:07.91617 1 +3 系统开关 sys_normal_disable t 系统开关列表 2025-05-18 18:28:07.91617 2025-05-18 18:28:07.91617 1 +4 任务状态 sys_job_status t 任务状态列表 2025-05-18 18:28:07.916171 2025-05-18 18:28:07.916171 1 +5 任务分组 sys_job_group t 任务分组列表 2025-05-18 18:28:07.916171 2025-05-18 18:28:07.916172 1 +6 任务执行器 sys_job_executor t 任务执行器列表 2025-05-18 18:28:07.916172 2025-05-18 18:28:07.916172 1 +7 系统是否 sys_yes_no t 系统是否列表 2025-05-18 18:28:07.916173 2025-05-18 18:28:07.916173 1 +8 通知类型 sys_notice_type t 通知类型列表 2025-05-18 18:28:07.916173 2025-05-18 18:28:07.916174 1 +9 通知状态 sys_notice_status t 通知状态列表 2025-05-18 18:28:07.916174 2025-05-18 18:28:07.916174 1 +10 操作类型 sys_oper_type t 操作类型列表 2025-05-18 18:28:07.916175 2025-05-18 18:28:07.916175 1 +11 系统状态 sys_common_status t 登录状态列表 2025-05-18 18:28:07.916175 2025-05-18 18:28:07.916175 1 +12 任务函数 sys_job_function t 任务函数列表 2025-05-18 18:28:07.916176 2025-05-18 18:28:07.916176 1 +13 任务触发器 sys_job_trigger t 任务触发器列表 2025-05-18 18:28:07.916176 2025-05-18 18:28:07.916177 1 +14 字典配置表格回显样式 sys_dictdata_list_class t 字典配置表格回显样式列表 2025-05-18 18:28:07.916177 2025-05-18 18:28:07.916177 1 \. @@ -1844,9 +1860,9 @@ COPY public.system_dict_type (id, dict_name, dict_type, available, description, -- COPY public.system_job (id, name, jobstore, executor, trigger, trigger_args, func, args, kwargs, "coalesce", max_instances, start_date, end_date, status, message, description, created_at, updated_at, creator_id) FROM stdin; -1 系统默认(无参) default default cron 0 0 12 * * ? scheduler_test.job \N \N f 1 \N \N f \N \N 2025-04-15 19:03:45.925718 2025-04-15 19:03:45.925719 1 -2 系统默认(有参) default default cron 0 0 12 * * ? scheduler_test.job test \N f 1 \N \N f \N \N 2025-04-15 19:03:45.92572 2025-04-15 19:03:45.92572 1 -3 系统默认(多参) default default cron 0 0 12 * * ? scheduler_test.job new {"test": 111} f 1 \N \N f \N \N 2025-04-15 19:03:45.92572 2025-04-15 19:03:45.925721 1 +1 系统默认(无参) default default cron 0 0 12 * * ? scheduler_test.job \N \N f 1 \N \N f \N \N 2025-05-18 18:28:07.921962 2025-05-18 18:28:07.921963 1 +2 系统默认(有参) default default cron 0 0 12 * * ? scheduler_test.job test \N f 1 \N \N f \N \N 2025-05-18 18:28:07.921963 2025-05-18 18:28:07.921963 1 +3 系统默认(多参) default default cron 0 0 12 * * ? scheduler_test.job new {"test": 111} f 1 \N \N f \N \N 2025-05-18 18:28:07.921964 2025-05-18 18:28:07.921964 1 \. @@ -1855,79 +1871,79 @@ COPY public.system_job (id, name, jobstore, executor, trigger, trigger_args, fun -- COPY public.system_menu (id, name, type, "order", permission, available, icon, route_name, route_path, component_path, redirect, hidden, cache, parent_id, description, created_at, updated_at) FROM stdin; -1 仪表盘 1 1 t DashboardOutlined Dashboard /dashboard \N /dashboard/workplace f t \N 初始化数据 2025-04-15 19:03:45.894563 2025-04-15 19:03:45.894565 -2 系统管理 1 2 \N t SettingOutlined System /system \N /system/menu f t \N 初始化数据 2025-04-15 19:03:45.894566 2025-04-15 19:03:45.894566 -3 菜单管理 2 1 system:menu:query t \N Menu /system/menu system/menu/index \N f t 2 初始化数据 2025-04-15 19:03:45.894567 2025-04-15 19:03:45.894567 -4 部门管理 2 2 system:dept:query t \N Dept /system/dept system/dept/index \N f t 2 初始化数据 2025-04-15 19:03:45.894568 2025-04-15 19:03:45.894568 -5 岗位管理 2 3 system:position:query t \N Position /system/position system/position/index \N f t 2 初始化数据 2025-04-15 19:03:45.894568 2025-04-15 19:03:45.894569 -6 角色管理 2 4 system:role:query t \N Role /system/role system/role/index \N f t 2 初始化数据 2025-04-15 19:03:45.894569 2025-04-15 19:03:45.894569 -7 用户管理 2 5 system:user:query t \N User /system/user system/user/index \N f t 2 初始化数据 2025-04-15 19:03:45.89457 2025-04-15 19:03:45.89457 -8 日志管理 2 6 system:log:query t \N Log /system/log system/log/index \N f t 2 初始化数据 2025-04-15 19:03:45.894571 2025-04-15 19:03:45.894571 -9 创建菜单 3 1 system:menu:create t \N \N \N \N \N f t 3 初始化数据 2025-04-15 19:03:45.894572 2025-04-15 19:03:45.894572 -10 修改菜单 3 2 system:menu:update t \N \N \N \N \N f t 3 初始化数据 2025-04-15 19:03:45.894572 2025-04-15 19:03:45.894573 -11 删除菜单 3 3 system:menu:delete t \N \N \N \N \N f t 3 初始化数据 2025-04-15 19:03:45.894573 2025-04-15 19:03:45.894573 -12 批量修改菜单状态 3 4 system:menu:patch t \N \N \N \N \N f t 3 初始化数据 2025-04-15 19:03:45.894574 2025-04-15 19:03:45.894574 -13 创建部门 3 1 system:dept:create t \N \N \N \N \N f t 4 初始化数据 2025-04-15 19:03:45.894575 2025-04-15 19:03:45.894575 -14 修改部门 3 2 system:dept:update t \N \N \N \N \N f t 4 初始化数据 2025-04-15 19:03:45.894575 2025-04-15 19:03:45.894576 -15 删除部门 3 3 system:dept:delete t \N \N \N \N \N f t 4 初始化数据 2025-04-15 19:03:45.894576 2025-04-15 19:03:45.894576 -16 批量修改部门状态 3 4 system:dept:patch t \N \N \N \N \N f t 4 初始化数据 2025-04-15 19:03:45.894577 2025-04-15 19:03:45.894577 -17 创建岗位 3 1 system:position:create t \N \N \N \N \N f t 5 初始化数据 2025-04-15 19:03:45.894577 2025-04-15 19:03:45.894578 -18 修改岗位 3 2 system:position:update t \N \N \N \N \N f t 5 初始化数据 2025-04-15 19:03:45.894578 2025-04-15 19:03:45.894578 -19 删除岗位 3 3 system:position:delete t \N \N \N \N \N f t 5 初始化数据 2025-04-15 19:03:45.894579 2025-04-15 19:03:45.894579 -20 批量修改岗位状态 3 4 system:position:patch t \N \N \N \N \N f t 5 初始化数据 2025-04-15 19:03:45.89458 2025-04-15 19:03:45.89458 -21 岗位导出 3 5 system:position:export t \N \N \N \N \N f t 5 初始化数据 2025-04-15 19:03:45.89458 2025-04-15 19:03:45.894581 -22 创建角色 3 1 system:role:create t \N \N \N \N \N f t 6 初始化数据 2025-04-15 19:03:45.894581 2025-04-15 19:03:45.894581 -23 修改角色 3 2 system:role:update t \N \N \N \N \N f t 6 初始化数据 2025-04-15 19:03:45.894582 2025-04-15 19:03:45.894582 -24 删除角色 3 3 system:role:delete t \N \N \N \N \N f t 6 初始化数据 2025-04-15 19:03:45.894582 2025-04-15 19:03:45.894583 -25 批量修改角色状态 3 4 system:role:patch t \N \N \N \N \N f t 6 初始化数据 2025-04-15 19:03:45.894583 2025-04-15 19:03:45.894583 -26 设置角色权限 3 5 system:role:permission t \N \N \N \N \N f t 6 初始化数据 2025-04-15 19:03:45.894584 2025-04-15 19:03:45.894584 -27 角色导出 3 6 system:role:export t \N \N \N \N \N f t 6 初始化数据 2025-04-15 19:03:45.894585 2025-04-15 19:03:45.894585 -28 创建用户 3 1 system:user:create t \N \N \N \N \N f t 7 初始化数据 2025-04-15 19:03:45.894585 2025-04-15 19:03:45.894586 -29 修改用户 3 2 system:user:update t \N \N \N \N \N f t 7 初始化数据 2025-04-15 19:03:45.894586 2025-04-15 19:03:45.894586 -30 删除用户 3 3 system:user:delete t \N \N \N \N \N f t 7 初始化数据 2025-04-15 19:03:45.894587 2025-04-15 19:03:45.894587 -31 批量修改用户状态 3 4 system:user:patch t \N \N \N \N \N f t 7 初始化数据 2025-04-15 19:03:45.894588 2025-04-15 19:03:45.894588 -32 导出用户 3 5 system:user:export t \N \N \N \N \N f t 7 初始化数据 2025-04-15 19:03:45.894588 2025-04-15 19:03:45.894589 -33 导入用户 3 6 system:user:import t \N \N \N \N \N f t 7 初始化数据 2025-04-15 19:03:45.894589 2025-04-15 19:03:45.894589 -34 日志删除 3 1 system:operation_log:delete t \N \N \N \N \N f t 8 初始化数据 2025-04-15 19:03:45.89459 2025-04-15 19:03:45.89459 -35 日志导出 3 2 system:operation_log:export t \N \N \N \N \N f t 8 初始化数据 2025-04-15 19:03:45.89459 2025-04-15 19:03:45.894591 -36 监控管理 1 3 \N t MonitorOutlined Monitor /monitor \N /monitor/online f t \N 初始化数据 2025-04-15 19:03:45.894591 2025-04-15 19:03:45.894591 -37 在线用户 2 1 monitor:online:query t \N MonitorOnline /monitor/online monitor/online/index \N f t 36 初始化数据 2025-04-15 19:03:45.894592 2025-04-15 19:03:45.894592 -38 在线用户强制下线 3 1 monitor:online:delete t \N \N \N \N \N f t 37 初始化数据 2025-04-15 19:03:45.894592 2025-04-15 19:03:45.894593 -39 服务器监控 2 2 monitor:server:query t \N MonitorServer /monitor/server monitor/server/index \N f t 36 初始化数据 2025-04-15 19:03:45.894593 2025-04-15 19:03:45.894593 -40 缓存监控 2 3 monitor:cache:query t \N MonitorCache /monitor/cache monitor/cache/index \N f t 36 初始化数据 2025-04-15 19:03:45.894594 2025-04-15 19:03:45.894594 -41 清除缓存 3 1 monitor:cache:delete t \N \N \N \N \N f t 40 初始化数据 2025-04-15 19:03:45.894595 2025-04-15 19:03:45.894595 -42 公共模块 1 4 \N t ApiOutlined Common /common \N /common/docs f t \N 初始化数据 2025-04-15 19:03:45.894595 2025-04-15 19:03:45.894596 -43 接口管理 2 1 common:docs:query t \N Docs /common/docs common/docs/index \N f t 42 初始化数据 2025-04-15 19:03:45.894596 2025-04-15 19:03:45.894596 -44 文档管理 2 2 common:redoc:query t \N Redoc /common/redoc common/redoc/index \N f t 42 初始化数据 2025-04-15 19:03:45.894597 2025-04-15 19:03:45.894597 -45 公告管理 2 7 system:notice:query t \N Notice /system/notice system/notice/index \N f t 2 初始化数据 2025-04-15 19:03:45.894597 2025-04-15 19:03:45.894598 -46 公告创建 3 1 system:notice:create t \N \N \N \N \N f t 45 初始化数据 2025-04-15 19:03:45.894598 2025-04-15 19:03:45.894598 -47 公告修改 3 2 system:notice:update t \N \N \N \N \N f t 45 初始化数据 2025-04-15 19:03:45.894599 2025-04-15 19:03:45.894599 -48 公告删除 3 3 system:notice:delete t \N \N \N \N \N f t 45 初始化数据 2025-04-15 19:03:45.8946 2025-04-15 19:03:45.8946 -49 公告导出 3 4 system:notice:export t \N \N \N \N \N f t 45 初始化数据 2025-04-15 19:03:45.8946 2025-04-15 19:03:45.894601 -50 公告批量修改状态 3 5 system:notice:patch t \N \N \N \N \N f t 45 初始化数据 2025-04-15 19:03:45.894601 2025-04-15 19:03:45.894601 -51 配置管理 2 8 system:config:query t \N Config /system/config system/config/index \N f t 2 初始化数据 2025-04-15 19:03:45.894602 2025-04-15 19:03:45.894602 -52 创建配置 3 1 system:config:create t \N \N \N \N \N f t 51 初始化数据 2025-04-15 19:03:45.894602 2025-04-15 19:03:45.894603 -53 修改配置 3 2 system:config:update t \N \N \N \N \N f t 51 初始化数据 2025-04-15 19:03:45.894603 2025-04-15 19:03:45.894603 -54 删除配置 3 3 system:config:delete t \N \N \N \N \N f t 51 初始化数据 2025-04-15 19:03:45.894604 2025-04-15 19:03:45.894604 -55 批量更新配置 3 4 system:config:update t \N \N \N \N \N f t 51 初始化数据 2025-04-15 19:03:45.894604 2025-04-15 19:03:45.894605 -56 文件上传 3 5 system:config:upload t \N \N \N \N \N f t 51 初始化数据 2025-04-15 19:03:45.894605 2025-04-15 19:03:45.894605 -57 字典管理 2 9 system:dict_type:query t \N Dict /system/dict system/dict/index \N f t 2 初始化数据 2025-04-15 19:03:45.894606 2025-04-15 19:03:45.894606 -58 创建字典类型 3 1 system:dict_type:create t \N \N \N \N \N f t 57 初始化数据 2025-04-15 19:03:45.894606 2025-04-15 19:03:45.894607 -59 修改字典类型 3 2 system:dict_type:update t \N \N \N \N \N f t 57 初始化数据 2025-04-15 19:03:45.894607 2025-04-15 19:03:45.894607 -60 删除字典类型 3 3 system:dict_type:delete t \N \N \N \N \N f t 57 初始化数据 2025-04-15 19:03:45.894608 2025-04-15 19:03:45.894608 -61 导出字典类型 3 4 system:dict_type:export t \N \N \N \N \N f t 57 初始化数据 2025-04-15 19:03:45.894609 2025-04-15 19:03:45.894609 -62 字典数据 2 10 system:dict_data:query t \N DictData /system/dict_data system/dict/data \N t t 2 初始化数据 2025-04-15 19:03:45.894609 2025-04-15 19:03:45.89461 -63 创建字典数据 3 1 system:dict_data:create t \N \N \N \N \N f t 62 初始化数据 2025-04-15 19:03:45.89461 2025-04-15 19:03:45.89461 -64 修改字典数据 3 2 system:dict_data:update t \N \N \N \N \N f t 62 初始化数据 2025-04-15 19:03:45.894611 2025-04-15 19:03:45.894611 -65 删除字典数据 3 3 system:dict_data:delete t \N \N \N \N \N f t 62 初始化数据 2025-04-15 19:03:45.894611 2025-04-15 19:03:45.894612 -66 导出字典数据 3 4 system:dict_data:export t \N \N \N \N \N f t 62 初始化数据 2025-04-15 19:03:45.894612 2025-04-15 19:03:45.894612 -67 任务管理 2 11 system:job:query t \N Job /system/job system/job/index \N f t 2 初始化数据 2025-04-15 19:03:45.894613 2025-04-15 19:03:45.894613 -68 创建任务 3 1 system:job:create t \N \N \N \N \N f t 67 初始化数据 2025-04-15 19:03:45.894614 2025-04-15 19:03:45.894614 -69 修改和操作任务 3 2 system:job:update t \N \N \N \N \N f t 67 初始化数据 2025-04-15 19:03:45.894614 2025-04-15 19:03:45.894615 -70 删除和清除任务 3 3 system:job:delete t \N \N \N \N \N f t 67 初始化数据 2025-04-15 19:03:45.894615 2025-04-15 19:03:45.894615 -71 导出定时任务 3 4 system:job:export t \N \N \N \N \N f t 67 初始化数据 2025-04-15 19:03:45.894616 2025-04-15 19:03:45.894616 -72 工作台 2 1 dashboard:workplace:query t Workplace /dashboard/workplace dashboard/workplace \N f t 1 初始化数据 2025-04-15 19:03:45.894616 2025-04-15 19:03:45.894617 -73 分析页 2 2 dashboard:analysis:query t Analysis /dashboard/analysis dashboard/analysis \N f t 1 初始化数据 2025-04-15 19:03:45.894618 2025-04-15 19:03:45.894619 +1 仪表盘 1 1 t DashboardOutlined Dashboard /dashboard \N /dashboard/workplace f t \N 初始化数据 2025-05-18 18:28:07.892792 2025-05-18 18:28:07.892796 +2 系统管理 1 2 \N t SettingOutlined System /system \N /system/menu f t \N 初始化数据 2025-05-18 18:28:07.892797 2025-05-18 18:28:07.892797 +3 菜单管理 2 1 system:menu:query t \N Menu /system/menu system/menu/index \N f t 2 初始化数据 2025-05-18 18:28:07.892798 2025-05-18 18:28:07.892798 +4 部门管理 2 2 system:dept:query t \N Dept /system/dept system/dept/index \N f t 2 初始化数据 2025-05-18 18:28:07.892798 2025-05-18 18:28:07.892799 +5 岗位管理 2 3 system:position:query t \N Position /system/position system/position/index \N f t 2 初始化数据 2025-05-18 18:28:07.892799 2025-05-18 18:28:07.892799 +6 角色管理 2 4 system:role:query t \N Role /system/role system/role/index \N f t 2 初始化数据 2025-05-18 18:28:07.8928 2025-05-18 18:28:07.8928 +7 用户管理 2 5 system:user:query t \N User /system/user system/user/index \N f t 2 初始化数据 2025-05-18 18:28:07.892801 2025-05-18 18:28:07.892801 +8 日志管理 2 6 system:log:query t \N Log /system/log system/log/index \N f t 2 初始化数据 2025-05-18 18:28:07.892801 2025-05-18 18:28:07.892802 +9 创建菜单 3 1 system:menu:create t \N \N \N \N \N f t 3 初始化数据 2025-05-18 18:28:07.892802 2025-05-18 18:28:07.892802 +10 修改菜单 3 2 system:menu:update t \N \N \N \N \N f t 3 初始化数据 2025-05-18 18:28:07.892803 2025-05-18 18:28:07.892803 +11 删除菜单 3 3 system:menu:delete t \N \N \N \N \N f t 3 初始化数据 2025-05-18 18:28:07.892803 2025-05-18 18:28:07.892804 +12 批量修改菜单状态 3 4 system:menu:patch t \N \N \N \N \N f t 3 初始化数据 2025-05-18 18:28:07.892804 2025-05-18 18:28:07.892804 +13 创建部门 3 1 system:dept:create t \N \N \N \N \N f t 4 初始化数据 2025-05-18 18:28:07.892805 2025-05-18 18:28:07.892805 +14 修改部门 3 2 system:dept:update t \N \N \N \N \N f t 4 初始化数据 2025-05-18 18:28:07.892806 2025-05-18 18:28:07.892806 +15 删除部门 3 3 system:dept:delete t \N \N \N \N \N f t 4 初始化数据 2025-05-18 18:28:07.892806 2025-05-18 18:28:07.892807 +16 批量修改部门状态 3 4 system:dept:patch t \N \N \N \N \N f t 4 初始化数据 2025-05-18 18:28:07.892807 2025-05-18 18:28:07.892807 +17 创建岗位 3 1 system:position:create t \N \N \N \N \N f t 5 初始化数据 2025-05-18 18:28:07.892808 2025-05-18 18:28:07.892808 +18 修改岗位 3 2 system:position:update t \N \N \N \N \N f t 5 初始化数据 2025-05-18 18:28:07.892808 2025-05-18 18:28:07.892809 +19 删除岗位 3 3 system:position:delete t \N \N \N \N \N f t 5 初始化数据 2025-05-18 18:28:07.892809 2025-05-18 18:28:07.89281 +20 批量修改岗位状态 3 4 system:position:patch t \N \N \N \N \N f t 5 初始化数据 2025-05-18 18:28:07.89281 2025-05-18 18:28:07.89281 +21 岗位导出 3 5 system:position:export t \N \N \N \N \N f t 5 初始化数据 2025-05-18 18:28:07.892811 2025-05-18 18:28:07.892811 +22 创建角色 3 1 system:role:create t \N \N \N \N \N f t 6 初始化数据 2025-05-18 18:28:07.892811 2025-05-18 18:28:07.892812 +23 修改角色 3 2 system:role:update t \N \N \N \N \N f t 6 初始化数据 2025-05-18 18:28:07.892812 2025-05-18 18:28:07.892812 +24 删除角色 3 3 system:role:delete t \N \N \N \N \N f t 6 初始化数据 2025-05-18 18:28:07.892813 2025-05-18 18:28:07.892813 +25 批量修改角色状态 3 4 system:role:patch t \N \N \N \N \N f t 6 初始化数据 2025-05-18 18:28:07.892813 2025-05-18 18:28:07.892814 +26 设置角色权限 3 5 system:role:permission t \N \N \N \N \N f t 6 初始化数据 2025-05-18 18:28:07.892814 2025-05-18 18:28:07.892814 +27 角色导出 3 6 system:role:export t \N \N \N \N \N f t 6 初始化数据 2025-05-18 18:28:07.892815 2025-05-18 18:28:07.892815 +28 创建用户 3 1 system:user:create t \N \N \N \N \N f t 7 初始化数据 2025-05-18 18:28:07.892816 2025-05-18 18:28:07.892816 +29 修改用户 3 2 system:user:update t \N \N \N \N \N f t 7 初始化数据 2025-05-18 18:28:07.892816 2025-05-18 18:28:07.892817 +30 删除用户 3 3 system:user:delete t \N \N \N \N \N f t 7 初始化数据 2025-05-18 18:28:07.892817 2025-05-18 18:28:07.892817 +31 批量修改用户状态 3 4 system:user:patch t \N \N \N \N \N f t 7 初始化数据 2025-05-18 18:28:07.892818 2025-05-18 18:28:07.892818 +32 导出用户 3 5 system:user:export t \N \N \N \N \N f t 7 初始化数据 2025-05-18 18:28:07.892818 2025-05-18 18:28:07.892819 +33 导入用户 3 6 system:user:import t \N \N \N \N \N f t 7 初始化数据 2025-05-18 18:28:07.892819 2025-05-18 18:28:07.892819 +34 日志删除 3 1 system:operation_log:delete t \N \N \N \N \N f t 8 初始化数据 2025-05-18 18:28:07.89282 2025-05-18 18:28:07.89282 +35 日志导出 3 2 system:operation_log:export t \N \N \N \N \N f t 8 初始化数据 2025-05-18 18:28:07.892821 2025-05-18 18:28:07.892821 +36 监控管理 1 3 \N t MonitorOutlined Monitor /monitor \N /monitor/online f t \N 初始化数据 2025-05-18 18:28:07.892821 2025-05-18 18:28:07.892822 +37 在线用户 2 1 monitor:online:query t \N MonitorOnline /monitor/online monitor/online/index \N f t 36 初始化数据 2025-05-18 18:28:07.892822 2025-05-18 18:28:07.892822 +38 在线用户强制下线 3 1 monitor:online:delete t \N \N \N \N \N f t 37 初始化数据 2025-05-18 18:28:07.892823 2025-05-18 18:28:07.892823 +39 服务器监控 2 2 monitor:server:query t \N MonitorServer /monitor/server monitor/server/index \N f t 36 初始化数据 2025-05-18 18:28:07.892823 2025-05-18 18:28:07.892824 +40 缓存监控 2 3 monitor:cache:query t \N MonitorCache /monitor/cache monitor/cache/index \N f t 36 初始化数据 2025-05-18 18:28:07.892824 2025-05-18 18:28:07.892824 +41 清除缓存 3 1 monitor:cache:delete t \N \N \N \N \N f t 40 初始化数据 2025-05-18 18:28:07.892825 2025-05-18 18:28:07.892825 +42 公共模块 1 4 \N t ApiOutlined Common /common \N /common/docs f t \N 初始化数据 2025-05-18 18:28:07.892826 2025-05-18 18:28:07.892826 +43 接口管理 2 1 common:docs:query t \N Docs /common/docs common/docs/index \N f t 42 初始化数据 2025-05-18 18:28:07.892826 2025-05-18 18:28:07.892827 +44 文档管理 2 2 common:redoc:query t \N Redoc /common/redoc common/redoc/index \N f t 42 初始化数据 2025-05-18 18:28:07.892827 2025-05-18 18:28:07.892827 +45 公告管理 2 7 system:notice:query t \N Notice /system/notice system/notice/index \N f t 2 初始化数据 2025-05-18 18:28:07.892828 2025-05-18 18:28:07.892828 +46 公告创建 3 1 system:notice:create t \N \N \N \N \N f t 45 初始化数据 2025-05-18 18:28:07.892828 2025-05-18 18:28:07.892829 +47 公告修改 3 2 system:notice:update t \N \N \N \N \N f t 45 初始化数据 2025-05-18 18:28:07.892829 2025-05-18 18:28:07.892829 +48 公告删除 3 3 system:notice:delete t \N \N \N \N \N f t 45 初始化数据 2025-05-18 18:28:07.89283 2025-05-18 18:28:07.89283 +49 公告导出 3 4 system:notice:export t \N \N \N \N \N f t 45 初始化数据 2025-05-18 18:28:07.89283 2025-05-18 18:28:07.892831 +50 公告批量修改状态 3 5 system:notice:patch t \N \N \N \N \N f t 45 初始化数据 2025-05-18 18:28:07.892831 2025-05-18 18:28:07.892831 +51 配置管理 2 8 system:config:query t \N Config /system/config system/config/index \N f t 2 初始化数据 2025-05-18 18:28:07.892832 2025-05-18 18:28:07.892832 +52 创建配置 3 1 system:config:create t \N \N \N \N \N f t 51 初始化数据 2025-05-18 18:28:07.892832 2025-05-18 18:28:07.892833 +53 修改配置 3 2 system:config:update t \N \N \N \N \N f t 51 初始化数据 2025-05-18 18:28:07.892833 2025-05-18 18:28:07.892833 +54 删除配置 3 3 system:config:delete t \N \N \N \N \N f t 51 初始化数据 2025-05-18 18:28:07.892834 2025-05-18 18:28:07.892834 +55 批量更新配置 3 4 system:config:update t \N \N \N \N \N f t 51 初始化数据 2025-05-18 18:28:07.892835 2025-05-18 18:28:07.892835 +56 文件上传 3 5 system:config:upload t \N \N \N \N \N f t 51 初始化数据 2025-05-18 18:28:07.892835 2025-05-18 18:28:07.892836 +57 字典管理 2 9 system:dict_type:query t \N Dict /system/dict system/dict/index \N f t 2 初始化数据 2025-05-18 18:28:07.892836 2025-05-18 18:28:07.892836 +58 创建字典类型 3 1 system:dict_type:create t \N \N \N \N \N f t 57 初始化数据 2025-05-18 18:28:07.892837 2025-05-18 18:28:07.892837 +59 修改字典类型 3 2 system:dict_type:update t \N \N \N \N \N f t 57 初始化数据 2025-05-18 18:28:07.892837 2025-05-18 18:28:07.892838 +60 删除字典类型 3 3 system:dict_type:delete t \N \N \N \N \N f t 57 初始化数据 2025-05-18 18:28:07.892838 2025-05-18 18:28:07.892838 +61 导出字典类型 3 4 system:dict_type:export t \N \N \N \N \N f t 57 初始化数据 2025-05-18 18:28:07.892839 2025-05-18 18:28:07.892839 +62 字典数据 2 10 system:dict_data:query t \N DictData /system/dict_data system/dict/data \N t t 2 初始化数据 2025-05-18 18:28:07.892839 2025-05-18 18:28:07.89284 +63 创建字典数据 3 1 system:dict_data:create t \N \N \N \N \N f t 62 初始化数据 2025-05-18 18:28:07.89284 2025-05-18 18:28:07.89284 +64 修改字典数据 3 2 system:dict_data:update t \N \N \N \N \N f t 62 初始化数据 2025-05-18 18:28:07.892841 2025-05-18 18:28:07.892841 +65 删除字典数据 3 3 system:dict_data:delete t \N \N \N \N \N f t 62 初始化数据 2025-05-18 18:28:07.892841 2025-05-18 18:28:07.892842 +66 导出字典数据 3 4 system:dict_data:export t \N \N \N \N \N f t 62 初始化数据 2025-05-18 18:28:07.892842 2025-05-18 18:28:07.892842 +67 任务管理 2 11 system:job:query t \N Job /system/job system/job/index \N f t 2 初始化数据 2025-05-18 18:28:07.892843 2025-05-18 18:28:07.892843 +68 创建任务 3 1 system:job:create t \N \N \N \N \N f t 67 初始化数据 2025-05-18 18:28:07.892844 2025-05-18 18:28:07.892844 +69 修改和操作任务 3 2 system:job:update t \N \N \N \N \N f t 67 初始化数据 2025-05-18 18:28:07.892844 2025-05-18 18:28:07.892845 +70 删除和清除任务 3 3 system:job:delete t \N \N \N \N \N f t 67 初始化数据 2025-05-18 18:28:07.892845 2025-05-18 18:28:07.892845 +71 导出定时任务 3 4 system:job:export t \N \N \N \N \N f t 67 初始化数据 2025-05-18 18:28:07.892846 2025-05-18 18:28:07.892846 +72 工作台 2 1 dashboard:workplace:query t Workplace /dashboard/workplace dashboard/workplace \N f t 1 初始化数据 2025-05-18 18:28:07.892846 2025-05-18 18:28:07.892847 +73 分析页 2 2 dashboard:analysis:query t Analysis /dashboard/analysis dashboard/analysis \N f t 1 初始化数据 2025-05-18 18:28:07.892847 2025-05-18 18:28:07.892847 \. @@ -1936,10 +1952,10 @@ COPY public.system_menu (id, name, type, "order", permission, available, icon, r -- COPY public.system_notice (id, notice_title, notice_type, notice_content, available, description, created_at, updated_at, creator_id) FROM stdin; -1 系统更新 1 2099年9月9日,晚上12:00,系统更新 t 系统更新 2025-04-15 19:03:45.915217 2025-04-15 19:03:45.915219 1 -2 系统维护 2 2099年9月9日,晚上12:00,系统维护 t 系统维护 2025-04-15 19:03:45.91522 2025-04-15 19:03:45.91522 1 -3 系统更新完成 1 2099年9月9日,晚上12:00,系统更新完成 f 系统更新完成 2025-04-15 19:03:45.915221 2025-04-15 19:03:45.915221 1 -4 系统维护完成 2 2099年9月9日,晚上12:00,系统维护完成 f 系统维护完成 2025-04-15 19:03:45.915221 2025-04-15 19:03:45.915222 1 +1 系统更新 1 2099年9月9日,晚上12:00,系统更新 t 系统更新 2025-05-18 18:28:07.912395 2025-05-18 18:28:07.912398 1 +2 系统维护 2 2099年9月9日,晚上12:00,系统维护 t 系统维护 2025-05-18 18:28:07.912398 2025-05-18 18:28:07.912399 1 +3 系统更新完成 1 2099年9月9日,晚上12:00,系统更新完成 f 系统更新完成 2025-05-18 18:28:07.912399 2025-05-18 18:28:07.9124 1 +4 系统维护完成 2 2099年9月9日,晚上12:00,系统维护完成 f 系统维护完成 2025-05-18 18:28:07.9124 2025-05-18 18:28:07.9124 1 \. @@ -1947,7 +1963,7 @@ COPY public.system_notice (id, notice_title, notice_type, notice_content, availa -- Data for Name: system_operation_log; Type: TABLE DATA; Schema: public; Owner: tao -- -COPY public.system_operation_log (id, request_path, request_method, request_payload, request_ip, request_os, request_browser, response_code, response_json, description, created_at, updated_at, creator_id) FROM stdin; +COPY public.system_operation_log (id, request_path, request_method, request_payload, request_ip, login_location, request_os, request_browser, response_code, response_json, process_time, description, created_at, updated_at, creator_id) FROM stdin; \. @@ -1956,13 +1972,13 @@ COPY public.system_operation_log (id, request_path, request_method, request_payl -- COPY public.system_position (id, name, "order", available, description, created_at, updated_at, creator_id) FROM stdin; -1 董事长岗 1 t 董事长岗位 2025-04-15 19:03:45.901163 2025-04-15 19:03:45.901164 1 -2 运营岗 2 t 运营岗位 2025-04-15 19:03:45.901165 2025-04-15 19:03:45.901165 1 -3 销售岗 3 t 销售岗 2025-04-15 19:03:45.901166 2025-04-15 19:03:45.901166 1 -4 人事行政岗 4 t 人事行政岗 2025-04-15 19:03:45.901167 2025-04-15 19:03:45.901167 1 -5 开发岗 5 t 开发岗 2025-04-15 19:03:45.901168 2025-04-15 19:03:45.901168 1 -6 测试岗 6 t 测试岗 2025-04-15 19:03:45.901169 2025-04-15 19:03:45.901169 1 -7 演示岗 7 t 演示岗 2025-04-15 19:03:45.90117 2025-04-15 19:03:45.90117 1 +1 董事长岗 1 t 董事长岗位 2025-05-18 18:28:07.89892 2025-05-18 18:28:07.898921 1 +2 运营岗 2 t 运营岗位 2025-05-18 18:28:07.898921 2025-05-18 18:28:07.898922 1 +3 销售岗 3 t 销售岗 2025-05-18 18:28:07.898922 2025-05-18 18:28:07.898922 1 +4 人事行政岗 4 t 人事行政岗 2025-05-18 18:28:07.898923 2025-05-18 18:28:07.898923 1 +5 开发岗 5 t 开发岗 2025-05-18 18:28:07.898923 2025-05-18 18:28:07.898924 1 +6 测试岗 6 t 测试岗 2025-05-18 18:28:07.898924 2025-05-18 18:28:07.898924 1 +7 演示岗 7 t 演示岗 2025-05-18 18:28:07.898925 2025-05-18 18:28:07.898925 1 \. @@ -1971,8 +1987,8 @@ COPY public.system_position (id, name, "order", available, description, created_ -- COPY public.system_role (id, name, "order", data_scope, available, description, created_at, updated_at, creator_id) FROM stdin; -1 管理员角色 1 4 t 管理员 2025-04-15 19:03:45.905282 2025-04-15 19:03:45.905283 1 -2 演示角色 2 5 t 演示角色 2025-04-15 19:03:45.905284 2025-04-15 19:03:45.905284 1 +1 管理员角色 1 4 t 管理员 2025-05-18 18:28:07.902325 2025-05-18 18:28:07.902326 1 +2 演示角色 2 5 t 演示角色 2025-05-18 18:28:07.902327 2025-05-18 18:28:07.902327 1 \. @@ -2096,8 +2112,8 @@ COPY public.system_user_roles (user_id, role_id) FROM stdin; -- COPY public.system_users (id, username, password, name, mobile, email, gender, avatar, available, is_superuser, last_login, dept_id, description, created_at, updated_at, creator_id) FROM stdin; -1 admin $2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk6N/NX3IZRtubBDElA0VLZhkNOa 管理员 15382112222 admin@qq.com 0 https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png t t \N 1 超级管理员 2025-04-15 19:03:45.898902 2025-04-15 19:03:45.898904 \N -2 demo $2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk6N/NX3IZRtubBDElA0VLZhkNOa 演示用户 15382112121 demo@qq.com 1 https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png t f \N 6 演示用户 2025-04-15 19:03:45.898904 2025-04-15 19:03:45.898905 1 +1 admin $2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk6N/NX3IZRtubBDElA0VLZhkNOa 管理员 15382112222 admin@qq.com 0 https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png t t \N 1 超级管理员 2025-05-18 18:28:07.896901 2025-05-18 18:28:07.896902 \N +2 demo $2b$12$e2IJgS/cvHgJ0H3G7Xa08OXoXnk6N/NX3IZRtubBDElA0VLZhkNOa 演示用户 15382112121 demo@qq.com 1 https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png t f \N 6 演示用户 2025-05-18 18:28:07.896903 2025-05-18 18:28:07.896903 1 \. diff --git a/frontend/src/views/current/profile.vue b/frontend/src/views/current/profile.vue index 7f06d5e0..27ce38a9 100644 --- a/frontend/src/views/current/profile.vue +++ b/frontend/src/views/current/profile.vue @@ -372,11 +372,8 @@ const onInfoFormFinish = async (values: any) => { await userStore.getUserInfo; } catch (error) { - console.error('更新基本信息失败:', error); - message.error({ - content: '更新基本信息失败', - icon: h(CloseCircleOutlined, { style: "color: #ff4d4f" }) - }); + console.error(error); + } finally { infoSubmitting.value = false; } diff --git a/frontend/src/views/system/log/index.vue b/frontend/src/views/system/log/index.vue index 17394933..bc2bf694 100644 --- a/frontend/src/views/system/log/index.vue +++ b/frontend/src/views/system/log/index.vue @@ -92,6 +92,7 @@ {{ detailState.request_method }} {{ detailState.request_ip }} + {{ detailState.login_location }} {{ detailState.request_browser }} {{ detailState.request_os }} @@ -102,6 +103,7 @@
{{ detailState.response_json }}
+ {{ detailState.process_time }} {{ detailState.creator ? detailState.creator.name : '-' }} {{ detailState.created_at }} {{ detailState.updated_at }} @@ -161,7 +163,7 @@ const columns: TableColumnsType = [ dataIndex: 'request_method', ellipsis: true, // align: 'center', - width: 120 + width: 80 }, { title: 'IP地址', @@ -170,25 +172,39 @@ const columns: TableColumnsType = [ // align: 'center', width: 100 }, + { + title: '登录地点', + dataIndex: 'login_location', + ellipsis: true, + // align: 'center', + width: 120 + }, { title: '浏览器', dataIndex: 'request_browser', ellipsis: true, // align: 'center', - width: 120 + width: 80 }, { title: '系统', dataIndex: 'request_os', ellipsis: true, // align: 'center', - width: 120 + width: 80 }, { title: '响应码', dataIndex: 'response_code', ellipsis: true, // align: 'center', + width: 80 + }, + { + title: '处理时间', + dataIndex: 'process_time', + ellipsis: true, + // align: 'center', width: 120 }, { diff --git a/frontend/src/views/system/log/types.ts b/frontend/src/views/system/log/types.ts index 6e2526f3..62438d9b 100644 --- a/frontend/src/views/system/log/types.ts +++ b/frontend/src/views/system/log/types.ts @@ -11,11 +11,13 @@ export interface tableDataType { request_path?: string; request_method?: string; request_ip?: string; + login_location?: string; request_browser?: string; request_os?: string; response_code?: number; request_payload?: string; response_json?: string; + process_time?: number; description?: string; creator?: creatorType; created_at?: string;