controllers->admin->access.go
package admin
import (
"fmt"
"ginshop07/models"
"net/http"
"strings"
"github.com/gin-gonic/gin"
)
type AccessController struct {
BaseController
}
func (con AccessController) Index(c *gin.Context) {
accessList := []models.Access{}
models.DB.Where("module_id=?", 0).Preload("AccessItem").Find(&accessList)
fmt.Printf("%#v", accessList)
c.HTML(http.StatusOK, "admin/access/index.html", gin.H{
"accessList": accessList,
})
}
func (con AccessController) Add(c *gin.Context) {
//获取顶级模块
accessList := []models.Access{}
models.DB.Where("module_id=?", 0).Find(&accessList)
c.HTML(http.StatusOK, "admin/access/add.html", gin.H{
"accessList": accessList,
})
}
func (con AccessController) DoAdd(c *gin.Context) {
moduleName := strings.Trim(c.PostForm("module_name"), " ")
actionName := c.PostForm("action_name")
accessType, err1 := models.Int(c.PostForm("type"))
url := c.PostForm("url")
moduleId, err2 := models.Int(c.PostForm("module_id"))
sort, err3 := models.Int(c.PostForm("sort"))
status, err4 := models.Int(c.PostForm("status"))
description := c.PostForm("description")
if err1 != nil || err2 != nil || err3 != nil || err4 != nil {
con.Error(c, "传入参数错误", "/admin/access/add")
return
}
if moduleName == "" {
con.Error(c, "模块名称不能为空", "/admin/access/add")
return
}
access := models.Access{
ModuleName: moduleName,
Type: accessType,
ActionName: actionName,
Url: url,
ModuleId: moduleId,
Sort: sort,
Description: description,
Status: status,
}
err5 := models.DB.Create(&access).Error
if err5 != nil {
con.Error(c, "增加数据失败", "/admin/access/add")
return
}
con.Success(c, "增加数据成功", "/admin/access")
}
func (con AccessController) Edit(c *gin.Context) {
//获取要修改的数据
id, err1 := models.Int(c.Query("id"))
if err1 != nil {
con.Error(c, "参数错误", "/admin/access")
}
access := models.Access{Id: id}
models.DB.Find(&access)
//获取顶级模块
accessList := []models.Access{}
models.DB.Where("module_id=?", 0).Find(&accessList)
c.HTML(http.StatusOK, "admin/access/edit.html", gin.H{
"access": access,
"accessList": accessList,
})
}
func (con AccessController) DoEdit(c *gin.Context) {
id, err1 := models.Int(c.PostForm("id"))
moduleName := strings.Trim(c.PostForm("module_name"), " ")
actionName := c.PostForm("action_name")
accessType, err2 := models.Int(c.PostForm("type"))
url := c.PostForm("url")
moduleId, err3 := models.Int(c.PostForm("module_id"))
sort, err4 := models.Int(c.PostForm("sort"))
status, err5 := models.Int(c.PostForm("status"))
description := c.PostForm("description")
if err1 != nil || err2 != nil || err3 != nil || err4 != nil || err5 != nil {
con.Error(c, "传入参数错误", "/admin/access")
return
}
if moduleName == "" {
con.Error(c, "模块名称不能为空", "/admin/access/edit?id="+models.String(id))
return
}
access := models.Access{Id: id}
models.DB.Find(&access)
access.ModuleName = moduleName
access.Type = accessType
access.ActionName = actionName
access.Url = url
access.ModuleId = moduleId
access.Sort = sort
access.Description = description
access.Status = status
err := models.DB.Save(&access).Error
if err != nil {
con.Error(c, "修改数据", "/admin/access/edit?id="+models.String(id))
} else {
con.Success(c, "修改数据成功", "/admin/access/edit?id="+models.String(id))
}
}
func (con AccessController) Delete(c *gin.Context) {
id, err := models.Int(c.Query("id"))
if err != nil {
con.Error(c, "传入数据错误", "/admin/access")
} else {
//获取我们要删除的数据
access := models.Access{Id: id}
models.DB.Find(&access)
if access.ModuleId == 0 { //顶级模块
accessList := []models.Access{}
models.DB.Where("module_id = ?", access.Id).Find(&accessList)
if len(accessList) > 0 {
con.Error(c, "当前模块下面有菜单或者操作,请删除菜单或者操作以后再来删除这个数据", "/admin/access")
} else {
models.DB.Delete(&access)
con.Success(c, "删除数据成功", "/admin/access")
}
} else { //操作 或者菜单
models.DB.Delete(&access)
con.Success(c, "删除数据成功", "/admin/access")
}
}
}
models->access.go
package models
type Access struct {
Id int
ModuleName string //模块名称
ActionName string //操作名称
Type int //节点类型 : 1、表示模块 2、表示菜单 3、操作
Url string //路由跳转地址
ModuleId int //此module_id和当前模型的id关联 module_id= 0 表示模块
Sort int
Description string
Status int
AddTime int
AccessItem []Access `gorm:"foreignKey:ModuleId;references:Id"`
// Checked bool `gorm:"-"` // 忽略本字段
}
func (Access) TableName() string {
return "access"
}
浙公网安备 33010602011771号