From eecc8bedae0f514d04f5e72f74160bb735ca6c22 Mon Sep 17 00:00:00 2001 From: Chuck1sn Date: Tue, 8 Jul 2025 13:03:59 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84AOP=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E3=80=81=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=8F=8A=E7=9B=B8=E5=85=B3=E9=A1=B5=E9=9D=A2=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=97=A5=E5=BF=97=E7=AE=A1=E7=90=86=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=EF=BC=9B=E6=9B=B4=E6=96=B0=E5=89=8D=E7=AB=AF=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E4=BB=A5=E6=94=AF=E6=8C=81=E6=97=A5=E5=BF=97=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=92=8C=E6=93=8D=E4=BD=9C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zl/mjga/aspect/LoggingAspect.java | 18 +- .../controller/IdentityAccessController.java | 3 + .../zl/mjga/controller/SignController.java | 2 + .../zl/mjga/repository/AopLogRepository.java | 12 +- frontend/src/api/mocks/aopLogHandlers.ts | 84 + frontend/src/api/mocks/setup.ts | 16 +- frontend/src/api/schema/openapi.json | 285 + frontend/src/api/types/schema.d.ts | 4959 +++++++++-------- frontend/src/assets/datepicker.css | 96 +- .../src/components/common/LogStatusBadge.vue | 24 + frontend/src/components/common/index.ts | 4 +- frontend/src/components/icons/LogIcon.vue | 10 + frontend/src/components/icons/index.ts | 44 +- frontend/src/components/layout/Sidebar.vue | 7 + .../src/components/tables/TableFilterForm.vue | 62 +- .../src/components/tables/TablePagination.vue | 126 +- .../src/composables/aop/useAopLogDelete.ts | 101 + .../src/composables/aop/useAopLogQuery.ts | 131 + .../src/composables/common/usePagination.ts | 66 +- frontend/src/main.ts | 4 + frontend/src/router/constants.ts | 20 + frontend/src/router/modules/dashboard.ts | 2 + frontend/src/router/modules/system.ts | 23 + frontend/src/types/AlertTypes.ts | 32 +- frontend/src/views/AopLogDetailPage.vue | 300 + frontend/src/views/AopLogManagementPage.vue | 482 ++ 26 files changed, 4424 insertions(+), 2489 deletions(-) create mode 100644 frontend/src/api/mocks/aopLogHandlers.ts create mode 100644 frontend/src/components/common/LogStatusBadge.vue create mode 100644 frontend/src/components/icons/LogIcon.vue create mode 100644 frontend/src/composables/aop/useAopLogDelete.ts create mode 100644 frontend/src/composables/aop/useAopLogQuery.ts create mode 100644 frontend/src/router/modules/system.ts create mode 100644 frontend/src/views/AopLogDetailPage.vue create mode 100644 frontend/src/views/AopLogManagementPage.vue diff --git a/backend/src/main/java/com/zl/mjga/aspect/LoggingAspect.java b/backend/src/main/java/com/zl/mjga/aspect/LoggingAspect.java index 0857739..2367284 100644 --- a/backend/src/main/java/com/zl/mjga/aspect/LoggingAspect.java +++ b/backend/src/main/java/com/zl/mjga/aspect/LoggingAspect.java @@ -48,17 +48,11 @@ public class LoggingAspect { return processWithLogging(joinPoint, aopLog); } - @Around("execution(* com.zl.mjga.service..*(..))") - public Object logService(ProceedingJoinPoint joinPoint) throws Throwable { - AopLog aopLog = new AopLog(); - return processWithLogging(joinPoint, aopLog); - } - - @Around("execution(* com.zl.mjga.repository..*(..))") - public Object logRepository(ProceedingJoinPoint joinPoint) throws Throwable { - AopLog aopLog = new AopLog(); - return processWithLogging(joinPoint, aopLog); - } +// @Around("execution(* com.zl.mjga.service..*(..))") +// public Object logService(ProceedingJoinPoint joinPoint) throws Throwable { +// AopLog aopLog = new AopLog(); +// return processWithLogging(joinPoint, aopLog); +// } private Object processWithLogging(ProceedingJoinPoint joinPoint, AopLog aopLog) throws Throwable { if (shouldSkipLogging(joinPoint) || !isUserAuthenticated()) { @@ -82,7 +76,7 @@ public class LoggingAspect { private Long getCurrentUserId() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - String username = (String) authentication.getPrincipal(); + String username = authentication.getName(); User user = userRepository.fetchOneByUsername(username); return user.getId(); } diff --git a/backend/src/main/java/com/zl/mjga/controller/IdentityAccessController.java b/backend/src/main/java/com/zl/mjga/controller/IdentityAccessController.java index 577f08a..a7892be 100644 --- a/backend/src/main/java/com/zl/mjga/controller/IdentityAccessController.java +++ b/backend/src/main/java/com/zl/mjga/controller/IdentityAccessController.java @@ -1,5 +1,6 @@ package com.zl.mjga.controller; +import com.zl.mjga.annotation.SkipAopLog; import com.zl.mjga.dto.PageRequestDto; import com.zl.mjga.dto.PageResponseDto; import com.zl.mjga.dto.department.DepartmentBindDto; @@ -56,6 +57,7 @@ public class IdentityAccessController { } @PostMapping("/me") + @SkipAopLog void upsertMe(Principal principal, @RequestBody UserUpsertDto userUpsertDto) { String name = principal.getName(); User user = userRepository.fetchOneByUsername(name); @@ -65,6 +67,7 @@ public class IdentityAccessController { @PreAuthorize("hasAuthority(T(com.zl.mjga.model.urp.EPermission).WRITE_USER_ROLE_PERMISSION)") @PostMapping("/user") + @SkipAopLog void upsertUser(@RequestBody @Valid UserUpsertDto userUpsertDto) { identityAccessService.upsertUser(userUpsertDto); } diff --git a/backend/src/main/java/com/zl/mjga/controller/SignController.java b/backend/src/main/java/com/zl/mjga/controller/SignController.java index 8aed953..2104114 100644 --- a/backend/src/main/java/com/zl/mjga/controller/SignController.java +++ b/backend/src/main/java/com/zl/mjga/controller/SignController.java @@ -1,5 +1,6 @@ package com.zl.mjga.controller; +import com.zl.mjga.annotation.SkipAopLog; import com.zl.mjga.config.security.Jwt; import com.zl.mjga.dto.sign.SignInDto; import com.zl.mjga.dto.sign.SignUpDto; @@ -22,6 +23,7 @@ public class SignController { @ResponseStatus(HttpStatus.OK) @PostMapping("/sign-in") + @SkipAopLog void signIn( HttpServletRequest request, HttpServletResponse response, diff --git a/backend/src/main/java/com/zl/mjga/repository/AopLogRepository.java b/backend/src/main/java/com/zl/mjga/repository/AopLogRepository.java index a7ca660..9cde52d 100644 --- a/backend/src/main/java/com/zl/mjga/repository/AopLogRepository.java +++ b/backend/src/main/java/com/zl/mjga/repository/AopLogRepository.java @@ -27,7 +27,7 @@ public class AopLogRepository extends AopLogDao { } public Result pageFetchBy(PageRequestDto pageRequestDto, AopLogQueryDto queryDto) { - return selectBy(queryDto) + return selectByWithoutReturnValue(queryDto) .orderBy(pageRequestDto.getSortFields()) .limit(pageRequestDto.getSize()) .offset(pageRequestDto.getOffset()) @@ -47,6 +47,16 @@ public class AopLogRepository extends AopLogDao { .where(buildConditions(queryDto)); } + + public SelectConditionStep selectByWithoutReturnValue(AopLogQueryDto queryDto) { + return ctx() + .select(AOP_LOG.asterisk().except(AOP_LOG.RETURN_VALUE, AOP_LOG.METHOD_ARGS), USER.USERNAME, DSL.count().over().as("total_count")) + .from(AOP_LOG) + .leftJoin(USER) + .on(AOP_LOG.USER_ID.eq(USER.ID)) + .where(buildConditions(queryDto)); + } + private Condition buildConditions(AopLogQueryDto queryDto) { Condition condition = noCondition(); diff --git a/frontend/src/api/mocks/aopLogHandlers.ts b/frontend/src/api/mocks/aopLogHandlers.ts new file mode 100644 index 0000000..37fd846 --- /dev/null +++ b/frontend/src/api/mocks/aopLogHandlers.ts @@ -0,0 +1,84 @@ +import { faker } from "@faker-js/faker"; +import { http, HttpResponse } from "msw"; + +// 生成AOP日志数据 +const generateAopLog = () => ({ + id: faker.number.int({ min: 1, max: 1000 }), + className: faker.helpers.arrayElement([ + "com.example.controller.UserController", + "com.example.service.UserService", + "com.example.controller.RoleController", + "com.example.service.RoleService", + "com.example.controller.DepartmentController", + "com.example.service.DepartmentService", + ]), + methodName: faker.helpers.arrayElement([ + "findById", + "save", + "update", + "delete", + "findAll", + "findByName", + "pageQuery", + ]), + methodArgs: JSON.stringify([ + { name: "id", value: faker.number.int({ min: 1, max: 100 }) }, + { name: "name", value: faker.person.fullName() }, + ]), + returnValue: JSON.stringify({ + id: faker.number.int({ min: 1, max: 100 }), + name: faker.person.fullName(), + success: true, + }), + executionTime: faker.number.int({ min: 10, max: 5000 }), + success: faker.datatype.boolean(0.9), // 90%成功率 + errorMessage: faker.helpers.maybe(() => faker.lorem.sentence(), { probability: 0.1 }), + userId: faker.number.int({ min: 1, max: 100 }), + username: faker.internet.userName(), + ipAddress: faker.internet.ip(), + userAgent: faker.internet.userAgent(), + curl: `curl -X GET "${faker.internet.url()}" -H "Authorization: Bearer ${faker.string.alphanumeric(32)}"`, + createTime: faker.date.recent({ days: 30 }).toISOString(), +}); + +export default [ + // 分页查询AOP日志 + http.get("/aop-log/page-query", () => { + const mockData = { + data: faker.helpers.multiple(generateAopLog, { count: 10 }), + total: 100, + }; + return HttpResponse.json(mockData); + }), + + // 查询单条日志详情 + http.get("/aop-log/:id", ({ params }) => { + const id = params.id; + return HttpResponse.json({ + ...generateAopLog(), + id: Number(id), + }); + }), + + // 删除单条日志 + http.delete("/aop-log/:id", ({ params }) => { + console.log(`Captured a "DELETE /aop-log/${params.id}" request`); + return HttpResponse.json({ success: true }); + }), + + // 批量删除日志 + http.delete("/aop-log/batch", async ({ request }) => { + const ids = await request.json(); + console.log(`Captured a "DELETE /aop-log/batch" request with ids: ${ids}`); + return HttpResponse.json(ids.length); + }), + + // 删除指定时间前的日志 + http.delete("/aop-log/before", ({ params }) => { + const { beforeTime } = Object.fromEntries( + new URL(params.request.url).searchParams + ); + console.log(`Captured a "DELETE /aop-log/before" request with time: ${beforeTime}`); + return HttpResponse.json(faker.number.int({ min: 5, max: 50 })); + }), +]; diff --git a/frontend/src/api/mocks/setup.ts b/frontend/src/api/mocks/setup.ts index 1e22a06..73babed 100644 --- a/frontend/src/api/mocks/setup.ts +++ b/frontend/src/api/mocks/setup.ts @@ -1,13 +1,14 @@ import { setupWorker } from "msw/browser"; -import authHandlers from "./authHandlers"; -import jobHandlers from "./schedulerHandlers"; -import permissionHandlers from "./permissionHandlers"; -import roleHandlers from "./roleHandlers"; -import userHandlers from "./iamHandlers"; -import departmentHandlers from "./departmentHandlers"; -import positionHandlers from "./positionHandlers"; import aiHandlers from "./aiHandlers"; +import aopLogHandlers from "./aopLogHandlers"; +import authHandlers from "./authHandlers"; +import departmentHandlers from "./departmentHandlers"; +import userHandlers from "./iamHandlers"; import knowledgeHandlers from "./knowledgeHandlers"; +import permissionHandlers from "./permissionHandlers"; +import positionHandlers from "./positionHandlers"; +import roleHandlers from "./roleHandlers"; +import jobHandlers from "./schedulerHandlers"; export const worker = setupWorker( ...userHandlers, @@ -19,4 +20,5 @@ export const worker = setupWorker( ...positionHandlers, ...aiHandlers, ...knowledgeHandlers, + ...aopLogHandlers, ); diff --git a/frontend/src/api/schema/openapi.json b/frontend/src/api/schema/openapi.json index 8dbaf0b..7d0d6a2 100644 --- a/frontend/src/api/schema/openapi.json +++ b/frontend/src/api/schema/openapi.json @@ -10,6 +10,12 @@ "description": "Generated server url" } ], + "tags": [ + { + "name": "AOP日志管理", + "description": "AOP日志查看和管理接口" + } + ], "paths": { "/scheduler/job/update": { "put": { @@ -1406,6 +1412,105 @@ } } }, + "/aop-log/{id}": { + "get": { + "tags": [ + "AOP日志管理" + ], + "summary": "查询日志详情", + "description": "根据ID查询单条日志的详细信息", + "operationId": "getAopLogById", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "日志ID", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/AopLogRespDto" + } + } + } + } + } + }, + "delete": { + "tags": [ + "AOP日志管理" + ], + "summary": "删除单条日志", + "description": "根据ID删除单条日志", + "operationId": "deleteAopLog", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "日志ID", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/aop-log/page-query": { + "get": { + "tags": [ + "AOP日志管理" + ], + "summary": "分页查询AOP日志", + "description": "支持多种条件筛选的分页查询", + "operationId": "pageQueryAopLogs", + "parameters": [ + { + "name": "pageRequestDto", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/PageRequestDto" + } + }, + { + "name": "queryDto", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/AopLogQueryDto" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseDtoListAopLogRespDto" + } + } + } + } + } + } + }, "/ai/llm/page-query": { "get": { "tags": [ @@ -1444,6 +1549,79 @@ } } }, + "/aop-log/before": { + "delete": { + "tags": [ + "AOP日志管理" + ], + "summary": "删除指定时间前的日志", + "description": "删除指定时间之前的所有日志", + "operationId": "deleteLogsBeforeTime", + "parameters": [ + { + "name": "beforeTime", + "in": "query", + "description": "截止时间", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + }, + "/aop-log/batch": { + "delete": { + "tags": [ + "AOP日志管理" + ], + "summary": "批量删除日志", + "description": "根据ID列表批量删除日志", + "operationId": "deleteAopLogs", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "description": "日志ID列表", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + }, "/ai/action/user": { "delete": { "tags": [ @@ -2477,6 +2655,113 @@ } } }, + "AopLogRespDto": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "className": { + "type": "string" + }, + "methodName": { + "type": "string" + }, + "methodArgs": { + "type": "string" + }, + "returnValue": { + "type": "string" + }, + "executionTime": { + "type": "integer", + "format": "int64" + }, + "success": { + "type": "boolean" + }, + "errorMessage": { + "type": "string" + }, + "userId": { + "type": "integer", + "format": "int64" + }, + "username": { + "type": "string" + }, + "ipAddress": { + "type": "string" + }, + "userAgent": { + "type": "string" + }, + "curl": { + "type": "string" + }, + "createTime": { + "type": "string", + "format": "date-time" + } + } + }, + "AopLogQueryDto": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "className": { + "type": "string" + }, + "methodName": { + "type": "string" + }, + "success": { + "type": "boolean" + }, + "userId": { + "type": "integer", + "format": "int64" + }, + "ipAddress": { + "type": "string" + }, + "startTime": { + "type": "string", + "format": "date-time" + }, + "endTime": { + "type": "string", + "format": "date-time" + }, + "minExecutionTime": { + "type": "integer", + "format": "int64" + }, + "maxExecutionTime": { + "type": "integer", + "format": "int64" + } + } + }, + "PageResponseDtoListAopLogRespDto": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int64" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AopLogRespDto" + } + } + } + }, "LlmQueryDto": { "type": "object", "properties": { diff --git a/frontend/src/api/types/schema.d.ts b/frontend/src/api/types/schema.d.ts index 13459af..8d8af55 100644 --- a/frontend/src/api/types/schema.d.ts +++ b/frontend/src/api/types/schema.d.ts @@ -4,2369 +4,2610 @@ */ export interface paths { - "/scheduler/job/update": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put: operations["updateJob"]; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/knowledge/doc": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put: operations["updateLibraryDoc"]; - post?: never; - delete: operations["deleteLibraryDoc"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/llm": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put: operations["updateLlm"]; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/scheduler/trigger/resume": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["resumeTrigger"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/scheduler/trigger/pause": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["pauseTrigger"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/scheduler/job/trigger": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["triggerJob"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/position": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["upsertPosition"]; - delete: operations["deletePosition"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/knowledge/library": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["upsertLibrary"]; - delete: operations["deleteLibrary"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/knowledge/doc/upload": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["uploadLibraryDoc"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/user": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryUserWithRolePermission"]; - put?: never; - post: operations["upsertUser"]; - delete: operations["deleteUser"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/role": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryRoleWithPermission"]; - put?: never; - post: operations["upsertRole"]; - delete: operations["deleteRole"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/role/unbind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["unBindRoleBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/role/bind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["bindRoleBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/position/unbind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["unBindPositionBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/position/bind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["bindPositionBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/permission": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["upsertPermission"]; - delete: operations["deletePermission"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/permission/unbind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["unBindPermissionBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/permission/bind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["bindPermissionBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/me": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["currentUser"]; - put?: never; - post: operations["upsertMe"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/department/unbind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["unBindDepartmentBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/department/bind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["bindDepartmentBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/avatar/upload": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["uploadAvatar"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/department": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["upsertDepartment"]; - delete: operations["deleteDepartment"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/auth/sign-up": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["signUp"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/auth/sign-out": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["signOut"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/auth/sign-in": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["signIn"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/chat": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["chat"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/chat/refresh": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["createNewConversation"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/search": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["searchAction"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/execute": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["actionExecute"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/scheduler/page-query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["pageQuery"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/position/query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryPositions"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/position/page-query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["pageQueryPositions"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/knowledge/segments": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryLibraryDocSegments"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/knowledge/libraries": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryLibraries"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/knowledge/docs": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryLibraryDocs"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/users": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryUsers"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/roles": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryRoles"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/permissions": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryPermissions"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/department/query-sub": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["querySubDepartment"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/department/query-available": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryAvailableParentDepartmentsBy"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/department/page-query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["pageQueryDepartments"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/llm/page-query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["pageQueryLlm"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/user": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete: operations["deleteUser_1"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/role": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete: operations["deleteRole_1"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/position": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete: operations["deletePosition_1"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/permission": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete: operations["deletePermission_1"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/department": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete: operations["deleteDepartment_1"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; + "/scheduler/job/update": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["updateJob"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/knowledge/doc": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["updateLibraryDoc"]; + post?: never; + delete: operations["deleteLibraryDoc"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/llm": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["updateLlm"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/scheduler/trigger/resume": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["resumeTrigger"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/scheduler/trigger/pause": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["pauseTrigger"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/scheduler/job/trigger": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["triggerJob"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/position": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["upsertPosition"]; + delete: operations["deletePosition"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/knowledge/library": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["upsertLibrary"]; + delete: operations["deleteLibrary"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/knowledge/doc/upload": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["uploadLibraryDoc"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/user": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryUserWithRolePermission"]; + put?: never; + post: operations["upsertUser"]; + delete: operations["deleteUser"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/role": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryRoleWithPermission"]; + put?: never; + post: operations["upsertRole"]; + delete: operations["deleteRole"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/role/unbind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["unBindRoleBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/role/bind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["bindRoleBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/position/unbind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["unBindPositionBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/position/bind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["bindPositionBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/permission": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["upsertPermission"]; + delete: operations["deletePermission"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/permission/unbind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["unBindPermissionBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/permission/bind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["bindPermissionBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/me": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["currentUser"]; + put?: never; + post: operations["upsertMe"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/department/unbind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["unBindDepartmentBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/department/bind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["bindDepartmentBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/avatar/upload": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["uploadAvatar"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/department": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["upsertDepartment"]; + delete: operations["deleteDepartment"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/sign-up": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["signUp"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/sign-out": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["signOut"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/sign-in": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["signIn"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/chat": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["chat"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/chat/refresh": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["createNewConversation"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/search": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["searchAction"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/execute": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["actionExecute"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/scheduler/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["pageQuery"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/position/query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryPositions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/position/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["pageQueryPositions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/knowledge/segments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryLibraryDocSegments"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/knowledge/libraries": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryLibraries"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/knowledge/docs": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryLibraryDocs"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryUsers"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/roles": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryRoles"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/permissions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryPermissions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/department/query-sub": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["querySubDepartment"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/department/query-available": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryAvailableParentDepartmentsBy"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/department/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["pageQueryDepartments"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/aop-log/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * 查询日志详情 + * @description 根据ID查询单条日志的详细信息 + */ + get: operations["getAopLogById"]; + put?: never; + post?: never; + /** + * 删除单条日志 + * @description 根据ID删除单条日志 + */ + delete: operations["deleteAopLog"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/aop-log/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * 分页查询AOP日志 + * @description 支持多种条件筛选的分页查询 + */ + get: operations["pageQueryAopLogs"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/llm/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["pageQueryLlm"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/aop-log/before": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * 删除指定时间前的日志 + * @description 删除指定时间之前的所有日志 + */ + delete: operations["deleteLogsBeforeTime"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/aop-log/batch": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * 批量删除日志 + * @description 根据ID列表批量删除日志 + */ + delete: operations["deleteAopLogs"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/user": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["deleteUser_1"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/role": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["deleteRole_1"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/position": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["deletePosition_1"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/permission": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["deletePermission_1"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/department": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["deleteDepartment_1"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; } export type webhooks = Record; export interface components { - schemas: { - TriggerKeyDto: { - name: string; - group: string; - }; - DocUpdateDto: { - /** Format: int64 */ - id: number; - /** Format: int64 */ - libId: number; - enable: boolean; - }; - LlmVm: { - /** Format: int64 */ - id: number; - name: string; - modelName: string; - type: string; - apiKey: string; - url: string; - enable: boolean; - /** Format: int32 */ - priority: number; - }; - JobKeyDto: { - name: string; - group: string; - }; - Position: { - /** Format: int64 */ - id?: number; - name?: string; - }; - LibraryUpsertDto: { - /** Format: int64 */ - id?: number; - name: string; - description?: string; - }; - UserUpsertDto: { - /** Format: int64 */ - id?: number; - username: string; - password?: string; - enable: boolean; - avatar?: string; - }; - RoleUpsertDto: { - /** Format: int64 */ - id?: number; - code: string; - name: string; - }; - RoleBindDto: { - /** Format: int64 */ - userId: number; - roleIds: number[]; - }; - PositionBindDto: { - /** Format: int64 */ - userId: number; - positionIds: number[]; - }; - PermissionUpsertDto: { - /** Format: int64 */ - id?: number; - code: string; - name: string; - }; - PermissionBindDto: { - /** Format: int64 */ - roleId: number; - permissionIds: number[]; - }; - DepartmentBindDto: { - /** Format: int64 */ - userId: number; - departmentIds: number[]; - }; - Department: { - /** Format: int64 */ - id?: number; - name?: string; - /** Format: int64 */ - parentId?: number; - }; - SignUpDto: { - username: string; - password: string; - }; - SignInDto: { - username: string; - password: string; - }; - ChatDto: { - /** @enum {string} */ - mode: "NORMAL" | "WITH_LIBRARY"; - /** Format: int64 */ - libraryId?: number; - message: string; - }; - PageRequestDto: { - /** Format: int64 */ - page?: number; - /** Format: int64 */ - size?: number; - /** - * @description 排序字段 - * @example name:asc,age:desc - */ - sortBy?: string; - /** Format: int64 */ - offset?: number; - sortFields?: components["schemas"]["SortFieldObject"][]; - }; - SortFieldObject: { - name?: string; - /** @enum {string} */ - order?: "ASC" | "DESC" | "DEFAULT"; - }; - QueryDto: { - name?: string; - }; - JobTriggerDto: { - name?: string; - group?: string; - className?: string; - jobDataMap?: { - [key: string]: Record; - }; - triggerName?: string; - triggerGroup?: string; - schedulerType?: string; - cronExpression?: string; - /** Format: int64 */ - startTime?: number; - /** Format: int64 */ - endTime?: number; - /** Format: int64 */ - nextFireTime?: number; - /** Format: int64 */ - previousFireTime?: number; - triggerState?: string; - triggerJobDataMap?: { - [key: string]: Record; - }; - }; - PageResponseDtoListJobTriggerDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["JobTriggerDto"][]; - }; - PositionQueryDto: { - /** Format: int64 */ - userId?: number; - name?: string; - /** @enum {string} */ - bindState?: "BIND" | "UNBIND" | "ALL"; - }; - PageResponseDtoListPositionRespDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["PositionRespDto"][]; - }; - PositionRespDto: { - /** Format: int64 */ - id: number; - name: string; - isBound?: boolean; - }; - LibraryDocSegment: { - /** Format: int64 */ - id?: number; - /** Format: int64 */ - docId?: number; - embeddingId?: string; - content?: string; - /** Format: int32 */ - tokenUsage?: number; - }; - Library: { - /** Format: int64 */ - id?: number; - name?: string; - description?: string; - /** Format: date-time */ - createTime?: string; - }; - JSON: Record; - LibraryDoc: { - /** Format: int64 */ - id?: number; - /** Format: int64 */ - libId?: number; - name?: string; - identify?: string; - path?: string; - meta?: components["schemas"]["JSON"]; - enable?: boolean; - /** @enum {string} */ - status?: "SUCCESS" | "INDEXING"; - /** Format: date-time */ - createTime?: string; - /** Format: date-time */ - updateTime?: string; - }; - UserQueryDto: { - username?: string; - /** Format: date-time */ - startDate?: string; - /** Format: date-time */ - endDate?: string; - }; - PageResponseDtoListUserRolePermissionDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["UserRolePermissionDto"][]; - }; - PermissionRespDto: { - /** Format: int64 */ - id?: number; - code?: string; - name?: string; - isBound?: boolean; - }; - RoleRespDto: { - /** Format: int64 */ - id: number; - code: string; - name: string; - isBound: boolean; - permissions?: components["schemas"]["PermissionRespDto"][]; - }; - UserRolePermissionDto: { - /** Format: int64 */ - id: number; - username: string; - password?: string; - avatar?: string; - enable: boolean; - roles?: components["schemas"]["RoleRespDto"][]; - /** Format: date-time */ - createTime: string; - permissions?: components["schemas"]["PermissionRespDto"][]; - }; - RoleQueryDto: { - /** Format: int64 */ - userId?: number; - /** Format: int64 */ - roleId?: number; - roleCode?: string; - roleName?: string; - roleIdList?: number[]; - /** @enum {string} */ - bindState?: "BIND" | "UNBIND" | "ALL"; - }; - PageResponseDtoListRoleRespDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["RoleRespDto"][]; - }; - PermissionQueryDto: { - /** Format: int64 */ - roleId?: number; - /** Format: int64 */ - permissionId?: number; - permissionCode?: string; - permissionName?: string; - permissionIdList?: number[]; - /** @enum {string} */ - bindState?: "BIND" | "UNBIND" | "ALL"; - }; - PageResponseDtoListPermissionRespDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["PermissionRespDto"][]; - }; - DepartmentWithParentDto: { - /** Format: int64 */ - id: number; - name: string; - /** Format: int64 */ - parentId: number; - parentName: string; - path: string; - }; - DepartmentQueryDto: { - /** Format: int64 */ - userId?: number; - name?: string; - enable?: boolean; - /** @enum {string} */ - bindState?: "BIND" | "UNBIND" | "ALL"; - }; - DepartmentRespDto: { - /** Format: int64 */ - id: number; - name: string; - /** Format: int64 */ - parentId?: number; - parentName?: string; - isBound?: boolean; - }; - PageResponseDtoListDepartmentRespDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["DepartmentRespDto"][]; - }; - LlmQueryDto: { - name?: string; - type?: string; - }; - PageResponseDtoListLlmVm: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["LlmVm"][]; - }; - }; - responses: never; - parameters: never; - requestBodies: never; - headers: never; - pathItems: never; + schemas: { + TriggerKeyDto: { + name: string; + group: string; + }; + DocUpdateDto: { + /** Format: int64 */ + id: number; + /** Format: int64 */ + libId: number; + enable: boolean; + }; + LlmVm: { + /** Format: int64 */ + id: number; + name: string; + modelName: string; + type: string; + apiKey: string; + url: string; + enable: boolean; + /** Format: int32 */ + priority: number; + }; + JobKeyDto: { + name: string; + group: string; + }; + Position: { + /** Format: int64 */ + id?: number; + name?: string; + }; + LibraryUpsertDto: { + /** Format: int64 */ + id?: number; + name: string; + description?: string; + }; + UserUpsertDto: { + /** Format: int64 */ + id?: number; + username: string; + password?: string; + enable: boolean; + avatar?: string; + }; + RoleUpsertDto: { + /** Format: int64 */ + id?: number; + code: string; + name: string; + }; + RoleBindDto: { + /** Format: int64 */ + userId: number; + roleIds: number[]; + }; + PositionBindDto: { + /** Format: int64 */ + userId: number; + positionIds: number[]; + }; + PermissionUpsertDto: { + /** Format: int64 */ + id?: number; + code: string; + name: string; + }; + PermissionBindDto: { + /** Format: int64 */ + roleId: number; + permissionIds: number[]; + }; + DepartmentBindDto: { + /** Format: int64 */ + userId: number; + departmentIds: number[]; + }; + Department: { + /** Format: int64 */ + id?: number; + name?: string; + /** Format: int64 */ + parentId?: number; + }; + SignUpDto: { + username: string; + password: string; + }; + SignInDto: { + username: string; + password: string; + }; + ChatDto: { + /** @enum {string} */ + mode: "NORMAL" | "WITH_LIBRARY"; + /** Format: int64 */ + libraryId?: number; + message: string; + }; + PageRequestDto: { + /** Format: int64 */ + page?: number; + /** Format: int64 */ + size?: number; + /** + * @description 排序字段 + * @example name:asc,age:desc + */ + sortBy?: string; + /** Format: int64 */ + offset?: number; + sortFields?: components["schemas"]["SortFieldObject"][]; + }; + SortFieldObject: { + name?: string; + /** @enum {string} */ + order?: "ASC" | "DESC" | "DEFAULT"; + }; + QueryDto: { + name?: string; + }; + JobTriggerDto: { + name?: string; + group?: string; + className?: string; + jobDataMap?: { + [key: string]: Record; + }; + triggerName?: string; + triggerGroup?: string; + schedulerType?: string; + cronExpression?: string; + /** Format: int64 */ + startTime?: number; + /** Format: int64 */ + endTime?: number; + /** Format: int64 */ + nextFireTime?: number; + /** Format: int64 */ + previousFireTime?: number; + triggerState?: string; + triggerJobDataMap?: { + [key: string]: Record; + }; + }; + PageResponseDtoListJobTriggerDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["JobTriggerDto"][]; + }; + PositionQueryDto: { + /** Format: int64 */ + userId?: number; + name?: string; + /** @enum {string} */ + bindState?: "BIND" | "UNBIND" | "ALL"; + }; + PageResponseDtoListPositionRespDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["PositionRespDto"][]; + }; + PositionRespDto: { + /** Format: int64 */ + id: number; + name: string; + isBound?: boolean; + }; + LibraryDocSegment: { + /** Format: int64 */ + id?: number; + /** Format: int64 */ + docId?: number; + embeddingId?: string; + content?: string; + /** Format: int32 */ + tokenUsage?: number; + }; + Library: { + /** Format: int64 */ + id?: number; + name?: string; + description?: string; + /** Format: date-time */ + createTime?: string; + }; + JSON: Record; + LibraryDoc: { + /** Format: int64 */ + id?: number; + /** Format: int64 */ + libId?: number; + name?: string; + identify?: string; + path?: string; + meta?: components["schemas"]["JSON"]; + enable?: boolean; + /** @enum {string} */ + status?: "SUCCESS" | "INDEXING"; + /** Format: date-time */ + createTime?: string; + /** Format: date-time */ + updateTime?: string; + }; + UserQueryDto: { + username?: string; + /** Format: date-time */ + startDate?: string; + /** Format: date-time */ + endDate?: string; + }; + PageResponseDtoListUserRolePermissionDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["UserRolePermissionDto"][]; + }; + PermissionRespDto: { + /** Format: int64 */ + id?: number; + code?: string; + name?: string; + isBound?: boolean; + }; + RoleRespDto: { + /** Format: int64 */ + id: number; + code: string; + name: string; + isBound: boolean; + permissions?: components["schemas"]["PermissionRespDto"][]; + }; + UserRolePermissionDto: { + /** Format: int64 */ + id: number; + username: string; + password?: string; + avatar?: string; + enable: boolean; + roles?: components["schemas"]["RoleRespDto"][]; + /** Format: date-time */ + createTime: string; + permissions?: components["schemas"]["PermissionRespDto"][]; + }; + RoleQueryDto: { + /** Format: int64 */ + userId?: number; + /** Format: int64 */ + roleId?: number; + roleCode?: string; + roleName?: string; + roleIdList?: number[]; + /** @enum {string} */ + bindState?: "BIND" | "UNBIND" | "ALL"; + }; + PageResponseDtoListRoleRespDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["RoleRespDto"][]; + }; + PermissionQueryDto: { + /** Format: int64 */ + roleId?: number; + /** Format: int64 */ + permissionId?: number; + permissionCode?: string; + permissionName?: string; + permissionIdList?: number[]; + /** @enum {string} */ + bindState?: "BIND" | "UNBIND" | "ALL"; + }; + PageResponseDtoListPermissionRespDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["PermissionRespDto"][]; + }; + DepartmentWithParentDto: { + /** Format: int64 */ + id: number; + name: string; + /** Format: int64 */ + parentId: number; + parentName: string; + path: string; + }; + DepartmentQueryDto: { + /** Format: int64 */ + userId?: number; + name?: string; + enable?: boolean; + /** @enum {string} */ + bindState?: "BIND" | "UNBIND" | "ALL"; + }; + DepartmentRespDto: { + /** Format: int64 */ + id: number; + name: string; + /** Format: int64 */ + parentId?: number; + parentName?: string; + isBound?: boolean; + }; + PageResponseDtoListDepartmentRespDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["DepartmentRespDto"][]; + }; + AopLogRespDto: { + /** Format: int64 */ + id?: number; + className?: string; + methodName?: string; + methodArgs?: string; + returnValue?: string; + /** Format: int64 */ + executionTime?: number; + success?: boolean; + errorMessage?: string; + /** Format: int64 */ + userId?: number; + username?: string; + ipAddress?: string; + userAgent?: string; + curl?: string; + /** Format: date-time */ + createTime?: string; + }; + AopLogQueryDto: { + /** Format: int64 */ + id?: number; + className?: string; + methodName?: string; + success?: boolean; + /** Format: int64 */ + userId?: number; + ipAddress?: string; + /** Format: date-time */ + startTime?: string; + /** Format: date-time */ + endTime?: string; + /** Format: int64 */ + minExecutionTime?: number; + /** Format: int64 */ + maxExecutionTime?: number; + }; + PageResponseDtoListAopLogRespDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["AopLogRespDto"][]; + }; + LlmQueryDto: { + name?: string; + type?: string; + }; + PageResponseDtoListLlmVm: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["LlmVm"][]; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; } export type $defs = Record; export interface operations { - updateJob: { - parameters: { - query: { - cron: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TriggerKeyDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - updateLibraryDoc: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["DocUpdateDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteLibraryDoc: { - parameters: { - query: { - libraryDocId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - updateLlm: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["LlmVm"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - resumeTrigger: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TriggerKeyDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - pauseTrigger: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TriggerKeyDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - triggerJob: { - parameters: { - query: { - startAt: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["JobKeyDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - upsertPosition: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Position"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deletePosition: { - parameters: { - query: { - id: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - upsertLibrary: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["LibraryUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteLibrary: { - parameters: { - query: { - libraryId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - uploadLibraryDoc: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - libraryId: string; - /** Format: binary */ - file: string; - }; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "text/plain": string; - }; - }; - }; - }; - queryUserWithRolePermission: { - parameters: { - query: { - userId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["UserRolePermissionDto"]; - }; - }; - }; - }; - upsertUser: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UserUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteUser: { - parameters: { - query: { - userId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - queryRoleWithPermission: { - parameters: { - query: { - roleId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["RoleRespDto"]; - }; - }; - }; - }; - upsertRole: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["RoleUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteRole: { - parameters: { - query: { - roleId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - unBindRoleBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["RoleBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - bindRoleBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["RoleBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - unBindPositionBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PositionBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - bindPositionBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PositionBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - upsertPermission: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PermissionUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deletePermission: { - parameters: { - query: { - permissionId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - unBindPermissionBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PermissionBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - bindPermissionBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PermissionBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - currentUser: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["UserRolePermissionDto"]; - }; - }; - }; - }; - upsertMe: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UserUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - unBindDepartmentBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["DepartmentBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - bindDepartmentBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["DepartmentBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - uploadAvatar: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "multipart/form-data": { - /** Format: binary */ - file: string; - }; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "text/plain": string; - }; - }; - }; - }; - upsertDepartment: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Department"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteDepartment: { - parameters: { - query: { - id: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - signUp: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["SignUpDto"]; - }; - }; - responses: { - /** @description Created */ - 201: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - signOut: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - signIn: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["SignInDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - chat: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["ChatDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "text/event-stream": string[]; - }; - }; - }; - }; - createNewConversation: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - searchAction: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": string; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": { - [key: string]: string; - }; - }; - }; - }; - }; - actionExecute: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": string; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "text/event-stream": string[]; - }; - }; - }; - }; - pageQuery: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - queryDto: components["schemas"]["QueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListJobTriggerDto"]; - }; - }; - }; - }; - queryPositions: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["Position"][]; - }; - }; - }; - }; - pageQueryPositions: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - positionQueryDto: components["schemas"]["PositionQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListPositionRespDto"]; - }; - }; - }; - }; - queryLibraryDocSegments: { - parameters: { - query: { - libraryDocId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["LibraryDocSegment"][]; - }; - }; - }; - }; - queryLibraries: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["Library"][]; - }; - }; - }; - }; - queryLibraryDocs: { - parameters: { - query: { - libraryId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["LibraryDoc"][]; - }; - }; - }; - }; - queryUsers: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - userQueryDto: components["schemas"]["UserQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListUserRolePermissionDto"]; - }; - }; - }; - }; - queryRoles: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - roleQueryDto: components["schemas"]["RoleQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListRoleRespDto"]; - }; - }; - }; - }; - queryPermissions: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - permissionQueryDto: components["schemas"]["PermissionQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListPermissionRespDto"]; - }; - }; - }; - }; - querySubDepartment: { - parameters: { - query?: { - id?: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["DepartmentWithParentDto"][]; - }; - }; - }; - }; - queryAvailableParentDepartmentsBy: { - parameters: { - query?: { - id?: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["Department"][]; - }; - }; - }; - }; - pageQueryDepartments: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - departmentQueryDto: components["schemas"]["DepartmentQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListDepartmentRespDto"]; - }; - }; - }; - }; - pageQueryLlm: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - llmQueryDto: components["schemas"]["LlmQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListLlmVm"]; - }; - }; - }; - }; - deleteUser_1: { - parameters: { - query: { - username: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteRole_1: { - parameters: { - query: { - name: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deletePosition_1: { - parameters: { - query: { - name: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deletePermission_1: { - parameters: { - query: { - name: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteDepartment_1: { - parameters: { - query: { - name: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; + updateJob: { + parameters: { + query: { + cron: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TriggerKeyDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateLibraryDoc: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["DocUpdateDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteLibraryDoc: { + parameters: { + query: { + libraryDocId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateLlm: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LlmVm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + resumeTrigger: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TriggerKeyDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + pauseTrigger: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TriggerKeyDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + triggerJob: { + parameters: { + query: { + startAt: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["JobKeyDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + upsertPosition: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Position"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deletePosition: { + parameters: { + query: { + id: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + upsertLibrary: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LibraryUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteLibrary: { + parameters: { + query: { + libraryId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + uploadLibraryDoc: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + libraryId: string; + /** Format: binary */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": string; + }; + }; + }; + }; + queryUserWithRolePermission: { + parameters: { + query: { + userId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["UserRolePermissionDto"]; + }; + }; + }; + }; + upsertUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteUser: { + parameters: { + query: { + userId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + queryRoleWithPermission: { + parameters: { + query: { + roleId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["RoleRespDto"]; + }; + }; + }; + }; + upsertRole: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RoleUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteRole: { + parameters: { + query: { + roleId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unBindRoleBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RoleBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + bindRoleBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RoleBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unBindPositionBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PositionBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + bindPositionBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PositionBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + upsertPermission: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deletePermission: { + parameters: { + query: { + permissionId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unBindPermissionBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + bindPermissionBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + currentUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["UserRolePermissionDto"]; + }; + }; + }; + }; + upsertMe: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unBindDepartmentBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["DepartmentBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + bindDepartmentBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["DepartmentBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + uploadAvatar: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": string; + }; + }; + }; + }; + upsertDepartment: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Department"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteDepartment: { + parameters: { + query: { + id: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + signUp: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SignUpDto"]; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + signOut: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + signIn: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SignInDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + chat: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ChatDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/event-stream": string[]; + }; + }; + }; + }; + createNewConversation: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + searchAction: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": { + [key: string]: string; + }; + }; + }; + }; + }; + actionExecute: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/event-stream": string[]; + }; + }; + }; + }; + pageQuery: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + queryDto: components["schemas"]["QueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListJobTriggerDto"]; + }; + }; + }; + }; + queryPositions: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["Position"][]; + }; + }; + }; + }; + pageQueryPositions: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + positionQueryDto: components["schemas"]["PositionQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListPositionRespDto"]; + }; + }; + }; + }; + queryLibraryDocSegments: { + parameters: { + query: { + libraryDocId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["LibraryDocSegment"][]; + }; + }; + }; + }; + queryLibraries: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["Library"][]; + }; + }; + }; + }; + queryLibraryDocs: { + parameters: { + query: { + libraryId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["LibraryDoc"][]; + }; + }; + }; + }; + queryUsers: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + userQueryDto: components["schemas"]["UserQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListUserRolePermissionDto"]; + }; + }; + }; + }; + queryRoles: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + roleQueryDto: components["schemas"]["RoleQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListRoleRespDto"]; + }; + }; + }; + }; + queryPermissions: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + permissionQueryDto: components["schemas"]["PermissionQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListPermissionRespDto"]; + }; + }; + }; + }; + querySubDepartment: { + parameters: { + query?: { + id?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["DepartmentWithParentDto"][]; + }; + }; + }; + }; + queryAvailableParentDepartmentsBy: { + parameters: { + query?: { + id?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["Department"][]; + }; + }; + }; + }; + pageQueryDepartments: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + departmentQueryDto: components["schemas"]["DepartmentQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListDepartmentRespDto"]; + }; + }; + }; + }; + getAopLogById: { + parameters: { + query?: never; + header?: never; + path: { + /** @description 日志ID */ + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["AopLogRespDto"]; + }; + }; + }; + }; + deleteAopLog: { + parameters: { + query?: never; + header?: never; + path: { + /** @description 日志ID */ + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + pageQueryAopLogs: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + queryDto: components["schemas"]["AopLogQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListAopLogRespDto"]; + }; + }; + }; + }; + pageQueryLlm: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + llmQueryDto: components["schemas"]["LlmQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListLlmVm"]; + }; + }; + }; + }; + deleteLogsBeforeTime: { + parameters: { + query: { + /** @description 截止时间 */ + beforeTime: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": number; + }; + }; + }; + }; + deleteAopLogs: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": number[]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": number; + }; + }; + }; + }; + deleteUser_1: { + parameters: { + query: { + username: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteRole_1: { + parameters: { + query: { + name: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deletePosition_1: { + parameters: { + query: { + name: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deletePermission_1: { + parameters: { + query: { + name: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteDepartment_1: { + parameters: { + query: { + name: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; } diff --git a/frontend/src/assets/datepicker.css b/frontend/src/assets/datepicker.css index 6dfee65..1b4bcfc 100644 --- a/frontend/src/assets/datepicker.css +++ b/frontend/src/assets/datepicker.css @@ -1,54 +1,70 @@ /* 日期选择器亮色主题 - 与 Flowbite 蓝色主题匹配 */ .dp__theme_light { - /* 基础颜色 */ - --dp-background-color: #fff; - --dp-text-color: #1f2937; /* 对应 Flowbite 的 gray-800 */ + /* 基础颜色 */ + --dp-background-color: #fff; + --dp-text-color: #1f2937; /* 对应 Flowbite 的 gray-800 */ - /* 主色调 */ - --dp-primary-color: #2563eb; /* 对应 Flowbite 的 primary-600 */ - --dp-primary-disabled-color: #93c5fd; /* 对应 Flowbite 的 primary-300 */ - --dp-primary-text-color: #fff; + /* 主色调 */ + --dp-primary-color: #2563eb; /* 对应 Flowbite 的 primary-600 */ + --dp-primary-disabled-color: #93c5fd; /* 对应 Flowbite 的 primary-300 */ + --dp-primary-text-color: #fff; - /* 次要颜色 */ - --dp-secondary-color: #9ca3af; /* 对应 Flowbite 的 gray-400 */ + /* 次要颜色 */ + --dp-secondary-color: #9ca3af; /* 对应 Flowbite 的 gray-400 */ - /* 背景颜色 */ - --dp-background-color: var(--color-gray-50); + /* 背景颜色 */ + --dp-background-color: var(--color-gray-50); - /* 边框颜色 */ - --dp-border-color: var(--color-gray-300); /* 对应 Flowbite 的 gray-200 */ - --dp-menu-border-color: #e5e7eb; + /* 边框颜色 */ + --dp-border-color: var(--color-gray-300); /* 对应 Flowbite 的 gray-200 */ + --dp-menu-border-color: #e5e7eb; - /* 禁用状态 */ - --dp-disabled-color: #f3f4f6; /* 对应 Flowbite 的 gray-100 */ - --dp-disabled-color-text: #9ca3af; /* 对应 Flowbite 的 gray-400 */ + /* 禁用状态 */ + --dp-disabled-color: #f3f4f6; /* 对应 Flowbite 的 gray-100 */ + --dp-disabled-color-text: #9ca3af; /* 对应 Flowbite 的 gray-400 */ - /* 滚动条 */ - --dp-scroll-bar-background: #f3f4f6; /* 对应 Flowbite 的 gray-100 */ - --dp-scroll-bar-color: #9ca3af; /* 对应 Flowbite 的 gray-400 */ + /* 滚动条 */ + --dp-scroll-bar-background: #f3f4f6; /* 对应 Flowbite 的 gray-100 */ + --dp-scroll-bar-color: #9ca3af; /* 对应 Flowbite 的 gray-400 */ - /* 成功状态 */ - --dp-success-color: #10b981; /* 对应 Tailwind 的 emerald-500 */ - --dp-success-color-disabled: #6ee7b7; /* 对应 Tailwind 的 emerald-300 */ + /* 成功状态 */ + --dp-success-color: #10b981; /* 对应 Tailwind 的 emerald-500 */ + --dp-success-color-disabled: #6ee7b7; /* 对应 Tailwind 的 emerald-300 */ - /* 图标颜色 */ - --dp-icon-color: #6b7280; /* 对应 Flowbite 的 gray-500 */ + /* 图标颜色 */ + --dp-icon-color: #6b7280; /* 对应 Flowbite 的 gray-500 */ - /* 危险/错误状态 */ - --dp-danger-color: #ef4444; /* 对应 Tailwind 的 red-500 */ - --dp-marker-color: #ef4444; + /* 危险/错误状态 */ + --dp-danger-color: #ef4444; /* 对应 Tailwind 的 red-500 */ + --dp-marker-color: #ef4444; - /* 提示颜色 */ - --dp-tooltip-color: #f9fafb; /* 对应 Flowbite 的 gray-50 */ + /* 提示颜色 */ + --dp-tooltip-color: #f9fafb; /* 对应 Flowbite 的 gray-50 */ - /* 高亮颜色 */ - --dp-highlight-color: rgb(37 99 235 / 10%); /* 对应 Flowbite 的 primary-600 透明度 */ + /* 高亮颜色 */ + --dp-highlight-color: rgb(37 99 235 / 10%); /* 对应 Flowbite 的 primary-600 透明度 */ - /* 日期范围相关 */ - --dp-range-between-dates-background-color: var(--dp-hover-color, #eff6ff); - --dp-range-between-dates-text-color: var(--dp-hover-text-color, #1f2937); - --dp-range-between-border-color: var(--dp-hover-color, #eff6ff); + /* 日期范围相关 */ + --dp-range-between-dates-background-color: var(--dp-hover-color, #eff6ff); + --dp-range-between-dates-text-color: var(--dp-hover-text-color, #1f2937); + --dp-range-between-border-color: var(--dp-hover-color, #eff6ff); + + /* 圆角设置 - 匹配项目中的 rounded-lg */ + --dp-border-radius: 0.5rem; /* 8px,匹配 Tailwind 的 rounded-lg */ + --dp-cell-border-radius: 0.375rem; /* 6px,稍微小一点,更美观 */ + } + + /* 修复日期文本与图标重叠的问题 */ + .dp__input_wrap { + position: relative; + } + + .dp__input { + padding-left: 2rem !important; /* 确保文本不会与图标重叠 */ + } + + .dp__input_icon { + position: absolute; + /* left: 0.75rem !important; */ + right: auto !important; + } - /* 圆角设置 - 匹配项目中的 rounded-lg */ - --dp-border-radius: 0.5rem; /* 8px,匹配 Tailwind 的 rounded-lg */ - --dp-cell-border-radius: 0.375rem; /* 6px,稍微小一点,更美观 */ -} diff --git a/frontend/src/components/common/LogStatusBadge.vue b/frontend/src/components/common/LogStatusBadge.vue new file mode 100644 index 0000000..b25169a --- /dev/null +++ b/frontend/src/components/common/LogStatusBadge.vue @@ -0,0 +1,24 @@ + + + diff --git a/frontend/src/components/common/index.ts b/frontend/src/components/common/index.ts index ac23942..ce56840 100644 --- a/frontend/src/components/common/index.ts +++ b/frontend/src/components/common/index.ts @@ -1,4 +1,6 @@ +import Assistant from "./Assistant.vue"; import CardBase from "./CardBase.vue"; +import LogStatusBadge from "./LogStatusBadge.vue"; import PromotionBanner from "./PromotionBanner.vue"; -export { CardBase, PromotionBanner }; +export { Assistant, CardBase, LogStatusBadge, PromotionBanner }; diff --git a/frontend/src/components/icons/LogIcon.vue b/frontend/src/components/icons/LogIcon.vue new file mode 100644 index 0000000..1b20edb --- /dev/null +++ b/frontend/src/components/icons/LogIcon.vue @@ -0,0 +1,10 @@ + diff --git a/frontend/src/components/icons/index.ts b/frontend/src/components/icons/index.ts index e20180d..daef36c 100644 --- a/frontend/src/components/icons/index.ts +++ b/frontend/src/components/icons/index.ts @@ -1,14 +1,32 @@ // 统一导出所有图标组件 -export { default as StopIcon } from "./StopIcon.vue"; -export { default as PlusIcon } from "./PlusIcon.vue"; -export { default as AiChatIcon } from "./AiChatIcon.vue"; -export { default as PositionIcon } from "./PositionIcon.vue"; -export { default as SchedulerIcon } from "./SchedulerIcon.vue"; -export { default as DepartmentIcon } from "./DepartmentIcon.vue"; -export { default as LlmConfigIcon } from "./LlmConfigIcon.vue"; -export { default as LoadingIcon } from "./LoadingIcon.vue"; -export { default as RoleIcon } from "./RoleIcon.vue"; -export { default as SettingsIcon } from "./SettingsIcon.vue"; -export { default as UsersIcon } from "./UsersIcon.vue"; -export { default as PermissionIcon } from "./PermissionIcon.vue"; -export { default as KnowledgeIcon } from "./KnowledgeIcon.vue"; +import AiChatIcon from "./AiChatIcon.vue"; +import DepartmentIcon from "./DepartmentIcon.vue"; +import KnowledgeIcon from "./KnowledgeIcon.vue"; +import LlmConfigIcon from "./LlmConfigIcon.vue"; +import LoadingIcon from "./LoadingIcon.vue"; +import LogIcon from "./LogIcon.vue"; +import PermissionIcon from "./PermissionIcon.vue"; +import PlusIcon from "./PlusIcon.vue"; +import PositionIcon from "./PositionIcon.vue"; +import RoleIcon from "./RoleIcon.vue"; +import SchedulerIcon from "./SchedulerIcon.vue"; +import SettingsIcon from "./SettingsIcon.vue"; +import StopIcon from "./StopIcon.vue"; +import UsersIcon from "./UsersIcon.vue"; + +export { + AiChatIcon, + DepartmentIcon, + KnowledgeIcon, + LlmConfigIcon, + LoadingIcon, + LogIcon, + PermissionIcon, + PlusIcon, + PositionIcon, + RoleIcon, + SchedulerIcon, + SettingsIcon, + StopIcon, + UsersIcon, +}; diff --git a/frontend/src/components/layout/Sidebar.vue b/frontend/src/components/layout/Sidebar.vue index dae2a9d..b9ddc4c 100644 --- a/frontend/src/components/layout/Sidebar.vue +++ b/frontend/src/components/layout/Sidebar.vue @@ -34,9 +34,11 @@ import { onMounted, ref } from "vue"; import { RouterLink, useRoute } from "vue-router"; import { + AiChatIcon, DepartmentIcon, KnowledgeIcon, LlmConfigIcon, + LogIcon, PermissionIcon, PositionIcon, RoleIcon, @@ -119,6 +121,11 @@ const menuItems = [ path: Routes.KNOWLEDGEVIEW.fullPath(), icon: KnowledgeIcon, }, + { + title: "日志管理", + path: Routes.AOPLOGVIEW.fullPath(), + icon: LogIcon, + }, ]; const route = useRoute(); diff --git a/frontend/src/components/tables/TableFilterForm.vue b/frontend/src/components/tables/TableFilterForm.vue index df01516..ff6003e 100644 --- a/frontend/src/components/tables/TableFilterForm.vue +++ b/frontend/src/components/tables/TableFilterForm.vue @@ -1,7 +1,7 @@ + + diff --git a/frontend/src/components/tables/TablePagination.vue b/frontend/src/components/tables/TablePagination.vue index e510108..369e2ff 100644 --- a/frontend/src/components/tables/TablePagination.vue +++ b/frontend/src/components/tables/TablePagination.vue @@ -1,78 +1,130 @@ diff --git a/frontend/src/composables/aop/useAopLogDelete.ts b/frontend/src/composables/aop/useAopLogDelete.ts new file mode 100644 index 0000000..1dabcde --- /dev/null +++ b/frontend/src/composables/aop/useAopLogDelete.ts @@ -0,0 +1,101 @@ +import client from "@/api/client"; +import { useActionExcStore } from "@/composables/store/useActionExcStore"; +import useAlertStore from "@/composables/store/useAlertStore"; +import { ref } from "vue"; + +/** + * AOP日志删除 Composable + * @returns 日志删除相关的状态和方法 + */ +export function useAopLogDelete() { + const alertStore = useAlertStore(); + const actionExcStore = useActionExcStore(); + const loading = ref(false); + + /** + * 删除单条日志 + * @param id 日志ID + */ + const deleteLog = async (id: number) => { + try { + loading.value = true; + + await client.DELETE("/aop-log/{id}", { + params: { + path: { + id, + }, + }, + }); + + alertStore.showAlert({ + level: "success", + content: "日志删除成功", + }); + + actionExcStore.notify(true); + return true; + } finally { + loading.value = false; + } + }; + + /** + * 批量删除日志 + * @param ids 日志ID列表 + */ + const batchDeleteLogs = async (ids: number[]) => { + try { + loading.value = true; + + const response = await client.DELETE("/aop-log/batch", { + body: ids, + }); + + alertStore.showAlert({ + level: "success", + content: `成功删除 ${response.data || 0} 条日志`, + }); + + actionExcStore.notify(true); + return true; + } finally { + loading.value = false; + } + }; + + /** + * 删除指定时间前的日志 + * @param beforeTime 时间点 + */ + const deleteLogsBefore = async (beforeTime: string) => { + try { + loading.value = true; + + const response = await client.DELETE("/aop-log/before", { + params: { + query: { + beforeTime, + }, + }, + }); + + alertStore.showAlert({ + level: "success", + content: `成功删除 ${response.data || 0} 条日志`, + }); + + actionExcStore.notify(true); + return true; + } finally { + loading.value = false; + } + }; + + return { + loading, + deleteLog, + batchDeleteLogs, + deleteLogsBefore, + }; +} diff --git a/frontend/src/composables/aop/useAopLogQuery.ts b/frontend/src/composables/aop/useAopLogQuery.ts new file mode 100644 index 0000000..1db2091 --- /dev/null +++ b/frontend/src/composables/aop/useAopLogQuery.ts @@ -0,0 +1,131 @@ +import client from "@/api/client"; +import type { components } from "@/api/types/schema"; +import { useErrorHandling } from "@/composables/common/useErrorHandling"; +import { usePagination } from "@/composables/common/usePagination"; +import { useSorting } from "@/composables/common/useSorting"; +import type { AopLogQueryParams } from "@/types/AlertTypes"; +import dayjs from "dayjs"; +import { ref } from "vue"; + +/** + * AOP日志查询 Composable + * @returns 日志查询相关的状态和方法 + */ +export function useAopLogQuery() { + const { currentPage, pageSize, total, updatePaginationState } = usePagination(); + const { sortBy, handleSort, getSortField } = useSorting(); + + const logs = ref([]); + const currentLog = ref(); + const loading = ref(false); + + /** + * 分页查询日志列表 + * @param params 查询参数 + */ + const fetchLogs = async (params: AopLogQueryParams = {}) => { + try { + loading.value = true; + + // 处理日期范围 + const queryParams: AopLogQueryParams = { ...params }; + + const response = await client.GET("/aop-log/page-query", { + params: { + query: { + pageRequestDto: { + page: currentPage.value, + size: pageSize.value, + sortBy: sortBy.value, + }, + queryDto: queryParams, + }, + }, + }); + + if (response.data) { + logs.value = response.data.data || []; + updatePaginationState({ total: response.data.total || 0 }); + } + + return logs.value; + } finally { + loading.value = false; + } + }; + + /** + * 获取单条日志详情 + * @param id 日志ID + */ + const fetchLogDetail = async (id: number) => { + try { + loading.value = true; + + const response = await client.GET("/aop-log/{id}", { + params: { + path: { + id, + }, + }, + }); + + if (response.data) { + currentLog.value = response.data; + } + + return currentLog.value; + } finally { + loading.value = false; + } + }; + + /** + * 格式化日期时间 + * @param dateTime 日期时间字符串 + */ + const formatDateTime = (dateTime?: string) => { + if (!dateTime) return ''; + return dayjs(dateTime).format('YYYY-MM-DD HH:mm:ss'); + }; + + /** + * 格式化执行时间 + * @param time 执行时间(毫秒) + */ + const formatExecutionTime = (time?: number) => { + if (!time) return ''; + if (time < 1000) return `${time}ms`; + return `${(time / 1000).toFixed(2)}s`; + }; + + /** + * 格式化JSON字符串 + * @param jsonString JSON字符串 + */ + const formatJson = (jsonString?: string) => { + if (!jsonString) return ''; + try { + const obj = JSON.parse(jsonString); + return JSON.stringify(obj, null, 2); + } catch (e) { + return jsonString; + } + }; + + return { + logs, + currentLog, + loading, + currentPage, + pageSize, + total, + fetchLogs, + fetchLogDetail, + handleSort, + getSortField, + formatDateTime, + formatExecutionTime, + formatJson, + }; +} diff --git a/frontend/src/composables/common/usePagination.ts b/frontend/src/composables/common/usePagination.ts index 8f8d84c..04c34d1 100644 --- a/frontend/src/composables/common/usePagination.ts +++ b/frontend/src/composables/common/usePagination.ts @@ -7,10 +7,11 @@ export interface PaginationState { } export interface UsePaginationOptions { - initialPage?: number; - initialPageSize?: number; - initialTotal?: number; -} + initialPage?: number; + initialPageSize?: number; + initialTotal?: number; + maxVisiblePages?: number; + } /** * 分页逻辑Composable - 提供分页相关的状态和操作 @@ -18,7 +19,12 @@ export interface UsePaginationOptions { * @returns 分页状态和方法 */ export function usePagination(options: UsePaginationOptions = {}) { - const { initialPage = 1, initialPageSize = 10, initialTotal = 0 } = options; + const { + initialPage = 1, + initialPageSize = 10, + initialTotal = 0, + maxVisiblePages = 5, // 最多显示的页码数量 + } = options; const currentPage = ref(initialPage); const pageSize = ref(initialPageSize); @@ -26,6 +32,7 @@ export function usePagination(options: UsePaginationOptions = {}) { const totalPages = computed(() => Math.ceil(total.value / pageSize.value)); + // 所有页码 const pageNumbers = computed(() => { const pages = []; for (let i = 1; i <= totalPages.value; i++) { @@ -34,6 +41,54 @@ export function usePagination(options: UsePaginationOptions = {}) { return pages; }); + // 智能分页显示,处理页码过多的情况 + const visiblePageNumbers = computed(() => { + const totalPageCount = totalPages.value; + const current = currentPage.value; + + // 如果总页数小于等于最大显示页数,则全部显示 + if (totalPageCount <= maxVisiblePages) { + return pageNumbers.value.map((page) => ({ page, type: "page" })); + } + + const result = []; + const sidePages = Math.floor((maxVisiblePages - 3) / 2); // 当前页两侧显示的页数 + + // 添加第一页 + result.push({ page: 1, type: "page" }); + + // 添加省略号或第二页 + if (current - sidePages > 2) { + result.push({ page: null, type: "ellipsis" }); + } else if (current > 1) { + result.push({ page: 2, type: "page" }); + } + + // 添加当前页附近的页码 + const startPage = Math.max(current - sidePages, 2); + const endPage = Math.min(current + sidePages, totalPageCount - 1); + + for (let i = startPage; i <= endPage; i++) { + if (i > 2 && i < totalPageCount - 1) { + result.push({ page: i, type: "page" }); + } + } + + // 添加省略号或倒数第二页 + if (current + sidePages < totalPageCount - 1) { + result.push({ page: null, type: "ellipsis" }); + } else if (current < totalPageCount) { + result.push({ page: totalPageCount - 1, type: "page" }); + } + + // 添加最后一页 + if (totalPageCount > 1) { + result.push({ page: totalPageCount, type: "page" }); + } + + return result; + }); + const displayRange = computed(() => { const start = total.value === 0 ? 0 : (currentPage.value - 1) * pageSize.value + 1; @@ -64,6 +119,7 @@ export function usePagination(options: UsePaginationOptions = {}) { total, totalPages, pageNumbers, + visiblePageNumbers, displayRange, isFirstPage, isLastPage, diff --git a/frontend/src/main.ts b/frontend/src/main.ts index a1c6dc7..360167e 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -33,5 +33,9 @@ enableMocking().then(() => { }; app.component("VueDatePicker", VueDatePicker); + app.provide("vueDatePickerOptions", { + teleport: "body", + teleportCenter: true, + }); app.mount("#app"); }); diff --git a/frontend/src/router/constants.ts b/frontend/src/router/constants.ts index d8ed54f..48060bc 100644 --- a/frontend/src/router/constants.ts +++ b/frontend/src/router/constants.ts @@ -176,11 +176,31 @@ export const AiRoutes = { }, } as const; +// 系统管理相关路由 +export const SystemRoutes = { + AOPLOGVIEW: { + path: "aop-logs", + name: "aop-logs", + fullPath: () => `${BaseRoutes.DASHBOARD.path}/aop-logs`, + withParams: () => ({ name: "aop-logs" }), + }, + AOPLOGDETAILVIEW: { + path: "aop-logs/:id", + name: "aop-log-detail", + fullPath: () => `${BaseRoutes.DASHBOARD.path}/aop-logs/:id`, + withParams: (params: T) => ({ + name: "aop-log-detail", + params: { id: params.id.toString() }, + }), + }, +} as const; + export const Routes = { ...BaseRoutes, ...DashboardRoutes, ...UserRoutes, ...AiRoutes, + ...SystemRoutes, } as const; export enum ERole { diff --git a/frontend/src/router/modules/dashboard.ts b/frontend/src/router/modules/dashboard.ts index 6de228e..eca7867 100644 --- a/frontend/src/router/modules/dashboard.ts +++ b/frontend/src/router/modules/dashboard.ts @@ -2,6 +2,7 @@ import type { RouteRecordRaw } from "vue-router"; import Dashboard from "../../components/layout/Dashboard.vue"; import { EPermission, Routes } from "../constants"; import aiRoutes from "./ai"; +import systemRoutes from "./system"; import userManagementRoutes from "./user"; const dashboardRoutes: RouteRecordRaw = { @@ -14,6 +15,7 @@ const dashboardRoutes: RouteRecordRaw = { children: [ ...userManagementRoutes, ...aiRoutes, + ...systemRoutes, { path: Routes.OVERVIEW.path, name: Routes.OVERVIEW.name, diff --git a/frontend/src/router/modules/system.ts b/frontend/src/router/modules/system.ts new file mode 100644 index 0000000..68ec188 --- /dev/null +++ b/frontend/src/router/modules/system.ts @@ -0,0 +1,23 @@ +import type { RouteRecordRaw } from "vue-router"; +import { Routes } from "../constants"; + +const systemRoutes: RouteRecordRaw[] = [ + { + path: Routes.AOPLOGVIEW.path, + name: Routes.AOPLOGVIEW.name, + component: () => import("@/views/AopLogManagementPage.vue"), + meta: { + requiresAuth: true, + }, + }, + { + path: Routes.AOPLOGDETAILVIEW.path, + name: Routes.AOPLOGDETAILVIEW.name, + component: () => import("@/views/AopLogDetailPage.vue"), + meta: { + requiresAuth: true, + }, + }, +]; + +export default systemRoutes; diff --git a/frontend/src/types/AlertTypes.ts b/frontend/src/types/AlertTypes.ts index b8d1f94..a59995b 100644 --- a/frontend/src/types/AlertTypes.ts +++ b/frontend/src/types/AlertTypes.ts @@ -1 +1,31 @@ -export type AlertLevel = "info" | "warning" | "success" | "error"; +export type AlertLevel = "info" | "success" | "warning" | "error"; + +export interface AopLogQueryParams { + id?: number; + className?: string; + methodName?: string; + success?: boolean; + userId?: number; + ipAddress?: string; + startTime?: string; + endTime?: string; + minExecutionTime?: number; + maxExecutionTime?: number; +} + +export interface AopLog { + id?: number; + className?: string; + methodName?: string; + methodArgs?: string; + returnValue?: string; + executionTime?: number; + success?: boolean; + errorMessage?: string; + userId?: number; + username?: string; + ipAddress?: string; + userAgent?: string; + curl?: string; + createTime?: string; +} diff --git a/frontend/src/views/AopLogDetailPage.vue b/frontend/src/views/AopLogDetailPage.vue new file mode 100644 index 0000000..8b8ab8c --- /dev/null +++ b/frontend/src/views/AopLogDetailPage.vue @@ -0,0 +1,300 @@ + + + diff --git a/frontend/src/views/AopLogManagementPage.vue b/frontend/src/views/AopLogManagementPage.vue new file mode 100644 index 0000000..9d2e74e --- /dev/null +++ b/frontend/src/views/AopLogManagementPage.vue @@ -0,0 +1,482 @@ + + +