diff --git a/Backend/Makefile b/Backend/Makefile deleted file mode 100644 index 2a6e6e9..0000000 --- a/Backend/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -ROOT_DIR = $(shell pwd) -NAMESPACE = "default" -DEPLOY_NAME = "template-single" -DOCKER_NAME = "template-single" - -include ./hack/hack-cli.mk -include ./hack/hack.mk \ No newline at end of file diff --git a/Backend/api/containment/containment.go b/Backend/api/containment/containment.go index c9ac16e..8a222c8 100644 --- a/Backend/api/containment/containment.go +++ b/Backend/api/containment/containment.go @@ -7,7 +7,7 @@ package containment import ( "context" - "leke/api/containment/v1" + "TrangleAgent/api/containment/v1" ) type IContainmentV1 interface { diff --git a/Backend/api/containment/v1/containment.go b/Backend/api/containment/v1/containment.go index e2613f4..b15c90f 100644 --- a/Backend/api/containment/v1/containment.go +++ b/Backend/api/containment/v1/containment.go @@ -1,8 +1,8 @@ package v1 import ( - "leke/internal/model" - "leke/internal/model/response" + "TrangleAgent/internal/model" + "TrangleAgent/internal/model/response" "github.com/gogf/gf/v2/frame/g" ) diff --git a/Backend/api/department/department.go b/Backend/api/department/department.go index d475020..fa75e96 100644 --- a/Backend/api/department/department.go +++ b/Backend/api/department/department.go @@ -7,7 +7,7 @@ package department import ( "context" - "leke/api/department/v1" + "TrangleAgent/api/department/v1" ) type IDepartmentV1 interface { diff --git a/Backend/api/department/v1/department.go b/Backend/api/department/v1/department.go index 7912913..45322bd 100644 --- a/Backend/api/department/v1/department.go +++ b/Backend/api/department/v1/department.go @@ -1,7 +1,7 @@ package v1 import ( - "leke/internal/model/response" + "TrangleAgent/internal/model/response" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" diff --git a/Backend/api/forum/forum.if.go b/Backend/api/forum/forum.if.go index e4ca6bc..cde2fb6 100644 --- a/Backend/api/forum/forum.if.go +++ b/Backend/api/forum/forum.if.go @@ -7,7 +7,7 @@ package forum import ( "context" - "leke/api/forum/v1" + "TrangleAgent/api/forum/v1" ) type IForumV1 interface { diff --git a/Backend/api/forum/v1/forum_comments.go b/Backend/api/forum/v1/forum_comments.go index 5f3c67c..e74f850 100644 --- a/Backend/api/forum/v1/forum_comments.go +++ b/Backend/api/forum/v1/forum_comments.go @@ -3,7 +3,7 @@ package v1 import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" - "leke/internal/model/response" + "TrangleAgent/internal/model/response" ) // ForumCommentsCreateReq 创建评论请求 diff --git a/Backend/api/forum/v1/forum_posts.go b/Backend/api/forum/v1/forum_posts.go index 92e81d3..6727c9e 100644 --- a/Backend/api/forum/v1/forum_posts.go +++ b/Backend/api/forum/v1/forum_posts.go @@ -3,7 +3,7 @@ package v1 import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" - "leke/internal/model/response" + "TrangleAgent/internal/model/response" ) // ForumPostsCreateReq 创建帖子请求 diff --git a/Backend/api/login/login.go b/Backend/api/login/login.go index fa50815..d213d98 100644 --- a/Backend/api/login/login.go +++ b/Backend/api/login/login.go @@ -7,7 +7,7 @@ package login import ( "context" - "leke/api/login/v1" + "TrangleAgent/api/login/v1" ) type ILoginV1 interface { diff --git a/Backend/api/room/room.go b/Backend/api/room/room.go index 9cc4a15..dad6b3e 100644 --- a/Backend/api/room/room.go +++ b/Backend/api/room/room.go @@ -7,7 +7,7 @@ package room import ( "context" - "leke/api/room/v1" + "TrangleAgent/api/room/v1" ) type IRoomV1 interface { diff --git a/Backend/api/room/v1/room.go b/Backend/api/room/v1/room.go index d4df1f1..72e0115 100644 --- a/Backend/api/room/v1/room.go +++ b/Backend/api/room/v1/room.go @@ -1,8 +1,8 @@ package v1 import ( - "leke/internal/model" - "leke/internal/model/response" + "TrangleAgent/internal/model" + "TrangleAgent/internal/model/response" "github.com/gogf/gf/v2/frame/g" ) diff --git a/Backend/api/user/user.go b/Backend/api/user/user.go index 6741daf..e09fa83 100644 --- a/Backend/api/user/user.go +++ b/Backend/api/user/user.go @@ -7,7 +7,7 @@ package user import ( "context" - "leke/api/user/v1" + "TrangleAgent/api/user/v1" ) type IUserV1 interface { diff --git a/Backend/api/user/v1/fans.go b/Backend/api/user/v1/fans.go index 09a4315..8f03eb9 100644 --- a/Backend/api/user/v1/fans.go +++ b/Backend/api/user/v1/fans.go @@ -1,7 +1,7 @@ package v1 import ( - "leke/internal/model/response" + "TrangleAgent/internal/model/response" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" diff --git a/Backend/api/user/v1/role.go b/Backend/api/user/v1/role.go index 4c5c874..633b815 100644 --- a/Backend/api/user/v1/role.go +++ b/Backend/api/user/v1/role.go @@ -2,7 +2,7 @@ package v1 import ( "github.com/gogf/gf/v2/frame/g" - "leke/internal/model/response" + "TrangleAgent/internal/model/response" ) type RoleCreateReq struct { diff --git a/Backend/api/user/v1/subscribe.go b/Backend/api/user/v1/subscribe.go index dd3ebf7..f9e698f 100644 --- a/Backend/api/user/v1/subscribe.go +++ b/Backend/api/user/v1/subscribe.go @@ -1,7 +1,7 @@ package v1 import ( - "leke/internal/model/response" + "TrangleAgent/internal/model/response" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" diff --git a/Backend/api/user/v1/trace.go b/Backend/api/user/v1/trace.go index f58886b..44bc757 100644 --- a/Backend/api/user/v1/trace.go +++ b/Backend/api/user/v1/trace.go @@ -2,7 +2,7 @@ package v1 import ( "github.com/gogf/gf/v2/frame/g" - "leke/internal/model/response" + "TrangleAgent/internal/model/response" ) // TraceListReq 查询轨迹列表请求参数 diff --git a/Backend/api/user/v1/user.go b/Backend/api/user/v1/user.go index 209fe34..ec18493 100644 --- a/Backend/api/user/v1/user.go +++ b/Backend/api/user/v1/user.go @@ -1,8 +1,8 @@ package v1 import ( - "leke/internal/model" - "leke/internal/model/response" + "TrangleAgent/internal/model" + "TrangleAgent/internal/model/response" "github.com/gogf/gf/v2/frame/g" ) diff --git a/Backend/go.mod b/Backend/go.mod index 07a7ac0..9d65e7b 100644 --- a/Backend/go.mod +++ b/Backend/go.mod @@ -1,4 +1,4 @@ -module leke +module TrangleAgent go 1.24.0 diff --git a/Backend/hack/config.yaml b/Backend/hack/config.yaml index 5ba5afb..6617b04 100644 --- a/Backend/hack/config.yaml +++ b/Backend/hack/config.yaml @@ -1,5 +1,3 @@ -# CLI tool, only in development environment. -# https://goframe.org/docs/cli gfcli: gen: dao: @@ -11,3 +9,7 @@ gfcli: build: "-a amd64 -s linux -p temp -ew" tagPrefixes: - my.image.pub/my-app +server: + address: ":8000" + openapiPath: "/api.json" + swaggerPath: "/swagger" \ No newline at end of file diff --git a/Backend/internal/cmd/cmd.go b/Backend/internal/cmd/cmd.go index b983c8c..c54dc4a 100644 --- a/Backend/internal/cmd/cmd.go +++ b/Backend/internal/cmd/cmd.go @@ -1,12 +1,13 @@ package cmd import ( + "TrangleAgent/internal/controller" + "TrangleAgent/internal/controller/websocket" "context" + "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gcmd" - "leke/internal/controller" - "leke/internal/controller/websocket" ) var ( @@ -17,9 +18,15 @@ var ( Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { s := g.Server() - // ... existing code ... - // CORS 中间件 + // CORS 中间件 - 排除 swagger 和 openapi 路径 s.Use(func(r *ghttp.Request) { + // 排除 swagger 相关路径 + path := r.URL.Path + if path == "/swagger" || path == "/api.json" || path == "/swagger/" || path == "/api.json/" { + r.Middleware.Next() + return + } + r.Response.CORS(ghttp.CORSOptions{ AllowOrigin: "http://localhost:3000,http://localhost:8080", AllowMethods: "GET,POST,PUT,DELETE,OPTIONS", @@ -33,7 +40,6 @@ var ( } r.Middleware.Next() }) - // ... existing code ... // 注册 API 路由组 s.Group("/api", func(group *ghttp.RouterGroup) { @@ -44,8 +50,7 @@ var ( // 注册 WebSocket 聊天室路由(不在 /api 组下,因为 WebSocket 不需要中间件) s.BindHandler("/ws/chat", websocket.HandleChatConnections) - // 配置静态文件服务(用于提供 HTML 客户端页面) - s.SetServerRoot("resource/public") + s.SetDumpRouterMap(false) s.Run() return nil diff --git a/Backend/internal/consts/consts.go b/Backend/internal/consts/consts.go index cd9d098..aa6db54 100644 --- a/Backend/internal/consts/consts.go +++ b/Backend/internal/consts/consts.go @@ -1,5 +1,4 @@ package consts // 加盐 -const Salt = "leke" -const qa_empathy, qa_presence, qa_initiative, qa_vigor, qa_tenacity = "empathy", "presence", "initiative", "vigor", "tenacity" +const Salt = "TrangleAgent" diff --git a/Backend/internal/controller/RegisterController.go b/Backend/internal/controller/RegisterController.go index 93745f4..a80cf92 100644 --- a/Backend/internal/controller/RegisterController.go +++ b/Backend/internal/controller/RegisterController.go @@ -1,13 +1,13 @@ package controller import ( - "leke/internal/controller/containment" - "leke/internal/controller/department" - "leke/internal/controller/forum" - "leke/internal/controller/login" - "leke/internal/controller/room" - "leke/internal/controller/user" - "leke/internal/middleware" + "TrangleAgent/internal/controller/containment" + "TrangleAgent/internal/controller/department" + "TrangleAgent/internal/controller/forum" + "TrangleAgent/internal/controller/login" + "TrangleAgent/internal/controller/room" + "TrangleAgent/internal/controller/user" + "TrangleAgent/internal/middleware" "github.com/gogf/gf/v2/net/ghttp" ) diff --git a/Backend/internal/controller/containment/containment_v1_containment.go b/Backend/internal/controller/containment/containment_v1_containment.go index 923c350..e2988ff 100644 --- a/Backend/internal/controller/containment/containment_v1_containment.go +++ b/Backend/internal/controller/containment/containment_v1_containment.go @@ -2,10 +2,10 @@ package containment import ( "context" - "leke/api/containment" + "TrangleAgent/api/containment" - "leke/api/containment/v1" - "leke/internal/service" + "TrangleAgent/api/containment/v1" + "TrangleAgent/internal/service" ) // ControllerV1 控制器结构体 diff --git a/Backend/internal/controller/department/department_v1_department.go b/Backend/internal/controller/department/department_v1_department.go index c3c0da8..d635df6 100644 --- a/Backend/internal/controller/department/department_v1_department.go +++ b/Backend/internal/controller/department/department_v1_department.go @@ -3,9 +3,9 @@ package department import ( "context" - "leke/api/department" - v1 "leke/api/department/v1" - "leke/internal/service" + "TrangleAgent/api/department" + v1 "TrangleAgent/api/department/v1" + "TrangleAgent/internal/service" ) type ControllerV1 struct{} diff --git a/Backend/internal/controller/forum/forum_v1_forum_comments.go b/Backend/internal/controller/forum/forum_v1_forum_comments.go index e3f5f29..aab55b3 100644 --- a/Backend/internal/controller/forum/forum_v1_forum_comments.go +++ b/Backend/internal/controller/forum/forum_v1_forum_comments.go @@ -2,8 +2,8 @@ package forum import ( "context" - v1 "leke/api/forum/v1" - "leke/internal/service" + v1 "TrangleAgent/api/forum/v1" + "TrangleAgent/internal/service" ) // ForumCommentsCreate 创建评论 diff --git a/Backend/internal/controller/forum/forum_v1_forum_posts.go b/Backend/internal/controller/forum/forum_v1_forum_posts.go index 0298998..31d87f4 100644 --- a/Backend/internal/controller/forum/forum_v1_forum_posts.go +++ b/Backend/internal/controller/forum/forum_v1_forum_posts.go @@ -2,8 +2,8 @@ package forum import ( "context" - v1 "leke/api/forum/v1" - "leke/internal/service" + v1 "TrangleAgent/api/forum/v1" + "TrangleAgent/internal/service" ) type ControllerV1 struct{} diff --git a/Backend/internal/controller/login/login_v1_login.go b/Backend/internal/controller/login/login_v1_login.go index f40aa5e..0b64741 100644 --- a/Backend/internal/controller/login/login_v1_login.go +++ b/Backend/internal/controller/login/login_v1_login.go @@ -3,9 +3,9 @@ package login import ( "context" - "leke/api/login" - v1 "leke/api/login/v1" - "leke/internal/service" + "TrangleAgent/api/login" + v1 "TrangleAgent/api/login/v1" + "TrangleAgent/internal/service" "github.com/gogf/gf/v2/errors/gcode" "github.com/gogf/gf/v2/errors/gerror" diff --git a/Backend/internal/controller/room/room_v1_room.go b/Backend/internal/controller/room/room_v1_room.go index 771bb7d..1452146 100644 --- a/Backend/internal/controller/room/room_v1_room.go +++ b/Backend/internal/controller/room/room_v1_room.go @@ -2,9 +2,9 @@ package room import ( "context" - "leke/api/room" - v1 "leke/api/room/v1" - "leke/internal/service" + "TrangleAgent/api/room" + v1 "TrangleAgent/api/room/v1" + "TrangleAgent/internal/service" ) type ControllerV1 struct{} diff --git a/Backend/internal/controller/user/user_v1_role.go b/Backend/internal/controller/user/user_v1_role.go index e340cb4..5580e1e 100644 --- a/Backend/internal/controller/user/user_v1_role.go +++ b/Backend/internal/controller/user/user_v1_role.go @@ -3,8 +3,8 @@ package user import ( "context" - v1 "leke/api/user/v1" - "leke/internal/service" + v1 "TrangleAgent/api/user/v1" + "TrangleAgent/internal/service" ) type RoleControllerV1 struct{} diff --git a/Backend/internal/controller/user/user_v1_user.go b/Backend/internal/controller/user/user_v1_user.go index 984763e..990632b 100644 --- a/Backend/internal/controller/user/user_v1_user.go +++ b/Backend/internal/controller/user/user_v1_user.go @@ -3,8 +3,8 @@ package user import ( "context" - v1 "leke/api/user/v1" - "leke/internal/service" + v1 "TrangleAgent/api/user/v1" + "TrangleAgent/internal/service" ) type ControllerV1 struct{} diff --git a/Backend/internal/dao/coaches.go b/Backend/internal/dao/coaches.go index 4c00585..7e1826d 100644 --- a/Backend/internal/dao/coaches.go +++ b/Backend/internal/dao/coaches.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // coachesDao is the data access object for the table coaches. diff --git a/Backend/internal/dao/comments.go b/Backend/internal/dao/comments.go index d2cf281..1f34141 100644 --- a/Backend/internal/dao/comments.go +++ b/Backend/internal/dao/comments.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // commentsDao is the data access object for the table comments. diff --git a/Backend/internal/dao/containment_repo.go b/Backend/internal/dao/containment_repo.go index 532a710..7982980 100644 --- a/Backend/internal/dao/containment_repo.go +++ b/Backend/internal/dao/containment_repo.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // containmentRepoDao is the data access object for the table containment_repo. diff --git a/Backend/internal/dao/department.go b/Backend/internal/dao/department.go index 7dceee9..e2b6930 100644 --- a/Backend/internal/dao/department.go +++ b/Backend/internal/dao/department.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // departmentDao is the data access object for the table department. diff --git a/Backend/internal/dao/fans.go b/Backend/internal/dao/fans.go index 743802e..ea1c17b 100644 --- a/Backend/internal/dao/fans.go +++ b/Backend/internal/dao/fans.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // fansDao is the data access object for the table fans. diff --git a/Backend/internal/dao/forum_comments.go b/Backend/internal/dao/forum_comments.go index 778402f..cb877b8 100644 --- a/Backend/internal/dao/forum_comments.go +++ b/Backend/internal/dao/forum_comments.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // forumCommentsDao is the data access object for the table forum_comments. diff --git a/Backend/internal/dao/forum_posts.go b/Backend/internal/dao/forum_posts.go index 51a5334..b6cc8eb 100644 --- a/Backend/internal/dao/forum_posts.go +++ b/Backend/internal/dao/forum_posts.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // forumPostsDao is the data access object for the table forum_posts. diff --git a/Backend/internal/dao/group_class_enrollments.go b/Backend/internal/dao/group_class_enrollments.go index 533056d..25dbcc6 100644 --- a/Backend/internal/dao/group_class_enrollments.go +++ b/Backend/internal/dao/group_class_enrollments.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // groupClassEnrollmentsDao is the data access object for the table group_class_enrollments. diff --git a/Backend/internal/dao/group_classes.go b/Backend/internal/dao/group_classes.go index 1fd4642..30b5357 100644 --- a/Backend/internal/dao/group_classes.go +++ b/Backend/internal/dao/group_classes.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // groupClassesDao is the data access object for the table group_classes. diff --git a/Backend/internal/dao/role_cards.go b/Backend/internal/dao/role_cards.go index dc64570..7210a8c 100644 --- a/Backend/internal/dao/role_cards.go +++ b/Backend/internal/dao/role_cards.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // roleCardsDao is the data access object for the table role_cards. diff --git a/Backend/internal/dao/subscribe.go b/Backend/internal/dao/subscribe.go index 370c772..01b82b8 100644 --- a/Backend/internal/dao/subscribe.go +++ b/Backend/internal/dao/subscribe.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // subscribeDao is the data access object for the table subscribe. diff --git a/Backend/internal/dao/trpg_room.go b/Backend/internal/dao/trpg_room.go index f355d79..aa80721 100644 --- a/Backend/internal/dao/trpg_room.go +++ b/Backend/internal/dao/trpg_room.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // trpgRoomDao is the data access object for the table trpg_room. diff --git a/Backend/internal/dao/user_department.go b/Backend/internal/dao/user_department.go index dae7ea7..5327017 100644 --- a/Backend/internal/dao/user_department.go +++ b/Backend/internal/dao/user_department.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // userDepartmentDao is the data access object for the table user_department. diff --git a/Backend/internal/dao/users.go b/Backend/internal/dao/users.go index 54c8f46..68c5d2a 100644 --- a/Backend/internal/dao/users.go +++ b/Backend/internal/dao/users.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // usersDao is the data access object for the table users. diff --git a/Backend/internal/dao/workout_logs.go b/Backend/internal/dao/workout_logs.go index c566fa6..9c74666 100644 --- a/Backend/internal/dao/workout_logs.go +++ b/Backend/internal/dao/workout_logs.go @@ -5,7 +5,7 @@ package dao import ( - "leke/internal/dao/internal" + "TrangleAgent/internal/dao/internal" ) // workoutLogsDao is the data access object for the table workout_logs. diff --git a/Backend/internal/logic/ForumComments/forum_comments.go b/Backend/internal/logic/ForumComments/forum_comments.go index ecc04d5..9ac2c0a 100644 --- a/Backend/internal/logic/ForumComments/forum_comments.go +++ b/Backend/internal/logic/ForumComments/forum_comments.go @@ -5,10 +5,10 @@ import ( "errors" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" - "leke/api/forum/v1" - "leke/internal/dao" - "leke/internal/model/entity" - "leke/internal/service" + "TrangleAgent/api/forum/v1" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/model/entity" + "TrangleAgent/internal/service" ) // ForumComments 评论相关方法 diff --git a/Backend/internal/logic/ForumComments/forum_posts.go b/Backend/internal/logic/ForumComments/forum_posts.go index 8288bf2..b22fe0a 100644 --- a/Backend/internal/logic/ForumComments/forum_posts.go +++ b/Backend/internal/logic/ForumComments/forum_posts.go @@ -3,10 +3,10 @@ package ForumComments import ( "context" "errors" - "leke/api/forum/v1" - "leke/internal/dao" - "leke/internal/model/entity" - "leke/internal/service" + "TrangleAgent/api/forum/v1" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/model/entity" + "TrangleAgent/internal/service" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" diff --git a/Backend/internal/logic/containment/containment.go b/Backend/internal/logic/containment/containment.go index 08c4490..f9a6cb4 100644 --- a/Backend/internal/logic/containment/containment.go +++ b/Backend/internal/logic/containment/containment.go @@ -3,9 +3,9 @@ package containment import ( "context" "github.com/gogf/gf/v2/frame/g" - v1 "leke/api/containment/v1" - "leke/internal/model/response" - "leke/internal/service" + v1 "TrangleAgent/api/containment/v1" + "TrangleAgent/internal/model/response" + "TrangleAgent/internal/service" ) type sContainment struct{} diff --git a/Backend/internal/logic/department/department.go b/Backend/internal/logic/department/department.go index 85473b4..2bec2d3 100644 --- a/Backend/internal/logic/department/department.go +++ b/Backend/internal/logic/department/department.go @@ -2,10 +2,10 @@ package department import ( "context" - v1 "leke/api/department/v1" - "leke/internal/dao" - "leke/internal/model" - "leke/internal/service" + v1 "TrangleAgent/api/department/v1" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/model" + "TrangleAgent/internal/service" ) type sDepartment struct{} diff --git a/Backend/internal/logic/fans/fans.go b/Backend/internal/logic/fans/fans.go index e31e324..1c709a3 100644 --- a/Backend/internal/logic/fans/fans.go +++ b/Backend/internal/logic/fans/fans.go @@ -4,9 +4,9 @@ import ( "context" "github.com/gogf/gf/v2/os/gtime" - v1 "leke/api/user/v1" - "leke/internal/dao" - "leke/internal/service" + v1 "TrangleAgent/api/user/v1" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/service" ) type sFans struct{} diff --git a/Backend/internal/logic/logic.go b/Backend/internal/logic/logic.go index fb653dc..f7b3531 100644 --- a/Backend/internal/logic/logic.go +++ b/Backend/internal/logic/logic.go @@ -5,13 +5,13 @@ package logic import ( - _ "leke/internal/logic/ForumComments" - _ "leke/internal/logic/containment" - _ "leke/internal/logic/department" - _ "leke/internal/logic/fans" - _ "leke/internal/logic/login" - _ "leke/internal/logic/room" - _ "leke/internal/logic/subscribe" - _ "leke/internal/logic/trace" - _ "leke/internal/logic/user" + _ "TrangleAgent/internal/logic/ForumComments" + _ "TrangleAgent/internal/logic/containment" + _ "TrangleAgent/internal/logic/department" + _ "TrangleAgent/internal/logic/fans" + _ "TrangleAgent/internal/logic/login" + _ "TrangleAgent/internal/logic/room" + _ "TrangleAgent/internal/logic/subscribe" + _ "TrangleAgent/internal/logic/trace" + _ "TrangleAgent/internal/logic/user" ) diff --git a/Backend/internal/logic/login/login.go b/Backend/internal/logic/login/login.go index 4eb03c3..b2e4645 100644 --- a/Backend/internal/logic/login/login.go +++ b/Backend/internal/logic/login/login.go @@ -6,12 +6,12 @@ import ( "database/sql" "errors" "fmt" - v1 "leke/api/login/v1" - "leke/internal/consts" - "leke/internal/dao" - "leke/internal/middleware" - "leke/internal/model" - "leke/internal/service" + v1 "TrangleAgent/api/login/v1" + "TrangleAgent/internal/consts" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/middleware" + "TrangleAgent/internal/model" + "TrangleAgent/internal/service" "time" "github.com/gogf/gf/v2/crypto/gmd5" diff --git a/Backend/internal/logic/room/room.go b/Backend/internal/logic/room/room.go index a11aa1e..a1fa04d 100644 --- a/Backend/internal/logic/room/room.go +++ b/Backend/internal/logic/room/room.go @@ -2,11 +2,11 @@ package room import ( "context" - v1 "leke/api/room/v1" - "leke/internal/dao" - "leke/internal/model" - "leke/internal/model/entity" - "leke/internal/service" + v1 "TrangleAgent/api/room/v1" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/model" + "TrangleAgent/internal/model/entity" + "TrangleAgent/internal/service" ) type sRoom struct{} diff --git a/Backend/internal/logic/subscribe/subscribe.go b/Backend/internal/logic/subscribe/subscribe.go index 44d7068..3a22295 100644 --- a/Backend/internal/logic/subscribe/subscribe.go +++ b/Backend/internal/logic/subscribe/subscribe.go @@ -2,9 +2,9 @@ package subscribe import ( "context" - v1 "leke/api/user/v1" - "leke/internal/dao" - "leke/internal/service" + v1 "TrangleAgent/api/user/v1" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/service" "github.com/gogf/gf/v2/os/gtime" ) @@ -143,4 +143,4 @@ func (s *sSubscribe) SubscribeCreate(ctx context.Context, req *v1.SubscribeCreat } return -} \ No newline at end of file +} diff --git a/Backend/internal/logic/trace/trace.go b/Backend/internal/logic/trace/trace.go index 296eb7e..841d609 100644 --- a/Backend/internal/logic/trace/trace.go +++ b/Backend/internal/logic/trace/trace.go @@ -3,10 +3,10 @@ package trace import ( "context" "fmt" - v1 "leke/api/user/v1" - "leke/internal/dao" - "leke/internal/model/entity" - "leke/internal/service" + v1 "TrangleAgent/api/user/v1" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/model/entity" + "TrangleAgent/internal/service" "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/os/gtime" diff --git a/Backend/internal/logic/user/user.go b/Backend/internal/logic/user/user.go index 2ec751b..9c443fd 100644 --- a/Backend/internal/logic/user/user.go +++ b/Backend/internal/logic/user/user.go @@ -2,11 +2,11 @@ package user import ( "context" - v1 "leke/api/user/v1" - "leke/internal/dao" - "leke/internal/model" - "leke/internal/model/entity" - "leke/internal/service" + v1 "TrangleAgent/api/user/v1" + "TrangleAgent/internal/dao" + "TrangleAgent/internal/model" + "TrangleAgent/internal/model/entity" + "TrangleAgent/internal/service" "github.com/gogf/gf/v2/errors/gcode" "github.com/gogf/gf/v2/errors/gerror" diff --git a/Backend/internal/middleware/jwt.go b/Backend/internal/middleware/jwt.go index d197b6a..db7dac2 100644 --- a/Backend/internal/middleware/jwt.go +++ b/Backend/internal/middleware/jwt.go @@ -19,7 +19,7 @@ const ( CtxUsername gctx.StrKey = "username" // JwtSecretKey is the secret key for JWT signing and validation // Note: In production, this should be replaced with a secure key - JwtSecretKey = "leke" + JwtSecretKey = "TrangleAgent" ) // JWTAuth is a middleware that validates JWT tokens in the request header diff --git a/Backend/internal/service/containment.go b/Backend/internal/service/containment.go index afb9ea9..dac7b39 100644 --- a/Backend/internal/service/containment.go +++ b/Backend/internal/service/containment.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/containment/v1" + v1 "TrangleAgent/api/containment/v1" ) type ( diff --git a/Backend/internal/service/department.go b/Backend/internal/service/department.go index e5131ba..a1b3e9d 100644 --- a/Backend/internal/service/department.go +++ b/Backend/internal/service/department.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/department/v1" + v1 "TrangleAgent/api/department/v1" ) type ( diff --git a/Backend/internal/service/fans.go b/Backend/internal/service/fans.go index 584b29c..2b9beb5 100644 --- a/Backend/internal/service/fans.go +++ b/Backend/internal/service/fans.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/user/v1" + v1 "TrangleAgent/api/user/v1" ) type ( diff --git a/Backend/internal/service/forum_comments.go b/Backend/internal/service/forum_comments.go index fea2458..9bd359f 100644 --- a/Backend/internal/service/forum_comments.go +++ b/Backend/internal/service/forum_comments.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/forum/v1" + v1 "TrangleAgent/api/forum/v1" ) type ( diff --git a/Backend/internal/service/login.go b/Backend/internal/service/login.go index beec773..7c1d6f9 100644 --- a/Backend/internal/service/login.go +++ b/Backend/internal/service/login.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/login/v1" + v1 "TrangleAgent/api/login/v1" ) type ( diff --git a/Backend/internal/service/room.go b/Backend/internal/service/room.go index 5c85e78..bce6b9a 100644 --- a/Backend/internal/service/room.go +++ b/Backend/internal/service/room.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/room/v1" + v1 "TrangleAgent/api/room/v1" ) type ( diff --git a/Backend/internal/service/subscribe.go b/Backend/internal/service/subscribe.go index 6dfa201..be7529d 100644 --- a/Backend/internal/service/subscribe.go +++ b/Backend/internal/service/subscribe.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/user/v1" + v1 "TrangleAgent/api/user/v1" ) type ( diff --git a/Backend/internal/service/trace.go b/Backend/internal/service/trace.go index 47dc809..4c79594 100644 --- a/Backend/internal/service/trace.go +++ b/Backend/internal/service/trace.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/user/v1" + v1 "TrangleAgent/api/user/v1" ) type ( diff --git a/Backend/internal/service/user.go b/Backend/internal/service/user.go index 62d6ffa..e4bd97c 100644 --- a/Backend/internal/service/user.go +++ b/Backend/internal/service/user.go @@ -7,7 +7,7 @@ package service import ( "context" - v1 "leke/api/user/v1" + v1 "TrangleAgent/api/user/v1" ) type ( diff --git a/Backend/leke.exe b/Backend/leke.exe deleted file mode 100644 index 7bf184f..0000000 Binary files a/Backend/leke.exe and /dev/null differ diff --git a/Backend/main.go b/Backend/main.go index d50b38e..907641b 100644 --- a/Backend/main.go +++ b/Backend/main.go @@ -1,11 +1,11 @@ package main import ( - _ "leke/internal/packed" + _ "TrangleAgent/internal/packed" - _ "leke/internal/logic" + _ "TrangleAgent/internal/logic" - "leke/internal/cmd" + "TrangleAgent/internal/cmd" _ "github.com/gogf/gf/contrib/drivers/mysql/v2" "github.com/gogf/gf/v2/os/gctx" diff --git a/Backend/resource/public/broadcast.html b/Backend/resource/public/broadcast.html deleted file mode 100644 index 646d94b..0000000 --- a/Backend/resource/public/broadcast.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - WebSocket 广播测试 - - - - - - -
-

- WebSocket 广播测试 - 未连接 -

-
- 客户端ID: | 连接状态: 等待连接... -
-
-
-
- - - - -
- - 提示:打开多个浏览器窗口或标签页,在一个窗口中发送消息,所有窗口都会收到广播消息 - -
-
- - - - - diff --git a/Backend/resource/public/chatroom.html b/Backend/resource/public/chatroom.html deleted file mode 100644 index b693407..0000000 --- a/Backend/resource/public/chatroom.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - TrangleAgent - 聊天室测试 - - - - - - -
-

- TrangleAgent 聊天室测试 - 未连接 -

- -
-
- - -
-
- - -
- - -
- -
-
-
- [系统] - 等待连接到聊天室... -
-
- - -
- -
- - - - -
-
- - - - - diff --git a/Backend/resource/public/index.html b/Backend/resource/public/index.html deleted file mode 100644 index 04dbae0..0000000 --- a/Backend/resource/public/index.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - GoFrame WebSocket Echo Server - - - - - - -
-

GoFrame WebSocket Echo Server

-
-
-
-
-
-
- - - - - diff --git a/Backend/resource/public/verification_code.html b/Backend/resource/public/verification_code.html deleted file mode 100644 index 136deab..0000000 --- a/Backend/resource/public/verification_code.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - 三角机构 · 机密通行码 - - - - -
-
-
-
-
-
-
- TRIANGLE AGENCY · INTERNAL -
-
ACCESS LEVEL: REDACTED
-
- -
-
-
- TRINGLE AGNCY -
-
三角机构 · 机密通信单
-
- -
-
!
-
此邮件包含机密通行密码,仅限机构内部人员查阅。
-
- -
内部通行码 · 请勿外传
-
- 下方代码用于解锁指定散逸端终端。请在系统提示时准确输入。 -
- -
-
CONTAINMENT ACCESS CODE
-
{{.Code}}
-
- 有效期:5 分钟 · 失效后请向直属经理申请新码。 -
-
- -
- 使用前,请再次确认: -
· 您正在使用的是机构提供的终端或安全网络环境; -
· 周围无未授权人员,屏幕不可被旁人窥视; -
· 本通行码只用于当前任务,不得截图、转发或长期存储。 -
- -
- 如将本通行码泄露给三角机构外部人员, - 或被系统判定存在高风险共享行为, - 您将被立即要求前往经理办公室领取 - 1 次申戒,并记录在个人档案中。 -
- -
- 若您认为本邮件系误发或内容与任务不符,请立即与上级经理或风控部门联系, - 并在完成报告前不要尝试使用该通行码。 -
- - -
-
-
- - diff --git a/Backend/ws/client.go b/Backend/ws/client.go deleted file mode 100644 index 8a6d916..0000000 --- a/Backend/ws/client.go +++ /dev/null @@ -1,61 +0,0 @@ -package ws - -import ( - "encoding/json" - - chatmodel "leke/ws/model" - - "github.com/gogf/gf/v2/net/ghttp" -) - -// Client 表示一个在线用户的 WebSocket 连接 -// 这里只是框架:先把字段和发送逻辑搭好,读写循环可以后面慢慢加。 -type Client struct { - UserId uint64 // 当前用户ID - Nickname string // 昵称(可选) - Conn *ghttp.Request // 底层 WebSocket 连接 - - // Send 是一个发送队列:其他地方往这里丢 []byte,这个 client 的写协程负责发出去 - Send chan []byte - - // Rooms 记录当前用户加入的房间(简单用 map 做集合) - Rooms map[string]bool -} - -// NewClient 创建一个新的客户端连接对象 -func NewClient(userId uint64, nickname string, conn *ghttp.Request) *Client { - return &Client{ - UserId: userId, - Nickname: nickname, - Conn: conn, - Send: make(chan []byte, 256), // 简单先给一个缓冲,防止轻微阻塞 - Rooms: make(map[string]bool), - } -} - -// EnqueueMessage 将 ChatMessage 编码为 JSON 丢到 Send 队列 -// 真正 WriteMessage 的动作建议在一个单独的 writeLoop 里做。 -func (c *Client) EnqueueMessage(msg *chatmodel.ChatMessage) error { - // 如果需要,补一些默认字段 - if msg.FromUserId == 0 { - msg.FromUserId = c.UserId - } - if msg.FromNickname == "" { - msg.FromNickname = c.Nickname - } - - data, err := json.Marshal(msg) - if err != nil { - return err - } - - select { - case c.Send <- data: - // 正常入队 - default: - // 队列满了,可以考虑:丢弃 / 断开连接 / 打日志 - // 这里简单选择丢弃,并返回错误 - return ErrSendQueueFull - } - return nil -} diff --git a/Backend/ws/dos/readme.md b/Backend/ws/dos/readme.md deleted file mode 100644 index 986c84b..0000000 --- a/Backend/ws/dos/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -### ChatMessage (服务端 → 客户端) - -```json -{ - "type": "world | room | private | system", - "subType": "message | user_join | user_leave | room_created", - "fromUserId": 123, - "fromNickname": "某某", - "roomId": "xxx", - "content": "xxx", - "time": "2025-12-08T12:34:56" -} - -**这里的“放在哪里”** 👉 放在你的项目文档里,用来说明“聊天协议”。 - ---- - -## 总结一句人话版 - -这个 JSON **不是一个要单独存起来的文件**,而是你聊天系统里「**一条消息长什么样**」的**约定**: - -- 在前端:定义成一个 TypeScript interface / JSDoc 类型,用来写 WebSocket 的 `send` 和 `onmessage`。 -- 在后端:定义成一个 Go struct,用来 `json.Unmarshal` / `json.Marshal`。 -- 在文档:写在一个协议文档里,提醒自己和队友“所有聊天消息都按这个格式来”。 - -你下一步如果愿意,我可以帮你把「前端消息类型定义 + 后端 struct + 一条从前端发到后端再广播出去的完整流程图」给你画成一个“数据流思路”,方便你对着实现。 diff --git a/Backend/ws/errors.go b/Backend/ws/errors.go deleted file mode 100644 index d32bf0d..0000000 --- a/Backend/ws/errors.go +++ /dev/null @@ -1,7 +0,0 @@ -package ws - -import "errors" - -var ( - ErrSendQueueFull = errors.New("客户端队列堵塞") -) diff --git a/Backend/ws/hub.go b/Backend/ws/hub.go deleted file mode 100644 index bc4dfce..0000000 --- a/Backend/ws/hub.go +++ /dev/null @@ -1,132 +0,0 @@ -package ws - -import ( - "sync" - - chatmodel "leke/ws/model" // 按实际路径修改 -) - -// Hub 聊天中枢:管理所有连接和房间 -type Hub struct { - mu sync.RWMutex - - // 所有在线用户:userId -> Client - clients map[uint64]*Client - - // 房间成员:roomId -> (userId -> Client) - rooms map[string]map[uint64]*Client -} - -// 全局唯一 Hub(简单起见用一个全局变量) -var ChatHub = NewHub() - -// NewHub 创建一个新的 Hub 实例 -func NewHub() *Hub { - return &Hub{ - clients: make(map[uint64]*Client), - rooms: make(map[string]map[uint64]*Client), - } -} - -// Register 注册新连接 -func (h *Hub) Register(c *Client) { - h.mu.Lock() - defer h.mu.Unlock() - - h.clients[c.UserId] = c - // 默认认为所有在线用户都在世界频道,这里你可以根据需要扩展 -} - -// Unregister 移除连接(断线/退出) -func (h *Hub) Unregister(c *Client) { - h.mu.Lock() - defer h.mu.Unlock() - - delete(h.clients, c.UserId) - - // 同时把他从所有房间移除 - for roomId, members := range h.rooms { - if _, ok := members[c.UserId]; ok { - delete(members, c.UserId) - if len(members) == 0 { - delete(h.rooms, roomId) - } - } - } -} - -// JoinRoom 加入房间 -func (h *Hub) JoinRoom(userId uint64, roomId string) { - h.mu.Lock() - defer h.mu.Unlock() - - client, ok := h.clients[userId] - if !ok { - return - } - - members, ok := h.rooms[roomId] - if !ok { - members = make(map[uint64]*Client) - h.rooms[roomId] = members - } - members[userId] = client - client.Rooms[roomId] = true -} - -// LeaveRoom 离开房间 -func (h *Hub) LeaveRoom(userId uint64, roomId string) { - h.mu.Lock() - defer h.mu.Unlock() - - client, ok := h.clients[userId] - if !ok { - return - } - - if members, ok := h.rooms[roomId]; ok { - delete(members, userId) - if len(members) == 0 { - delete(h.rooms, roomId) - } - } - delete(client.Rooms, roomId) -} - -// BroadcastWorld 向所有在线用户发送世界频道消息 -func (h *Hub) BroadcastWorld(msg *chatmodel.ChatMessage) { - h.mu.RLock() - defer h.mu.RUnlock() - - for _, client := range h.clients { - _ = client.EnqueueMessage(msg) - } -} - -// BroadcastRoom 向房间内所有用户发送消息 -func (h *Hub) BroadcastRoom(roomId string, msg *chatmodel.ChatMessage) { - h.mu.RLock() - defer h.mu.RUnlock() - - members, ok := h.rooms[roomId] - if !ok { - return - } - for _, client := range members { - _ = client.EnqueueMessage(msg) - } -} - -// SendPrivate 发送私聊消息 -func (h *Hub) SendPrivate(fromUserId, toUserId uint64, msg *chatmodel.ChatMessage) { - h.mu.RLock() - defer h.mu.RUnlock() - - toClient, ok := h.clients[toUserId] - if !ok { - return // 对方不在线,可以后面扩展:离线消息存DB - } - - msg.FromUserId = fromUserId - _ = toClient.EnqueueMessage(msg) -} diff --git a/Backend/ws/model/chat_message.go b/Backend/ws/model/chat_message.go deleted file mode 100644 index a6464b4..0000000 --- a/Backend/ws/model/chat_message.go +++ /dev/null @@ -1,34 +0,0 @@ -package model - -// MessageType 消息的大类:发到哪里 -type MessageType string - -const ( - TypeWorld MessageType = "world" // 世界频道 - TypeRoom MessageType = "room" // 房间 - TypePrivate MessageType = "private" // 私聊 - TypeSystem MessageType = "system" // 系统消息(如通知、提示等) -) - -// MessageAction 消息的动作:干什么事 -type MessageAction string - -const ( - ActionSend MessageAction = "send" // 发送聊天消息 - ActionJoinRoom MessageAction = "join_room" // 加入房间 - ActionLeaveRoom MessageAction = "leave_room" // 离开房间 - ActionCreateRoom MessageAction = "create_room" // 创建房间(也可以走 HTTP) -) - -// ChatMessage WebSocket 收/发的统一结构 -// 前端和后端都按这个结构来编码/解码 JSON。 -type ChatMessage struct { - Type MessageType `json:"type"` // 消息类型:world/room/private/system - Action MessageAction `json:"action"` // 动作:send/join_room/leave_room... - FromUserId uint64 `json:"fromUserId,omitempty"` // 发送者用户ID - FromNickname string `json:"fromNickname,omitempty"` // 发送者昵称 - RoomId string `json:"roomId,omitempty"` // 房间ID(房间消息时使用) - ToUserId uint64 `json:"toUserId,omitempty"` // 目标用户ID(私聊时使用) - Content string `json:"content,omitempty"` // 文本内容 - Time string `json:"time,omitempty"` // 时间(ISO字符串,前期用 string 即可) -} diff --git a/Frontend/.gitignore b/Frontend/.gitignore index c3c35fc..a547bf3 100644 --- a/Frontend/.gitignore +++ b/Frontend/.gitignore @@ -1,14 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + node_modules dist -.DS_Store -*.log -.vscode +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json .idea - - - - - - - - +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Frontend/.vscode/extensions.json b/Frontend/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/Frontend/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/Frontend/QUICKSTART.md b/Frontend/QUICKSTART.md deleted file mode 100644 index 358c043..0000000 --- a/Frontend/QUICKSTART.md +++ /dev/null @@ -1,142 +0,0 @@ -# 快速开始指南 - -## 安装和运行 - -1. **安装依赖** - ```bash - npm install - ``` - -2. **启动开发服务器** - ```bash - npm run dev - ``` - -3. **访问应用** - 浏览器会自动打开 http://localhost:3000 - -## 使用流程 - -### 第一步:注册账号 -1. 访问登录页面,点击"还没有账号?立即注册" -2. 填写账号、密码、确认密码和姓名 -3. 点击注册,自动登录并跳转到主页 - -### 第二步:创建或加入房间 -**创建房间:** -1. 在主页"创建房间"卡片中,输入房间名称 -2. 点击"创建房间"按钮 -3. 自动进入房间,成为主持人 - -**加入房间:** -1. 在主页"加入房间"卡片中,输入房间号 -2. 点击"加入房间"按钮 -3. 自动进入房间,成为玩家 - -### 第三步:使用骰子系统 - -**玩家初始投掷(4个D4):** -1. 进入房间后,玩家会看到"玩家初始投掷(4个D4)"区域 -2. 点击"投掷4个D4"按钮 -3. 查看投掷结果,显示4个骰子的值 -4. 如果3的数量少于3个: - - 可以输入消耗的属性值来增加3的数量 - - 如果最终达到3个3,不会产生混沌值 - - 否则,每个不是3的D4会产生1点混沌值 -5. 点击"确认投掷结果"完成初始投掷 - -**普通投掷:** -- 在"选择骰子类型"区域,点击对应的骰子按钮(D3/D4/D6/D12/D20) -- 投掷结果会显示在投掷历史中 - -**混沌值管理(仅主持人):** -- 混沌值显示在页面顶部,所有人可见 -- 主持人可以点击"消耗混沌值"按钮来消耗混沌值 - -### 第四步:总部/分部管理 - -1. 在主页点击"总部/分部管理" -2. **创建分部**(需要经理权限): - - 点击"创建分部"按钮 - - 填写分部名称和负责人 - - 点击确定 -3. **发布招聘信息**(需要经理权限): - - 在右侧"招聘信息"卡片中,点击"发布招聘" - - 填写标题和内容 - - 点击确定 -4. **查看分部信息**: - - 点击分部列表中的"查看详情" - - 可以看到该分部的天气、散一端等信息 - -### 第五步:异常管理 - -1. 在主页点击"异常管理" -2. **添加异常**: - - 点击"添加异常"按钮 - - 填写异常信息: - - 异常名称 - - 类型(实体/概念/地点/现象) - - 特殊能力 - - 焦点 - - 领域(现实/记忆/时间/空间/生命/死亡/知识/情感) - - 点击确定 -3. **收容异常**: - - 在"未收容异常"列表中,点击"收容"按钮 - - 异常会移动到"已收容异常"列表 -4. **解决异常**: - - 在"已收容异常"列表中,点击"标记为已解决" - - 异常会移动到"已解决异常"列表 -5. **设置天气**: - - 在"天气系统"卡片中,输入天气信息 - - 点击"设置天气"按钮 - -## 功能说明 - -### 混沌值规则(TRTC三角洲机构规则) - -1. **初始投掷规则**: - - 玩家开始时必须投掷4个D4 - - 如果投出的4个D4中,3的数量达到3个(可通过消耗属性值达到),则不会产生混沌值 - - 如果3的数量少于3个,每个不是3的D4会产生1点混沌值 - -2. **混沌值显示**: - - 混沌值显示在房间页面顶部,所有玩家可见 - - 只有主持人可以消耗混沌值 - -3. **普通投掷**: - - 普通投掷不会自动产生混沌值(除非特殊规则) - -### 数据存储 - -- 当前版本使用浏览器的localStorage进行数据存储 -- 所有数据保存在本地浏览器中 -- 刷新页面后数据会保留 -- 清除浏览器数据会丢失所有信息 - -## 注意事项 - -1. **房间号分享**:创建房间后,可以点击"复制房间号"按钮分享给其他玩家 -2. **角色权限**: - - 主持人:可以消耗混沌值 - - 玩家:可以投掷骰子,但不能消耗混沌值 - - 经理:可以创建分部、发布招聘信息 -3. **数据同步**:当前版本是纯前端应用,多个浏览器标签页之间的数据不会实时同步 - -## 常见问题 - -**Q: 如何切换账号?** -A: 点击右上角"退出"按钮,然后使用其他账号登录。 - -**Q: 房间数据会丢失吗?** -A: 数据保存在浏览器localStorage中,除非清除浏览器数据,否则不会丢失。 - -**Q: 可以多人同时使用吗?** -A: 当前版本是纯前端,多人使用时需要各自在浏览器中操作,数据不会实时同步。如需实时同步,需要集成WebSocket或后端API。 - - - - - - - - diff --git a/Frontend/README.md b/Frontend/README.md index 7b13ffb..1511959 100644 --- a/Frontend/README.md +++ b/Frontend/README.md @@ -1,140 +1,5 @@ -# 三角洲机构 - TRPG跑团在线工具 +# Vue 3 + Vite -基于Vue3 + Ant Design Vue构建的TRPG跑团在线工具网站,遵循TRTC三角洲机构规则。 - -## 功能特性 - -### 用户系统 -- 用户注册/登录(账号、密码、姓名) -- 用户信息管理 - -### 房间系统 -- 创建房间,房间号可分享 -- 加入房间(通过房间号) -- 房间内角色:主持人(Host)和玩家(PL) -- 房间信息展示 - -### 骰子系统 -- 支持常见骰子:D3、D4、D6、D12、D20 -- 玩家初始投掷:4个D4 -- **混沌值机制**: - - 每个不是3的D4给主持人加1点混沌值 - - 玩家投出3个3(可通过消耗属性值达到)不会产生混沌值 - - 每个不是3的骰子都会变成混沌值 - - 混沌值所有人可见 - - 主持人可以消耗混沌值 -- 投掷历史记录 - -### 总部/分部管理系统 -- 创建分部 -- 解散分部 -- 发布招聘信息(经理权限) -- 查看招聘信息(所有分部成员) -- 分部信息管理(散一端、天气系统) - -### 异常管理系统 -- 添加异常(名称、类型、特殊能力、焦点、领域) -- 异常收容 -- 异常解决 -- 异常分类:未收容、已收容、已解决 -- 天气系统设置 -- 散一端管理 - -## 技术栈 - -- Vue 3 (Composition API) -- Ant Design Vue 4.x -- Vue Router 4 -- Pinia (状态管理) -- Vite (构建工具) - -## 项目结构 - -``` -src/ -├── views/ # 页面组件 -│ ├── Login.vue # 登录页 -│ ├── Register.vue # 注册页 -│ ├── Home.vue # 主页 -│ ├── Room.vue # 房间页 -│ ├── Organization.vue # 总部/分部管理 -│ └── Anomaly.vue # 异常管理 -├── stores/ # Pinia状态管理 -│ ├── user.js # 用户状态 -│ ├── room.js # 房间状态 -│ ├── organization.js # 组织状态 -│ └── anomaly.js # 异常状态 -├── router/ # 路由配置 -├── utils/ # 工具函数 -└── main.js # 入口文件 -``` - -## 快速开始 - -### 安装依赖 - -```bash -npm install -``` - -### 开发运行 - -```bash -npm run dev -``` - -访问 http://localhost:3000 - -### 构建生产版本 - -```bash -npm run build -``` - -## 使用说明 - -### 1. 注册/登录 -- 首次使用需要注册账号(账号、密码、姓名) -- 注册成功后自动登录 - -### 2. 创建/加入房间 -- 在主页可以创建新房间或通过房间号加入现有房间 -- 创建房间后自动成为主持人 -- 房间号可以分享给其他玩家 - -### 3. 使用骰子系统 -- **玩家初始投掷**:进入房间后,玩家可以投掷4个D4 -- **混沌值规则**: - - 如果投出的4个D4中,3的数量少于3个,会产生混沌值 - - 玩家可以通过消耗属性值来增加3的数量 - - 如果最终达到3个3,则不会产生混沌值 - - 每个不是3的D4会产生1点混沌值 -- **普通投掷**:可以选择D3/D4/D6/D12/D20进行投掷 -- **消耗混沌值**:只有主持人可以消耗混沌值 - -### 4. 总部/分部管理 -- 经理可以创建分部、发布招聘信息 -- 所有成员可以查看招聘信息 -- 每个分部可以设置天气和散一端 - -### 5. 异常管理 -- 添加异常时需要填写:名称、类型、特殊能力、焦点、领域 -- 异常类型:实体、概念、地点、现象 -- 异常领域:现实、记忆、时间、空间、生命、死亡、知识、情感 -- 异常状态流转:未收容 → 已收容 → 已解决 - -## 注意事项 - -- 当前版本使用localStorage进行数据存储(纯前端) -- 刷新页面后数据会保留 -- 如需后端支持,需要对接相应的API接口 - -## 开发计划 - -- [ ] WebSocket实时通信 -- [ ] 后端API集成 -- [ ] 数据持久化 -- [ ] 更多骰子类型和规则 -- [ ] 角色属性管理 -- [ ] 跑团记录导出 +This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` - - - - - - - - diff --git a/Frontend/package-lock.json b/Frontend/package-lock.json index e8b87e9..9485413 100644 --- a/Frontend/package-lock.json +++ b/Frontend/package-lock.json @@ -1,24 +1,22 @@ { - "name": "trangle-agent", - "version": "1.0.0", + "name": "trangleagent", + "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "trangle-agent", - "version": "1.0.0", + "name": "trangleagent", + "version": "0.0.0", "dependencies": { "@ant-design/icons-vue": "^7.0.1", - "ant-design-vue": "^4.2.1", - "axios": "^1.6.7", - "pinia": "^2.1.7", - "vue": "^3.4.21", - "vue-router": "^4.3.0" + "ant-design-vue": "^4.2.6", + "axios": "^1.7.9", + "vue": "^3.5.24", + "vue-router": "^4.4.5" }, "devDependencies": { - "@vitejs/plugin-vue": "^5.0.4", - "sass": "^1.71.1", - "vite": "^5.1.4" + "@vitejs/plugin-vue": "^6.0.1", + "vite": "^7.2.4" } }, "node_modules/@ant-design/colors": { @@ -126,9 +124,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -139,13 +137,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -156,13 +154,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -173,13 +171,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -190,13 +188,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -207,13 +205,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -224,13 +222,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -241,13 +239,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -258,13 +256,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -275,13 +273,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -292,13 +290,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -309,13 +307,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -326,13 +324,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -343,13 +341,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -360,13 +358,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -377,13 +375,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -394,13 +392,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -411,13 +409,30 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -428,13 +443,30 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -445,13 +477,30 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -462,13 +511,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -479,13 +528,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -496,13 +545,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -513,7 +562,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -522,315 +571,12 @@ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.50.tgz", + "integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.53.3", @@ -1158,53 +904,56 @@ "license": "MIT" }, "node_modules/@vitejs/plugin-vue": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", - "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.2.tgz", + "integrity": "sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==", "dev": true, "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.50" + }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", "vue": "^3.2.25" } }, "node_modules/@vue/compiler-core": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.24.tgz", - "integrity": "sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.25.tgz", + "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", "license": "MIT", "dependencies": { "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.24", + "@vue/shared": "3.5.25", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.24.tgz", - "integrity": "sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz", + "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.24", - "@vue/shared": "3.5.24" + "@vue/compiler-core": "3.5.25", + "@vue/shared": "3.5.25" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.24.tgz", - "integrity": "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz", + "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==", "license": "MIT", "dependencies": { "@babel/parser": "^7.28.5", - "@vue/compiler-core": "3.5.24", - "@vue/compiler-dom": "3.5.24", - "@vue/compiler-ssr": "3.5.24", - "@vue/shared": "3.5.24", + "@vue/compiler-core": "3.5.25", + "@vue/compiler-dom": "3.5.25", + "@vue/compiler-ssr": "3.5.25", + "@vue/shared": "3.5.25", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", @@ -1212,13 +961,13 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.24.tgz", - "integrity": "sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz", + "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.24", - "@vue/shared": "3.5.24" + "@vue/compiler-dom": "3.5.25", + "@vue/shared": "3.5.25" } }, "node_modules/@vue/devtools-api": { @@ -1228,53 +977,53 @@ "license": "MIT" }, "node_modules/@vue/reactivity": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.24.tgz", - "integrity": "sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.25.tgz", + "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==", "license": "MIT", "dependencies": { - "@vue/shared": "3.5.24" + "@vue/shared": "3.5.25" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.24.tgz", - "integrity": "sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.25.tgz", + "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.24", - "@vue/shared": "3.5.24" + "@vue/reactivity": "3.5.25", + "@vue/shared": "3.5.25" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.24.tgz", - "integrity": "sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz", + "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.24", - "@vue/runtime-core": "3.5.24", - "@vue/shared": "3.5.24", + "@vue/reactivity": "3.5.25", + "@vue/runtime-core": "3.5.25", + "@vue/shared": "3.5.25", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.24.tgz", - "integrity": "sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.25.tgz", + "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==", "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.24", - "@vue/shared": "3.5.24" + "@vue/compiler-ssr": "3.5.25", + "@vue/shared": "3.5.25" }, "peerDependencies": { - "vue": "3.5.24" + "vue": "3.5.25" } }, "node_modules/@vue/shared": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.24.tgz", - "integrity": "sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz", + "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", "license": "MIT" }, "node_modules/ant-design-vue": { @@ -1346,20 +1095,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -1373,22 +1108,6 @@ "node": ">= 0.4" } }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1439,20 +1158,6 @@ "node": ">=0.4.0" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/dom-align": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", @@ -1537,9 +1242,9 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1547,32 +1252,35 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/estree-walker": { @@ -1581,18 +1289,22 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "license": "MIT" }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, "node_modules/follow-redirects": { @@ -1743,49 +1455,6 @@ "node": ">= 0.4" } }, - "node_modules/immutable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", - "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/is-plain-object": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", @@ -1843,21 +1512,6 @@ "node": ">= 0.4" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -1903,14 +1557,6 @@ "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==", "license": "MIT" }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -1918,41 +1564,18 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pinia": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", - "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.3", - "vue-demi": "^0.14.10" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "typescript": ">=4.4.4", - "vue": "^2.7.0 || ^3.5.11" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -1987,20 +1610,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", @@ -2049,27 +1658,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/sass": { - "version": "1.94.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.94.2.tgz", - "integrity": "sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, "node_modules/scroll-into-view-if-needed": { "version": "2.2.31", "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", @@ -2109,36 +1697,42 @@ "node": ">=12.22" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "is-number": "^7.0.0" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=8.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "version": "7.2.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.7.tgz", + "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -2147,19 +1741,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -2180,20 +1780,26 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, "node_modules/vue": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.24.tgz", - "integrity": "sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz", + "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.24", - "@vue/compiler-sfc": "3.5.24", - "@vue/runtime-dom": "3.5.24", - "@vue/server-renderer": "3.5.24", - "@vue/shared": "3.5.24" + "@vue/compiler-dom": "3.5.25", + "@vue/compiler-sfc": "3.5.25", + "@vue/runtime-dom": "3.5.25", + "@vue/server-renderer": "3.5.25", + "@vue/shared": "3.5.25" }, "peerDependencies": { "typescript": "*" @@ -2204,32 +1810,6 @@ } } }, - "node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, "node_modules/vue-router": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz", diff --git a/Frontend/package.json b/Frontend/package.json index b4b9c21..b0219e4 100644 --- a/Frontend/package.json +++ b/Frontend/package.json @@ -1,32 +1,23 @@ { - "name": "trangle-agent", - "version": "1.0.0", - "description": "TRPG跑团在线工具网站 - 三角洲机构", + "name": "trangleagent", + "private": true, + "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "swagger:generate": "zerone api -p ./src/api" }, "dependencies": { - "vue": "^3.4.21", - "vue-router": "^4.3.0", - "pinia": "^2.1.7", - "ant-design-vue": "^4.2.1", "@ant-design/icons-vue": "^7.0.1", - "axios": "^1.6.7" + "ant-design-vue": "^4.2.6", + "axios": "^1.7.9", + "vue": "^3.5.24", + "vue-router": "^4.4.5" }, "devDependencies": { - "@vitejs/plugin-vue": "^5.0.4", - "vite": "^5.1.4", - "sass": "^1.71.1" + "@vitejs/plugin-vue": "^6.0.1", + "vite": "^7.2.4" } -} - - - - - - - - +} \ No newline at end of file diff --git a/Frontend/public/File/Blue/A7.png b/Frontend/public/File/Blue/A7.png new file mode 100644 index 0000000..754cda5 Binary files /dev/null and b/Frontend/public/File/Blue/A7.png differ diff --git a/Frontend/public/File/Blue/G8.png b/Frontend/public/File/Blue/G8.png new file mode 100644 index 0000000..85be4f4 Binary files /dev/null and b/Frontend/public/File/Blue/G8.png differ diff --git a/Frontend/public/File/Blue/H3.png b/Frontend/public/File/Blue/H3.png new file mode 100644 index 0000000..13b3dc9 Binary files /dev/null and b/Frontend/public/File/Blue/H3.png differ diff --git a/Frontend/public/File/Blue/H4-2.png b/Frontend/public/File/Blue/H4-2.png new file mode 100644 index 0000000..454157e Binary files /dev/null and b/Frontend/public/File/Blue/H4-2.png differ diff --git a/Frontend/public/File/Blue/H4.png b/Frontend/public/File/Blue/H4.png new file mode 100644 index 0000000..ad802da Binary files /dev/null and b/Frontend/public/File/Blue/H4.png differ diff --git a/Frontend/public/File/Blue/L10-O8.png b/Frontend/public/File/Blue/L10-O8.png new file mode 100644 index 0000000..23f88d3 Binary files /dev/null and b/Frontend/public/File/Blue/L10-O8.png differ diff --git a/Frontend/public/File/Blue/L10.png b/Frontend/public/File/Blue/L10.png new file mode 100644 index 0000000..3f386bb Binary files /dev/null and b/Frontend/public/File/Blue/L10.png differ diff --git a/Frontend/public/File/Blue/N1.png b/Frontend/public/File/Blue/N1.png new file mode 100644 index 0000000..2a25352 Binary files /dev/null and b/Frontend/public/File/Blue/N1.png differ diff --git a/Frontend/public/File/Blue/Q2.png b/Frontend/public/File/Blue/Q2.png new file mode 100644 index 0000000..71c4eed Binary files /dev/null and b/Frontend/public/File/Blue/Q2.png differ diff --git a/Frontend/public/File/Blue/U2.png b/Frontend/public/File/Blue/U2.png new file mode 100644 index 0000000..b2fa125 Binary files /dev/null and b/Frontend/public/File/Blue/U2.png differ diff --git a/Frontend/public/File/Blue/X1.png b/Frontend/public/File/Blue/X1.png new file mode 100644 index 0000000..13b9163 Binary files /dev/null and b/Frontend/public/File/Blue/X1.png differ diff --git a/Frontend/public/File/Blue/X2.png b/Frontend/public/File/Blue/X2.png new file mode 100644 index 0000000..41ed8e7 Binary files /dev/null and b/Frontend/public/File/Blue/X2.png differ diff --git a/Frontend/public/File/Blue/Z1.png b/Frontend/public/File/Blue/Z1.png new file mode 100644 index 0000000..581560a Binary files /dev/null and b/Frontend/public/File/Blue/Z1.png differ diff --git a/Frontend/public/File/Red/A3.png b/Frontend/public/File/Red/A3.png new file mode 100644 index 0000000..0463c39 Binary files /dev/null and b/Frontend/public/File/Red/A3.png differ diff --git a/Frontend/public/File/Red/D4.png b/Frontend/public/File/Red/D4.png new file mode 100644 index 0000000..20eb434 Binary files /dev/null and b/Frontend/public/File/Red/D4.png differ diff --git a/Frontend/public/File/Red/G3.png b/Frontend/public/File/Red/G3.png new file mode 100644 index 0000000..8ebb2b5 Binary files /dev/null and b/Frontend/public/File/Red/G3.png differ diff --git a/Frontend/public/File/Red/J2退休.png b/Frontend/public/File/Red/J2退休.png new file mode 100644 index 0000000..e01849f Binary files /dev/null and b/Frontend/public/File/Red/J2退休.png differ diff --git a/Frontend/public/File/Red/J3.png b/Frontend/public/File/Red/J3.png new file mode 100644 index 0000000..51df242 Binary files /dev/null and b/Frontend/public/File/Red/J3.png differ diff --git a/Frontend/public/File/Red/N3.png b/Frontend/public/File/Red/N3.png new file mode 100644 index 0000000..7dd484c Binary files /dev/null and b/Frontend/public/File/Red/N3.png differ diff --git a/Frontend/public/File/Red/Q3.png b/Frontend/public/File/Red/Q3.png new file mode 100644 index 0000000..dbbc667 Binary files /dev/null and b/Frontend/public/File/Red/Q3.png differ diff --git a/Frontend/public/File/Red/T3.png b/Frontend/public/File/Red/T3.png new file mode 100644 index 0000000..c953a93 Binary files /dev/null and b/Frontend/public/File/Red/T3.png differ diff --git a/Frontend/public/File/Red/T7.png b/Frontend/public/File/Red/T7.png new file mode 100644 index 0000000..14fa5ca Binary files /dev/null and b/Frontend/public/File/Red/T7.png differ diff --git a/Frontend/public/File/Red/W8-2.png b/Frontend/public/File/Red/W8-2.png new file mode 100644 index 0000000..011f232 Binary files /dev/null and b/Frontend/public/File/Red/W8-2.png differ diff --git a/Frontend/public/File/Red/W8.png b/Frontend/public/File/Red/W8.png new file mode 100644 index 0000000..031a7e4 Binary files /dev/null and b/Frontend/public/File/Red/W8.png differ diff --git a/Frontend/public/File/Red/Y2.png b/Frontend/public/File/Red/Y2.png new file mode 100644 index 0000000..b80e003 Binary files /dev/null and b/Frontend/public/File/Red/Y2.png differ diff --git a/Frontend/public/File/Red/Z3.png b/Frontend/public/File/Red/Z3.png new file mode 100644 index 0000000..3883f6d Binary files /dev/null and b/Frontend/public/File/Red/Z3.png differ diff --git a/Frontend/public/File/Yellow/C4.png b/Frontend/public/File/Yellow/C4.png new file mode 100644 index 0000000..54c5b0c Binary files /dev/null and b/Frontend/public/File/Yellow/C4.png differ diff --git a/Frontend/public/File/Yellow/E2.png b/Frontend/public/File/Yellow/E2.png new file mode 100644 index 0000000..8663923 Binary files /dev/null and b/Frontend/public/File/Yellow/E2.png differ diff --git a/Frontend/public/File/Yellow/E3.png b/Frontend/public/File/Yellow/E3.png new file mode 100644 index 0000000..26b7a73 Binary files /dev/null and b/Frontend/public/File/Yellow/E3.png differ diff --git a/Frontend/public/File/Yellow/H5.png b/Frontend/public/File/Yellow/H5.png new file mode 100644 index 0000000..8fbdc43 Binary files /dev/null and b/Frontend/public/File/Yellow/H5.png differ diff --git a/Frontend/public/File/Yellow/L11.png b/Frontend/public/File/Yellow/L11.png new file mode 100644 index 0000000..2c726b1 Binary files /dev/null and b/Frontend/public/File/Yellow/L11.png differ diff --git a/Frontend/public/File/Yellow/N2.png b/Frontend/public/File/Yellow/N2.png new file mode 100644 index 0000000..4244fd6 Binary files /dev/null and b/Frontend/public/File/Yellow/N2.png differ diff --git a/Frontend/public/File/Yellow/O4.png b/Frontend/public/File/Yellow/O4.png new file mode 100644 index 0000000..6af95b8 Binary files /dev/null and b/Frontend/public/File/Yellow/O4.png differ diff --git a/Frontend/public/File/Yellow/T6.png b/Frontend/public/File/Yellow/T6.png new file mode 100644 index 0000000..e467320 Binary files /dev/null and b/Frontend/public/File/Yellow/T6.png differ diff --git a/Frontend/public/File/Yellow/V2.png b/Frontend/public/File/Yellow/V2.png new file mode 100644 index 0000000..5860d1a Binary files /dev/null and b/Frontend/public/File/Yellow/V2.png differ diff --git a/Frontend/public/File/Yellow/X3.png b/Frontend/public/File/Yellow/X3.png new file mode 100644 index 0000000..11ff54d Binary files /dev/null and b/Frontend/public/File/Yellow/X3.png differ diff --git a/Frontend/public/File/Yellow/Z2.png b/Frontend/public/File/Yellow/Z2.png new file mode 100644 index 0000000..87df456 Binary files /dev/null and b/Frontend/public/File/Yellow/Z2.png differ diff --git a/Frontend/public/vite.svg b/Frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/Frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Frontend/src/App.vue b/Frontend/src/App.vue index b9e99a8..7c2aa3f 100644 --- a/Frontend/src/App.vue +++ b/Frontend/src/App.vue @@ -1,35 +1,3 @@ - - - - - - - - - - - - diff --git a/Frontend/src/api/README.md b/Frontend/src/api/README.md new file mode 100644 index 0000000..210fc9d --- /dev/null +++ b/Frontend/src/api/README.md @@ -0,0 +1,55 @@ +# Swagger 文档自动生成配置说明 + +本文档介绍了如何使用 Swagger/OpenAPI 文档自动生成 TypeScript 接口和服务代码。 + +## 安装全局 CLI 工具 + +```bash +npm install -g @zeronejs/cli +``` + +## 配置文件 + +在项目中创建 `swagger.config.json` 文件: + +```json +{ + "docsUrl": "./docs.json", + "axiosInstanceUrl": "./src/api/http.js" +} +``` + +其中: +- `docsUrl`: 指向 Swagger 的 JSON 文档地址,可以是远程 URL 或本地文件路径 +- `axiosInstanceUrl`: 指向项目中 Axios 实例的位置 + +## 使用方法 + +### 生成 TypeScript 代码 + +```bash +# 在项目根目录执行 +zerone api + +# 或者指定特定路径 +zerone api -p ./src/api +``` + +### 生成 JavaScript 代码 + +```bash +# 生成 JS 代码(基于 axios) +zerone api -js + +# 指定路径生成 JS 代码 +zerone api -js -p ./src/api +``` + +## 项目结构 + +生成的代码将包含以下内容: + +1. `interface/` - 包含所有从 Swagger 模式生成的 TypeScript 接口定义 +2. `controller/` - 包含基于 API 路径生成的服务函数 + +这些生成的代码具有完整的 TypeScript 类型支持和 IDE 代码提示功能。 \ No newline at end of file diff --git a/Frontend/src/api/auth.js b/Frontend/src/api/auth.js new file mode 100644 index 0000000..79c5135 --- /dev/null +++ b/Frontend/src/api/auth.js @@ -0,0 +1,8 @@ +import http from './http' + +export const login = (data) => http.post('/login', data) +export const register = (data) => http.post('/register', data) +export const loginByEmail = (data) => http.post('/login/email', data) +export const registerByEmail = (data) => http.post('/register/email', data) +export const sendEmailCode = (data) => http.post('/email/send-code', data) + diff --git a/Frontend/src/api/controller/Containment/deleteApiContainmentDelete.ts b/Frontend/src/api/controller/Containment/deleteApiContainmentDelete.ts new file mode 100644 index 0000000..f9f054b --- /dev/null +++ b/Frontend/src/api/controller/Containment/deleteApiContainmentDelete.ts @@ -0,0 +1,22 @@ +import request from "../../http.js"; +import { type LekeApiContainmentV1ContainmentRepoDeleteRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Containment Repo Delete + * /api/containment/delete + */ +export function deleteApiContainmentDelete(params: DeleteApiContainmentDeleteParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.delete>(`/api/containment/delete`, { + params: paramsInput, + ...config, + }); +} + +export interface DeleteApiContainmentDeleteParams { + /** primary key */ + id?: number; +} diff --git a/Frontend/src/api/controller/Containment/getApiContainmentList.ts b/Frontend/src/api/controller/Containment/getApiContainmentList.ts new file mode 100644 index 0000000..625d4bc --- /dev/null +++ b/Frontend/src/api/controller/Containment/getApiContainmentList.ts @@ -0,0 +1,37 @@ +import request from "../../http.js"; +import { type LekeApiContainmentV1ContainmentRepoListRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Containment Repo List + * /api/containment/list + */ +export function getApiContainmentList(params: GetApiContainmentListParams, config?: AxiosRequestConfig) { + const paramsInput = { + page: params.page, + pageSize: params.pageSize, + total: params.total, + terminalId: params.terminalId, + anomalyName: params.anomalyName, + agentName: params.agentName, + repoName: params.repoName, + }; + return request.get>(`/api/containment/list`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiContainmentListParams { + page?: number; + pageSize?: number; + total?: number; + /** terminal (散逸端) */ + terminalId?: number; + /** anomaly name */ + anomalyName?: string; + /** agent name */ + agentName?: string; + /** containment repo name */ + repoName?: string; +} diff --git a/Frontend/src/api/controller/Containment/getApiContainmentView.ts b/Frontend/src/api/controller/Containment/getApiContainmentView.ts new file mode 100644 index 0000000..83fd06d --- /dev/null +++ b/Frontend/src/api/controller/Containment/getApiContainmentView.ts @@ -0,0 +1,22 @@ +import request from "../../http.js"; +import { type LekeApiContainmentV1ContainmentRepoViewRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Containment Repo View + * /api/containment/view + */ +export function getApiContainmentView(params: GetApiContainmentViewParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.get>(`/api/containment/view`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiContainmentViewParams { + /** primary key */ + id?: number; +} diff --git a/Frontend/src/api/controller/Containment/index.ts b/Frontend/src/api/controller/Containment/index.ts new file mode 100644 index 0000000..3fc01f8 --- /dev/null +++ b/Frontend/src/api/controller/Containment/index.ts @@ -0,0 +1,4 @@ +export * from "./deleteApiContainmentDelete"; +export * from "./getApiContainmentList"; +export * from "./postApiContainmentUpdate"; +export * from "./getApiContainmentView"; diff --git a/Frontend/src/api/controller/Containment/postApiContainmentUpdate.ts b/Frontend/src/api/controller/Containment/postApiContainmentUpdate.ts new file mode 100644 index 0000000..5d5d039 --- /dev/null +++ b/Frontend/src/api/controller/Containment/postApiContainmentUpdate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiContainmentV1ContainmentRepoUpdateRes, type DeepRequired, type LekeApiContainmentV1ContainmentRepoUpdateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Create or Update Containment Repo + * /api/containment/update + */ +export function postApiContainmentUpdate(input?: LekeApiContainmentV1ContainmentRepoUpdateReq, config?: AxiosRequestConfig) { + return request.post>(`/api/containment/update`, input, config); +} diff --git a/Frontend/src/api/controller/Department/deleteApiDepartmentDelete.ts b/Frontend/src/api/controller/Department/deleteApiDepartmentDelete.ts new file mode 100644 index 0000000..3081aa4 --- /dev/null +++ b/Frontend/src/api/controller/Department/deleteApiDepartmentDelete.ts @@ -0,0 +1,21 @@ +import request from "../../http.js"; +import { type LekeApiDepartmentV1DepartmentDeleteRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Department Delete + * /api/department/delete + */ +export function deleteApiDepartmentDelete(params: DeleteApiDepartmentDeleteParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.delete>(`/api/department/delete`, { + params: paramsInput, + ...config, + }); +} + +export interface DeleteApiDepartmentDeleteParams { + id: number; +} diff --git a/Frontend/src/api/controller/Department/getApiDepartmentList.ts b/Frontend/src/api/controller/Department/getApiDepartmentList.ts new file mode 100644 index 0000000..cbfe014 --- /dev/null +++ b/Frontend/src/api/controller/Department/getApiDepartmentList.ts @@ -0,0 +1,34 @@ +import request from "../../http.js"; +import { type LekeApiDepartmentV1DepartmentListRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Department List + * /api/department/list + */ +export function getApiDepartmentList(params: GetApiDepartmentListParams, config?: AxiosRequestConfig) { + const paramsInput = { + page: params.page, + pageSize: params.pageSize, + total: params.total, + branchName: params.branchName, + managerName: params.managerName, + userId: params.userId, + }; + return request.get>(`/api/department/list`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiDepartmentListParams { + page?: number; + pageSize?: number; + total?: number; + /** 分部名称 */ + branchName?: string; + /** 分部经理名称 */ + managerName?: string; + /** 所属用户ID */ + userId?: number; +} diff --git a/Frontend/src/api/controller/Department/getApiDepartmentView.ts b/Frontend/src/api/controller/Department/getApiDepartmentView.ts new file mode 100644 index 0000000..fb47489 --- /dev/null +++ b/Frontend/src/api/controller/Department/getApiDepartmentView.ts @@ -0,0 +1,21 @@ +import request from "../../http.js"; +import { type LekeApiDepartmentV1DepartmentViewRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Department View + * /api/department/view + */ +export function getApiDepartmentView(params: GetApiDepartmentViewParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.get>(`/api/department/view`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiDepartmentViewParams { + id: number; +} diff --git a/Frontend/src/api/controller/Department/index.ts b/Frontend/src/api/controller/Department/index.ts new file mode 100644 index 0000000..317d3fe --- /dev/null +++ b/Frontend/src/api/controller/Department/index.ts @@ -0,0 +1,5 @@ +export * from "./postApiDepartmentCreate"; +export * from "./deleteApiDepartmentDelete"; +export * from "./getApiDepartmentList"; +export * from "./putApiDepartmentUpdate"; +export * from "./getApiDepartmentView"; diff --git a/Frontend/src/api/controller/Department/postApiDepartmentCreate.ts b/Frontend/src/api/controller/Department/postApiDepartmentCreate.ts new file mode 100644 index 0000000..0403d81 --- /dev/null +++ b/Frontend/src/api/controller/Department/postApiDepartmentCreate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiDepartmentV1DepartmentCreateRes, type DeepRequired, type LekeApiDepartmentV1DepartmentCreateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Department Create + * /api/department/create + */ +export function postApiDepartmentCreate(input?: LekeApiDepartmentV1DepartmentCreateReq, config?: AxiosRequestConfig) { + return request.post>(`/api/department/create`, input, config); +} diff --git a/Frontend/src/api/controller/Department/putApiDepartmentUpdate.ts b/Frontend/src/api/controller/Department/putApiDepartmentUpdate.ts new file mode 100644 index 0000000..fc0620b --- /dev/null +++ b/Frontend/src/api/controller/Department/putApiDepartmentUpdate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiDepartmentV1DepartmentUpdateRes, type DeepRequired, type LekeApiDepartmentV1DepartmentUpdateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Department Update + * /api/department/update + */ +export function putApiDepartmentUpdate(input?: LekeApiDepartmentV1DepartmentUpdateReq, config?: AxiosRequestConfig) { + return request.put>(`/api/department/update`, input, config); +} diff --git a/Frontend/src/api/controller/Email/index.ts b/Frontend/src/api/controller/Email/index.ts new file mode 100644 index 0000000..e4342e7 --- /dev/null +++ b/Frontend/src/api/controller/Email/index.ts @@ -0,0 +1 @@ +export * from "./postApiEmailSendCode"; diff --git a/Frontend/src/api/controller/Email/postApiEmailSendCode.ts b/Frontend/src/api/controller/Email/postApiEmailSendCode.ts new file mode 100644 index 0000000..a52926d --- /dev/null +++ b/Frontend/src/api/controller/Email/postApiEmailSendCode.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiLoginV1SendVerificationCodeRes, type DeepRequired, type LekeApiLoginV1SendVerificationCodeReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Send Verification Code + * /api/email/send-code + */ +export function postApiEmailSendCode(input?: LekeApiLoginV1SendVerificationCodeReq, config?: AxiosRequestConfig) { + return request.post>(`/api/email/send-code`, input, config); +} diff --git a/Frontend/src/api/controller/Fans/deleteApiFansDelete.ts b/Frontend/src/api/controller/Fans/deleteApiFansDelete.ts new file mode 100644 index 0000000..e4e4e5c --- /dev/null +++ b/Frontend/src/api/controller/Fans/deleteApiFansDelete.ts @@ -0,0 +1,21 @@ +import request from "../../http.js"; +import { type LekeApiUserV1FansDeleteRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Fans Delete + * /api/fans/delete + */ +export function deleteApiFansDelete(params: DeleteApiFansDeleteParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.delete>(`/api/fans/delete`, { + params: paramsInput, + ...config, + }); +} + +export interface DeleteApiFansDeleteParams { + id: number; +} diff --git a/Frontend/src/api/controller/Fans/getApiFansList.ts b/Frontend/src/api/controller/Fans/getApiFansList.ts new file mode 100644 index 0000000..fab013e --- /dev/null +++ b/Frontend/src/api/controller/Fans/getApiFansList.ts @@ -0,0 +1,30 @@ +import request from "../../http.js"; +import { type LekeApiUserV1FansListRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Fans List + * /api/fans/list + */ +export function getApiFansList(params: GetApiFansListParams, config?: AxiosRequestConfig) { + const paramsInput = { + page: params.page, + pageSize: params.pageSize, + total: params.total, + userId: params.userId, + status: params.status, + }; + return request.get>(`/api/fans/list`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiFansListParams { + page?: number; + pageSize?: number; + total?: number; + userId: number; + /** 状态:1=粉丝 0=取关/无效 */ + status?: number; +} diff --git a/Frontend/src/api/controller/Fans/getApiFansView.ts b/Frontend/src/api/controller/Fans/getApiFansView.ts new file mode 100644 index 0000000..90251d4 --- /dev/null +++ b/Frontend/src/api/controller/Fans/getApiFansView.ts @@ -0,0 +1,21 @@ +import request from "../../http.js"; +import { type LekeApiUserV1FansViewRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Fans View + * /api/fans/view + */ +export function getApiFansView(params: GetApiFansViewParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.get>(`/api/fans/view`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiFansViewParams { + id: number; +} diff --git a/Frontend/src/api/controller/Fans/index.ts b/Frontend/src/api/controller/Fans/index.ts new file mode 100644 index 0000000..879dcac --- /dev/null +++ b/Frontend/src/api/controller/Fans/index.ts @@ -0,0 +1,5 @@ +export * from "./postApiFansCreate"; +export * from "./deleteApiFansDelete"; +export * from "./getApiFansList"; +export * from "./putApiFansUpdate"; +export * from "./getApiFansView"; diff --git a/Frontend/src/api/controller/Fans/postApiFansCreate.ts b/Frontend/src/api/controller/Fans/postApiFansCreate.ts new file mode 100644 index 0000000..97695a8 --- /dev/null +++ b/Frontend/src/api/controller/Fans/postApiFansCreate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1FansCreateRes, type DeepRequired, type LekeApiUserV1FansCreateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Fans Create + * /api/fans/create + */ +export function postApiFansCreate(input?: LekeApiUserV1FansCreateReq, config?: AxiosRequestConfig) { + return request.post>(`/api/fans/create`, input, config); +} diff --git a/Frontend/src/api/controller/Fans/putApiFansUpdate.ts b/Frontend/src/api/controller/Fans/putApiFansUpdate.ts new file mode 100644 index 0000000..e87f147 --- /dev/null +++ b/Frontend/src/api/controller/Fans/putApiFansUpdate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1FansUpdateRes, type DeepRequired, type LekeApiUserV1FansUpdateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Fans Update + * /api/fans/update + */ +export function putApiFansUpdate(input?: LekeApiUserV1FansUpdateReq, config?: AxiosRequestConfig) { + return request.put>(`/api/fans/update`, input, config); +} diff --git a/Frontend/src/api/controller/Login/index.ts b/Frontend/src/api/controller/Login/index.ts new file mode 100644 index 0000000..47f5ae5 --- /dev/null +++ b/Frontend/src/api/controller/Login/index.ts @@ -0,0 +1,2 @@ +export * from "./postApiLogin"; +export * from "./postApiLoginEmail"; diff --git a/Frontend/src/api/controller/Login/postApiLogin.ts b/Frontend/src/api/controller/Login/postApiLogin.ts new file mode 100644 index 0000000..a8b2479 --- /dev/null +++ b/Frontend/src/api/controller/Login/postApiLogin.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiLoginV1LoginRes, type DeepRequired, type LekeApiLoginV1LoginReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User Login + * /api/login + */ +export function postApiLogin(input?: LekeApiLoginV1LoginReq, config?: AxiosRequestConfig) { + return request.post>(`/api/login`, input, config); +} diff --git a/Frontend/src/api/controller/Login/postApiLoginEmail.ts b/Frontend/src/api/controller/Login/postApiLoginEmail.ts new file mode 100644 index 0000000..75db112 --- /dev/null +++ b/Frontend/src/api/controller/Login/postApiLoginEmail.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiLoginV1LoginByEmailRes, type DeepRequired, type LekeApiLoginV1LoginByEmailReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User Login By Email + * /api/login/email + */ +export function postApiLoginEmail(input?: LekeApiLoginV1LoginByEmailReq, config?: AxiosRequestConfig) { + return request.post>(`/api/login/email`, input, config); +} diff --git a/Frontend/src/api/controller/Logout/index.ts b/Frontend/src/api/controller/Logout/index.ts new file mode 100644 index 0000000..d6fd0f9 --- /dev/null +++ b/Frontend/src/api/controller/Logout/index.ts @@ -0,0 +1 @@ +export * from "./postApiLogout"; diff --git a/Frontend/src/api/controller/Logout/postApiLogout.ts b/Frontend/src/api/controller/Logout/postApiLogout.ts new file mode 100644 index 0000000..a16b421 --- /dev/null +++ b/Frontend/src/api/controller/Logout/postApiLogout.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiLoginV1LogoutRes, type DeepRequired, type LekeApiLoginV1LogoutReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User Logout + * /api/logout + */ +export function postApiLogout(input?: LekeApiLoginV1LogoutReq, config?: AxiosRequestConfig) { + return request.post>(`/api/logout`, input, config); +} diff --git a/Frontend/src/api/controller/Register/index.ts b/Frontend/src/api/controller/Register/index.ts new file mode 100644 index 0000000..3bd61cd --- /dev/null +++ b/Frontend/src/api/controller/Register/index.ts @@ -0,0 +1,2 @@ +export * from "./postApiRegister"; +export * from "./postApiRegisterEmail"; diff --git a/Frontend/src/api/controller/Register/postApiRegister.ts b/Frontend/src/api/controller/Register/postApiRegister.ts new file mode 100644 index 0000000..7151987 --- /dev/null +++ b/Frontend/src/api/controller/Register/postApiRegister.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiLoginV1RegisterRes, type DeepRequired, type LekeApiLoginV1RegisterReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User Register + * /api/register + */ +export function postApiRegister(input?: LekeApiLoginV1RegisterReq, config?: AxiosRequestConfig) { + return request.post>(`/api/register`, input, config); +} diff --git a/Frontend/src/api/controller/Register/postApiRegisterEmail.ts b/Frontend/src/api/controller/Register/postApiRegisterEmail.ts new file mode 100644 index 0000000..583f25a --- /dev/null +++ b/Frontend/src/api/controller/Register/postApiRegisterEmail.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiLoginV1RegisterByEmailRes, type DeepRequired, type LekeApiLoginV1RegisterByEmailReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User Register By Email + * /api/register/email + */ +export function postApiRegisterEmail(input?: LekeApiLoginV1RegisterByEmailReq, config?: AxiosRequestConfig) { + return request.post>(`/api/register/email`, input, config); +} diff --git a/Frontend/src/api/controller/Role/deleteApiRoleDelete.ts b/Frontend/src/api/controller/Role/deleteApiRoleDelete.ts new file mode 100644 index 0000000..9ce3537 --- /dev/null +++ b/Frontend/src/api/controller/Role/deleteApiRoleDelete.ts @@ -0,0 +1,22 @@ +import request from "../../http.js"; +import { type LekeApiUserV1RoleDeleteRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Delete Role + * /api/role/delete + */ +export function deleteApiRoleDelete(params: DeleteApiRoleDeleteParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.delete>(`/api/role/delete`, { + params: paramsInput, + ...config, + }); +} + +export interface DeleteApiRoleDeleteParams { + /** 角色ID */ + id: number; +} diff --git a/Frontend/src/api/controller/Role/getApiRoleList.ts b/Frontend/src/api/controller/Role/getApiRoleList.ts new file mode 100644 index 0000000..d04a7dc --- /dev/null +++ b/Frontend/src/api/controller/Role/getApiRoleList.ts @@ -0,0 +1,31 @@ +import request from "../../http.js"; +import { type LekeApiUserV1RoleListRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Role List + * /api/role/list + */ +export function getApiRoleList(params: GetApiRoleListParams, config?: AxiosRequestConfig) { + const paramsInput = { + page: params.page, + pageSize: params.pageSize, + total: params.total, + userId: params.userId, + departmentId: params.departmentId, + }; + return request.get>(`/role/list`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiRoleListParams { + page?: number; + pageSize?: number; + total?: number; + /** 用户ID */ + userId?: number; + /** 部门ID */ + departmentId?: number; +} diff --git a/Frontend/src/api/controller/Role/getApiRoleView.ts b/Frontend/src/api/controller/Role/getApiRoleView.ts new file mode 100644 index 0000000..9217cad --- /dev/null +++ b/Frontend/src/api/controller/Role/getApiRoleView.ts @@ -0,0 +1,22 @@ +import request from "../../http.js"; +import { type LekeApiUserV1RoleViewRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * View Role + * /api/role/view + */ +export function getApiRoleView(params: GetApiRoleViewParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.get>(`/api/role/view`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiRoleViewParams { + /** 角色ID */ + id: number; +} diff --git a/Frontend/src/api/controller/Role/index.ts b/Frontend/src/api/controller/Role/index.ts new file mode 100644 index 0000000..6cbd8c2 --- /dev/null +++ b/Frontend/src/api/controller/Role/index.ts @@ -0,0 +1,6 @@ +export * from "./postApiRoleCreate"; +export * from "./deleteApiRoleDelete"; +export * from "./getApiRoleList"; +export * from "./postApiRolePermissionCheck"; +export * from "./putApiRoleUpdate"; +export * from "./getApiRoleView"; diff --git a/Frontend/src/api/controller/Role/postApiRoleCreate.ts b/Frontend/src/api/controller/Role/postApiRoleCreate.ts new file mode 100644 index 0000000..6bcf535 --- /dev/null +++ b/Frontend/src/api/controller/Role/postApiRoleCreate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1RoleCreateRes, type DeepRequired, type LekeApiUserV1RoleCreateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Create Role + * /api/role/create + */ +export function postApiRoleCreate(input?: LekeApiUserV1RoleCreateReq, config?: AxiosRequestConfig) { + return request.post>(`/api/role/create`, input, config); +} diff --git a/Frontend/src/api/controller/Role/postApiRolePermissionCheck.ts b/Frontend/src/api/controller/Role/postApiRolePermissionCheck.ts new file mode 100644 index 0000000..dd8d465 --- /dev/null +++ b/Frontend/src/api/controller/Role/postApiRolePermissionCheck.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1RolePermissionCheckRes, type DeepRequired, type LekeApiUserV1RolePermissionCheckReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Check Role Permission + * /api/role/permission/check + */ +export function postApiRolePermissionCheck(input?: LekeApiUserV1RolePermissionCheckReq, config?: AxiosRequestConfig) { + return request.post>(`/api/role/permission/check`, input, config); +} diff --git a/Frontend/src/api/controller/Role/putApiRoleUpdate.ts b/Frontend/src/api/controller/Role/putApiRoleUpdate.ts new file mode 100644 index 0000000..a4437a4 --- /dev/null +++ b/Frontend/src/api/controller/Role/putApiRoleUpdate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1RoleUpdateRes, type DeepRequired, type LekeApiUserV1RoleUpdateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Update Role + * /api/role/update + */ +export function putApiRoleUpdate(input?: LekeApiUserV1RoleUpdateReq, config?: AxiosRequestConfig) { + return request.put>(`/api/role/update`, input, config); +} diff --git a/Frontend/src/api/controller/Room/deleteApiRoomDelete.ts b/Frontend/src/api/controller/Room/deleteApiRoomDelete.ts new file mode 100644 index 0000000..a5ee64f --- /dev/null +++ b/Frontend/src/api/controller/Room/deleteApiRoomDelete.ts @@ -0,0 +1,22 @@ +import request from "../../http.js"; +import { type LekeApiRoomV1RoomDeleteRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Room Delete + * /api/room/delete + */ +export function deleteApiRoomDelete(params: DeleteApiRoomDeleteParams, config?: AxiosRequestConfig) { + const paramsInput = { + room_code: params.room_code, + }; + return request.delete>(`/api/room/delete`, { + params: paramsInput, + ...config, + }); +} + +export interface DeleteApiRoomDeleteParams { + /** 房间号 */ + room_code?: string; +} diff --git a/Frontend/src/api/controller/Room/getApiRoomList.ts b/Frontend/src/api/controller/Room/getApiRoomList.ts new file mode 100644 index 0000000..a7fd086 --- /dev/null +++ b/Frontend/src/api/controller/Room/getApiRoomList.ts @@ -0,0 +1,40 @@ +import request from "../../http.js"; +import { type LekeApiRoomV1RoomListRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Room List + * /api/room/list + */ +export function getApiRoomList(params: GetApiRoomListParams, config?: AxiosRequestConfig) { + const paramsInput = { + page: params.page, + pageSize: params.pageSize, + total: params.total, + room_code: params.room_code, + room_name: params.room_name, + host_id: params.host_id, + status: params.status, + system_name: params.system_name, + }; + return request.get>(`/api/room/list`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiRoomListParams { + page?: number; + pageSize?: number; + total?: number; + /** 房间号 */ + room_code?: string; + /** 房间名称 */ + room_name?: string; + /** 主持人用户ID */ + host_id?: number; + /** 房间状态:0未开始 1进行中 2已结束 3已关闭 */ + status?: number; + /** 规则系统,如COC、DND5E */ + system_name?: string; +} diff --git a/Frontend/src/api/controller/Room/getApiRoomView.ts b/Frontend/src/api/controller/Room/getApiRoomView.ts new file mode 100644 index 0000000..c0b8d54 --- /dev/null +++ b/Frontend/src/api/controller/Room/getApiRoomView.ts @@ -0,0 +1,25 @@ +import request from "../../http.js"; +import { type LekeApiRoomV1RoomViewRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Room View + * /api/room/view + */ +export function getApiRoomView(params: GetApiRoomViewParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + room_code: params.room_code, + }; + return request.get>(`/api/room/view`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiRoomViewParams { + /** 房间ID */ + id?: number; + /** 房间号 */ + room_code?: string; +} diff --git a/Frontend/src/api/controller/Room/index.ts b/Frontend/src/api/controller/Room/index.ts new file mode 100644 index 0000000..d477c2e --- /dev/null +++ b/Frontend/src/api/controller/Room/index.ts @@ -0,0 +1,5 @@ +export * from "./postApiRoomCreate"; +export * from "./deleteApiRoomDelete"; +export * from "./getApiRoomList"; +export * from "./putApiRoomUpdate"; +export * from "./getApiRoomView"; diff --git a/Frontend/src/api/controller/Room/postApiRoomCreate.ts b/Frontend/src/api/controller/Room/postApiRoomCreate.ts new file mode 100644 index 0000000..9540389 --- /dev/null +++ b/Frontend/src/api/controller/Room/postApiRoomCreate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiRoomV1RoomCreateRes, type DeepRequired, type LekeApiRoomV1RoomCreateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Room Create + * /api/room/create + */ +export function postApiRoomCreate(input?: LekeApiRoomV1RoomCreateReq, config?: AxiosRequestConfig) { + return request.post>(`/api/room/create`, input, config); +} diff --git a/Frontend/src/api/controller/Room/putApiRoomUpdate.ts b/Frontend/src/api/controller/Room/putApiRoomUpdate.ts new file mode 100644 index 0000000..ce5209b --- /dev/null +++ b/Frontend/src/api/controller/Room/putApiRoomUpdate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiRoomV1RoomUpdateRes, type DeepRequired, type LekeApiRoomV1RoomUpdateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Room Update + * /api/room/update + */ +export function putApiRoomUpdate(input?: LekeApiRoomV1RoomUpdateReq, config?: AxiosRequestConfig) { + return request.put>(`/api/room/update`, input, config); +} diff --git a/Frontend/src/api/controller/Subscribe/deleteApiSubscribeDelete.ts b/Frontend/src/api/controller/Subscribe/deleteApiSubscribeDelete.ts new file mode 100644 index 0000000..315ea29 --- /dev/null +++ b/Frontend/src/api/controller/Subscribe/deleteApiSubscribeDelete.ts @@ -0,0 +1,21 @@ +import request from "../../http.js"; +import { type LekeApiUserV1SubscribeDeleteRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Subscribe Delete + * /api/subscribe/delete + */ +export function deleteApiSubscribeDelete(params: DeleteApiSubscribeDeleteParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.delete>(`/api/subscribe/delete`, { + params: paramsInput, + ...config, + }); +} + +export interface DeleteApiSubscribeDeleteParams { + id: number; +} diff --git a/Frontend/src/api/controller/Subscribe/getApiSubscribeList.ts b/Frontend/src/api/controller/Subscribe/getApiSubscribeList.ts new file mode 100644 index 0000000..88e2291 --- /dev/null +++ b/Frontend/src/api/controller/Subscribe/getApiSubscribeList.ts @@ -0,0 +1,33 @@ +import request from "../../http.js"; +import { type LekeApiUserV1SubscribeListRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Subscribe List + * /api/subscribe/list + */ +export function getApiSubscribeList(params: GetApiSubscribeListParams, config?: AxiosRequestConfig) { + const paramsInput = { + page: params.page, + pageSize: params.pageSize, + total: params.total, + userId: params.userId, + status: params.status, + followId: params.followId, + }; + return request.get>(`/api/subscribe/list`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiSubscribeListParams { + page?: number; + pageSize?: number; + total?: number; + userId: number; + /** 状态:1=关注中 0=取消关注 */ + status?: number; + /** 被关注的用户ID */ + followId?: number; +} diff --git a/Frontend/src/api/controller/Subscribe/getApiSubscribeView.ts b/Frontend/src/api/controller/Subscribe/getApiSubscribeView.ts new file mode 100644 index 0000000..64d1afb --- /dev/null +++ b/Frontend/src/api/controller/Subscribe/getApiSubscribeView.ts @@ -0,0 +1,21 @@ +import request from "../../http.js"; +import { type LekeApiUserV1SubscribeViewRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Subscribe View + * /api/subscribe/view + */ +export function getApiSubscribeView(params: GetApiSubscribeViewParams, config?: AxiosRequestConfig) { + const paramsInput = { + id: params.id, + }; + return request.get>(`/api/subscribe/view`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiSubscribeViewParams { + id: number; +} diff --git a/Frontend/src/api/controller/Subscribe/index.ts b/Frontend/src/api/controller/Subscribe/index.ts new file mode 100644 index 0000000..eb6db83 --- /dev/null +++ b/Frontend/src/api/controller/Subscribe/index.ts @@ -0,0 +1,5 @@ +export * from "./postApiSubscribeCreate"; +export * from "./deleteApiSubscribeDelete"; +export * from "./getApiSubscribeList"; +export * from "./putApiSubscribeUpdate"; +export * from "./getApiSubscribeView"; diff --git a/Frontend/src/api/controller/Subscribe/postApiSubscribeCreate.ts b/Frontend/src/api/controller/Subscribe/postApiSubscribeCreate.ts new file mode 100644 index 0000000..3a2a3df --- /dev/null +++ b/Frontend/src/api/controller/Subscribe/postApiSubscribeCreate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1SubscribeCreateRes, type DeepRequired, type LekeApiUserV1SubscribeCreateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Subscribe Create + * /api/subscribe/create + */ +export function postApiSubscribeCreate(input?: LekeApiUserV1SubscribeCreateReq, config?: AxiosRequestConfig) { + return request.post>(`/api/subscribe/create`, input, config); +} diff --git a/Frontend/src/api/controller/Subscribe/putApiSubscribeUpdate.ts b/Frontend/src/api/controller/Subscribe/putApiSubscribeUpdate.ts new file mode 100644 index 0000000..9e57506 --- /dev/null +++ b/Frontend/src/api/controller/Subscribe/putApiSubscribeUpdate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1SubscribeUpdateRes, type DeepRequired, type LekeApiUserV1SubscribeUpdateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Subscribe Update + * /api/subscribe/update + */ +export function putApiSubscribeUpdate(input?: LekeApiUserV1SubscribeUpdateReq, config?: AxiosRequestConfig) { + return request.put>(`/api/subscribe/update`, input, config); +} diff --git a/Frontend/src/api/controller/Trace/deleteApiTraceReduce.ts b/Frontend/src/api/controller/Trace/deleteApiTraceReduce.ts new file mode 100644 index 0000000..b6b4011 --- /dev/null +++ b/Frontend/src/api/controller/Trace/deleteApiTraceReduce.ts @@ -0,0 +1,31 @@ +import request from "../../http.js"; +import { type LekeApiUserV1TraceReduceRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Trace Delete + * /api/trace/Reduce + */ +export function deleteApiTraceReduce(params: DeleteApiTraceReduceParams, config?: AxiosRequestConfig) { + const paramsInput = { + roleId: params.roleId, + redTrace: params.redTrace, + yellowTrace: params.yellowTrace, + blueTrace: params.blueTrace, + }; + return request.delete>(`/api/trace/Reduce`, { + params: paramsInput, + ...config, + }); +} + +export interface DeleteApiTraceReduceParams { + /** 角色ID */ + roleId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/controller/Trace/getApiTraceList.ts b/Frontend/src/api/controller/Trace/getApiTraceList.ts new file mode 100644 index 0000000..1026eff --- /dev/null +++ b/Frontend/src/api/controller/Trace/getApiTraceList.ts @@ -0,0 +1,43 @@ +import request from "../../http.js"; +import { type LekeApiUserV1TraceListRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Trace List + * /api/trace/list + */ +export function getApiTraceList(params: GetApiTraceListParams, config?: AxiosRequestConfig) { + const paramsInput = { + page: params.page, + pageSize: params.pageSize, + total: params.total, + userId: params.userId, + roleId: params.roleId, + departmentId: params.departmentId, + redTrace: params.redTrace, + yellowTrace: params.yellowTrace, + blueTrace: params.blueTrace, + }; + return request.get>(`/api/trace/list`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiTraceListParams { + page?: number; + pageSize?: number; + total?: number; + /** 用户ID */ + userId?: number; + /** 角色ID */ + roleId?: number; + /** 部门ID */ + departmentId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/controller/Trace/getApiTraceView.ts b/Frontend/src/api/controller/Trace/getApiTraceView.ts new file mode 100644 index 0000000..4f4cd8b --- /dev/null +++ b/Frontend/src/api/controller/Trace/getApiTraceView.ts @@ -0,0 +1,31 @@ +import request from "../../http.js"; +import { type LekeApiUserV1TraceViewRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Trace View + * /api/trace/view + */ +export function getApiTraceView(params: GetApiTraceViewParams, config?: AxiosRequestConfig) { + const paramsInput = { + roleId: params.roleId, + redTrace: params.redTrace, + yellowTrace: params.yellowTrace, + blueTrace: params.blueTrace, + }; + return request.get>(`/api/trace/view`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiTraceViewParams { + /** 角色ID */ + roleId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/controller/Trace/index.ts b/Frontend/src/api/controller/Trace/index.ts new file mode 100644 index 0000000..22ac885 --- /dev/null +++ b/Frontend/src/api/controller/Trace/index.ts @@ -0,0 +1,4 @@ +export * from "./deleteApiTraceReduce"; +export * from "./getApiTraceList"; +export * from "./putApiTraceUpdate"; +export * from "./getApiTraceView"; diff --git a/Frontend/src/api/controller/Trace/putApiTraceUpdate.ts b/Frontend/src/api/controller/Trace/putApiTraceUpdate.ts new file mode 100644 index 0000000..4de222d --- /dev/null +++ b/Frontend/src/api/controller/Trace/putApiTraceUpdate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1TraceUpdateRes, type DeepRequired, type LekeApiUserV1TraceUpdateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * Trace Update + * /api/trace/update + */ +export function putApiTraceUpdate(input?: LekeApiUserV1TraceUpdateReq, config?: AxiosRequestConfig) { + return request.put>(`/api/trace/update`, input, config); +} diff --git a/Frontend/src/api/controller/User/deleteApiUserDelete.ts b/Frontend/src/api/controller/User/deleteApiUserDelete.ts new file mode 100644 index 0000000..aa9798e --- /dev/null +++ b/Frontend/src/api/controller/User/deleteApiUserDelete.ts @@ -0,0 +1,22 @@ +import request from "../../http.js"; +import { type LekeApiUserV1UserDeleteRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User Delete + * /api/user/delete + */ +export function deleteApiUserDelete(params: DeleteApiUserDeleteParams, config?: AxiosRequestConfig) { + const paramsInput = { + account: params.account, + }; + return request.delete>(`/api/user/delete`, { + params: paramsInput, + ...config, + }); +} + +export interface DeleteApiUserDeleteParams { + /** 账号 */ + account?: string; +} diff --git a/Frontend/src/api/controller/User/getApiUserList.ts b/Frontend/src/api/controller/User/getApiUserList.ts new file mode 100644 index 0000000..610a720 --- /dev/null +++ b/Frontend/src/api/controller/User/getApiUserList.ts @@ -0,0 +1,31 @@ +import request from "../../http.js"; +import { type LekeApiUserV1UserListRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User List + * /api/user/list + */ +export function getApiUserList(params: GetApiUserListParams, config?: AxiosRequestConfig) { + const paramsInput = { + page: params.page, + pageSize: params.pageSize, + total: params.total, + account: params.account, + nickname: params.nickname, + }; + return request.get>(`/api/user/list`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiUserListParams { + page?: number; + pageSize?: number; + total?: number; + /** 账号 */ + account?: string; + /** 昵称 */ + nickname?: string; +} diff --git a/Frontend/src/api/controller/User/getApiUserView.ts b/Frontend/src/api/controller/User/getApiUserView.ts new file mode 100644 index 0000000..ea1a52e --- /dev/null +++ b/Frontend/src/api/controller/User/getApiUserView.ts @@ -0,0 +1,28 @@ +import request from "../../http.js"; +import { type LekeApiUserV1UserViewRes, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User View + * /api/user/view + */ +export function getApiUserView(params: GetApiUserViewParams, config?: AxiosRequestConfig) { + const paramsInput = { + account: params.account, + nickname: params.nickname, + id: params.id, + }; + return request.get>(`/user/view`, { + params: paramsInput, + ...config, + }); +} + +export interface GetApiUserViewParams { + /** 账号 */ + account?: string; + /** 昵称 */ + nickname?: string; + /** 用户ID */ + id?: number; +} diff --git a/Frontend/src/api/controller/User/index.ts b/Frontend/src/api/controller/User/index.ts new file mode 100644 index 0000000..801e5d1 --- /dev/null +++ b/Frontend/src/api/controller/User/index.ts @@ -0,0 +1,4 @@ +export * from "./deleteApiUserDelete"; +export * from "./getApiUserList"; +export * from "./putApiUserUpdate"; +export * from "./getApiUserView"; diff --git a/Frontend/src/api/controller/User/putApiUserUpdate.ts b/Frontend/src/api/controller/User/putApiUserUpdate.ts new file mode 100644 index 0000000..d136520 --- /dev/null +++ b/Frontend/src/api/controller/User/putApiUserUpdate.ts @@ -0,0 +1,11 @@ +import request from "../../http.js"; +import { type LekeApiUserV1UserUpdateRes, type DeepRequired, type LekeApiUserV1UserUpdateReq } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * User Update + * /api/user/update + */ +export function putApiUserUpdate(input?: LekeApiUserV1UserUpdateReq, config?: AxiosRequestConfig) { + return request.put>(`/api/user/update`, input, config); +} diff --git a/Frontend/src/api/controller/auth-controller/index.ts b/Frontend/src/api/controller/auth-controller/index.ts new file mode 100644 index 0000000..d6686b9 --- /dev/null +++ b/Frontend/src/api/controller/auth-controller/index.ts @@ -0,0 +1,2 @@ +export * from "./postApiAuthLogin"; +export * from "./postApiAuthLogout"; diff --git a/Frontend/src/api/controller/auth-controller/postApiAuthLogin.ts b/Frontend/src/api/controller/auth-controller/postApiAuthLogin.ts new file mode 100644 index 0000000..e3c0ee6 --- /dev/null +++ b/Frontend/src/api/controller/auth-controller/postApiAuthLogin.ts @@ -0,0 +1,10 @@ +import request from "../../http.js"; +import { type LoginResponse, type DeepRequired, type LoginRequest } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * /api/auth/login + */ +export function postApiAuthLogin(input: LoginRequest, config?: AxiosRequestConfig) { + return request.post>(`/api/auth/login`, input, config); +} diff --git a/Frontend/src/api/controller/auth-controller/postApiAuthLogout.ts b/Frontend/src/api/controller/auth-controller/postApiAuthLogout.ts new file mode 100644 index 0000000..fb2e4d9 --- /dev/null +++ b/Frontend/src/api/controller/auth-controller/postApiAuthLogout.ts @@ -0,0 +1,10 @@ +import request from "../../http.js"; +import { type ApiResponse, type DeepRequired } from "../../interface"; +import { type AxiosRequestConfig } from "axios"; + +/** + * /api/auth/logout + */ +export function postApiAuthLogout(config?: AxiosRequestConfig) { + return request.post>(`/api/auth/logout`, config); +} diff --git a/Frontend/src/api/controller/index.ts b/Frontend/src/api/controller/index.ts new file mode 100644 index 0000000..73f855e --- /dev/null +++ b/Frontend/src/api/controller/index.ts @@ -0,0 +1,12 @@ +export * from "./Containment"; +export * from "./Department"; +export * from "./Email"; +export * from "./Fans"; +export * from "./Login"; +export * from "./Logout"; +export * from "./Register"; +export * from "./Role"; +export * from "./Room"; +export * from "./Subscribe"; +export * from "./Trace"; +export * from "./User"; diff --git a/Frontend/src/api/docs.json b/Frontend/src/api/docs.json new file mode 100644 index 0000000..6793500 --- /dev/null +++ b/Frontend/src/api/docs.json @@ -0,0 +1,122 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "TrangleAgent API", + "description": "TrangleAgent API Documentation", + "version": "v1" + }, + "servers": [ + { + "url": "http://localhost:8080", + "description": "Generated server url" + } + ], + "paths": { + "/api/auth/login": { + "post": { + "tags": [ + "auth-controller" + ], + "operationId": "login", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginResponse" + } + } + } + } + } + } + }, + "/api/auth/logout": { + "post": { + "tags": [ + "auth-controller" + ], + "operationId": "logout", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "LoginRequest": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "LoginResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/User" + } + } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "username": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "ApiResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "object" + } + } + } + } + } +} \ No newline at end of file diff --git a/Frontend/src/api/http.js b/Frontend/src/api/http.js new file mode 100644 index 0000000..0c85e41 --- /dev/null +++ b/Frontend/src/api/http.js @@ -0,0 +1,25 @@ +import axios from 'axios' + +const http = axios.create({ + baseURL: '/api', + timeout: 10000, +}) + +http.interceptors.request.use((config) => { + const token = localStorage.getItem('ta_token') + if (token) { + config.headers.Authorization = `Bearer ${token}` + } + return config +}) + +http.interceptors.response.use( + (response) => response.data, + (error) => { + const msg = error.response?.data?.message || error.message || '请求失败' + return Promise.reject(new Error(msg)) + }, +) + +export default http + diff --git a/Frontend/src/api/interface/apiTypes/ApiResponse.ts b/Frontend/src/api/interface/apiTypes/ApiResponse.ts new file mode 100644 index 0000000..f057054 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/ApiResponse.ts @@ -0,0 +1,5 @@ +export interface ApiResponse { + code?: number; + message?: string; + data?: any; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoDeleteReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoDeleteReq.ts new file mode 100644 index 0000000..25e3b86 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoDeleteReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiContainmentV1ContainmentRepoDeleteReq { + /** primary key */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoDeleteRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoDeleteRes.ts new file mode 100644 index 0000000..f17dbc4 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoDeleteRes.ts @@ -0,0 +1,2 @@ +export interface LekeApiContainmentV1ContainmentRepoDeleteRes { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoListReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoListReq.ts new file mode 100644 index 0000000..41a08d1 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoListReq.ts @@ -0,0 +1,13 @@ +export interface LekeApiContainmentV1ContainmentRepoListReq { + page?: number; + pageSize?: number; + total?: number; + /** terminal (散逸端) */ + terminalId?: number; + /** anomaly name */ + anomalyName?: string; + /** agent name */ + agentName?: string; + /** containment repo name */ + repoName?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoListRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoListRes.ts new file mode 100644 index 0000000..e596fac --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoListRes.ts @@ -0,0 +1,8 @@ +import { type LekeInternalModelContainmentRepo } from "../../interface"; + +export interface LekeApiContainmentV1ContainmentRepoListRes { + page?: number; + pageSize?: number; + total?: number; + list?: LekeInternalModelContainmentRepo[]; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoUpdateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoUpdateReq.ts new file mode 100644 index 0000000..ea667d5 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoUpdateReq.ts @@ -0,0 +1,14 @@ +export interface LekeApiContainmentV1ContainmentRepoUpdateReq { + /** primary key,大于0为修改,其他为新增 */ + id?: number; + /** terminal (散逸端) */ + terminalId?: number; + /** number of contained anomalies */ + abnormal?: string; + /** anomaly name */ + anomalyName?: string; + /** agent name */ + agentName?: string; + /** containment repo name */ + repoName?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoUpdateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoUpdateRes.ts new file mode 100644 index 0000000..3c27d2d --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoUpdateRes.ts @@ -0,0 +1,4 @@ +export interface LekeApiContainmentV1ContainmentRepoUpdateRes { + /** primary key */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoViewReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoViewReq.ts new file mode 100644 index 0000000..b74859a --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoViewReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiContainmentV1ContainmentRepoViewReq { + /** primary key */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoViewRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoViewRes.ts new file mode 100644 index 0000000..8e0a454 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiContainmentV1ContainmentRepoViewRes.ts @@ -0,0 +1,14 @@ +export interface LekeApiContainmentV1ContainmentRepoViewRes { + /** primary key(大于0为修改,其他为新增) */ + id?: number; + /** terminal (散逸端) */ + terminalId?: number; + /** number of contained anomalies (收容异常的数量) */ + abnormal?: string; + /** name of the anomaly (异常体的名字) */ + anomalyName?: string; + /** agent (特工) */ + agentName?: string; + /** containment repository name or code (收容库) */ + repoName?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1Department.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1Department.ts new file mode 100644 index 0000000..8190ed3 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1Department.ts @@ -0,0 +1,20 @@ +export interface LekeApiDepartmentV1Department { + /** 自增主键 */ + id?: number; + /** 所属用户ID(对应 users.id) */ + userId?: number; + /** 分部名称 */ + branchName?: string; + /** 分部散逸端的数量 */ + terminalCount?: number; + /** 分部当前天气/气候描述 */ + weather?: string; + /** 分部经理名称 */ + managerName?: string; + /** 分部地址 */ + location?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentCreateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentCreateReq.ts new file mode 100644 index 0000000..5c9e84f --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentCreateReq.ts @@ -0,0 +1,12 @@ +export interface LekeApiDepartmentV1DepartmentCreateReq { + userId: number; + branchName: string; + /** 分部散逸端的数量 */ + terminalCount?: number; + /** 分部当前天气/气候描述 */ + weather?: string; + /** 分部经理名称 */ + managerName?: string; + /** 分部地址 */ + location?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentCreateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentCreateRes.ts new file mode 100644 index 0000000..221c3fa --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentCreateRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiDepartmentV1DepartmentCreateRes { + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentDeleteReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentDeleteReq.ts new file mode 100644 index 0000000..ad3a883 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentDeleteReq.ts @@ -0,0 +1,3 @@ +export interface LekeApiDepartmentV1DepartmentDeleteReq { + id: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentDeleteRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentDeleteRes.ts new file mode 100644 index 0000000..71d945e --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentDeleteRes.ts @@ -0,0 +1,2 @@ +export interface LekeApiDepartmentV1DepartmentDeleteRes { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentListReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentListReq.ts new file mode 100644 index 0000000..58aca79 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentListReq.ts @@ -0,0 +1,11 @@ +export interface LekeApiDepartmentV1DepartmentListReq { + page?: number; + pageSize?: number; + total?: number; + /** 分部名称 */ + branchName?: string; + /** 分部经理名称 */ + managerName?: string; + /** 所属用户ID */ + userId?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentListRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentListRes.ts new file mode 100644 index 0000000..0c49bca --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentListRes.ts @@ -0,0 +1,8 @@ +import { type LekeApiDepartmentV1Department } from "../../interface"; + +export interface LekeApiDepartmentV1DepartmentListRes { + page?: number; + pageSize?: number; + total?: number; + list?: LekeApiDepartmentV1Department[]; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentUpdateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentUpdateReq.ts new file mode 100644 index 0000000..b810b7e --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentUpdateReq.ts @@ -0,0 +1,13 @@ +export interface LekeApiDepartmentV1DepartmentUpdateReq { + id: number; + userId: number; + branchName: string; + /** 分部散逸端的数量 */ + terminalCount?: number; + /** 分部地址 */ + location?: string; + /** 分部当前天气/气候描述 */ + weather?: string; + /** 分部经理名称 */ + managerName?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentUpdateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentUpdateRes.ts new file mode 100644 index 0000000..12f2e60 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentUpdateRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiDepartmentV1DepartmentUpdateRes { + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentViewReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentViewReq.ts new file mode 100644 index 0000000..5ab3e1e --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentViewReq.ts @@ -0,0 +1,3 @@ +export interface LekeApiDepartmentV1DepartmentViewReq { + id: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentViewRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentViewRes.ts new file mode 100644 index 0000000..1c31c3a --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiDepartmentV1DepartmentViewRes.ts @@ -0,0 +1,20 @@ +export interface LekeApiDepartmentV1DepartmentViewRes { + /** 自增主键 */ + id?: number; + /** 所属用户ID(对应 users.id) */ + userId?: number; + /** 分部名称 */ + branchName?: string; + /** 分部散逸端的数量 */ + terminalCount?: number; + /** 分部当前天气/气候描述 */ + weather?: string; + /** 分部经理名称 */ + managerName?: string; + /** 分部地址 */ + location?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginByEmailReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginByEmailReq.ts new file mode 100644 index 0000000..c40f770 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginByEmailReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiLoginV1LoginByEmailReq { + email?: string; + code: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginByEmailRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginByEmailRes.ts new file mode 100644 index 0000000..1d4a854 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginByEmailRes.ts @@ -0,0 +1,5 @@ +export interface LekeApiLoginV1LoginByEmailRes { + /** JWT token for authentication */ + token?: string; + email?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginReq.ts new file mode 100644 index 0000000..41ddb7f --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiLoginV1LoginReq { + account: string; + password: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginRes.ts new file mode 100644 index 0000000..8d80ad6 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LoginRes.ts @@ -0,0 +1,5 @@ +export interface LekeApiLoginV1LoginRes { + /** JWT token for authentication */ + token?: string; + account?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LogoutReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LogoutReq.ts new file mode 100644 index 0000000..dc44ecb --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LogoutReq.ts @@ -0,0 +1,2 @@ +export interface LekeApiLoginV1LogoutReq { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LogoutRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LogoutRes.ts new file mode 100644 index 0000000..ae9c3be --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1LogoutRes.ts @@ -0,0 +1,2 @@ +export interface LekeApiLoginV1LogoutRes { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterByEmailReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterByEmailReq.ts new file mode 100644 index 0000000..a5f7bab --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterByEmailReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiLoginV1RegisterByEmailReq { + email?: string; + code: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterByEmailRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterByEmailRes.ts new file mode 100644 index 0000000..47eb872 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterByEmailRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiLoginV1RegisterByEmailRes { + email?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterReq.ts new file mode 100644 index 0000000..96db6e8 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiLoginV1RegisterReq { + account: string; + password: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterRes.ts new file mode 100644 index 0000000..8ef1619 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1RegisterRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiLoginV1RegisterRes { + account?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1SendVerificationCodeReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1SendVerificationCodeReq.ts new file mode 100644 index 0000000..e4d7b21 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1SendVerificationCodeReq.ts @@ -0,0 +1,3 @@ +export interface LekeApiLoginV1SendVerificationCodeReq { + email?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiLoginV1SendVerificationCodeRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1SendVerificationCodeRes.ts new file mode 100644 index 0000000..1cddfe0 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiLoginV1SendVerificationCodeRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiLoginV1SendVerificationCodeRes { + success?: boolean; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomCreateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomCreateReq.ts new file mode 100644 index 0000000..76a0089 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomCreateReq.ts @@ -0,0 +1,22 @@ +export interface LekeApiRoomV1RoomCreateReq { + /** 房间号 */ + room_code?: string; + /** 房间名称 */ + room_name?: string; + /** 主持人用户ID */ + host_id?: number; + /** 最大玩家人数 */ + max_players?: number; + /** 是否有密码:0无 1有 */ + has_password?: number; + /** 房间密码(建议哈希) */ + room_password?: string; + /** 是否私密房:0公开 1私密 */ + is_private?: number; + /** 规则系统,如COC、DND5E */ + system_name?: string; + /** 模组/剧本名称 */ + scenario_name?: string; + /** 房间简介/招募说明 */ + description?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomCreateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomCreateRes.ts new file mode 100644 index 0000000..69f2b6f --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomCreateRes.ts @@ -0,0 +1,6 @@ +export interface LekeApiRoomV1RoomCreateRes { + /** 房间ID */ + id?: number; + /** 房间号 */ + room_code?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomDeleteReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomDeleteReq.ts new file mode 100644 index 0000000..cf0f91d --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomDeleteReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiRoomV1RoomDeleteReq { + /** 房间号 */ + room_code?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomDeleteRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomDeleteRes.ts new file mode 100644 index 0000000..f481f76 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomDeleteRes.ts @@ -0,0 +1,2 @@ +export interface LekeApiRoomV1RoomDeleteRes { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomListReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomListReq.ts new file mode 100644 index 0000000..ac45a2e --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomListReq.ts @@ -0,0 +1,15 @@ +export interface LekeApiRoomV1RoomListReq { + page?: number; + pageSize?: number; + total?: number; + /** 房间号 */ + room_code?: string; + /** 房间名称 */ + room_name?: string; + /** 主持人用户ID */ + host_id?: number; + /** 房间状态:0未开始 1进行中 2已结束 3已关闭 */ + status?: number; + /** 规则系统,如COC、DND5E */ + system_name?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomListRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomListRes.ts new file mode 100644 index 0000000..d4fc445 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomListRes.ts @@ -0,0 +1,8 @@ +import { type LekeInternalModelRoomParams } from "../../interface"; + +export interface LekeApiRoomV1RoomListRes { + page?: number; + pageSize?: number; + total?: number; + rooms?: LekeInternalModelRoomParams[]; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomUpdateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomUpdateReq.ts new file mode 100644 index 0000000..5aeb1c6 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomUpdateReq.ts @@ -0,0 +1,40 @@ +export interface LekeApiRoomV1RoomUpdateReq { + /** 房间号(作为更新定位字段) */ + room_code?: string; + /** 自增主键 */ + id?: number; + /** 房间全局唯一ID(建议UUID) */ + roomId?: string; + /** 房间名称 */ + roomName?: string; + /** 主持人用户ID(GM/KP/经理,对应用户表id) */ + hostId?: number; + /** 主持人昵称(冗余字段,可选) */ + hostNickname?: string; + /** 最大玩家人数(不含主持人,可按需要约定) */ + maxPlayers?: number; + /** 当前玩家人数(不含主持人) */ + currentPlayers?: number; + /** 是否有密码:0无 1有 */ + hasPassword?: number; + /** 房间密码(建议存加密/哈希后的密码) */ + roomPassword?: string; + /** 是否私密房:0公开 1私密 */ + isPrivate?: number; + /** 房间状态:0未开始 1进行中 2已结束 3已关闭 */ + status?: number; + /** 规则系统:如 COC、DND5E 等 */ + systemName?: string; + /** 模组/剧本名称 */ + scenarioName?: string; + /** 房间简介/招募说明 */ + description?: string; + /** 房间创建时间 */ + createdAt?: string; + /** 开团时间 */ + startedAt?: string; + /** 结束时间 */ + endedAt?: string; + /** 信息最近更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomUpdateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomUpdateRes.ts new file mode 100644 index 0000000..20b56cc --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomUpdateRes.ts @@ -0,0 +1,4 @@ +export interface LekeApiRoomV1RoomUpdateRes { + /** 房间ID */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomViewReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomViewReq.ts new file mode 100644 index 0000000..2c759b7 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomViewReq.ts @@ -0,0 +1,6 @@ +export interface LekeApiRoomV1RoomViewReq { + /** 房间ID */ + id?: number; + /** 房间号 */ + room_code?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomViewRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomViewRes.ts new file mode 100644 index 0000000..e834f39 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiRoomV1RoomViewRes.ts @@ -0,0 +1,36 @@ +export interface LekeApiRoomV1RoomViewRes { + /** 自增主键 */ + id?: number; + /** 房间全局唯一ID(建议UUID) */ + roomId?: string; + /** 房间号(玩家看到/输入的房间号) */ + roomCode?: string; + /** 房间名称 */ + roomName?: string; + /** 主持人用户ID(GM/KP/经理,对应用户表id) */ + hostId?: number; + /** 主持人昵称(冗余字段,可选) */ + hostNickname?: string; + /** 最大玩家人数(不含主持人,可按需要约定) */ + maxPlayers?: number; + /** 当前玩家人数(不含主持人) */ + currentPlayers?: number; + /** 是否有密码:0无 1有 */ + hasPassword?: number; + /** 是否私密房:0公开 1私密 */ + isPrivate?: number; + /** 房间状态:0未开始 1进行中 2已结束 3已关闭 */ + status?: number; + /** 规则系统:如 COC、DND5E 等 */ + systemName?: string; + /** 模组/剧本名称 */ + scenarioName?: string; + /** 房间简介/招募说明 */ + description?: string; + /** 房间创建时间 */ + createdAt?: string; + /** 开团时间 */ + startedAt?: string; + /** 结束时间 */ + endedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansCreateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansCreateReq.ts new file mode 100644 index 0000000..12929ae --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansCreateReq.ts @@ -0,0 +1,6 @@ +export interface LekeApiUserV1FansCreateReq { + userId: number; + fanId: number; + /** 备注名(user_id 对 fan_id 的备注/分组) */ + remark?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansCreateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansCreateRes.ts new file mode 100644 index 0000000..fc7a8e0 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansCreateRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiUserV1FansCreateRes { + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansDeleteReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansDeleteReq.ts new file mode 100644 index 0000000..45efc27 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansDeleteReq.ts @@ -0,0 +1,3 @@ +export interface LekeApiUserV1FansDeleteReq { + id: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansDeleteRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansDeleteRes.ts new file mode 100644 index 0000000..cd0b42d --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansDeleteRes.ts @@ -0,0 +1,2 @@ +export interface LekeApiUserV1FansDeleteRes { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListItem.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListItem.ts new file mode 100644 index 0000000..ed86159 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListItem.ts @@ -0,0 +1,16 @@ +export interface LekeApiUserV1FansListItem { + /** 自增主键 */ + id?: number; + /** 用户ID(被关注者,本人) */ + userId?: number; + /** 粉丝用户ID */ + fanId?: number; + /** 状态:1=粉丝 0=取关/无效 */ + status?: number; + /** 备注名(user_id 对 fan_id 的备注/分组) */ + remark?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListReq.ts new file mode 100644 index 0000000..71fa7d1 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListReq.ts @@ -0,0 +1,8 @@ +export interface LekeApiUserV1FansListReq { + page?: number; + pageSize?: number; + total?: number; + userId: number; + /** 状态:1=粉丝 0=取关/无效 */ + status?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListRes.ts new file mode 100644 index 0000000..8b721c6 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansListRes.ts @@ -0,0 +1,8 @@ +import { type LekeApiUserV1FansListItem } from "../../interface"; + +export interface LekeApiUserV1FansListRes { + page?: number; + pageSize?: number; + total?: number; + list?: LekeApiUserV1FansListItem[]; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansUpdateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansUpdateReq.ts new file mode 100644 index 0000000..960721e --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansUpdateReq.ts @@ -0,0 +1,7 @@ +export interface LekeApiUserV1FansUpdateReq { + id: number; + /** 状态:1=粉丝 0=取关/无效 */ + status?: number; + /** 备注名(user_id 对 fan_id 的备注/分组) */ + remark?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansUpdateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansUpdateRes.ts new file mode 100644 index 0000000..f74bbf0 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansUpdateRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiUserV1FansUpdateRes { + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansViewReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansViewReq.ts new file mode 100644 index 0000000..a814dab --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansViewReq.ts @@ -0,0 +1,3 @@ +export interface LekeApiUserV1FansViewReq { + id: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansViewRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansViewRes.ts new file mode 100644 index 0000000..3ca90fb --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1FansViewRes.ts @@ -0,0 +1,16 @@ +export interface LekeApiUserV1FansViewRes { + /** 自增主键 */ + id?: number; + /** 用户ID(被关注者,本人) */ + userId?: number; + /** 粉丝用户ID */ + fanId?: number; + /** 状态:1=粉丝 0=取关/无效 */ + status?: number; + /** 备注名(user_id 对 fan_id 的备注/分组) */ + remark?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleCreateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleCreateReq.ts new file mode 100644 index 0000000..5d1a0d5 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleCreateReq.ts @@ -0,0 +1,18 @@ +export interface LekeApiUserV1RoleCreateReq { + /** 所属用户ID */ + userId: number; + /** 所属部门ID */ + departmentId?: number; + /** 特工名字 */ + agentName: string; + /** 代号 */ + codeName: string; + /** 性别 */ + gender: 'male' | 'female' | 'other'; + /** ARC:异常 */ + arcAbnormal?: string; + /** ARC:现实 */ + arcReality?: string; + /** ARC:职位 */ + arcPosition?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleCreateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleCreateRes.ts new file mode 100644 index 0000000..0740b63 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleCreateRes.ts @@ -0,0 +1,4 @@ +export interface LekeApiUserV1RoleCreateRes { + /** 角色ID */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleDeleteReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleDeleteReq.ts new file mode 100644 index 0000000..af90845 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleDeleteReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiUserV1RoleDeleteReq { + /** 角色ID */ + id: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleDeleteRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleDeleteRes.ts new file mode 100644 index 0000000..2f0081f --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleDeleteRes.ts @@ -0,0 +1,4 @@ +export interface LekeApiUserV1RoleDeleteRes { + /** 角色ID */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleListReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleListReq.ts new file mode 100644 index 0000000..d45f083 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleListReq.ts @@ -0,0 +1,9 @@ +export interface LekeApiUserV1RoleListReq { + page?: number; + pageSize?: number; + total?: number; + /** 用户ID */ + userId?: number; + /** 部门ID */ + departmentId?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleListRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleListRes.ts new file mode 100644 index 0000000..be09ff4 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleListRes.ts @@ -0,0 +1,9 @@ +import { type LekeApiUserV1RoleViewParams } from "../../interface"; + +export interface LekeApiUserV1RoleListRes { + page?: number; + pageSize?: number; + total?: number; + /** 角色列表 */ + list?: LekeApiUserV1RoleViewParams[]; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RolePermissionCheckReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RolePermissionCheckReq.ts new file mode 100644 index 0000000..92a3f3f --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RolePermissionCheckReq.ts @@ -0,0 +1,8 @@ +export interface LekeApiUserV1RolePermissionCheckReq { + /** 角色ID */ + roleId: number; + /** 文件需要的轨道值(0-40) */ + fileValue: number; + /** 轨道类型:blue(蓝轨),yellow(黄轨),red(红轨) */ + trackType: 'blue' | 'yellow' | 'red'; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RolePermissionCheckRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RolePermissionCheckRes.ts new file mode 100644 index 0000000..10b15c9 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RolePermissionCheckRes.ts @@ -0,0 +1,6 @@ +export interface LekeApiUserV1RolePermissionCheckRes { + /** 响应码:333表示成功 */ + code?: number; + /** 响应消息 */ + mes?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleUpdateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleUpdateReq.ts new file mode 100644 index 0000000..f13ed68 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleUpdateReq.ts @@ -0,0 +1,28 @@ +export interface LekeApiUserV1RoleUpdateReq { + /** 角色ID */ + id: number; + /** 所属部门ID */ + departmentId?: number; + /** 特工名字 */ + agentName: string; + /** 代号 */ + codeName: string; + /** 性别 */ + gender: 'male' | 'female' | 'other'; + /** ARC:异常 */ + arcAbnormal?: string; + /** ARC:现实 */ + arcReality?: string; + /** ARC:职位 */ + arcPosition?: string; + /** 嘉奖次数 */ + commendation?: number; + /** 申戒次数 */ + reprimand?: number; + /** 蓝轨(0-40) */ + blueTrack?: number; + /** 黄轨(0-40) */ + yellowTrack?: number; + /** 红轨(0-40) */ + redTrack?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleUpdateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleUpdateRes.ts new file mode 100644 index 0000000..eb04098 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleUpdateRes.ts @@ -0,0 +1,4 @@ +export interface LekeApiUserV1RoleUpdateRes { + /** 角色ID */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewParams.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewParams.ts new file mode 100644 index 0000000..631a2fa --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewParams.ts @@ -0,0 +1,48 @@ +export interface LekeApiUserV1RoleViewParams { + /** 角色卡ID */ + id?: number; + /** 所属用户ID */ + userId?: number; + /** 所属部门ID */ + departmentId?: number; + /** 嘉奖次数 */ + commendation?: number; + /** 申戒次数 */ + reprimand?: number; + /** 蓝轨(0-40) */ + blueTrack?: number; + /** 黄轨(0-40) */ + yellowTrack?: number; + /** 红轨(0-40) */ + redTrack?: number; + /** ARC:异常 */ + arcAbnormal?: string; + /** ARC:现实 */ + arcReality?: string; + /** ARC:职位 */ + arcPosition?: string; + /** 特工名字 */ + agentName?: string; + /** 代号 */ + codeName?: string; + /** 性别 */ + gender?: string; + /** Meticulousness (0-100, QA) */ + qaMeticulous?: number; + /** Deception (0-100, QA) */ + qaDeception?: number; + /** Vigor / Drive (0-100, QA) */ + qaVigor?: number; + /** Empathy (0-100, QA) */ + qaEmpathy?: number; + /** Initiative (0-100, QA) */ + qaInitiative?: number; + /** Resilience / Persistence (0-100, QA) */ + qaResilience?: number; + /** Presence / Charisma (0-100, QA) */ + qaPresence?: number; + /** Professionalism (0-100, QA) */ + qaProfessional?: number; + /** Discretion / Low profile (0-100, QA) */ + qaDiscretion?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewReq.ts new file mode 100644 index 0000000..8b4a061 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiUserV1RoleViewReq { + /** 角色ID */ + id: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewRes.ts new file mode 100644 index 0000000..34c220c --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1RoleViewRes.ts @@ -0,0 +1,48 @@ +export interface LekeApiUserV1RoleViewRes { + /** 角色卡ID */ + id?: number; + /** 所属用户ID */ + userId?: number; + /** 所属部门ID */ + departmentId?: number; + /** 嘉奖次数 */ + commendation?: number; + /** 申戒次数 */ + reprimand?: number; + /** 蓝轨(0-40) */ + blueTrack?: number; + /** 黄轨(0-40) */ + yellowTrack?: number; + /** 红轨(0-40) */ + redTrack?: number; + /** ARC:异常 */ + arcAbnormal?: string; + /** ARC:现实 */ + arcReality?: string; + /** ARC:职位 */ + arcPosition?: string; + /** 特工名字 */ + agentName?: string; + /** 代号 */ + codeName?: string; + /** 性别 */ + gender?: string; + /** Meticulousness (0-100, QA) */ + qaMeticulous?: number; + /** Deception (0-100, QA) */ + qaDeception?: number; + /** Vigor / Drive (0-100, QA) */ + qaVigor?: number; + /** Empathy (0-100, QA) */ + qaEmpathy?: number; + /** Initiative (0-100, QA) */ + qaInitiative?: number; + /** Resilience / Persistence (0-100, QA) */ + qaResilience?: number; + /** Presence / Charisma (0-100, QA) */ + qaPresence?: number; + /** Professionalism (0-100, QA) */ + qaProfessional?: number; + /** Discretion / Low profile (0-100, QA) */ + qaDiscretion?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeCreateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeCreateReq.ts new file mode 100644 index 0000000..afaca75 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeCreateReq.ts @@ -0,0 +1,6 @@ +export interface LekeApiUserV1SubscribeCreateReq { + userId: number; + followId: number; + /** 备注名(user_id 对 follow_id 的备注) */ + remark?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeCreateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeCreateRes.ts new file mode 100644 index 0000000..181581d --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeCreateRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiUserV1SubscribeCreateRes { + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeDeleteReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeDeleteReq.ts new file mode 100644 index 0000000..7eabfee --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeDeleteReq.ts @@ -0,0 +1,3 @@ +export interface LekeApiUserV1SubscribeDeleteReq { + id: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeDeleteRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeDeleteRes.ts new file mode 100644 index 0000000..e984b92 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeDeleteRes.ts @@ -0,0 +1,2 @@ +export interface LekeApiUserV1SubscribeDeleteRes { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListItem.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListItem.ts new file mode 100644 index 0000000..6dbf579 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListItem.ts @@ -0,0 +1,16 @@ +export interface LekeApiUserV1SubscribeListItem { + /** 自增主键 */ + id?: number; + /** 用户ID(关注者,本人) */ + userId?: number; + /** 被关注的用户ID */ + followId?: number; + /** 状态:1=关注中 0=取消关注 */ + status?: number; + /** 备注名(user_id 对 follow_id 的备注) */ + remark?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListReq.ts new file mode 100644 index 0000000..ad35b38 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListReq.ts @@ -0,0 +1,10 @@ +export interface LekeApiUserV1SubscribeListReq { + page?: number; + pageSize?: number; + total?: number; + userId: number; + /** 状态:1=关注中 0=取消关注 */ + status?: number; + /** 被关注的用户ID */ + followId?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListRes.ts new file mode 100644 index 0000000..e6dacf8 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeListRes.ts @@ -0,0 +1,8 @@ +import { type LekeApiUserV1SubscribeListItem } from "../../interface"; + +export interface LekeApiUserV1SubscribeListRes { + page?: number; + pageSize?: number; + total?: number; + list?: LekeApiUserV1SubscribeListItem[]; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeUpdateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeUpdateReq.ts new file mode 100644 index 0000000..f7420c7 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeUpdateReq.ts @@ -0,0 +1,7 @@ +export interface LekeApiUserV1SubscribeUpdateReq { + id: number; + /** 状态:1=关注中 0=取消关注 */ + status?: number; + /** 备注名(user_id 对 follow_id 的备注) */ + remark?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeUpdateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeUpdateRes.ts new file mode 100644 index 0000000..3db61d5 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeUpdateRes.ts @@ -0,0 +1,3 @@ +export interface LekeApiUserV1SubscribeUpdateRes { + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeViewReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeViewReq.ts new file mode 100644 index 0000000..762b46e --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeViewReq.ts @@ -0,0 +1,3 @@ +export interface LekeApiUserV1SubscribeViewReq { + id: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeViewRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeViewRes.ts new file mode 100644 index 0000000..36b3f87 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1SubscribeViewRes.ts @@ -0,0 +1,16 @@ +export interface LekeApiUserV1SubscribeViewRes { + /** 自增主键 */ + id?: number; + /** 用户ID(关注者,本人) */ + userId?: number; + /** 被关注的用户ID */ + followId?: number; + /** 状态:1=关注中 0=取消关注 */ + status?: number; + /** 备注名(user_id 对 follow_id 的备注) */ + remark?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceListReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceListReq.ts new file mode 100644 index 0000000..797baa8 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceListReq.ts @@ -0,0 +1,17 @@ +export interface LekeApiUserV1TraceListReq { + page?: number; + pageSize?: number; + total?: number; + /** 用户ID */ + userId?: number; + /** 角色ID */ + roleId?: number; + /** 部门ID */ + departmentId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceListRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceListRes.ts new file mode 100644 index 0000000..6652906 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceListRes.ts @@ -0,0 +1,8 @@ +import { type LekeApiUserV1TraceViewParams } from "../../interface"; + +export interface LekeApiUserV1TraceListRes { + page?: number; + pageSize?: number; + total?: number; + list?: LekeApiUserV1TraceViewParams[]; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceReduceReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceReduceReq.ts new file mode 100644 index 0000000..42b3663 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceReduceReq.ts @@ -0,0 +1,10 @@ +export interface LekeApiUserV1TraceReduceReq { + /** 角色ID */ + roleId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceReduceRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceReduceRes.ts new file mode 100644 index 0000000..9fa4692 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceReduceRes.ts @@ -0,0 +1,2 @@ +export interface LekeApiUserV1TraceReduceRes { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceUpdateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceUpdateReq.ts new file mode 100644 index 0000000..0e2d6f4 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceUpdateReq.ts @@ -0,0 +1,12 @@ +export interface LekeApiUserV1TraceUpdateReq { + userId?: number; + /** 角色ID */ + roleId?: number; + departmentId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceUpdateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceUpdateRes.ts new file mode 100644 index 0000000..b685785 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceUpdateRes.ts @@ -0,0 +1,10 @@ +export interface LekeApiUserV1TraceUpdateRes { + /** 角色ID */ + roleId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewParams.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewParams.ts new file mode 100644 index 0000000..855bf5b --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewParams.ts @@ -0,0 +1,14 @@ +export interface LekeApiUserV1TraceViewParams { + /** 用户ID */ + userId?: number; + /** 角色ID */ + roleId?: number; + /** 部门ID */ + departmentId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewReq.ts new file mode 100644 index 0000000..3de9fbb --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewReq.ts @@ -0,0 +1,10 @@ +export interface LekeApiUserV1TraceViewReq { + /** 角色ID */ + roleId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewRes.ts new file mode 100644 index 0000000..1c8e414 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1TraceViewRes.ts @@ -0,0 +1,14 @@ +export interface LekeApiUserV1TraceViewRes { + /** 用户ID */ + userId?: number; + /** 角色ID */ + roleId?: number; + /** 部门ID */ + departmentId?: number; + /** 红轨 */ + redTrace?: number; + /** 黄轨 */ + yellowTrace?: number; + /** 蓝轨 */ + blueTrace?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserDeleteReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserDeleteReq.ts new file mode 100644 index 0000000..adf5ede --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserDeleteReq.ts @@ -0,0 +1,4 @@ +export interface LekeApiUserV1UserDeleteReq { + /** 账号 */ + account?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserDeleteRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserDeleteRes.ts new file mode 100644 index 0000000..15b5fab --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserDeleteRes.ts @@ -0,0 +1,2 @@ +export interface LekeApiUserV1UserDeleteRes { +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserListReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserListReq.ts new file mode 100644 index 0000000..6925fca --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserListReq.ts @@ -0,0 +1,9 @@ +export interface LekeApiUserV1UserListReq { + page?: number; + pageSize?: number; + total?: number; + /** 账号 */ + account?: string; + /** 昵称 */ + nickname?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserListRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserListRes.ts new file mode 100644 index 0000000..67d9046 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserListRes.ts @@ -0,0 +1,8 @@ +import { type LekeInternalModelUserViewParams } from "../../interface"; + +export interface LekeApiUserV1UserListRes { + page?: number; + pageSize?: number; + total?: number; + Users?: LekeInternalModelUserViewParams[]; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserUpdateReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserUpdateReq.ts new file mode 100644 index 0000000..6b1dc40 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserUpdateReq.ts @@ -0,0 +1,24 @@ +export interface LekeApiUserV1UserUpdateReq { + /** 账号 */ + account?: string; + /** 用户ID */ + id?: number; + /** 密码哈希 */ + password?: string; + /** 昵称 */ + nickname?: string; + /** 性别:0未知 1男 2女 */ + gender?: number; + /** 生日 */ + birthDate?: string; + /** 用户类型:normal普通用户,vip为VIP用户 */ + userType?: string; + /** VIP开始时间 */ + vipStartAt?: string; + /** VIP结束时间 */ + vipEndAt?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserUpdateRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserUpdateRes.ts new file mode 100644 index 0000000..f1fea21 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserUpdateRes.ts @@ -0,0 +1,4 @@ +export interface LekeApiUserV1UserUpdateRes { + /** 用户ID */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserViewReq.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserViewReq.ts new file mode 100644 index 0000000..ac83e9b --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserViewReq.ts @@ -0,0 +1,8 @@ +export interface LekeApiUserV1UserViewReq { + /** 账号 */ + account?: string; + /** 昵称 */ + nickname?: string; + /** 用户ID */ + id?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserViewRes.ts b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserViewRes.ts new file mode 100644 index 0000000..4635e0d --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeApiUserV1UserViewRes.ts @@ -0,0 +1,26 @@ +export interface LekeApiUserV1UserViewRes { + /** 用户ID */ + id?: number; + /** 账号 */ + account?: string; + /** 昵称 */ + nickname?: string; + /** 性别:0未知 1男 2女 */ + gender?: number; + /** 生日 */ + birthDate?: string; + /** 用户类型:normal普通用户,vip为VIP用户 */ + userType?: string; + /** VIP开始时间 */ + vipStartAt?: string; + /** VIP结束时间 */ + vipEndAt?: string; + /** 创建时间 */ + createdAt?: string; + /** 现实身份/角色 */ + realityRole?: string; + /** 异常身份/角色 */ + abnormalRole?: string; + /** 职位 */ + jobTitle?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeInternalModelContainmentRepo.ts b/Frontend/src/api/interface/apiTypes/LekeInternalModelContainmentRepo.ts new file mode 100644 index 0000000..57910c1 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeInternalModelContainmentRepo.ts @@ -0,0 +1,14 @@ +export interface LekeInternalModelContainmentRepo { + /** number of contained anomalies (收容异常的数量) */ + abnormal?: number; + /** agent (特工) */ + agentName?: string; + /** name of the anomaly (异常体的名字) */ + anomalyName?: string; + /** primary key(大于0为修改,其他为新增) */ + id?: number; + /** containment repository name or code (收容库) */ + repoName?: string; + /** terminal (散逸端) */ + terminalId?: number; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeInternalModelRoomParams.ts b/Frontend/src/api/interface/apiTypes/LekeInternalModelRoomParams.ts new file mode 100644 index 0000000..0bf62f3 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeInternalModelRoomParams.ts @@ -0,0 +1,40 @@ +export interface LekeInternalModelRoomParams { + /** 自增主键 */ + id?: number; + /** 房间全局唯一ID(建议UUID) */ + roomId?: string; + /** 房间号(玩家看到/输入的房间号) */ + roomCode?: string; + /** 房间名称 */ + roomName?: string; + /** 主持人用户ID(GM/KP/经理,对应用户表id) */ + hostId?: number; + /** 主持人昵称(冗余字段,可选) */ + hostNickname?: string; + /** 最大玩家人数(不含主持人,可按需要约定) */ + maxPlayers?: number; + /** 当前玩家人数(不含主持人) */ + currentPlayers?: number; + /** 是否有密码:0无 1有 */ + hasPassword?: number; + /** 房间密码(建议存加密/哈希后的密码) */ + roomPassword?: string; + /** 是否私密房:0公开 1私密 */ + isPrivate?: number; + /** 房间状态:0未开始 1进行中 2已结束 3已关闭 */ + status?: number; + /** 规则系统:如 COC、DND5E 等 */ + systemName?: string; + /** 模组/剧本名称 */ + scenarioName?: string; + /** 房间简介/招募说明 */ + description?: string; + /** 房间创建时间 */ + createdAt?: string; + /** 开团时间 */ + startedAt?: string; + /** 结束时间 */ + endedAt?: string; + /** 信息最近更新时间 */ + updatedAt?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LekeInternalModelUserViewParams.ts b/Frontend/src/api/interface/apiTypes/LekeInternalModelUserViewParams.ts new file mode 100644 index 0000000..8db2725 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LekeInternalModelUserViewParams.ts @@ -0,0 +1,26 @@ +export interface LekeInternalModelUserViewParams { + /** 用户ID */ + id?: number; + /** 账号 */ + account?: string; + /** 昵称 */ + nickname?: string; + /** 性别:0未知 1男 2女 */ + gender?: number; + /** 生日 */ + birthDate?: string; + /** 用户类型:normal普通用户,vip为VIP用户 */ + userType?: string; + /** VIP开始时间 */ + vipStartAt?: string; + /** VIP结束时间 */ + vipEndAt?: string; + /** 创建时间 */ + createdAt?: string; + /** 现实身份/角色 */ + realityRole?: string; + /** 异常身份/角色 */ + abnormalRole?: string; + /** 职位 */ + jobTitle?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LoginRequest.ts b/Frontend/src/api/interface/apiTypes/LoginRequest.ts new file mode 100644 index 0000000..5ff5a42 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LoginRequest.ts @@ -0,0 +1,4 @@ +export interface LoginRequest { + username?: string; + password?: string; +} diff --git a/Frontend/src/api/interface/apiTypes/LoginResponse.ts b/Frontend/src/api/interface/apiTypes/LoginResponse.ts new file mode 100644 index 0000000..94ff708 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/LoginResponse.ts @@ -0,0 +1,6 @@ +import { type User } from "../../interface"; + +export interface LoginResponse { + token?: string; + user?: User; +} diff --git a/Frontend/src/api/interface/apiTypes/User.ts b/Frontend/src/api/interface/apiTypes/User.ts new file mode 100644 index 0000000..9f36b76 --- /dev/null +++ b/Frontend/src/api/interface/apiTypes/User.ts @@ -0,0 +1,5 @@ +export interface User { + id?: number; + username?: string; + email?: string; +} diff --git a/Frontend/src/api/interface/index.ts b/Frontend/src/api/interface/index.ts new file mode 100644 index 0000000..229b22f --- /dev/null +++ b/Frontend/src/api/interface/index.ts @@ -0,0 +1,99 @@ +export * from "./apiTypes/LekeApiContainmentV1ContainmentRepoDeleteReq"; +export * from "./apiTypes/LekeApiContainmentV1ContainmentRepoDeleteRes"; +export * from "./apiTypes/LekeApiContainmentV1ContainmentRepoListReq"; +export * from "./apiTypes/LekeApiContainmentV1ContainmentRepoListRes"; +export * from "./apiTypes/LekeInternalModelContainmentRepo"; +export * from "./apiTypes/LekeApiContainmentV1ContainmentRepoUpdateReq"; +export * from "./apiTypes/LekeApiContainmentV1ContainmentRepoUpdateRes"; +export * from "./apiTypes/LekeApiContainmentV1ContainmentRepoViewReq"; +export * from "./apiTypes/LekeApiContainmentV1ContainmentRepoViewRes"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentCreateReq"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentCreateRes"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentDeleteReq"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentDeleteRes"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentListReq"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentListRes"; +export * from "./apiTypes/LekeApiDepartmentV1Department"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentUpdateReq"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentUpdateRes"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentViewReq"; +export * from "./apiTypes/LekeApiDepartmentV1DepartmentViewRes"; +export * from "./apiTypes/LekeApiLoginV1SendVerificationCodeReq"; +export * from "./apiTypes/LekeApiLoginV1SendVerificationCodeRes"; +export * from "./apiTypes/LekeApiUserV1FansCreateReq"; +export * from "./apiTypes/LekeApiUserV1FansCreateRes"; +export * from "./apiTypes/LekeApiUserV1FansDeleteReq"; +export * from "./apiTypes/LekeApiUserV1FansDeleteRes"; +export * from "./apiTypes/LekeApiUserV1FansListReq"; +export * from "./apiTypes/LekeApiUserV1FansListRes"; +export * from "./apiTypes/LekeApiUserV1FansListItem"; +export * from "./apiTypes/LekeApiUserV1FansUpdateReq"; +export * from "./apiTypes/LekeApiUserV1FansUpdateRes"; +export * from "./apiTypes/LekeApiUserV1FansViewReq"; +export * from "./apiTypes/LekeApiUserV1FansViewRes"; +export * from "./apiTypes/LekeApiLoginV1LoginReq"; +export * from "./apiTypes/LekeApiLoginV1LoginRes"; +export * from "./apiTypes/LekeApiLoginV1LoginByEmailReq"; +export * from "./apiTypes/LekeApiLoginV1LoginByEmailRes"; +export * from "./apiTypes/LekeApiLoginV1LogoutReq"; +export * from "./apiTypes/LekeApiLoginV1LogoutRes"; +export * from "./apiTypes/LekeApiLoginV1RegisterReq"; +export * from "./apiTypes/LekeApiLoginV1RegisterRes"; +export * from "./apiTypes/LekeApiLoginV1RegisterByEmailReq"; +export * from "./apiTypes/LekeApiLoginV1RegisterByEmailRes"; +export * from "./apiTypes/LekeApiUserV1RoleCreateReq"; +export * from "./apiTypes/LekeApiUserV1RoleCreateRes"; +export * from "./apiTypes/LekeApiUserV1RoleDeleteReq"; +export * from "./apiTypes/LekeApiUserV1RoleDeleteRes"; +export * from "./apiTypes/LekeApiUserV1RoleListReq"; +export * from "./apiTypes/LekeApiUserV1RoleListRes"; +export * from "./apiTypes/LekeApiUserV1RoleViewParams"; +export * from "./apiTypes/LekeApiUserV1RolePermissionCheckReq"; +export * from "./apiTypes/LekeApiUserV1RolePermissionCheckRes"; +export * from "./apiTypes/LekeApiUserV1RoleUpdateReq"; +export * from "./apiTypes/LekeApiUserV1RoleUpdateRes"; +export * from "./apiTypes/LekeApiUserV1RoleViewReq"; +export * from "./apiTypes/LekeApiUserV1RoleViewRes"; +export * from "./apiTypes/LekeApiRoomV1RoomCreateReq"; +export * from "./apiTypes/LekeApiRoomV1RoomCreateRes"; +export * from "./apiTypes/LekeApiRoomV1RoomDeleteReq"; +export * from "./apiTypes/LekeApiRoomV1RoomDeleteRes"; +export * from "./apiTypes/LekeApiRoomV1RoomListReq"; +export * from "./apiTypes/LekeApiRoomV1RoomListRes"; +export * from "./apiTypes/LekeInternalModelRoomParams"; +export * from "./apiTypes/LekeApiRoomV1RoomUpdateReq"; +export * from "./apiTypes/LekeApiRoomV1RoomUpdateRes"; +export * from "./apiTypes/LekeApiRoomV1RoomViewReq"; +export * from "./apiTypes/LekeApiRoomV1RoomViewRes"; +export * from "./apiTypes/LekeApiUserV1SubscribeCreateReq"; +export * from "./apiTypes/LekeApiUserV1SubscribeCreateRes"; +export * from "./apiTypes/LekeApiUserV1SubscribeDeleteReq"; +export * from "./apiTypes/LekeApiUserV1SubscribeDeleteRes"; +export * from "./apiTypes/LekeApiUserV1SubscribeListReq"; +export * from "./apiTypes/LekeApiUserV1SubscribeListRes"; +export * from "./apiTypes/LekeApiUserV1SubscribeListItem"; +export * from "./apiTypes/LekeApiUserV1SubscribeUpdateReq"; +export * from "./apiTypes/LekeApiUserV1SubscribeUpdateRes"; +export * from "./apiTypes/LekeApiUserV1SubscribeViewReq"; +export * from "./apiTypes/LekeApiUserV1SubscribeViewRes"; +export * from "./apiTypes/LekeApiUserV1TraceReduceReq"; +export * from "./apiTypes/LekeApiUserV1TraceReduceRes"; +export * from "./apiTypes/LekeApiUserV1TraceListReq"; +export * from "./apiTypes/LekeApiUserV1TraceListRes"; +export * from "./apiTypes/LekeApiUserV1TraceViewParams"; +export * from "./apiTypes/LekeApiUserV1TraceUpdateReq"; +export * from "./apiTypes/LekeApiUserV1TraceUpdateRes"; +export * from "./apiTypes/LekeApiUserV1TraceViewReq"; +export * from "./apiTypes/LekeApiUserV1TraceViewRes"; +export * from "./apiTypes/LekeApiUserV1UserDeleteReq"; +export * from "./apiTypes/LekeApiUserV1UserDeleteRes"; +export * from "./apiTypes/LekeApiUserV1UserListReq"; +export * from "./apiTypes/LekeApiUserV1UserListRes"; +export * from "./apiTypes/LekeInternalModelUserViewParams"; +export * from "./apiTypes/LekeApiUserV1UserUpdateReq"; +export * from "./apiTypes/LekeApiUserV1UserUpdateRes"; +export * from "./apiTypes/LekeApiUserV1UserViewReq"; +export * from "./apiTypes/LekeApiUserV1UserViewRes"; + +export type Primitive = undefined | null | boolean | string | number | symbol; +export type DeepRequired = T extends Primitive ? T : keyof T extends never ? T : { [K in keyof T]-?: DeepRequired }; diff --git a/Frontend/src/api/room.js b/Frontend/src/api/room.js new file mode 100644 index 0000000..9aa91ca --- /dev/null +++ b/Frontend/src/api/room.js @@ -0,0 +1,5 @@ +import http from './http' + +export const getRooms = (params) => http.get('/room/list', { params }) +export const createRoom = (data) => http.post('/room/create', data) +export const joinRoom = (data) => http.post('/room/join', data) diff --git a/Frontend/src/api/swagger.config.json b/Frontend/src/api/swagger.config.json new file mode 100644 index 0000000..a50a7de --- /dev/null +++ b/Frontend/src/api/swagger.config.json @@ -0,0 +1,4 @@ +{ + "docsUrl": "http://127.0.0.1:8000/api.json", + "axiosInstanceUrl": "./src/api/http.js" +} \ No newline at end of file diff --git a/Frontend/src/api/user.js b/Frontend/src/api/user.js new file mode 100644 index 0000000..e0fc3fa --- /dev/null +++ b/Frontend/src/api/user.js @@ -0,0 +1,13 @@ +import http from './http' + +// 查询用户列表(带分页、模糊查询 account/nickname) +export const getUsers = (params) => http.get('/user/list', { params }) + +// 创建用户(使用 POST,对应后端 UserCreate) +export const createUser = (data) => http.post('/user/create', data) + +// 更新用户信息(使用 PUT,对应后端 UserUpdate) +export const updateUser = (data) => http.put('/user/update', data) + +// 删除用户(使用 DELETE,对应后端 UserDelete) +export const deleteUser = (data) => http.delete('/user/delete', { data }) \ No newline at end of file diff --git a/Frontend/src/assets/vue.svg b/Frontend/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/Frontend/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Frontend/src/components/HelloWorld.vue b/Frontend/src/components/HelloWorld.vue new file mode 100644 index 0000000..546ebbc --- /dev/null +++ b/Frontend/src/components/HelloWorld.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/Frontend/src/components/Layout.vue b/Frontend/src/components/Layout.vue new file mode 100644 index 0000000..5b30948 --- /dev/null +++ b/Frontend/src/components/Layout.vue @@ -0,0 +1,147 @@ + + + + + + diff --git a/Frontend/src/components/Navbar.vue b/Frontend/src/components/Navbar.vue new file mode 100644 index 0000000..bb077e9 --- /dev/null +++ b/Frontend/src/components/Navbar.vue @@ -0,0 +1,216 @@ + + + + + + diff --git a/Frontend/src/main.js b/Frontend/src/main.js index 8533fe7..7d5d24d 100644 --- a/Frontend/src/main.js +++ b/Frontend/src/main.js @@ -1,21 +1,8 @@ import { createApp } from 'vue' -import { createPinia } from 'pinia' import Antd from 'ant-design-vue' import 'ant-design-vue/dist/reset.css' +import './style.css' import App from './App.vue' import router from './router' -import { useUserStore } from './stores/user' - -const app = createApp(App) -const pinia = createPinia() - -app.use(pinia) -app.use(router) -app.use(Antd) - -// 初始化用户信息 -const userStore = useUserStore() -userStore.initUser() - -app.mount('#app') +createApp(App).use(router).use(Antd).mount('#app') diff --git a/Frontend/src/router/index.js b/Frontend/src/router/index.js index 3926dd2..3a84115 100644 --- a/Frontend/src/router/index.js +++ b/Frontend/src/router/index.js @@ -1,73 +1,74 @@ -import { createRouter, createWebHistory } from 'vue-router' -import { useUserStore } from '@/stores/user' - -const routes = [ - { - path: '/', - redirect: '/home' - }, - { - path: '/login', - name: 'Login', - component: () => import('@/views/Login.vue'), - meta: { requiresAuth: false } - }, - { - path: '/register', - name: 'Register', - component: () => import('@/views/Register.vue'), - meta: { requiresAuth: false } - }, - { - path: '/home', - name: 'Home', - component: () => import('@/views/Home.vue'), - meta: { requiresAuth: true } - }, - { - path: '/room/:roomId', - name: 'Room', - component: () => import('@/views/Room.vue'), - meta: { requiresAuth: true } - }, - { - path: '/organization', - name: 'Organization', - component: () => import('@/views/Organization.vue'), - meta: { requiresAuth: true } - }, - { - path: '/anomaly', - name: 'Anomaly', - component: () => import('@/views/Anomaly.vue'), - meta: { requiresAuth: true } - } -] +import {createRouter, createWebHistory} from 'vue-router' +import Login from '../views/Login.vue' +import Layout from '../components/Layout.vue' +import Main from '../views/Main.vue' +import User from '../views/User.vue' +import Profile from '../views/Profile.vue' +import Role from "../views/Role.vue"; +import FileView from "../views/FileView.vue"; const router = createRouter({ - history: createWebHistory(), - routes + history: createWebHistory(), + routes: [ + { + path: '/', + name: 'login', + component: Login, + }, + { + path: '/file-view', + name: 'file-view', + component: FileView + }, + { + path: '/', + component: Layout, + children: [ + { + path: 'main', + name: 'main', + component: Main, + }, + { + path: 'rooms', + name: 'rooms', + component: Main, // 复用 Main 作为房间大厅 + }, + { + path: 'users', + name: 'users', + component: User, + }, + { + path: 'profile', + name: 'profile', + component: Profile, + }, + { + path: 'roles', + name: 'roles', + component: Role + } + ] + }, + { + path: '/:pathMatch(.*)*', + redirect: '/', + }, + ], }) +// 简单路由守卫 router.beforeEach((to, from, next) => { - const userStore = useUserStore() - - // 如果路由需要认证,先初始化用户信息 - if (to.meta.requiresAuth) { - // 确保用户信息已初始化 - if (!userStore.userInfo) { - userStore.initUser() + const token = localStorage.getItem('ta_token') + // 文件查看页面不需要token验证 + if (to.name === 'file-view') { + next() + } else if (to.name !== 'login' && !token) { + next({name: 'login'}) + } else { + next() } - - // 检查是否已登录 - if (!userStore.isLoggedIn || !userStore.userInfo) { - next('/login') - return - } - } - - next() }) export default router - diff --git a/Frontend/src/stores/anomaly.js b/Frontend/src/stores/anomaly.js deleted file mode 100644 index bb838e3..0000000 --- a/Frontend/src/stores/anomaly.js +++ /dev/null @@ -1,69 +0,0 @@ -import { defineStore } from 'pinia' -import { ref } from 'vue' - -export const useAnomalyStore = defineStore('anomaly', () => { - const anomalies = ref([]) // 所有异常 - const containedAnomalies = ref([]) // 被收容的异常 - const resolvedAnomalies = ref([]) // 已解决的异常 - const weather = ref('') // 天气系统 - const scatteredEnds = ref([]) // 散一端 - - function setAnomalies(anomalyList) { - anomalies.value = anomalyList - } - - function addAnomaly(anomaly) { - anomalies.value.push(anomaly) - } - - function containAnomaly(anomalyId) { - const anomaly = anomalies.value.find(a => a.id === anomalyId) - if (anomaly) { - containedAnomalies.value.push(anomaly) - anomalies.value = anomalies.value.filter(a => a.id !== anomalyId) - } - } - - function resolveAnomaly(anomalyId) { - const anomaly = containedAnomalies.value.find(a => a.id === anomalyId) - if (anomaly) { - resolvedAnomalies.value.push(anomaly) - containedAnomalies.value = containedAnomalies.value.filter(a => a.id !== anomalyId) - } - } - - function setWeather(weatherData) { - weather.value = weatherData - } - - function setScatteredEnds(ends) { - scatteredEnds.value = ends - } - - function addScatteredEnd(end) { - scatteredEnds.value.push(end) - } - - return { - anomalies, - containedAnomalies, - resolvedAnomalies, - weather, - scatteredEnds, - setAnomalies, - addAnomaly, - containAnomaly, - resolveAnomaly, - setWeather, - setScatteredEnds, - addScatteredEnd - } -}) - - - - - - - - diff --git a/Frontend/src/stores/organization.js b/Frontend/src/stores/organization.js deleted file mode 100644 index aa559fe..0000000 --- a/Frontend/src/stores/organization.js +++ /dev/null @@ -1,59 +0,0 @@ -import { defineStore } from 'pinia' -import { ref } from 'vue' - -export const useOrganizationStore = defineStore('organization', () => { - const branches = ref([]) - const recruitments = ref([]) - const currentBranch = ref(null) - const userRole = ref('member') // member, manager, admin - - function setBranches(branchList) { - branches.value = branchList - } - - function addBranch(branch) { - branches.value.push(branch) - } - - function removeBranch(branchId) { - branches.value = branches.value.filter(b => b.id !== branchId) - } - - function setRecruitments(recruitmentList) { - recruitments.value = recruitmentList - } - - function addRecruitment(recruitment) { - recruitments.value.unshift(recruitment) - } - - function setCurrentBranch(branch) { - currentBranch.value = branch - } - - function setUserRole(role) { - userRole.value = role - } - - return { - branches, - recruitments, - currentBranch, - userRole, - setBranches, - addBranch, - removeBranch, - setRecruitments, - addRecruitment, - setCurrentBranch, - setUserRole - } -}) - - - - - - - - diff --git a/Frontend/src/stores/room.js b/Frontend/src/stores/room.js deleted file mode 100644 index 64c0a23..0000000 --- a/Frontend/src/stores/room.js +++ /dev/null @@ -1,72 +0,0 @@ -import { defineStore } from 'pinia' -import { ref } from 'vue' - -export const useRoomStore = defineStore('room', () => { - const currentRoom = ref(null) - const chaosPoints = ref(0) // 混沌值 - const players = ref([]) - const isHost = ref(false) - - function setRoom(roomData) { - currentRoom.value = roomData - chaosPoints.value = roomData.chaosPoints || 0 - players.value = roomData.players || [] - isHost.value = roomData.isHost || false - } - - function addChaosPoints(points) { - chaosPoints.value += points - if (currentRoom.value) { - currentRoom.value.chaosPoints = chaosPoints.value - } - } - - function consumeChaosPoints(points) { - if (chaosPoints.value >= points) { - chaosPoints.value -= points - if (currentRoom.value) { - currentRoom.value.chaosPoints = chaosPoints.value - } - return true - } - return false - } - - function addPlayer(player) { - if (!players.value.find(p => p.id === player.id)) { - players.value.push(player) - } - } - - function removePlayer(playerId) { - players.value = players.value.filter(p => p.id !== playerId) - } - - function clearRoom() { - currentRoom.value = null - chaosPoints.value = 0 - players.value = [] - isHost.value = false - } - - return { - currentRoom, - chaosPoints, - players, - isHost, - setRoom, - addChaosPoints, - consumeChaosPoints, - addPlayer, - removePlayer, - clearRoom - } -}) - - - - - - - - diff --git a/Frontend/src/stores/user.js b/Frontend/src/stores/user.js deleted file mode 100644 index 9986988..0000000 --- a/Frontend/src/stores/user.js +++ /dev/null @@ -1,47 +0,0 @@ -import { defineStore } from 'pinia' -import { ref, computed } from 'vue' - -export const useUserStore = defineStore('user', () => { - const userInfo = ref(null) - const token = ref(localStorage.getItem('token') || null) - - const isLoggedIn = computed(() => !!token.value) - - function login(userData, authToken) { - userInfo.value = userData - token.value = authToken - localStorage.setItem('token', authToken) - localStorage.setItem('userInfo', JSON.stringify(userData)) - } - - function logout() { - userInfo.value = null - token.value = null - localStorage.removeItem('token') - localStorage.removeItem('userInfo') - } - - function initUser() { - const storedUserInfo = localStorage.getItem('userInfo') - if (storedUserInfo) { - userInfo.value = JSON.parse(storedUserInfo) - } - } - - return { - userInfo, - token, - isLoggedIn, - login, - logout, - initUser - } -}) - - - - - - - - diff --git a/Frontend/src/style.css b/Frontend/src/style.css new file mode 100644 index 0000000..45953b6 --- /dev/null +++ b/Frontend/src/style.css @@ -0,0 +1,30 @@ +:root { + font-family: 'Roboto Mono', 'Noto Sans SC', 'Microsoft YaHei', system-ui, + -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + line-height: 1.6; + font-weight: 400; + color: #0f172a; + background-color: #0b1120; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-height: 100vh; + background-color: #0b1120; +} + +a { + color: inherit; + text-decoration: none; +} + +#app { + min-height: 100vh; +} diff --git a/Frontend/src/utils/index.js b/Frontend/src/utils/index.js deleted file mode 100644 index 3631a5d..0000000 --- a/Frontend/src/utils/index.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * 工具函数 - */ - -/** - * 格式化日期 - */ -export function formatDate(dateString, format = 'YYYY-MM-DD HH:mm:ss') { - if (!dateString) return '' - const date = new Date(dateString) - const year = date.getFullYear() - const month = String(date.getMonth() + 1).padStart(2, '0') - const day = String(date.getDate()).padStart(2, '0') - const hours = String(date.getHours()).padStart(2, '0') - const minutes = String(date.getMinutes()).padStart(2, '0') - const seconds = String(date.getSeconds()).padStart(2, '0') - - return format - .replace('YYYY', year) - .replace('MM', month) - .replace('DD', day) - .replace('HH', hours) - .replace('mm', minutes) - .replace('ss', seconds) -} - -/** - * 生成随机ID - */ -export function generateId() { - return Date.now().toString() + Math.random().toString(36).substr(2, 9) -} - -/** - * 复制到剪贴板 - */ -export async function copyToClipboard(text) { - try { - await navigator.clipboard.writeText(text) - return true - } catch (err) { - console.error('复制失败:', err) - return false - } -} - - - - - - - - diff --git a/Frontend/src/views/Anomaly.vue b/Frontend/src/views/Anomaly.vue deleted file mode 100644 index 9f47917..0000000 --- a/Frontend/src/views/Anomaly.vue +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - - - diff --git a/Frontend/src/views/FileView.vue b/Frontend/src/views/FileView.vue new file mode 100644 index 0000000..bbb6caf --- /dev/null +++ b/Frontend/src/views/FileView.vue @@ -0,0 +1,668 @@ + + + + + diff --git a/Frontend/src/views/Home.vue b/Frontend/src/views/Home.vue deleted file mode 100644 index ccfe5b4..0000000 --- a/Frontend/src/views/Home.vue +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - diff --git a/Frontend/src/views/Login.vue b/Frontend/src/views/Login.vue index ffc5ffa..e9cc0ac 100644 --- a/Frontend/src/views/Login.vue +++ b/Frontend/src/views/Login.vue @@ -1,121 +1,828 @@ - - - - +.form-panel { + flex: 1; + background: rgba(30, 41, 59, 0.6); + border-radius: 12px; + padding: 16px; + backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.15); + display: flex; + flex-direction: row; + gap: 20px; +} +.form-wrapper { + width: 100%; +} +.form-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 16px; + color: #e2e8f0; +} +.title { + font-size: 18px; + font-weight: 800; + color: #e2e8f0; +} +.subtitle { + color: #94a3b8; + font-size: 13px; + margin-top: 4px; +} +.status-dot { + width: 12px; + height: 12px; + background: #22c55e; + border-radius: 50%; + box-shadow: 0 0 12px #22c55e; +} +.foot-note { + margin-top: 16px; + color: #94a3b8; + font-size: 12px; + text-align: right; +} +.tab-switcher { + width: 120px; + flex-shrink: 0; + display: flex; + flex-direction: column; + gap: 10px; +} +.tab-switcher button { + background: rgba(15, 23, 42, 0.4); + border: 1px solid rgba(255, 255, 255, 0.1); + color: #cbd5e1; + padding: 12px; + border-radius: 8px; + cursor: pointer; + transition: all 0.3s; + text-align: left; + font-size: 14px; +} +.tab-switcher button.active { + background: rgba(213, 0, 0, 0.3); + color: #ffffff; + font-weight: 700; + border-color: rgba(213, 0, 0, 0.5); +} +.tab-switcher button:hover:not(.active) { + background: rgba(15, 23, 42, 0.6); +} +.form-container { + flex: 1; +} +.code-input-wrapper { + display: flex; + gap: 8px; + width: 100%; +} +.code-input { + flex: 1; +} +.code-send-btn { + flex-shrink: 0; + min-width: 120px; + background: rgba(30, 41, 59, 0.6) !important; + border: 1px solid rgba(255, 255, 255, 0.15) !important; + color: #d50000 !important; +} +.code-send-btn:hover:not(:disabled) { + background: rgba(30, 41, 59, 0.8) !important; + border-color: rgba(213, 0, 0, 0.5) !important; + color: #ff1744 !important; +} +.code-send-btn:disabled { + background: rgba(30, 41, 59, 0.4) !important; + border-color: rgba(255, 255, 255, 0.1) !important; + color: rgba(213, 0, 0, 0.5) !important; + cursor: not-allowed; +} +.id-input { + width: 100% !important; + min-height: 48px; +} +:deep(.ant-form-item-label label) { + color: #d50000 !important; + font-weight: bold; +} +:deep(.ant-form-item-required) { + padding-left: 0 !important; +} +:deep(.ant-form-item-required::before) { + content: '' !important; + margin-right: 0 !important; +} +.login-card { + border-radius: 12px; + background: rgba(15, 23, 42, 0.4); + border: 1px solid rgba(255, 255, 255, 0.08); + box-shadow: 0 15px 40px rgba(0, 0, 0, 0.35); +} +.ant-card-head { + border-bottom: none; + background: transparent; +} +:deep(.ant-card-body) { + background: transparent; + color: #e2e8f0; +} +:deep(.ant-input), +:deep(.ant-input-password input), +:deep(.ant-input-affix-wrapper), +:deep(.ant-input-search) { + background: rgba(255, 255, 255, 0.06) !important; + border: 1px solid rgba(255, 255, 255, 0.2) !important; + color: #e2e8f0 !important; + width: 100% !important; +} +:deep(.ant-input-search .ant-input) { + background: transparent !important; +} +:deep(.ant-input::placeholder), +:deep(.ant-input-password input::placeholder) { + color: #94a3b8; +} +:deep(.ant-btn-primary) { + background: linear-gradient(120deg, #d50000, #7f1d1d); + border-color: transparent; +} +:deep(.ant-btn-primary:hover) { + background: linear-gradient(120deg, #f43f5e, #991b1b); +} +.action-button { + max-width: 200px; + margin: 0 auto; +} +@media (max-width: 768px) { + .badge-container { + flex-direction: column; + text-align: center; + min-height: auto; + padding: 20px 15px; + } + .badge-inner { + flex-direction: column; + gap: 15px; + width: 100%; + } + .org-title { + text-align: center; + } + .form-panel { + flex-direction: column; + } + .tab-switcher { + width: 100%; + flex-direction: row; + flex-wrap: wrap; + } + .barcode { + width: 100%; + height: 30px; + } + .laser-line { + width: 100%; + height: 3px; + } +} + \ No newline at end of file diff --git a/Frontend/src/views/Main.vue b/Frontend/src/views/Main.vue new file mode 100644 index 0000000..a6b26f4 --- /dev/null +++ b/Frontend/src/views/Main.vue @@ -0,0 +1,616 @@ + + + + + + + + diff --git a/Frontend/src/views/Organization.vue b/Frontend/src/views/Organization.vue deleted file mode 100644 index 1597004..0000000 --- a/Frontend/src/views/Organization.vue +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - - - - - - - diff --git a/Frontend/src/views/Profile.vue b/Frontend/src/views/Profile.vue new file mode 100644 index 0000000..190d8da --- /dev/null +++ b/Frontend/src/views/Profile.vue @@ -0,0 +1,540 @@ + + + + + + diff --git a/Frontend/src/views/Register.vue b/Frontend/src/views/Register.vue deleted file mode 100644 index 4d3ac05..0000000 --- a/Frontend/src/views/Register.vue +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - diff --git a/Frontend/src/views/Role.vue b/Frontend/src/views/Role.vue new file mode 100644 index 0000000..82e48d8 --- /dev/null +++ b/Frontend/src/views/Role.vue @@ -0,0 +1,1490 @@ + + + + + diff --git a/Frontend/src/views/Room.vue b/Frontend/src/views/Room.vue deleted file mode 100644 index 73864f9..0000000 --- a/Frontend/src/views/Room.vue +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - diff --git a/Frontend/src/views/User.vue b/Frontend/src/views/User.vue new file mode 100644 index 0000000..2eabff4 --- /dev/null +++ b/Frontend/src/views/User.vue @@ -0,0 +1,369 @@ + + + + + diff --git a/Frontend/swagger.config.json b/Frontend/swagger.config.json new file mode 100644 index 0000000..42703d3 --- /dev/null +++ b/Frontend/swagger.config.json @@ -0,0 +1,4 @@ +{ + "docsUrl": "./docs.json", + "axiosInstanceUrl": "./src/api/http.js" +} \ No newline at end of file diff --git a/Frontend/vite.config.js b/Frontend/vite.config.js index 7b5d2bd..a13088d 100644 --- a/Frontend/vite.config.js +++ b/Frontend/vite.config.js @@ -1,20 +1,23 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' -import { resolve } from 'path' -import { fileURLToPath } from 'url' -const __dirname = fileURLToPath(new URL('.', import.meta.url)) +const proxy = { + '/api': { + target: 'http://localhost:8000', + changeOrigin: true, + }, +} export default defineConfig({ plugins: [vue()], - resolve: { - alias: { - '@': resolve(__dirname, 'src') - } - }, server: { - port: 3000, - open: true - } + host: true, + port: 5173, + proxy, + }, + preview: { + host: true, + port: 5173, + proxy, + }, }) -