Files
ArmedPolice/router/router.go
2021-11-15 17:32:23 +08:00

243 lines
7.1 KiB
Go

package router
import (
"ArmedPolice/app/api"
"ArmedPolice/config"
"ArmedPolice/router/rate"
"io"
"net/http"
"os"
"time"
"github.com/gin-gonic/gin"
)
type Router struct {
*Option
handler *gin.Engine
}
type (
Option struct {
Mode string
IsCors bool
*RateLimitConfig
}
// RateLimitConfig 限流配置
RateLimitConfig struct {
IsRate bool `json:"is_rate"`
Limit int `json:"limit"`
Capacity int `json:"capacity"`
}
)
func (this *Router) registerWeb() {
this.handler.LoadHTMLGlob("dist/*.html") // 添加入口index.html
this.handler.LoadHTMLFiles("dist/*") // 添加资源路径
this.handler.Static("/js", "dist/js")
this.handler.Static("/css", "dist/css")
this.handler.Static("/assets", "dist/assets")
this.handler.StaticFile("/", "dist/index.html") //前端接口
}
func (this *Router) registerAPI() {
apiPrefix := "/api"
g := this.handler.Group(apiPrefix)
g.Use()
// 登录验证
g.Use(NeedLogin(AddSkipperURL([]string{
apiPrefix + "/v1/account/login",
apiPrefix + "/v1/account/logout",
apiPrefix + "/v1/captcha",
apiPrefix + "/v1/config",
}...)))
v1 := g.Group("/v1")
// Websocket socket接口管理
{
_api := new(api.Websocket)
this.handler.GET("/ws", _api.Ws)
this.handler.GET("/pong", _api.Pong)
this.handler.GET("/publish", _api.Publish)
}
// Captcha 验证码接口管理
v1.GET("/captcha", new(api.Captcha).Captcha)
// Upload 上传接口管理
v1.POST("/upload", new(api.Upload).Upload)
// Dashboard 验证码接口管理
dashboardV1 := v1.Group("/dashboard")
{
_api := new(api.Dashboard)
dashboardV1.GET("/", _api.Index)
dashboardV1.POST("/repair", _api.Repair)
dashboardV1.GET("/score", _api.Score)
}
// Account 接口管理
accountV1 := v1.Group("/account")
{
_api := new(api.Account)
accountV1.POST("/login", _api.Login)
accountV1.POST("/logout", _api.Logout)
}
// Config 配置管理
configV1 := v1.Group("/config")
{
_api := new(api.Config)
configV1.GET("", _api.List)
configV1.POST("/edit", _api.Edit)
configV1.GET("/area", _api.Area)
configV1.POST("/breakdown", _api.Breakdown)
configV1.POST("/breakdown/add", _api.BreakdownAdd)
configV1.POST("/breakdown/edit", _api.BreakdownEdit)
}
// Tenant 租户单位管理
tenantV1 := v1.Group("/tenant")
{
_api := new(api.Tenant)
tenantV1.POST("/list", _api.List)
tenantV1.POST("/add", _api.Add)
tenantV1.POST("/edit", _api.Edit)
tenantV1.POST("/delete", _api.Delete)
}
// User 用户管理
userV1 := v1.Group("/user")
{
_api := new(api.User)
userV1.GET("/info", _api.Info)
userV1.GET("/select", _api.Select)
userV1.GET("/menu", _api.Menu)
userV1.POST("/list", _api.List)
userV1.POST("/detail", _api.Detail)
userV1.POST("/add", _api.Add)
userV1.POST("/edit", _api.Edit)
userV1.POST("/delete", _api.Delete)
userV1.POST("/password/quick", _api.PasswordQuick)
userV1.POST("/password/tradition", _api.PasswordTradition)
userV1.POST("/activate", _api.Activate)
userV1.POST("/frozen", _api.Frozen)
userV1.GET("/role", _api.Role)
userV1.POST("/role/bind", _api.RoleBind)
}
// Menu 菜单管理
menuV1 := v1.Group("/menu")
{
_api := new(api.Menu)
menuV1.GET("/list", _api.List)
menuV1.POST("/add", _api.Add)
menuV1.POST("/edit", _api.Edit)
menuV1.POST("/status", _api.Status)
menuV1.POST("/delete", _api.Delete)
}
// Role 角色管理
roleV1 := v1.Group("/role")
{
_api := new(api.Role)
roleV1.GET("/list", _api.List)
roleV1.POST("/add", _api.Add)
roleV1.POST("/menu", _api.Edit)
roleV1.POST("/delete", _api.Delete)
roleV1.POST("/menus", _api.Menu)
roleV1.POST("/menu/bind", _api.MenuBind)
}
// Supplier 供应商管理
supplierV1 := v1.Group("/supplier")
{
_api := new(api.Supplier)
supplierV1.POST("/select", _api.Select)
supplierV1.POST("/material", _api.Material)
supplierV1.POST("/material/add", _api.MaterialAdd)
supplierV1.POST("/material/edit", _api.MaterialEdit)
supplierV1.POST("/material/delete", _api.MaterialDelete)
supplierV1.POST("/repair", _api.Repair)
supplierV1.POST("/repair/add", _api.RepairAdd)
supplierV1.POST("/repair/edit", _api.RepairEdit)
supplierV1.POST("/repair/delete", _api.RepairDelete)
supplierV1.POST("/manufacturer", _api.Manufacturer)
supplierV1.POST("/manufacturer/add", _api.ManufacturerAdd)
supplierV1.POST("/manufacturer/edit", _api.ManufacturerEdit)
supplierV1.POST("/manufacturer/delete", _api.ManufacturerDelete)
}
// Manage 数据管理
manageV1 := v1.Group("/manage")
{
_api := new(api.Manage)
manageV1.POST("/equipment", _api.Equipment)
manageV1.GET("/equipment/select", _api.EquipmentSelect)
manageV1.POST("/equipment/detail", _api.EquipmentDetail)
manageV1.POST("/equipment/add", _api.EquipmentAdd)
manageV1.POST("/equipment/edit", _api.EquipmentEdit)
manageV1.POST("/equipment/delete", _api.EquipmentDelete)
manageV1.POST("/material", _api.Material)
manageV1.GET("/material/select", _api.MaterialSelect)
manageV1.POST("/material/add", _api.MaterialAdd)
manageV1.POST("/material/edit", _api.MaterialEdit)
manageV1.POST("/material/delete", _api.MaterialDelete)
manageV1.POST("/material/supplier/select", _api.MaterialSupplierSelect)
manageV1.POST("/material/supplier/bind", _api.MaterialSupplierBind)
manageV1.POST("/material/supplier/delete", _api.MaterialSupplierDelete)
manageV1.POST("/notice", _api.Notice)
manageV1.POST("/notice/detail", _api.NoticeDetail)
manageV1.POST("/notice/add", _api.NoticeAdd)
manageV1.POST("/notice/edit", _api.NoticeEdit)
manageV1.POST("/notice/delete", _api.NoticeEdit)
}
// Work 工单管理
workV1 := v1.Group("/work")
{
_api := new(api.Work)
workV1.POST("/list", _api.Instance)
workV1.POST("/person", _api.Person)
workV1.POST("/workbench", _api.Workbench)
workV1.POST("/detail", _api.Detail)
workV1.POST("/launch", _api.Launch)
workV1.POST("/examine", _api.Examine)
workV1.POST("/delete", _api.Delete)
workV1.GET("/schedule", _api.Schedule)
workV1.POST("/schedule/edit", _api.ScheduleEdit)
workV1.POST("/schedule/delete", _api.ScheduleDelete)
workV1.POST("/repair", _api.Repair)
workV1.POST("/repair/detail", _api.RepairDetail)
workV1.POST("/repair/begin", _api.RepairBegin)
workV1.POST("/repair/finish", _api.RepairFinish)
workV1.POST("/repair/evaluate", _api.RepairEvaluate)
}
}
func (this *Router) Init() *gin.Engine {
gin.SetMode(this.Mode)
app := gin.New()
if this.IsCors {
app.Use(Cors())
}
app.NoRoute(NoRouteHandler())
app.NoMethod(NoMethodHandler())
app.Use(LoggerHandle("log/gin.log", 3))
app.Use(TimeoutHandle(time.Second * 30))
if config.IsDebug() {
gin.DefaultWriter = io.MultiWriter(os.Stdout)
app.StaticFS("/api-docs", http.Dir("./doc"))
} else {
app.Use(RecoveryHandler())
}
if this.RateLimitConfig != nil {
if this.RateLimitConfig.IsRate {
rate.NewIPRateLimiter()(this.RateLimitConfig.Limit, this.RateLimitConfig.Capacity)
app.Use(rate.RequestIPRateLimiter()(this.RateLimitConfig.Limit, this.RateLimitConfig.Capacity))
}
}
app.StaticFS("/upload", http.Dir("./upload"))
app.MaxMultipartMemory = 4 << 20
this.handler = app
// 注册路由
this.registerWeb()
this.registerAPI()
return app
}
func NewRouter(option *Option) *Router {
return &Router{Option: option}
}