[ADD]增加留言功能

This commit is contained in:
viletyy 2019-07-01 17:20:59 +08:00
parent 3f720e9776
commit 3c11ef2903
5 changed files with 212 additions and 20 deletions

67
controllers/message.go Normal file
View File

@ -0,0 +1,67 @@
package controllers
import (
"liteblog/models"
"liteblog/syserrors"
"log"
)
type MessageController struct {
BaseController
}
// 新增留言
// @router /create [post]
func(c *MessageController) NewMessage() {
log.Print("开始留言了...")
c.MustLogin()
content := c.GetMustString("content", "请输入评论内容")
k := c.UUID()
message := &models.Message{
Key: k,
User: c.User,
UserId: int(c.User.ID),
Content: content,
}
if err := models.SaveMessage(message); err != nil {
log.Print(err)
log.Print("保存失败了")
c.Abort500(syserrors.NewError("保存失败", err))
}
c.JSONOkH("保存成功", H{"data": message})
}
// @router /count [get]
func(c *MessageController) Count() {
count, err := models.QueryMessageCount();
if err != nil {
c.Abort500(syserrors.NewError("查询失败", err))
}
c.JSONOkH("查询成功", H{"count": count})
}
// @router /query [get]
func(c *MessageController) Query() {
pageNo, err := c.GetInt("pageno", 1)
if err != nil || pageNo < 1 {
pageNo = 1
}
pageSize, err := c.GetInt("pagesize", 10)
if err != nil || pageSize < 0 {
pageSize = 10
}
messages, err := models.QueryMessageByPage(pageNo, pageSize)
if err != nil {
c.Abort500(syserrors.NewError("查询错误", err))
}
c.JSONOkH("查询成功", H{"data": messages})
}

View File

@ -32,6 +32,7 @@ func init() {
db.AutoMigrate(&User{},
&Note{},
&Comment{},
&Message{},
)
var count int

23
models/message.go Normal file
View File

@ -0,0 +1,23 @@
package models
type Message struct {
Model
Key string `gorm:"unique_index; not null" json:"key"`
Content string `json:"content"`
UserId int `json:"user_id"`
User User `json:"user"`
Praise int `gorm:"default:0" json:"praise"`
}
func QueryMessageByPage(page int, limit int) (messages []*Message, err error) {
err = db.Offset((page - 1) * limit).Limit(limit).Find(&messages).Error
return messages, err
}
func QueryMessageCount() (count int, err error) {
return count, db.Model(&Message{}).Count(&count).Error
}
func SaveMessage(message *Message) (err error) {
return db.Save(&message).Error
}

View File

@ -21,5 +21,9 @@ func init() {
"comment",
beego.NSInclude(&controllers.CommentController{}),
),
beego.NewNamespace(
"message",
beego.NSInclude(&controllers.MessageController{}),
),
)
}

View File

@ -13,11 +13,11 @@
<div class="contar-wrap" id="contar-wrap">
<form class="layui-form" action="">
<div class="layui-form-item layui-form-text">
<textarea class="layui-textarea" id="LAY-msg-content" style="resize:none"></textarea>
<textarea name="content" class="layui-textarea" id="LAY-msg-content" style="resize:none"></textarea>
</div>
</form>
<div class="item-btn">
<button class="layui-btn layui-btn-normal" id="item-btn">提交</button>
<button type="button" class="layui-btn layui-btn-normal" id="message-item-btn">提交</button>
</div>
<div id="LAY-msg-box">
@ -40,24 +40,121 @@
</div>
</div>
{{template "shares/footer.html".}}
<script id="LAY-msg-tpl" type="text/html">
<div class="info-box">
<div class="info-item">
<img class="info-img" src="{{ .Avatar }}" alt="">
<div class="info-text">
<p class="title">
<span class="name">{{ .Username }}</span>
<span class="info-img">
<i class="layui-icon layui-icon-praise"></i>
{{ .Praise }}
</span>
</p>
<p class="info-intr">
{{ .Content }}
</p>
</div>
{{str2html `
<script id="LAY-msg-tpl" type="text/html">
<div class="info-box">
<div class="info-item">
<img class="info-img" src="{{ d.avatar }}" alt="">
<div class="info-text">
<p class="title">
<span class="name">{{ d.username }}</span>
<span class="info-img">
<i class="layui-icon layui-icon-praise"></i>
{{ d.praise }}
</span>
</p>
<p class="info-intr">
{{ d.content }}
</p>
</div>
</div>
</div>
</div>
</script>
</script>
`}}
<script>
layui.use(['form',"jquery","layer"],function () {
var element = layui.element
, form = layui.form
, laypage = layui.laypage
, $ = layui.jquery
, laytpl = layui.laytpl;
function drawMessage(message) {
var view = $('#LAY-msg-tpl').html()
//模拟数据
,data = {
username: message.user.name
,avatar: message.user.avatar||'/static/images/info-img.png'
,praise: message.praise
,content: message.content
,key :message.key
};
//模板渲染
return layui.laytpl(view).render(data);
}
$('#message-item-btn').on('click', function(){
var elemCont = $('#LAY-msg-content')
,content = elemCont.val();
if(content.replace(/\s/g, '') == ""){
layer.msg('请先输入留言');
return elemCont.focus();
}
// 发送post请求
$.post("/message/create",{content: content},function (ret) {
if(ret.code==0){
var html = drawMessage(ret.data);
$('#LAY-msg-box').prepend(html);
elemCont.val('');
layer.msg('留言成功', {
icon: 1
})
}else{
layer.msg(ret.msg);
}
}).error(function () {
layer.msg("网络异常");
})
});
if($("#test1").size()>0) {
var count = 0;
$.ajax({
url: "message/count",
type: "GET",
async: false,//不是异步,是同步请求,等执行这段代码才能必须下面的代码
success: function (ret) {
count = ret.count;
},
error: function () {
layer.msg("网络异常")
}
});
console.log(count)
laypage.render({
elem: 'test1' //注意,这里的 test1 是 ID不用加 # 号
, count: count //数据总数,从服务端得到
, theme: '#1e9fff'
, limit: 5
, jump: function (obj, first) {
//obj包含了当前分页的所有参数比如
console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
console.log(obj.limit); //得到每页显示的条数
//查询留言的路径为:/message/query
$.get("/message/query", {pageno: obj.curr, pagesize: obj.limit}, function (ret) {
if (ret.code == 0) {
// 循环后台返回的留言列表拼出html页面
var datas = ret.data;
var html = "";
for (var i = 0; i < datas.length; i++) {
//拼页面
html += drawMessage(datas[i]);
}
var $html = $(html);
$("#LAY-msg-box").html($html);
} else {
layer.msg(ret.msg);
}
}).error(function () {
layer.msg("网络异常!")
});
}
});
}
})
</script>
</body>