mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-20 17:57:54 +00:00
perf👌 : 系统配置功能优化
This commit is contained in:
@@ -1,35 +1,55 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go-admin/app/admin/service"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/apis"
|
||||
"go-admin/common/log"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/tools"
|
||||
"go-admin/tools/app"
|
||||
)
|
||||
|
||||
type SysSetting struct {
|
||||
apis.Api
|
||||
}
|
||||
|
||||
// @Summary 查询系统信息
|
||||
// @Description 获取JSON
|
||||
// @Tags 系统信息
|
||||
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
|
||||
// @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
|
||||
// @Router /api/v1/setting [get]
|
||||
func GetSetting(c *gin.Context) {
|
||||
var s models.SysSetting
|
||||
r, e := s.Get()
|
||||
func (e *SysSetting) GetSetting(c *gin.Context) {
|
||||
msgID := tools.GenerateMsgIDFromContext(c)
|
||||
db, err := tools.GetOrm(c)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if r.Logo != "" {
|
||||
if !strings.HasPrefix(r.Logo, "http") {
|
||||
r.Logo = fmt.Sprintf("http://%s/%s", c.Request.Host, r.Logo)
|
||||
sysSettingService := service.SysSetting{}
|
||||
sysSettingService.MsgID=msgID
|
||||
sysSettingService.Orm=db
|
||||
var model = models.SysSetting{}
|
||||
err = sysSettingService.GetSysSetting(&model)
|
||||
if err != nil {
|
||||
e.Error(c, http.StatusUnprocessableEntity, err, "查询失败")
|
||||
return
|
||||
}
|
||||
|
||||
if model.Logo != "" {
|
||||
if !strings.HasPrefix(model.Logo, "http") {
|
||||
model.Logo = fmt.Sprintf("http://%s/%s", c.Request.Host, model.Logo)
|
||||
}
|
||||
}
|
||||
|
||||
tools.HasError(e, "查询失败", 500)
|
||||
app.OK(c, r, "查询成功")
|
||||
e.OK(c, model, "查询成功")
|
||||
}
|
||||
|
||||
// @Summary 更新或提交系统信息
|
||||
@@ -39,30 +59,41 @@ func GetSetting(c *gin.Context) {
|
||||
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
|
||||
// @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
|
||||
// @Router /api/v1/system/setting [post]
|
||||
func CreateSetting(c *gin.Context) {
|
||||
var s models.ResponseSystemConfig
|
||||
if err := c.ShouldBind(&s); err != nil {
|
||||
app.Error(c, 200, errors.New("缺少必要参数"), "")
|
||||
func (e *SysSetting) CreateOrUpdateSetting(c *gin.Context) {
|
||||
control := new(dto.SysSettingControl)
|
||||
msgID := tools.GenerateMsgIDFromContext(c)
|
||||
db, err := tools.GetOrm(c)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
var sModel models.SysSetting
|
||||
sModel.Logo = s.Logo
|
||||
sModel.Name = s.Name
|
||||
sModel.SettingsId = s.SettingsId
|
||||
|
||||
a, e := sModel.Update()
|
||||
if e != nil {
|
||||
app.Error(c, 200, e, "")
|
||||
//更新操作
|
||||
err = control.Bind(c)
|
||||
if err != nil {
|
||||
e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败")
|
||||
return
|
||||
}
|
||||
object, err := control.Generate()
|
||||
if err != nil {
|
||||
e.Error(c, http.StatusInternalServerError, err, "模型生成失败")
|
||||
return
|
||||
}
|
||||
|
||||
if a.Logo != "" {
|
||||
if !strings.HasPrefix(a.Logo, "http") {
|
||||
a.Logo = fmt.Sprintf("http://%s/%s", c.Request.Host, a.Logo)
|
||||
sysSettingService := service.SysSetting{}
|
||||
sysSettingService.MsgID=msgID
|
||||
sysSettingService.Orm=db
|
||||
err = sysSettingService.UpdateSysSetting(object)
|
||||
if err != nil {
|
||||
e.Error(c, http.StatusUnprocessableEntity, err, "更新失败")
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
if object.Logo != "" {
|
||||
if !strings.HasPrefix(object.Logo, "http") {
|
||||
object.Logo = fmt.Sprintf("http://%s/%s", c.Request.Host, object.Logo)
|
||||
}
|
||||
}
|
||||
|
||||
app.OK(c, a, "提交成功")
|
||||
|
||||
e.OK(c, object, "提交成功")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/gin-gonic/gin"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/common/log"
|
||||
"go-admin/tools"
|
||||
)
|
||||
|
||||
// SysConfigControl 增、改使用的结构体
|
||||
type SysSettingControl struct {
|
||||
SettingsId int `json:"settings_id" binding:"required"` // 头像
|
||||
Name string `json:"name" binding:"required"` // 名称
|
||||
Logo string `json:"logo" binding:"required"` // 头像
|
||||
}
|
||||
|
||||
// Bind 映射上下文中的结构体数据
|
||||
func (s *SysSettingControl) Bind(ctx *gin.Context) error {
|
||||
msgID := tools.GenerateMsgIDFromContext(ctx)
|
||||
|
||||
err := ctx.ShouldBind(s)
|
||||
if err != nil {
|
||||
log.Errorf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error())
|
||||
return err
|
||||
}
|
||||
|
||||
err = ctx.ShouldBindUri(s)
|
||||
if err != nil {
|
||||
log.Errorf("MsgID[%s] ShouldBindUri error: %s", msgID, err.Error())
|
||||
return err
|
||||
}
|
||||
var jsonStr []byte
|
||||
jsonStr, err = json.Marshal(s)
|
||||
if err != nil {
|
||||
log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error())
|
||||
}
|
||||
ctx.Set("body", string(jsonStr))
|
||||
return err
|
||||
}
|
||||
|
||||
// Generate 结构体数据转化 从 SysConfigControl 至 system.SysConfig 对应的模型
|
||||
func (s *SysSettingControl) Generate() (*models.SysSetting, error) {
|
||||
return &models.SysSetting{
|
||||
SettingsId: s.SettingsId,
|
||||
Name: s.Name,
|
||||
Logo: s.Logo,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetId 获取数据对应的ID
|
||||
func (s *SysSettingControl) GetId() interface{} {
|
||||
return s.SettingsId
|
||||
}
|
||||
|
||||
// SysConfigById 获取单个或者删除的结构体
|
||||
type SysSettingById struct {
|
||||
Id int `uri:"id"`
|
||||
Ids []int `json:"ids"`
|
||||
}
|
||||
|
||||
func (s *SysSettingById) Generate() *SysSettingById {
|
||||
cp := *s
|
||||
return &cp
|
||||
}
|
||||
|
||||
func (s *SysSettingById) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
func (s *SysSettingById) Bind(ctx *gin.Context) error {
|
||||
msgID := tools.GenerateMsgIDFromContext(ctx)
|
||||
err := ctx.ShouldBindUri(s)
|
||||
if err != nil {
|
||||
log.Debugf("MsgID[%s] ShouldBindUri error: %s", msgID, err.Error())
|
||||
return err
|
||||
}
|
||||
err = ctx.ShouldBind(s)
|
||||
if err != nil {
|
||||
log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error())
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *SysSettingById) GenerateM() (*models.SysSetting, error) {
|
||||
return &models.SysSetting{}, nil
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/common/log"
|
||||
"go-admin/common/service"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type SysSetting struct {
|
||||
service.Service
|
||||
}
|
||||
|
||||
// GetSysSetting 获取SysSetting对象
|
||||
func (e *SysSetting) GetSysSetting(model *models.SysSetting) error {
|
||||
var err error
|
||||
var data models.SysSetting
|
||||
msgID := e.MsgID
|
||||
|
||||
db := e.Orm.Model(&data).
|
||||
First(model)
|
||||
err = db.Error
|
||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
err = errors.New("查看对象不存在或无权查看")
|
||||
log.Errorf("msgID[%s] db error:%s", msgID, err)
|
||||
return err
|
||||
}
|
||||
if db.Error != nil {
|
||||
log.Errorf("msgID[%s] db error:%s", msgID, err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateSysSetting 修改SysSetting对象
|
||||
func (e *SysSetting) UpdateSysSetting(c *models.SysSetting) error {
|
||||
var err error
|
||||
var data models.SysSetting
|
||||
msgID := e.MsgID
|
||||
|
||||
db := e.Orm.Model(&data).
|
||||
Where(c.GetId()).Updates(c)
|
||||
if db.Error != nil {
|
||||
log.Errorf("msgID[%s] db error:%s", msgID, err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user