Files
2026-01-16 15:49:34 +08:00

232 lines
11 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package routes
import (
"github.com/goravel/framework/contracts/route"
"github.com/goravel/framework/facades"
httpmiddleware "github.com/goravel/framework/http/middleware"
"goravel/app/http/controllers/admin"
"goravel/app/http/middleware"
)
func Admin() {
adminAuthController := admin.NewAuthController()
adminController := admin.NewAdminController()
roleController := admin.NewRoleController()
permissionController := admin.NewPermissionController()
menuController := admin.NewMenuController()
departmentController := admin.NewDepartmentController()
dictionaryController := admin.NewDictionaryController()
configController := admin.NewConfigController()
blacklistController := admin.NewBlacklistController()
onlineAdminController := admin.NewOnlineAdminController()
operationLogController := admin.NewOperationLogController()
loginLogController := admin.NewLoginLogController()
systemLogController := admin.NewSystemLogController()
dashboardController := admin.NewDashboardController()
// debugController := admin.NewDebugController()
monitorController := admin.NewMonitorController()
notificationController := admin.NewNotificationController()
notificationWsController := admin.NewNotificationWsController()
optionController := admin.NewOptionController()
exportController := admin.NewExportController()
attachmentController := admin.NewAttachmentController()
orderController := admin.NewOrderController()
userController := admin.NewUserController()
userBalanceLogController := admin.NewUserBalanceLogController()
paymentMethodController := admin.NewPaymentMethodController()
paymentController := admin.NewPaymentController()
codeGeneratorController := admin.NewCodeGeneratorController()
articleController := admin.NewArticleController()
// Admin 路由组:统一前缀和域名限制
facades.Route().Prefix("api/admin").Middleware(middleware.Domain(facades.Config().Get("domains.admin"))).Group(func(router route.Router) {
// 登录相关(不需要认证,但需要多语言)
router.Middleware(middleware.Lang()).Group(func(router route.Router) {
router.Middleware(httpmiddleware.Throttle("login")).Post("login", adminAuthController.Login)
router.Get("login/captcha", adminAuthController.Captcha)
})
// 基础功能(需要认证和多语言,但不需要权限验证和操作日志)
router.Middleware(middleware.Lang(), middleware.Jwt()).Group(func(router route.Router) {
// 认证相关
router.Get("info", adminAuthController.Info)
router.Post("logout", adminAuthController.Logout)
router.Get("heartbeat", adminAuthController.Heartbeat)
// 谷歌验证码相关
router.Get("google-authenticator/status", adminAuthController.GetGoogleAuthenticatorStatus)
router.Get("google-authenticator/qrcode", adminAuthController.GetGoogleAuthenticatorQRCode)
router.Post("google-authenticator/bind", adminAuthController.BindGoogleAuthenticator)
router.Post("google-authenticator/unbind", adminAuthController.UnbindGoogleAuthenticator)
// 通知中心
router.Get("notifications", notificationController.Index)
router.Get("notifications/unread-count", notificationController.UnreadCount)
router.Get("notifications/recent", notificationController.Recent)
router.Post("notifications/{id}/read", notificationController.MarkRead)
router.Post("notifications/read-all", notificationController.MarkAllRead)
// 统一的下拉选项接口(不需要权限验证)
router.Get("options", optionController.Index)
router.Get("dictionaries/types", dictionaryController.GetAllTypes)
})
// 需要认证、多语言、权限验证和操作日志的路由
router.Middleware(middleware.Lang(), middleware.Jwt(), middleware.Permission(), middleware.OperationLog()).Group(func(router route.Router) {
router.Put("profile", adminAuthController.UpdateProfile)
// 密码管理
passwordController := admin.NewPasswordController()
router.Put("password", passwordController.UpdatePassword)
router.Put("admins/{id}/password", passwordController.ResetPassword)
// 管理员管理
router.Resource("admins", adminController)
router.Post("admins/export", adminController.Export)
router.Delete("admins/{id}/tokens", adminAuthController.KickOutUser) // 踢出指定用户的所有token
router.Post("admins/{id}/unbind-google-auth", adminController.UnbindGoogleAuthenticator) // 解绑管理员的谷歌验证码
// 角色管理 - 使用 Resource 路由
router.Resource("roles", roleController)
// 权限管理 - 使用 Resource 路由
router.Resource("permissions", permissionController)
// 菜单管理 - 使用 Resource 路由
router.Resource("menus", menuController)
// 部门管理 - 使用 Resource 路由
router.Resource("departments", departmentController)
// 字典管理
router.Resource("dictionaries", dictionaryController)
router.Get("dictionaries/type/{type}", dictionaryController.GetByType)
// 配置管理
router.Get("configs/group/{group}", configController.GetByGroup)
router.Post("configs/save", configController.Save)
router.Post("configs/test-email", configController.TestEmail)
// 黑名单管理
router.Resource("blacklists", blacklistController)
// 在线管理员管理
router.Get("online-admins", onlineAdminController.Index)
router.Delete("online-admins/{id}", onlineAdminController.KickOut)
router.Post("online-admins/batch-kick-out", onlineAdminController.BatchKickOut)
// 操作日志
router.Get("operation-logs", operationLogController.Index)
router.Get("operation-logs/title-options", operationLogController.GetTitleOptions)
router.Get("operation-logs/{id}", operationLogController.Show)
router.Delete("operation-logs/{id}", operationLogController.Destroy)
router.Post("operation-logs/batch-delete", operationLogController.BatchDestroy)
// router.Post("operation-logs/clean", operationLogController.Clean)
// 导出管理
router.Get("exports", exportController.Index)
router.Get("exports/{id}/download", exportController.Download)
// SSE 路由:实时推送导出任务进度(之前没有进度查询接口,直接使用 SSE)
// router.Get("exports/{id}/progress", exportController.StreamExportProgress)
router.Delete("exports/{id}", exportController.Destroy)
router.Post("exports/batch-delete", exportController.BatchDestroy)
// 登录日志
router.Get("login-logs", loginLogController.Index)
router.Get("login-logs/{id}", loginLogController.Show)
router.Delete("login-logs/{id}", loginLogController.Destroy)
router.Post("login-logs/batch-delete", loginLogController.BatchDestroy)
// router.Post("login-logs/clean", loginLogController.Clean)
// 系统日志
router.Get("system-logs", systemLogController.Index)
router.Get("system-logs/{id}", systemLogController.Show)
router.Delete("system-logs/{id}", systemLogController.Destroy)
router.Post("system-logs/batch-delete", systemLogController.BatchDestroy)
// router.Post("system-logs/clean", systemLogController.Clean)
// Dashboard 统计
// 原路由:按需查询特定数据(适合一次性查询或按需刷新)
router.Get("dashboard/count", dashboardController.GetCount)
router.Get("dashboard/user-access-source", dashboardController.GetUserAccessSource)
router.Get("dashboard/weekly-user-activity", dashboardController.GetWeeklyUserActivity)
router.Get("dashboard/monthly-sales", dashboardController.GetMonthlySales)
router.Get("dashboard/recent-activities", dashboardController.GetRecentActivities)
// SSE 路由:实时推送所有 Dashboard 数据(适合实时 Dashboard 页面,自动更新)
router.Get("dashboard/stream", dashboardController.StreamDashboardData)
// 服务监控
// 原路由:手动刷新、一次性查询(适合按需查看或定时刷新)
router.Get("monitor/system-info", monitorController.GetSystemInfo)
// SSE 路由:实时推送系统监控数据(适合实时监控页面,自动更新)
router.Get("monitor/system-info/stream", monitorController.StreamSystemInfo)
// 系统公告/通知
router.Post("notifications", notificationController.Store)
// 调试: trace id 日志验证
// router.Get("debug/trace-test", debugController.TraceTest)
// 附件管理
router.Get("attachments", attachmentController.Index)
router.Post("attachments/upload", attachmentController.Upload)
// 统一的分片上传接口(POSTaction参数:init/upload/merge
router.Post("attachments/chunk", attachmentController.ChunkUpload)
// 获取上传进度(GETaction=progress- 适合断点续传检查、一次性查询
router.Get("attachments/chunk", attachmentController.ChunkUpload)
router.Get("attachments/{id}/preview", attachmentController.Preview)
router.Get("attachments/{id}/download", attachmentController.Download)
router.Put("attachments/{id}/display-name", attachmentController.UpdateDisplayName)
router.Delete("attachments/{id}", attachmentController.Destroy)
router.Post("attachments/batch-delete", attachmentController.BatchDestroy)
// 订单管理
router.Resource("orders", orderController)
router.Post("orders/export", orderController.Export)
router.Post("orders/import", orderController.Import)
router.Get("orders/export/status/:id", orderController.GetExportStatus)
// 用户管理
router.Resource("users", userController)
router.Post("users/{id}/update-balance", userController.UpdateBalance)
router.Put("users/{id}/password", userController.ResetPassword)
router.Post("users/export", userController.Export)
// 用户余额变动记录
router.Get("user-balance-logs", userBalanceLogController.Index)
router.Post("user-balance-logs", userBalanceLogController.Store)
router.Get("user-balance-logs/statistics", userBalanceLogController.Statistics)
// 支付方式管理
router.Resource("payment-methods", paymentMethodController)
// 支付记录管理
router.Get("payments", paymentController.Index)
router.Get("payments/{id}", paymentController.Show)
router.Post("payments/export", paymentController.Export)
router.Get("payments/export/status/{id}", paymentController.GetExportStatus)
router.Resource("articles", articleController)
// 代码生成器(仅在开发环境可用)
router.Middleware(middleware.DevelopmentOnly()).Group(func(router route.Router) {
router.Get("code-generator/field-types", codeGeneratorController.GetFieldTypes)
router.Post("code-generator/preview", codeGeneratorController.Preview)
router.Post("code-generator/generate", codeGeneratorController.Generate)
router.Post("code-generator/save", codeGeneratorController.Save)
})
})
})
// 通知 WebSocket(不在域名限制范围内)
facades.Route().Get("/ws/admin/notifications", notificationWsController.Server)
}