fix: #976 评论增加头像 (#977)

* fix: #976 评论增加头像

* fix: update cherry markdown read comment user to avatar style
master
zhanzhenping 2024-08-26 13:38:58 +08:00 committed by GitHub
parent acf3c46e82
commit 84b947d148
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 48 additions and 27 deletions

View File

@ -8,7 +8,7 @@ import (
"github.com/mindoc-org/mindoc/conf" "github.com/mindoc-org/mindoc/conf"
) )
//Comment struct // Comment struct
type Comment struct { type Comment struct {
CommentId int `orm:"pk;auto;unique;column(comment_id)" json:"comment_id"` CommentId int `orm:"pk;auto;unique;column(comment_id)" json:"comment_id"`
Floor int `orm:"column(floor);type(unsigned);default(0)" json:"floor"` Floor int `orm:"column(floor);type(unsigned);default(0)" json:"floor"`
@ -30,11 +30,12 @@ type Comment struct {
// UserAgent 评论者浏览器内容 // UserAgent 评论者浏览器内容
UserAgent string `orm:"column(user_agent);size(500)" json:"user_agent"` UserAgent string `orm:"column(user_agent);size(500)" json:"user_agent"`
// Parent 评论所属父级 // Parent 评论所属父级
ParentId int `orm:"column(parent_id);type(int);default(0)" json:"parent_id"` ParentId int `orm:"column(parent_id);type(int);default(0)" json:"parent_id"`
AgreeCount int `orm:"column(agree_count);type(int);default(0)" json:"agree_count"` AgreeCount int `orm:"column(agree_count);type(int);default(0)" json:"agree_count"`
AgainstCount int `orm:"column(against_count);type(int);default(0)" json:"against_count"` AgainstCount int `orm:"column(against_count);type(int);default(0)" json:"against_count"`
Index int `orm:"-" json:"index"` Index int `orm:"-" json:"index"`
ShowDel int `orm:"-" json:"show_del"` ShowDel int `orm:"-" json:"show_del"`
Avatar string `orm:"-" json:"avatar"`
} }
// TableName 获取对应数据库表名. // TableName 获取对应数据库表名.
@ -90,6 +91,7 @@ func (m *Comment) QueryCommentByDocumentId(doc_id, page, pagesize int, member *M
comments[i].Index = (i + 1) + (page-1)*pagesize comments[i].Index = (i + 1) + (page-1)*pagesize
if member != nil && comments[i].CanDelete(member.MemberId, bookRole) { if member != nil && comments[i].CanDelete(member.MemberId, bookRole) {
comments[i].ShowDel = 1 comments[i].ShowDel = 1
comments[i].Avatar = member.Avatar
} }
} }
return return
@ -103,7 +105,7 @@ func (m *Comment) Update(cols ...string) error {
return err return err
} }
//Insert 添加一条评论. // Insert 添加一条评论.
func (m *Comment) Insert() error { func (m *Comment) Insert() error {
if m.DocumentId <= 0 { if m.DocumentId <= 0 {
return errors.New("评论文档不存在") return errors.New("评论文档不存在")

View File

@ -798,6 +798,13 @@ table>tbody>tr:hover {
line-height: 24px line-height: 24px
} }
.m-comment .comment-item .info img {
height: 22px;
border-radius: 50%;
margin-right: 4px;
display: ruby;
}
.m-comment .comment-item .vote { .m-comment .comment-item .vote {
display: inline-block; display: inline-block;
margin-right: 12px margin-right: 12px

View File

@ -77,26 +77,39 @@ function pageClicked($page, $docid) {
}); });
} }
function renderOperateSection(comment) {
const deleteIcon = comment.show_del == 1
? `<i class="delete e-delete glyphicon glyphicon-remove" onclick="onDelComment(${comment.comment_id})"></i>`
: '';
return `
<span class="operate ${comment.show_del == 1 ? 'toggle' : ''}">
<span class="number">${comment.index}#</span>
${deleteIcon}
</span>`;
}
// 加载评论 // 加载评论
function loadComment($page, $docid) { function loadComment($page, $docid) {
$("#commentList").empty(); $("#commentList").empty();
var html = "" let html = ""
var c = $page.List; let c = $page.List;
for (var i = 0; c && i < c.length; i++) { for (let i = 0; c && i < c.length; i++) {
html += "<div class=\"comment-item\" data-id=\"" + c[i].comment_id + "\">"; const comment = c[i];
html += "<p class=\"info\"><a class=\"name\">" + c[i].author + "</a><span class=\"date\">" + timeFormat(c[i].comment_date) + "</span></p>"; html += `
html += "<div class=\"content\">" + c[i].content + "</div>"; <div class="comment-item" data-id="${comment.comment_id}">
html += "<p class=\"util\">"; <p class="info">
if (c[i].show_del == 1) html += "<span class=\"operate toggle\">"; <img src="${comment.avatar}" alt="">
else html += "<span class=\"operate\">"; <a class="name">${comment.author}</a>
html += "<span class=\"number\">" + c[i].index + "#</span>"; <span class="date">${timeFormat(comment.comment_date)}</span>
if (c[i].show_del == 1) html += "<i class=\"delete e-delete glyphicon glyphicon-remove\" style=\"color:red\" onclick=\"onDelComment(" + c[i].comment_id + ")\"></i>"; </p>
html += "</span>"; <div class="content">${comment.content}</div>
html += "</p>"; <p class="util">
html += "</div>"; ${renderOperateSection(comment)}
</p>
</div>`;
} }
$("#commentList").append(html); $("#commentList").append(html);
if ($page.TotalPage > 1) { if ($page.TotalPage > 1) {
$("#page").bootstrapPaginator({ $("#page").bootstrapPaginator({
currentPage: $page.PageNo, currentPage: $page.PageNo,
@ -114,7 +127,6 @@ function loadComment($page, $docid) {
// 删除评论 // 删除评论
function onDelComment($id) { function onDelComment($id) {
console.log($id);
$.ajax({ $.ajax({
url: "/comment/delete", url: "/comment/delete",
data: { "id": $id }, data: { "id": $id },

View File

@ -35,7 +35,7 @@
window.IS_DOCUMENT_INDEX = '{{if .IS_DOCUMENT_INDEX}}true{{end}}' === 'true'; window.IS_DOCUMENT_INDEX = '{{if .IS_DOCUMENT_INDEX}}true{{end}}' === 'true';
window.IS_DISPLAY_COMMENT = '{{if .Model.IsDisplayComment}}true{{end}}' === 'true'; window.IS_DISPLAY_COMMENT = '{{if .Model.IsDisplayComment}}true{{end}}' === 'true';
</script> </script>
<script type="text/javascript">window.book={"identify":"{{.Model.Identify}}"};</script> <script type="text/javascript">window.book={"identify": '{{.Model.Identify}}'};</script>
<style> <style>
.btn-mobile { .btn-mobile {
position: absolute; position: absolute;
@ -53,13 +53,13 @@
} }
} }
.svg { .svg {
display: inline-block; display: inline-block;
position: relative; position: relative;
width: 100%; width: 100%;
height: 100%; height: 100%;
vertical-align: middle; vertical-align: middle;
overflow: auto; overflow: auto;
} }
</style> </style>
</head> </head>