package router import ( "fmt" "github.com/gin-gonic/gin" "hospital-admin-api/api/controller" "hospital-admin-api/api/exception" "hospital-admin-api/api/middlewares" "hospital-admin-api/config" "hospital-admin-api/consts" "net/http" ) // Init 初始化路由 func Init() *gin.Engine { r := gin.New() // 环境设置 if config.C.Env == "prod" { gin.SetMode(gin.ReleaseMode) } // 获取请求参数中间件-json格式下会导致接口获取不到请求数据 r.Use(middlewares.RequestParamsMiddleware()) // 日志中间件 r.Use(middlewares.Logrus()) // 异常 r.Use(gin.Recovery()) // 404处理 r.NoRoute(func(c *gin.Context) { path := c.Request.URL.Path method := c.Request.Method c.JSON(http.StatusNotFound, gin.H{ "msg": fmt.Sprintf("%s %s not found", method, path), "code": consts.ClientHttpNotFound, "data": "", }) }) // 异常处理 r.Use(exception.Recover()) // 跨域处理 r.Use(middlewares.Cors()) // 加载基础路由 api := controller.Api{} // 公开路由-不验证权限 publicRouter(r, api) // 验证jwt r.Use(middlewares.Jwt()) // 验证权限 r.Use(middlewares.Auth()) // 私有路由-验证权限 privateRouter(r, api) // 公共路由-验证权限 adminRouter(r, api) // 基础数据-验证权限 basicRouter(r, api) return r } // publicRouter 公开路由-不验证权限 func publicRouter(r *gin.Engine, api controller.Api) { adminGroup := r.Group("/admin") // 验证码 adminGroup.GET("/captcha", api.Admin.GetCaptcha) // 登陆 adminGroup.POST("/login", api.Admin.Login) } // adminRouter 公共路由-验证权限 func adminRouter(r *gin.Engine, api controller.Api) { // 签名 signGroup := r.Group("/sign") { // 获取oss签名 signGroup.GET("/oss", api.Admin.GetOssSign) } // 解密 decryptGroup := r.Group("/decrypt") { cardGroup := decryptGroup.Group("/card") { // 获取解密身份证号 cardGroup.GET("/num", api.Admin.GetDecryptCardNum) } // 获取解密银行卡号 decryptGroup.GET("/bank/:doctor_id", api.Admin.GetDecryptBank) } } // basicRouter 基础数据-验证权限 func basicRouter(r *gin.Engine, api controller.Api) { basicGroup := r.Group("/basic") // 科室管理-基础数据 departmentGroup := basicGroup.Group("/department") { // 自定义科室 customGroup := departmentGroup.Group("/custom") { // 获取自定义科室列表 customGroup.GET("/list", api.Department.GetDepartmentCustomList) } } // 医院管理-基础数据 hospitalGroup := basicGroup.Group("/hospital") { // 获取医院列表-限制条数 hospitalGroup.GET("/list", api.Hospital.GetHospitalLimit) } // 专长管理-基础数据 expertiseGroup := basicGroup.Group("/expertise") { // 获取专长列表 expertiseGroup.GET("/list", api.DiseaseClassExpertise.GetExpertiseList) // 获取专长列表-分页 // 专长详情 // 修改专长 // 新增专长 } // 银行管理-基础数据 bankGroup := basicGroup.Group("/bank") { // 获取银行列表 bankGroup.GET("/list", api.Bank.GetBankList) // 获取银行列表-分页 // 银行详情 // 修改银行 // 新增银行 } // 地区管理-基础数据 areaGroup := basicGroup.Group("/area") { // 获取地区列表 areaGroup.GET("/list", api.Area.GetAreaList) // 获取地区列表-分页 // 地区详情 // 修改地区 // 新增地区 } } // privateRouter 私有路由-验证权限 func privateRouter(r *gin.Engine, api controller.Api) { adminGroup := r.Group("/admin") // 角色 roleGroup := adminGroup.Group("/role") { // 获取角色列表-分页 roleGroup.GET("", api.Role.GetRolePage) // 角色禁用/启用 roleGroup.PUT("status/:id", api.Role.PutRoleStatus) // 角色新增 roleGroup.POST("", api.Role.AddRole) // 角色详情 roleGroup.GET("/:role_id", api.Role.GetRole) // 角色修改 roleGroup.PUT("/:role_id", api.Role.PutRole) // 删除角色-批量 roleGroup.DELETE("", api.Role.DeleteRole) // 获取角色列表 roleGroup.GET("/list", api.Role.GetRoleList) } // 菜单 menuGroup := adminGroup.Group("/menu") { // 获取全部菜单列表 menuGroup.GET("", api.Menu.GetMenuList) // 新增菜单 menuGroup.POST("", api.Menu.AddMenu) // 修改菜单 menuGroup.PUT("/:menu_id", api.Menu.PutMenu) // 删除菜单-批量 menuGroup.DELETE("", api.Menu.DeleteMenu) // 菜单详情 menuGroup.GET("/:menu_id", api.Menu.GetMenu) } // 用户 userGroup := adminGroup.Group("/user") { // 获取用户列表-分页 userGroup.GET("", api.User.GetUserPage) // 新增用户 userGroup.POST("", api.User.AddUser) // 用户详情 userGroup.GET("/:user_id", api.User.GetUser) // 删除用户-批量 userGroup.DELETE("", api.User.DeleteUser) // 修改用户 userGroup.PUT("/:user_id", api.User.PutUser) // 修改用户密码 userGroup.PUT("/password", api.User.PutUserPassword) // 退出登陆 userGroup.PUT("loginout", api.User.LoginOut) // 获取用户菜单列表 userGroup.GET("/menu", api.User.GetUserMenuList) // 获取用户按钮列表 userGroup.GET("/button", api.User.GetUserButtonList) } // 接口 apiGroup := adminGroup.Group("/api") { // 获取接口列表-分页 apiGroup.GET("", api.AdminApi.GetApiPage) // 获取接口列表 apiGroup.GET("/list", api.AdminApi.GetApiList) // 新增接口 apiGroup.POST("", api.AdminApi.AddApi) // 接口详情 apiGroup.GET("/:api_id", api.AdminApi.GetApi) // 删除接口-批量 apiGroup.DELETE("", api.AdminApi.DeleteApi) // 修改接口 apiGroup.PUT("/:api_id", api.AdminApi.PutApi) } // 部门 deptGroup := adminGroup.Group("/dept") { // 获取部门列表 deptGroup.GET("", api.Dept.GetDeptList) // 新增部门 deptGroup.POST("", api.Dept.AddDept) // 部门详情 deptGroup.GET("/:dept_id", api.Dept.GetDept) // 删除部门-批量 deptGroup.DELETE("", api.Dept.DeleteDept) // 修改部门 deptGroup.PUT("/:dept_id", api.Dept.PutDept) } // 岗位 postGroup := adminGroup.Group("/post") { // 获取岗位列表-分页 postGroup.GET("", api.Post.GetPostPage) // 新增岗位 postGroup.POST("", api.Post.AddPost) // 岗位详情 postGroup.GET("/:post_id", api.Post.GetPost) // 删除岗位-批量 postGroup.DELETE("", api.Post.DeletePost) // 修改岗位 postGroup.PUT("/:post_id", api.Post.PutPost) // 获取岗位列表 postGroup.GET("/list", api.Post.GetPostList) } // 医生管理 doctorGroup := adminGroup.Group("/doctor") { // 获取医生列表-分页 doctorGroup.GET("", api.UserDoctor.GetUserDoctorPage) // 医生详情 doctorGroup.GET("/:doctor_id", api.UserDoctor.GetUserDoctor) // 修改医生 doctorGroup.PUT("/:doctor_id", api.UserDoctor.PutUserDoctor) // 新增医生 doctorGroup.POST("", api.UserDoctor.AddUserDoctor) // 身份审核列表 doctorPendingGroup := doctorGroup.Group("/pending") { // 身份审核-获取医生列表-分页 doctorPendingGroup.GET("", api.UserDoctor.GetUserDoctorPendingPage) // 身份审核-医生详情 doctorPendingGroup.GET("/:doctor_id", api.UserDoctor.GetUserDoctorPending) // 身份审核-审核医生 doctorPendingGroup.PUT("/:doctor_id", api.UserDoctor.PutUserDoctorPending) } // 多点列表 doctorMultiGroup := doctorGroup.Group("/multi") { // 多点-获取医生列表-分页 doctorMultiGroup.GET("", api.UserDoctor.GetMultiPage) // 多点-医生详情 doctorMultiGroup.GET("/:doctor_id", api.UserDoctor.GetMulti) // 多点-审核医生 doctorMultiGroup.PUT("/:doctor_id", api.UserDoctor.PutMulti) } } // 订单管理 orderGroup := adminGroup.Group("/order") { // 问诊订单 inquiryGroup := orderGroup.Group("/inquiry") { // 获取问诊订单列表-分页 inquiryGroup.GET("", api.OrderInquiry.GetOrderInquiryPage) // 问诊订单详情 inquiryGroup.GET("/:order_inquiry_id", api.OrderInquiry.GetOrderInquiry) // 删除问诊订单 inquiryGroup.DELETE("/:order_inquiry_id", api.OrderInquiry.DeleteOrderInquiry) // 取消问诊订单 inquiryGroup.PUT("/:order_inquiry_id", api.OrderInquiry.CancelOrderInquiry) } } }