diff --git a/pets-be/internal/handler/community.go b/pets-be/internal/handler/community.go index 7d448cd..b5367e8 100644 --- a/pets-be/internal/handler/community.go +++ b/pets-be/internal/handler/community.go @@ -113,7 +113,8 @@ func (h *Handler) ListComments(c *gin.Context) { } type commentReq struct { - Content string `json:"content"` + Content string `json:"content"` + Images []string `json:"images"` } // CreateComment POST /api/posts/:id/comments @@ -127,7 +128,7 @@ func (h *Handler) CreateComment(c *gin.Context) { response.FailParams(c, "评论内容不能为空") return } - comment, err := h.svc.CreateComment(middleware.UserID(c), idParam(c, "id"), req.Content) + comment, err := h.svc.CreateComment(middleware.UserID(c), idParam(c, "id"), req.Content, req.Images) if err != nil { respondErr(c, err) return diff --git a/pets-be/internal/service/community.go b/pets-be/internal/service/community.go index 077b821..ebb0ec7 100644 --- a/pets-be/internal/service/community.go +++ b/pets-be/internal/service/community.go @@ -209,7 +209,7 @@ func (s *Service) ListComments(userID, postID string, offset, limit int) ([]mode } // CreateComment 评论 -func (s *Service) CreateComment(userID, postID string, content string) (*model.Comment, error) { +func (s *Service) CreateComment(userID, postID string, content string, images []string) (*model.Comment, error) { if _, err := s.GetPost(postID); err != nil { return nil, err } @@ -219,6 +219,10 @@ func (s *Service) CreateComment(userID, postID string, content string) (*model.C name = user.Nickname } comment := model.Comment{PostID: postID, UserID: userID, AuthorName: name, Content: content, Status: "published"} + // 配图存 JSON 数组。空数组也要显式写,否则前端拿到 null 还要额外判空 + if b, err := json.Marshal(images); err == nil && len(images) > 0 { + comment.Images = b + } if err := s.db.Transaction(func(tx *gorm.DB) error { if err := tx.Create(&comment).Error; err != nil { return err diff --git a/pets-fe/app.wxss b/pets-fe/app.wxss index abbe876..ca59719 100644 --- a/pets-fe/app.wxss +++ b/pets-fe/app.wxss @@ -357,3 +357,17 @@ page{scrollbar-width:none;-ms-overflow-style:none} } .no-pet-b{font-size:var(--fs-lg);font-weight:var(--fw-b)} .no-pet-p{color:var(--muted);font-size:var(--fs-sm);margin:var(--sp-2) 0 var(--sp-4);line-height:1.6} + +/* 宠物切换条固定在导航栏下方。它原本在 scroll-view 里,滚下去就找不到了, + 而切宠物是随时要用的动作——尤其多宠用户,看着 A 的数据想切到 B + 还得先滚回顶部。移出滚动区,四个主页面通用。 */ +.pet-bar{ + flex:none; + padding:var(--sp-2) var(--pad-x) 0; + background:rgba(250,247,242,.92); + backdrop-filter:blur(20rpx); + -webkit-backdrop-filter:blur(20rpx); + border-bottom:1rpx solid rgba(238,230,220,.7); +} +/* 条内的 pet-switch 自己带 padding-bottom,这里不再叠加 */ +.pet-bar .pet-switch{padding-bottom:var(--sp-2)} diff --git a/pets-fe/components/bottom-sheet/bottom-sheet.js b/pets-fe/components/bottom-sheet/bottom-sheet.js index e69529d..ac93f06 100644 --- a/pets-fe/components/bottom-sheet/bottom-sheet.js +++ b/pets-fe/components/bottom-sheet/bottom-sheet.js @@ -416,6 +416,7 @@ Component({ timeText: fmtAgo(c.created_at), // 没有头像字段,用昵称首字做个色块,比一律显示同一个 emoji 强 initial: (c.author_name || '?').slice(0, 1), + imgs: Array.isArray(c.images) ? c.images : [], })), }), ) @@ -954,6 +955,10 @@ Component({ wx.showToast({ title: (e && e.message) || '上传失败', icon: 'none' }); }); }, + onPreviewCommentImage(e) { + const { urls, cur } = e.currentTarget.dataset; + if (urls && urls.length) wx.previewImage({ urls, current: cur }); + }, onRemoveCommentImage(e) { const list = this.data.commentImages.slice(); list.splice(e.currentTarget.dataset.index, 1); diff --git a/pets-fe/components/bottom-sheet/bottom-sheet.wxml b/pets-fe/components/bottom-sheet/bottom-sheet.wxml index 254e776..8be9fb2 100644 --- a/pets-fe/components/bottom-sheet/bottom-sheet.wxml +++ b/pets-fe/components/bottom-sheet/bottom-sheet.wxml @@ -330,6 +330,11 @@ module.exports.sel = function (map, key, index, def) { {{item.timeText}} {{item.content}} + + + diff --git a/pets-fe/components/bottom-sheet/bottom-sheet.wxss b/pets-fe/components/bottom-sheet/bottom-sheet.wxss index f5732a4..360119a 100644 --- a/pets-fe/components/bottom-sheet/bottom-sheet.wxss +++ b/pets-fe/components/bottom-sheet/bottom-sheet.wxss @@ -125,3 +125,5 @@ .cm-bar{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-3)} .cm-pic{display:flex;align-items:center;gap:var(--sp-1);color:var(--muted);font-size:var(--fs-sm)} .cm-count{margin-left:auto;color:var(--muted2);font-size:var(--fs-cap)} +.cm-imgs{display:flex;flex-wrap:wrap;gap:var(--sp-1);margin-top:var(--sp-2)} +.cm-img{width:150rpx;height:150rpx;border-radius:var(--r-sm)} diff --git a/pets-fe/pages/home/home.wxml b/pets-fe/pages/home/home.wxml index aa928af..bd1a877 100644 --- a/pets-fe/pages/home/home.wxml +++ b/pets-fe/pages/home/home.wxml @@ -1,5 +1,7 @@ + + @@ -13,8 +15,6 @@ - - diff --git a/pets-fe/pages/plan/plan.wxml b/pets-fe/pages/plan/plan.wxml index b1b3270..eada325 100644 --- a/pets-fe/pages/plan/plan.wxml +++ b/pets-fe/pages/plan/plan.wxml @@ -1,9 +1,9 @@ + + - - 还没有毛孩子的档案 diff --git a/pets-fe/pages/record/record.wxml b/pets-fe/pages/record/record.wxml index 87d6d5f..2568598 100644 --- a/pets-fe/pages/record/record.wxml +++ b/pets-fe/pages/record/record.wxml @@ -1,9 +1,9 @@ + + - - 还没有毛孩子的档案 diff --git a/pets-fe/pages/report/report.wxml b/pets-fe/pages/report/report.wxml index 9d14b12..5561f90 100644 --- a/pets-fe/pages/report/report.wxml +++ b/pets-fe/pages/report/report.wxml @@ -1,9 +1,9 @@ + + - - 还没有毛孩子的档案