[golang gin框架] 21.Gin 商城项目-导航模块功能

一.导航模块界面

导航列表

添加导航

修改导航

修改排序,状态

删除功能

前端展示界面

二.代码展示

  1. 模型

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"
}
  1. 控制器

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")
    }
}
  1. 视图(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 商城项目-商店设置模块,以及通过反射获取系统设置里面的数据

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值