一.导航模块界面
导航列表
添加导航
修改导航
修改排序,状态
删除功能
前端展示界面
二.代码展示
模型
package models
//导航管理
type Nav struct {
Id int
Title string //标题
Link string //跳转地址
Position int //位置: 1 顶部, 2 中间, 3 底部, ...
IsOpennew int //是否新窗口打开: 1 否, 2 是
Relation string //关联商品,填写商品id,以逗号隔开,如: 25,26
Sort int //排序
Status int //状态
AddTime int //增加时间
GoodsItems []Goods `gorm:"-"` //忽略该字段,前端使用:获取导航相关商品数据
}
func (Nav) TableName() string {
return "nav"
}
控制器
package admin
import (
"fmt"
"goshop/models"
"math"
"net/http"
"github.com/gin-gonic/gin"
)
type NavController struct {
BaseController
}
func (con NavController) Index(c *gin.Context) {
//当前页
page, _ := models.Int(c.Query("page"))
if page == 0 {
page = 1
}
fmt.Println(page)
//每页显示的数量
pageSize := 8
//获取数据
navList := []models.Nav{}
models.DB.Offset((page - 1) * pageSize).Limit(pageSize).Find(&navList)
//获取总数量
var count int64
models.DB.Table("nav").Count(&count)
c.HTML(http.StatusOK, "admin/nav/index.html", gin.H{
"navList": navList,
//注意float64类型
"totalPages": math.Ceil(float64(count) / float64(pageSize)),
"page": page,
})
}
func (con NavController) Add(c *gin.Context) {
c.HTML(http.StatusOK, "admin/nav/add.html", gin.H{})
}
func (con NavController) DoAdd(c *gin.Context) {
title := c.PostForm("title")
link := c.PostForm("link")
position, _ := models.Int(c.PostForm("position"))
isOpennew, _ := models.Int(c.PostForm("is_opennew"))
relation := c.PostForm("relation")
sort, _ := models.Int(c.PostForm("sort"))
status, _ := models.Int(c.PostForm("status"))
if title == "" {
con.Error(c, "标题不能为空", "/admin/nav/add")
return
}
nav := models.Nav{
Title: title,
Link: link,
Position: position,
IsOpennew: isOpennew,
Relation: relation,
Sort: sort,
Status: status,
AddTime: int(models.GetUnix()),
}
err := models.DB.Create(&nav).Error
if err != nil {
con.Error(c, "增加导航失败 请重试", "/admin/nav/add")
} else {
con.Success(c, "增加导航成功", "/admin/nav")
}
}
func (con NavController) Edit(c *gin.Context) {
id, err := models.Int(c.Query("id"))
if err != nil {
con.Error(c, "传入数据错误", "/admin/nav")
} else {
nav := models.Nav{Id: id}
models.DB.Find(&nav)
fmt.Println(nav)
c.HTML(http.StatusOK, "admin/nav/edit.html", gin.H{
"nav": nav,
})
}
}
func (con NavController) DoEdit(c *gin.Context) {
id, err1 := models.Int(c.PostForm("id"))
if err1 != nil {
con.Error(c, "传入数据错误", "/admin/nav")
return
}
title := c.PostForm("title")
link := c.PostForm("link")
position, _ := models.Int(c.PostForm("position"))
isOpennew, _ := models.Int(c.PostForm("is_opennew"))
relation := c.PostForm("relation")
sort, _ := models.Int(c.PostForm("sort"))
status, _ := models.Int(c.PostForm("status"))
if title == "" {
con.Error(c, "标题不能为空", "/admin/nav/add")
return
}
nav := models.Nav{Id: id}
models.DB.Find(&nav)
nav.Title = title
nav.Link = link
nav.Position = position
nav.IsOpennew = isOpennew
nav.Relation = relation
nav.Sort = sort
nav.Status = status
err2 := models.DB.Save(&nav).Error
if err2 != nil {
con.Error(c, "修改数据失败", "/admin/nav/edit?id="+models.String(id))
} else {
con.Success(c, "修改数据成功", "/admin/nav")
}
}
func (con NavController) Delete(c *gin.Context) {
id, err := models.Int(c.Query("id"))
if err != nil {
con.Error(c, "传入数据错误", "/admin/nav")
} else {
nav := models.Nav{Id: id}
models.DB.Delete(&nav)
con.Success(c, "删除数据成功", "/admin/nav")
}
}
视图(html)
分页相关插件见:
[golang gin框架] 20.Gin 商城项目-商品模块功能
状态修改,排序修改功能见:
[golang gin框架] 15.Gin 商城项目-封装上传图片方法,轮播图的增删改查以及异步修改状态,数量
(1).index.html
{{ define "admin/nav/index.html" }}
{{ template "admin/public/page_header.html" .}}
<!--分页插件-->
<script type="text/javascript" src="/static/admin/js/jqPaginator.js"></script>
<!--
列表展示
-->
<div class="panel panel-default">
<div class="panel-heading">
<a href="/admin/nav/add" class="btn btn-primary">增加导航</a>
</div>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr class="th">
<th>导航名称</th>
<th>关联商品</th>
<th>跳转地址</th>
<th>导航位置</th>
<th class="text-center">排序</th>
<th class="text-center">状态</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
{{range $key,$value := .navList}}
<tr>
<td>{{$value.Title}}</td>
<td>{{$value.Relation}}</td>
<td>{{$value.Link}}</td>
<td>
{{if eq $value.Position 1}}
顶部
{{else if eq $value.Position 2}}
中间
{{else if eq $value.Position 3}}
底部
{{end}}
</td>
<td class="text-center">
<span class="chSpanNum" data-id="{{$value.Id}}" data-table="nav" data-field="sort"
data-num="{{$value.Sort}}">{{$value.Sort}}</span>
</td>
<td align="center">
{{if eq $value.Status 1}}
<img src="/static/admin/images/yes.gif" class="chStatus" data-id="{{$value.Id}}"
data-table="nav" data-field="status" />
{{else}}
<img src="/static/admin/images/no.gif" class="chStatus" data-id="{{$value.Id}}" data-table="nav"
data-field="status" />
{{end}}
</td>
<td class="text-center">
<a href="/admin/nav/edit?id={{$value.Id}}" />修改</a>
<a class="delete" href="/admin/nav/delete?id={{$value.Id}}" />删除</a>
</td>
</tr>
{{end}}
</tbody>
</table>
</div>
<div class="pagination" id="pagination"></div>
</div>
</body>
</html>
<script>
$('#pagination').jqPaginator({
totalPages: {{.totalPages}},
visiblePages: 5,
currentPage: {{.page}},
onPageChange: function (num, type) {
// console.log(num, type)
console.log(num, type);
if(type!='init'){
location.href="/admin/nav?page="+num;
}
}
});
</script>
{{end}}
(2).add.html
{{ define "admin/nav/add.html" }}
{{ template "admin/public/page_header.html" .}}
<div class="panel panel-default">
<div class="panel-heading">
增加导航
</div>
<div class="panel-body">
<div class="table-responsive input-form">
<form action="/admin/nav/doAdd" method="post">
<ul>
<li> <span>导航名称:</span> <input type="text" name="title" /></li>
<li> <span>导航位置: </span>
<select name="position" id="position">
<option value="1">顶部</option>
<option value="2" selected>中间</option>
<option value="3">底部</option>
</select>
</li>
<li> <span>关联商品:</span> <input type="text" name="relation" class="input" /></li>
<li> <span>导航链接地址:</span> <input type="text" name="link" /></li>
<li> <span>新窗口打开: </span>
<select name="is_opennew" id="is_opennew">
<option value="1">否</option>
<option value="2">是</option>
</select>
<li> <span>排序:</span> <input type="text" name="sort" value="10" /></li>
<li> <span>状态: </span> <input type="radio" name="status" checked value="1" id="a" /> <label
for="a">显示</label> <input type="radio" name="status" value="0" id="b" /><label
for="b">隐藏</label>
</li>
<li>
<br />
<button type="submit" class="btn btn-primary">提交</button>
</li>
</ul>
</form>
</div>
</div>
</div>
</body>
</html>
{{end}}
(3).edit.html
{{ define "admin/nav/edit.html" }}
{{ template "admin/public/page_header.html" .}}
<div class="panel panel-default">
<div class="panel-heading">
编辑导航
</div>
<div class="panel-body">
<div class="table-responsive input-form">
<form action="/admin/nav/doEdit" method="post">
<ul>
<input type="hidden" name="id" value="{{.nav.Id}}" />
<li> <span>导航名称:</span> <input type="text" name="title" value="{{.nav.Title}}" /></li>
<li> <span>导航位置: </span>
{{$position := .nav.Position}}
<select name="position" id="position">
<option value="1" {{if eq $position 1}} selected {{end}}>顶部</option>
<option value="2" {{if eq $position 2}} selected {{end}}>中间</option>
<option value="3" {{if eq $position 3}} selected {{end}}>底部</option>
</select>
</li>
<li> <span>关联商品:</span> <input type="text" name="relation" class="input" value="{{.nav.Relation}}" /></li>
<li> <span>导航链接地址:</span> <input type="text" name="link" value="{{.nav.Link}}"/></li>
<li> <span>新窗口打开: </span>
{{$isOpennew := .nav.IsOpennew}}
<select name="is_opennew" id="is_opennew">
<option value="1" {{if eq $isOpennew 1}} selected {{end}}>否</option>
<option value="2" {{if eq $isOpennew 2}} selected {{end}}>是</option>
</select>
<li> <span>排序:</span> <input type="text" name="sort" value="10" value="{{.nav.Sort}}" /></li>
<li> 状 态:
<input type="radio" name="status" {{if eq .nav.Status 1}} checked {{end}} value="1" id="a"/> <label for="a">显示</label>
<input type="radio" name="status" {{if eq .nav.Status 0}} checked {{end}} value="0" id="b"/><label for="b">隐藏</label>
</li>
<li>
<br />
<button type="submit" class="btn btn-primary">提交</button>
</li>
</ul>
</form>
</div>
</div>
</div>
</body>
</html>
{{end}}
4..配置相关路由
在routers/adminRouters.go下配置导航相关路由
//导航管理路由
adminRouters.GET("/nav", admin.NavController{}.Index)
adminRouters.GET("/nav/add", admin.NavController{}.Add)
adminRouters.POST("/nav/doAdd", admin.NavController{}.DoAdd)
adminRouters.GET("/nav/edit", admin.NavController{}.Edit)
adminRouters.POST("/nav/doEdit", admin.NavController{}.DoEdit)
adminRouters.GET("/nav/delete", admin.NavController{}.Delete)
[上一节][golang gin框架] 20.Gin 商城项目-商品模块功能
[下一节][golang gin框架] 22.Gin 商城项目-商店设置模块,以及通过反射获取系统设置里面的数据