package controller import ( "Medical_OAuth/app/admin/model" "Medical_OAuth/app/admin/service" "Medical_OAuth/app/admin/service/dto" "encoding/json" "fmt" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "github.com/tealeg/xlsx" "gogs.baozhida.cn/zoie/OAuth-core/api" "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user" _ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response" "os" ) type ServMenu struct { api.Api } // GetPage 获取菜单列表 // @Summary 获取菜单列表 // @Description 获取菜单列表 // @Tags 服务菜单 // @Param serviceId query string true "服务ID" // @Param name query string false "菜单名称" // @Param visible query string false "显示状态" // @Success 200 {object} response.Response{data=response.Page{list=[]model.ServMenu}} "{"code": 200, "data": [...]}" // @Router /api/serv-menu [get] // @Security Bearer func (e ServMenu) GetPage(c *gin.Context) { s := service.ServMenu{} serv := service.SysService{} req := dto.ServMenuGetPageReq{} err := e.MakeContext(c). MakeOrm(). Bind(&req, binding.Form). MakeService(&s.Service). Errors if err != nil { e.Logger.Error(err) e.Error(500, err, err.Error()) return } // 查询服务信息 var servObject model.SysService servReq := dto.SysServiceGetReq{Id: req.ServiceId} err = serv.Get(&servReq, &servObject, nil) if err != nil { e.Error(500, err, err.Error()) return } var list = make([]model.ServMenu, 0) if err = s.GetPage(&req, &list).Error; err != nil { e.Error(500, err, "查询失败") return } e.OK(list, "查询成功") } // Get 通过id获取菜单 // @Summary 通过id获取菜单 // @Description 通过id获取菜单 // @Tags 服务菜单 // @Param id path string true "菜单id" // @Success 200 {object} response.Response{data=model.ServMenu} "{"code": 200, "data": [...]}" // @Router /api/serv-menu/{id} [get] // @Security Bearer func (e ServMenu) Get(c *gin.Context) { req := dto.ServMenuGetReq{} s := service.ServMenu{} err := e.MakeContext(c). MakeOrm(). Bind(&req, nil). MakeService(&s.Service). Errors if err != nil { e.Logger.Error(err) e.Error(500, err, err.Error()) return } var object = model.ServMenu{} err = s.Get(&req, &object).Error if err != nil { e.Error(500, err, "查询失败") return } e.OK(object, "查询成功") } // Insert 创建菜单 // @Summary 创建菜单 // @Description 创建菜单 // @Tags 服务菜单 // @Accept application/json // @Product application/json // @Param data body dto.ServMenuInsertReq true "data" // @Success 200 {object} response.Response "{"code": 200, "data": [...]}" // @Router /api/serv-menu [post] // @Security Bearer func (e ServMenu) Insert(c *gin.Context) { req := dto.ServMenuInsertReq{} s := service.ServMenu{} err := e.MakeContext(c). MakeOrm(). Bind(&req, binding.JSON). MakeService(&s.Service). Errors if err != nil { e.Logger.Error(err) e.Error(500, err, err.Error()) return } // 设置创建人 req.SetCreateBy(user.GetUserId(c)) err = s.Insert(&req).Error if err != nil { e.Error(500, err, err.Error()) return } e.OK(req.GetId(), "创建成功") } // Update 修改菜单 // @Summary 修改菜单 // @Description 修改菜单 // @Tags 服务菜单 // @Accept application/json // @Product application/json // @Param id path string true "菜单id" // @Param data body dto.ServMenuUpdateReq true "body" // @Success 200 {object} response.Response "{"code": 200, "data": [...]}" // @Router /api/serv-menu/{id} [put] // @Security Bearer func (e ServMenu) Update(c *gin.Context) { s := service.ServMenu{} req := dto.ServMenuUpdateReq{} err := e.MakeContext(c). MakeOrm(). Bind(&req, binding.JSON, nil). MakeService(&s.Service). Errors if err != nil { e.Logger.Error(err) e.Error(500, err, err.Error()) return } req.SetUpdateBy(user.GetUserId(c)) err = s.Update(&req).Error if err != nil { e.Error(500, err, err.Error()) return } e.OK(req.GetId(), "更新成功") } // Delete 删除菜单 // @Summary 删除菜单 // @Description 删除菜单 // @Tags 服务菜单 // @Accept application/json // @Product application/json // @Param data body dto.ServMenuDeleteReq true "body" // @Success 200 {object} response.Response "{"code": 200, "data": [...]}" // @Router /api/serv-menu [delete] // @Security Bearer func (e ServMenu) Delete(c *gin.Context) { s := service.ServMenu{} req := dto.ServMenuDeleteReq{} err := e.MakeContext(c). MakeOrm(). Bind(&req, binding.JSON). MakeService(&s.Service). Errors if err != nil { e.Logger.Error(err) e.Error(500, err, err.Error()) return } req.SetUpdateBy(user.GetUserId(c)) err = s.Remove(&req).Error if err != nil { e.Logger.Errorf("RemoveServMenu error, %s", err) e.Error(500, err, "删除失败") return } e.OK(req.GetId(), "删除成功") } // Export 导出菜单 // @Summary 导出菜单 // @Description 导出菜单 // @Tags 服务菜单 // @Accept application/json // @Product application/json // @Param data body dto.ServMenuExportReq true "body" // @Success 200 {object} response.Response "{"code": 200}" // @Router /api/serv-menu/export [get] // @Security Bearer func (e ServMenu) Export(c *gin.Context) { s := service.ServMenu{} serv := service.SysService{} req := dto.ServMenuExportReq{} err := e.MakeContext(c). MakeOrm(). Bind(&req, binding.Form). MakeService(&s.Service). MakeService(&serv.Service). Errors if err != nil { e.Logger.Error(err) e.Error(500, err, err.Error()) return } // 查询服务信息 var servObject model.SysService servReq := dto.SysServiceGetReq{Id: req.ServiceId} err = serv.Get(&servReq, &servObject, nil) if err != nil { e.Error(500, err, err.Error()) return } if req.Type == "json" { var list = make([]model.ServMenu, 0) jsonReq := dto.ServMenuGetPageReq{ ServiceId: req.ServiceId, } if err = s.GetPage(&jsonReq, &list).Error; err != nil { e.Error(500, err, "查询失败") return } jsonBytes, err := json.Marshal(list) if err != nil { e.Error(500, err, err.Error()) return } filename := fmt.Sprintf("%s菜单.json", servObject.Name) file, err := os.Create(filename) if err != nil { e.Error(500, err, err.Error()) return } defer file.Close() if _, err := file.Write(jsonBytes); err != nil { e.Error(500, err, err.Error()) return } c.Header("Content-Disposition", "attachment; filename="+filename) c.Header("Content-Type", "application/octet-stream") c.FileAttachment(filename, file.Name()) } if req.Type == "excel" { var list = make([]model.ServMenu, 0) jsonReq := dto.ServMenuGetPageReq{ ServiceId: req.ServiceId, } if err = s.GetList(&jsonReq, &list); err != nil { e.Error(500, err, "查询失败") return } file := xlsx.NewFile() sheet, err := file.AddSheet("Sheet1") if err != nil { e.Error(500, err, err.Error()) return } // Add header row headerRow := sheet.AddRow() headerRow.AddCell().SetValue("id") headerRow.AddCell().SetValue("service_id") headerRow.AddCell().SetValue("menu_path") headerRow.AddCell().SetValue("parent_id") headerRow.AddCell().SetValue("name") headerRow.AddCell().SetValue("sort") headerRow.AddCell().SetValue("menu_type") headerRow.AddCell().SetValue("icon") headerRow.AddCell().SetValue("component") headerRow.AddCell().SetValue("is_frame") headerRow.AddCell().SetValue("path") headerRow.AddCell().SetValue("permission") headerRow.AddCell().SetValue("visible") // Add data rows for _, v := range list { dataRow := sheet.AddRow() dataRow.AddCell().SetValue(v.Id) dataRow.AddCell().SetValue(v.ServiceId) dataRow.AddCell().SetValue(v.MenuPath) dataRow.AddCell().SetValue(v.ParentId) dataRow.AddCell().SetValue(v.Name) dataRow.AddCell().SetValue(v.Sort) dataRow.AddCell().SetValue(v.MenuType) dataRow.AddCell().SetValue(v.Icon) dataRow.AddCell().SetValue(v.Component) dataRow.AddCell().SetValue(v.IsFrame) dataRow.AddCell().SetValue(v.Path) dataRow.AddCell().SetValue(v.Permission) dataRow.AddCell().SetValue(v.Visible) } filename := fmt.Sprintf("%s菜单.xlsx", servObject.Name) // Set content type and headers c.Header("Content-Disposition", "attachment; filename="+filename) c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") // Write file to response err = file.Write(c.Writer) if err != nil { e.Error(500, err, err.Error()) return } c.FileAttachment(filename, filename) } e.Error(500, err, "类型错误!") return }