package handler import ( "net/http" "management/internal/erpserver/handler/common" "management/internal/erpserver/handler/system" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" ) func (ctx *AppContext) Router() *chi.Mux { r := chi.NewRouter() r.Use(middleware.RequestID) r.Use(middleware.RealIP) // r.Use(middleware.Logger) r.Use(middleware.Recoverer) staticServer := http.FileServer(http.Dir("./web/statics/")) r.Handle("/statics/*", http.StripPrefix("/statics", staticServer)) uploadServer := http.FileServer(http.Dir("./upload/")) r.Handle("/upload/*", http.StripPrefix("/upload", uploadServer)) r.Group(func(r chi.Router) { r.Use(ctx.Middleware.NoSurf) // CSRF r.Use(ctx.Middleware.LoadSession) // Session captchaHandler := common.NewCaptchaHandler(&ctx.Config.Captcha, ctx.Render, ctx.CaptchaService) r.Get("/captcha", captchaHandler.Captcha) uploadHandler := common.NewUploadHandler(ctx.Render) r.With(ctx.Middleware.Authorize, ctx.Middleware.Audit).Post("/upload/img", uploadHandler.Img) r.With(ctx.Middleware.Authorize, ctx.Middleware.Audit).Post("/upload/file", uploadHandler.File) r.With(ctx.Middleware.Authorize, ctx.Middleware.Audit).Post("/upload/mutilfile", uploadHandler.MutilFiles) userHandler := system.NewUserHandler(ctx.Render, ctx.Middleware, ctx.CaptchaService, ctx.UserService, ctx.RoleService, ctx.DepartmentService) r.Get("/", userHandler.Login) r.Post("/login", userHandler.Login) r.Get("/logout", userHandler.Logout) homeHandler := system.NewHomeHandler(ctx.Render, ctx.Middleware, ctx.UserService, ctx.LoginLogService) r.With(ctx.Middleware.Authorize).Get("/home.html", homeHandler.Home) r.With(ctx.Middleware.Authorize).Get("/dashboard", homeHandler.Dashboard) configHandler := system.NewConfigHandler(ctx.Render, ctx.Redis, ctx.ConfigService) r.With(ctx.Middleware.Authorize).Get("/pear.json", configHandler.Pear) r.Route("/system", func(r chi.Router) { r.Use(ctx.Middleware.Authorize) menuHandler := system.NewMenuHandler(ctx.Render, ctx.Middleware, ctx.MenuService) r.Get("/menus", menuHandler.Menus) r.Route("/menu", func(r chi.Router) { r.Use(ctx.Middleware.Audit) r.Get("/list", menuHandler.List) r.Post("/list", menuHandler.List) r.Get("/add", menuHandler.Add) r.Get("/add_children", menuHandler.AddChildren) r.Get("/edit", menuHandler.Edit) r.Post("/save", menuHandler.Save) r.Post("/data", menuHandler.Data) r.Post("/refresh_cache", menuHandler.RefreshCache) }) r.Route("/department", func(r chi.Router) { r.Use(ctx.Middleware.Audit) departHandler := system.NewDepartmentHandler(ctx.Render, ctx.DepartmentService) r.Get("/list", departHandler.List) r.Post("/list", departHandler.List) r.Get("/add", departHandler.Add) r.Get("/add_children", departHandler.AddChildren) r.Get("/edit", departHandler.Edit) r.Post("/save", departHandler.Save) r.Post("/data", departHandler.Data) r.Post("/refresh_cache", departHandler.RefreshCache) r.Post("/rebuild_parent_path", departHandler.RebuildParentPath) }) r.Route("/role", func(r chi.Router) { r.Use(ctx.Middleware.Audit) roleHandler := system.NewRoleHandler(ctx.Render, ctx.RoleService, ctx.MenuService) r.Get("/list", roleHandler.List) r.Post("/list", roleHandler.List) r.Get("/add", roleHandler.Add) r.Get("/add_children", roleHandler.AddChildren) r.Get("/edit", roleHandler.Edit) r.Post("/save", roleHandler.Save) r.Post("/data", roleHandler.Data) r.Post("/refresh_cache", roleHandler.RefreshCache) r.Post("/rebuild_parent_path", roleHandler.RebuildParentPath) r.Post("/refresh_role_menus", roleHandler.RefreshRoleMenus) r.Get("/set_menu", roleHandler.SetMenu) r.Post("/set_menu", roleHandler.SetMenu) }) r.Route("/user", func(r chi.Router) { r.Get("/list", userHandler.List) r.Post("/list", userHandler.List) r.Get("/add", userHandler.Add) r.Get("/edit", userHandler.Edit) r.Post("/save", userHandler.Save) r.Get("/profile", userHandler.Profile) r.Post("/data", userHandler.Data) }) loginLogHandler := system.NewLoginLogHandler(ctx.Render, ctx.LoginLogService) r.Route("/login_log", func(r chi.Router) { r.Get("/list", loginLogHandler.List) r.Post("/list", loginLogHandler.List) }) auditHandler := system.NewAuditHandler(ctx.Render, ctx.AuditLogService) r.Route("/audit_log", func(r chi.Router) { r.Get("/list", auditHandler.List) r.Post("/list", auditHandler.List) }) }) }) return r }