一.商店设置模块界面
通用信息
配置网站标题,logo,seo相关数据,备案信息等
云存储相关配置
缩略图相关配置
![](https://img-blog.csdnimg.cn/img_convert/46d943290fd303d6ab407a25684a361e.png)
![](https://img-blog.csdnimg.cn/img_convert/79e057460f36aac1132ccc3c6927ddd2.png)
OSS储存配置
![](https://img-blog.csdnimg.cn/img_convert/79b8ffa4f12f2652af576a85814a9536.png)
缩略图尺寸配置
![](https://img-blog.csdnimg.cn/img_convert/1a5ed748792f7e52f39758fbea33e92b.png)
二.代码展示
1.模型
package models
//系统设置
type Setting struct {
//使用反射功能:`form:"xxx"`配置:可以批量获取表单数据,form后面的需要和html中表单字段一致
Id int `form:"id"`
SiteTitle string `form:"site_title"` //标题
SiteLogo string //logo
SiteKeywords string `form:"site_keywords"` //关键词
SiteDescription string `form:"site_description"` //描述
NoPicture string //默认图片,不需要form设置, 因为该字段的数据需要用到上传功能,要校验
SiteIcp string `form:"site_icp"` //备案信息
SiteTel string `form:"site_tel"` //电话
SearchKeywords string `form:"search_keywords"` //搜索关键词
TongjiCode string `form:"tongji_code"` //统计代码
Appid string `form:"appid"` //oss appid
AppSecret string `form:"app_secret"` //oss 密钥
EndPoint string `form:"end_point"` //oss 访问结点域名
BucketName string `form:"bucket_name"` //oss 桶名称
OssStatus int `form:"oss_status"` //oss 开启状态: 1 是, 0 否
OssDomain string `form:"oss_domain"` //oss domain
ThumbnailSize string `form:"thumbnail_size"` //缩略图大小设置
}
func (Setting) TableName() string {
return "setting"
}
2.控制器
上传功能见:
[golang gin框架] 15.Gin 商城项目-封装上传图片方法,轮播图的增删改查以及异步修改状态,数量
[golang gin框架] 19.Gin 图片上传到云服务器(腾讯云,阿里云)
package admin
import (
"github.com/gin-gonic/gin"
"goshop/models"
"net/http"
)
type SettingController struct {
BaseController
}
func (con SettingController) Index(c *gin.Context) {
setting := models.Setting{}
models.DB.First(&setting)
c.HTML(http.StatusOK, "admin/setting/index.html", gin.H{
"setting": setting,
})
}
func (con SettingController) DoEdit(c *gin.Context) {
setting := models.Setting{Id: 1}
models.DB.Find(&setting)
//c.ShouldBind(&setting): 绑定表单中的数据到结构体
if err := c.ShouldBind(&setting); err != nil {
con.Error(c, "修改数据失败,请重试", "/admin/setting")
return
} else {
// 上传图片 logo
siteLogo, err1 := models.UploadImg(c, "site_logo")
if len(siteLogo) > 0 && err1 == nil {
setting.SiteLogo = siteLogo
} else if err1 != nil {
con.Error(c, "上传错误", "/admin/setting")
return
}
//上传图片 no_picture
noPicture, err2 := models.UploadImg(c, "no_picture")
if len(noPicture) > 0 && err2 == nil {
setting.NoPicture = noPicture
}
err3 := models.DB.Save(&setting).Error
if err3 != nil {
con.Error(c, "修改数据失败", "/admin/setting")
return
}
con.Success(c, "修改数据成功", "/admin/setting")
}
}
3.视图(html)
index.html
{{ define "admin/setting/index.html" }}
{{ template "admin/public/page_header.html" .}}
<div class="container-fluid">
<div class="row">
<div class="panel panel-default">
<div class="panel-heading">
系统设置
</div>
<div class="panel-body">
<div class="table-responsive input-form news_content">
<form action="/admin/setting/doEdit" method="post" enctype="multipart/form-data">
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#general" role="tab"
data-toggle="tab">通用信息</a></li>
<li role="presentation"><a href="#oss" role="tab" data-toggle="tab">OSS云存储配置</a></li>
<li role="presentation"><a href="#thumb" role="tab" data-toggle="tab">缩略图尺寸</a></li>
</ul>
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="general">
<ul class="form_input">
<li>
<span>网站标题:</span> <input type="text" class="input" name="site_title" value="{{.setting.SiteTitle}}"/>
</li>
<li><span>网站logo:</span>
<input type="file" name="site_logo"/>
<br />
{{if ne .setting.SiteLogo ""}}
<span></span> <img style="width:80px" class="pic" src="{{.setting.SiteLogo | FormatImg}}" />
{{end}}
</li>
<li><span>网站关键词:</span> <input type="text" class="input" name="site_keywords" value="{{.setting.SiteKeywords}}"/></li>
<li><span>网站描述:</span> <textarea name="site_description" style="width:600px;">{{.setting.SiteDescription}}</textarea></li>
<li><span>商品默认图片:</span> <input type="file" name="no_picture" />
<br />
{{if ne .setting.NoPicture ""}}
<span></span> <img class="pic" style="width:80px" src="/{{.setting.NoPicture | FormatImg}}" />
{{end}}
</li>
<li> <span>备案信息:</span> <input type="text" class="input" name="site_icp" value="{{.setting.SiteIcp}}"/></li>
<li> <span>网站电话:</span> <input type="text" class="input" name="site_tel" value="{{.setting.SiteTel}}"/></li>
<li> <span>搜索关键词:</span> <input type="text" class="input" name="search_keywords" value="{{.setting.SearchKeywords}}"/></li>
<li> <span>统计代码:</span>
<textarea name="tongji_code" style="width:600px;">{{.setting.TongjiCode}}</textarea>
</li>
</ul>
</div>
<div role="tabpanel" class="tab-pane" id="oss">
<ul class="form_input">
<li> <span>是否开启Oss: </span>
<input type="radio" name="oss_status" {{if eq .setting.OssStatus 1}} checked {{end}} value="1" id="a"/> <label for="a">是</label>
<input type="radio" name="oss_status" {{if eq .setting.OssStatus 0}} checked {{end}} value="0" id="b"/><label for="b">否</label> </li>
<li>
<span>BucketName:</span> <input type="text" class="input" name="bucket_name" value="{{.setting.BucketName}}"/>
</li>
<li>
<span>Appid:</span> <input type="text" class="input" name="appid" value="{{.setting.Appid}}"/>
</li>
<li>
<span>AppSecret:</span> <input type="text" class="input" name="app_secret" value="{{.setting.AppSecret}}"/>
</li>
<li>
<span>EndPoint:</span> <input type="text" class="input" name="end_point" value="{{.setting.EndPoint}}"/>
</li>
<li>
<span>OssDomain:</span> <input type="text" class="input" name="oss_domain" value="{{.setting.OssDomain}}"/>
</li>
</ul>
</div>
<div role="tabpanel" class="tab-pane" id="thumb">
<ul class="form_input">
<li>
<span>缩略图尺寸:</span> <input type="text" class="input" name="thumbnail_size" value="{{.setting.ThumbnailSize}}"/> <i>如:200,300,400 这样的话将会生成200x200 300x300以及400x400的图片</i>
</li>
</ul>
</div>
</div>
<button type="submit" class="btn btn-success goods_content_btn">提交</button>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
{{end}}
4.配置路由
在routers/adminRouters.go下配置设置相关路由
//商城系统设置
adminRouters.GET("/setting", admin.SettingController{}.Index)
adminRouters.POST("/setting/doEdit", admin.SettingController{}.DoEdit)
[上一节][golang gin框架] 21.Gin 商城项目-导航模块功能
[下一节][golang gin框架] 23.Gin 商城项目-前台templates模板分离,首页,顶部导航,轮播图 左侧分类数据渲染