Commit a081df2d authored by 万成波's avatar 万成波

Merge remote-tracking branch 'origin/master'

parents 124093c3 4c74a506
...@@ -25,3 +25,12 @@ export function delData(id) { ...@@ -25,3 +25,12 @@ export function delData(id) {
method: 'delete' method: 'delete'
}) })
} }
// 动态评论
export function getMomentComments(momentId, params) {
return request({
url: `/bbs/moment/comment/moment/${momentId}`,
method: 'get',
params
})
}
\ No newline at end of file
...@@ -13,10 +13,14 @@ ...@@ -13,10 +13,14 @@
</div> </div>
<div class="dynamic-content-box"> <div class="dynamic-content-box">
<div class="text">{{ form.content }}</div> <div class="text">{{ form.content }}</div>
<div class="imgs" v-if="form.attachments && form.attachments.length > 0"> <div class="imgs" v-if="form.type == 'IMAGE' && form.attachments && form.attachments.length > 0">
<template v-for="(item, index) in form.attachments"> <template v-for="(item, index) in form.attachments">
<el-image class="item" :src="item.url" :preview-src-list="[item.url]"></el-image> <el-image class="item" :src="item.url" :preview-src-list="[item.url]"></el-image>
<!-- <img class="item" :src="item.url"></img> --> </template>
</div>
<div class="imgs" v-if="form.type == 'VIDEO' && form.attachments && form.attachments.length > 0">
<template v-for="(item, index) in form.attachments">
<video class="item" :src="item.url"></video>
</template> </template>
</div> </div>
</div> </div>
...@@ -52,14 +56,16 @@ ...@@ -52,14 +56,16 @@
</div> </div>
<!-- 评论区 --> <!-- 评论区 -->
<div class="comment-box" v-if="form.isEnableComment == 1"> <div class="comment-box" v-if="form.isEnableComment == 1">
<div class="comment-display-box" v-if="form.comments && form.comments.length > 0"> <div class="comment-display-box" v-if="commentList.length > 0">
<div class="comment-item" v-for="(item, index) in form.comments"> <div class="comment-item" v-for="(item, index) in commentList">
<div class="user-info"> <div class="user-info">
<div class="username">{{ item.nickName }}:</div> <div class="username">{{ item.nickName }}:</div>
<div class="datetime">2025-07-01 04:21:21</div> <div class="datetime">{{ item.createTime }}</div>
</div> </div>
<div class="content">{{ item.content }}</div> <div class="content">{{ item.content }}</div>
<!-- <div class="tips">未精选,仅自己可见</div> --> </div>
<div class="show-more-box" v-if="commentList.length < total" @click="loadMore">
加载更多
</div> </div>
</div> </div>
</div> </div>
...@@ -67,31 +73,56 @@ ...@@ -67,31 +73,56 @@
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import { detailData } from '@/api/moments' import { detailData, getMomentComments } from '@/api/moments'
export default { export default {
data() { data() {
return { return {
visible: false, visible: false,
form: {} form: {},
queryParams: {
pageNum: 1,
pageSize: 5
},
commentList: [],
total: 0,
currentRow:{}
} }
}, },
methods: { methods: {
openModal(row) { openModal(row) {
this.visible = true; this.visible = true;
this.getData(row) this.currentRow = {...row}
this.queryParams.pageNum = 1;
this.commentList = [];
this.getData();
this.getComments()
}, },
getData(row) { // 详情
detailData(row.id).then(res => { getData() {
detailData(this.currentRow.id).then(res => {
console.log(res) console.log(res)
this.form = { ...res.data } this.form = { ...res.data }
}) })
} },
// 动态评论
getComments() {
getMomentComments(this.currentRow.id, this.queryParams).then(res => {
console.log(res)
this.commentList = [...this.commentList, ...res.rows] || []
this.total = res.total
})
},
loadMore() {
this.queryParams.pageNum += 1;
this.getComments()
},
} }
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.detail-dialog{ .detail-dialog {
.el-dialog__body{ .el-dialog__body {
padding: 0 20px !important; padding: 0 20px !important;
} }
} }
...@@ -107,6 +138,7 @@ export default { ...@@ -107,6 +138,7 @@ export default {
margin-right: 10px; margin-right: 10px;
margin-bottom: 5px; margin-bottom: 5px;
} }
.dynamic-item { .dynamic-item {
background-color: white; background-color: white;
width: 100%; width: 100%;
...@@ -334,4 +366,19 @@ export default { ...@@ -334,4 +366,19 @@ export default {
} }
} }
} }
.show-more-box {
height: 30px;
display: flex;
align-items: center;
justify-content: center;
color: #BBBBBB;
font-size: 12px;
cursor: pointer;
.icon {
width: 16px;
height: 16px;
}
}
</style> </style>
...@@ -122,6 +122,7 @@ export default { ...@@ -122,6 +122,7 @@ export default {
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
} }
this.dateRange = []
this.getList() this.getList()
} }
} }
......
...@@ -16,16 +16,18 @@ ...@@ -16,16 +16,18 @@
<view class="datetime">{{item.createTime}}</view> <view class="datetime">{{item.createTime}}</view>
</view> </view>
<view class="content"> <view class="content">
<view class="text" v-if="!item.replyNickName">{{item.content}}</view> <view class="text" v-if="!item.replyNickName" @click.stop="handleReplayComment(item)">{{item.content}}</view>
<view class="text" v-else @click.stop="handleReplayComment(item)"> <view class="text" v-else @click.stop="handleReplayComment(item)">
回复<span style="color: #0058B6;">{{item.replyNickName}}</span>{{item.content}} 回复<span style="color: #0058B6;">{{item.replyNickName}}</span>{{item.content}}
</view> </view>
<view class="operation-text"> <view class="operation-text">
<view class="add-text" v-if="form.isSelf==1&&activeIndex==1 &&item.isFeatured==0" <view class="add-text mr10" v-if="form.isSelf==1&&activeIndex==1 &&item.isFeatured==0 &&form.isEnableFeaturedComment==1"
@click="handleFeatured(item)">加入精选</view> @click="handleFeatured(item)">加入精选</view>
<view v-if="form.isSelf==1&&activeIndex==1 &&item.isFeatured==1" @click="handleFeatured(item)"> <view class="mr10" v-if="form.isSelf==1&&activeIndex==1 &&item.isFeatured==1&&form.isEnableFeaturedComment==1" @click="handleFeatured(item)">
取消精选</view> 取消精选</view>
<view v-if="form.isSelf==1&&activeIndex==1" @click="handleDelete(item)">删除</view> <view v-if="form.isSelf==1&&activeIndex==1" @click="handleDelete(item)">删除</view>
<view v-if="activeIndex==0&&item.isFeatured==1" style="color: #F2AC39;">精选</view>
</view> </view>
</view> </view>
</view> </view>
...@@ -77,6 +79,7 @@ ...@@ -77,6 +79,7 @@
console.log(newVal, oldVal) console.log(newVal, oldVal)
if(newVal.id){ if(newVal.id){
this.queryParams.momentId = newVal.id; this.queryParams.momentId = newVal.id;
this.commentList = [];
this.getCommentList() this.getCommentList()
} }
} }
...@@ -90,6 +93,7 @@ ...@@ -90,6 +93,7 @@
}, },
handleRefresh() { handleRefresh() {
this.queryParams.pageNum = 1; this.queryParams.pageNum = 1;
this.commentList = [];
this.getCommentList() this.getCommentList()
}, },
getCommentList() { getCommentList() {
...@@ -125,7 +129,7 @@ ...@@ -125,7 +129,7 @@
uni.showToast({ uni.showToast({
title: `${text}成功` title: `${text}成功`
}) })
_this.getCommentList() _this.handleRefresh()
} }
}) })
} else if (res.cancel) { } else if (res.cancel) {
...@@ -146,7 +150,7 @@ ...@@ -146,7 +150,7 @@
uni.showToast({ uni.showToast({
title: `删除成功` title: `删除成功`
}) })
_this.getCommentList() _this.handleRefresh()
} }
}) })
} else if (res.cancel) { } else if (res.cancel) {
...@@ -245,10 +249,11 @@ ...@@ -245,10 +249,11 @@
font-size: 28rpx; font-size: 28rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: flex-end;
}
.mr10{
margin-right: 12rpx;
} }
.add-text { .add-text {
color: #0058B6; color: #0058B6;
} }
......
...@@ -100,10 +100,10 @@ ...@@ -100,10 +100,10 @@
<view class="username">{{item.nickName}}:</view> <view class="username">{{item.nickName}}:</view>
<view class="datetime">2025-07-01 04:21:21</view> <view class="datetime">2025-07-01 04:21:21</view>
</view> </view>
<view class="content" v-if="!item.replyNikeName" @click.stop="handleReplayComment(item)"> <view class="content" v-if="!item.replyNickName" @click.stop="handleReplayComment(item)">
{{item.content}}</view> {{item.content}}</view>
<view class="content" v-else @click.stop="handleReplayComment(item)"> <view class="content" v-else @click.stop="handleReplayComment(item)">
回复<span style="color: #0058B6;">{{item.replyNikeName}}:</span>:{{item.content}} 回复<span style="color: #0058B6;">{{item.replyNickName}}:</span>:{{item.content}}
</view> </view>
<!-- <view class="tips">未精选,仅自己可见</view> --> <!-- <view class="tips">未精选,仅自己可见</view> -->
</view> </view>
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
this.momentId = momentId; this.momentId = momentId;
this.queryParams.momentId = momentId this.queryParams.momentId = momentId
this.getDetail() this.getDetail()
// this.getCommentList()
}, },
components: { components: {
DynamicItem, DynamicItem,
...@@ -37,7 +36,6 @@ ...@@ -37,7 +36,6 @@
methods: { methods: {
handleRefresh(){ handleRefresh(){
this.getDetail(); this.getDetail();
this.getCommentList()
}, },
getDetail(){ getDetail(){
dynamicDetail(this.momentId).then(res=>{ dynamicDetail(this.momentId).then(res=>{
...@@ -46,12 +44,6 @@ ...@@ -46,12 +44,6 @@
} }
}) })
}, },
getCommentList(){
dynamicDetailComments(this.queryParams).then(res=>{
console.log(res)
this.commentList = res.rows
})
}
} }
} }
</script> </script>
......
...@@ -60,11 +60,11 @@ ...@@ -60,11 +60,11 @@
<view class="choice-box" v-if="form.voteOptionType=='TEXT'"> <view class="choice-box" v-if="form.voteOptionType=='TEXT'">
<view class="choice-item text-item"> <view class="choice-item text-item">
<view class="label">选项1</view> <view class="label">选项1</view>
<input class="text" v-model="form.voteOptions[0].name" placeholder="请输入选项1(4字以内)" /> <input class="text" maxlength="4" v-model="form.voteOptions[0].name" placeholder="请输入选项1(4字以内)" />
</view> </view>
<view class="choice-item text-item"> <view class="choice-item text-item">
<view class="label">选项2</view> <view class="label">选项2</view>
<input class="text" v-model="form.voteOptions[1].name" placeholder="请输入选项2(4字以内)" /> <input class="text" maxlength="4" v-model="form.voteOptions[1].name" placeholder="请输入选项2(4字以内)" />
</view> </view>
</view> </view>
</view> </view>
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
</scroll-view> </scroll-view>
<view class="publisb-box"> <view class="publisb-box">
<view class="publish-btn" @click="handleToPublish"> <view class="publish-btn" @click="handleToPublish">
<image src="/static/images/publish-gray.png" class="icon"></image> <image src="/static/images/publish-blue.png" class="icon"></image>
<view class="text">发表动态</view> <view class="text">发表动态</view>
</view> </view>
</view> </view>
...@@ -93,9 +93,9 @@ ...@@ -93,9 +93,9 @@
.topic-detail-page { .topic-detail-page {
background-color: white; background-color: white;
overflow: hidden;
.topic-box { .topic-box {
padding: 32rpx 34rpx 0 32rpx; padding: 32rpx 34rpx 2rpx 32rpx;
.topic-container { .topic-container {
width: 92vw; width: 92vw;
...@@ -137,9 +137,9 @@ ...@@ -137,9 +137,9 @@
} }
.publisb-box { .publisb-box {
height: 122rpx; height: 124rpx;
background-color: white; background-color: rgba(244, 244, 244, 1);
border-top: 1px solid #eee;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
...@@ -162,7 +162,7 @@ ...@@ -162,7 +162,7 @@
} }
.text { .text {
color: rgba(187, 187, 187, 1); color: rgba(0, 0, 0, 1);
font-size: 32rpx; font-size: 32rpx;
} }
} }
......
...@@ -2,13 +2,16 @@ ...@@ -2,13 +2,16 @@
<view class="page-container topics-page"> <view class="page-container topics-page">
<view class="search-box-common"> <view class="search-box-common">
<image src="/static/images/search-icon.png" class="search-icon"></image> <image src="/static/images/search-icon.png" class="search-icon"></image>
<input placeholder="搜索" style="width: 100%;" v-model="topicName" @keypress.enter="getList" placeholder-class="placeholder-class" /> <input placeholder="搜索" style="width: 100%;" v-model="topicName" @keypress.enter="getList"
placeholder-class="placeholder-class" />
</view> </view>
<view class="hot-container"> <view class="hot-container">
<view class="hot-tag-box"> <view class="hot-tag-box">
<image src="/static/images/hot-searchs.png" class="tag"></image> <image src="/static/images/hot-searchs.png" class="tag"></image>
</view> </view>
<view class="hot-item" v-for="(item,index) in hotList" :class="{'first':index==0,'second':index==1,'third':index==2}"> <view v-if="hotList.length > 0">
<view class="hot-item" v-for="(item,index) in hotList"
:class="{'first':index==0,'second':index==1,'third':index==2}">
<view class="index">{{index + 1}}</view> <view class="index">{{index + 1}}</view>
<view class="text">{{item.name}}</view> <view class="text">{{item.name}}</view>
<view class="more" @click="topTopicDetailPage(item)"> <view class="more" @click="topTopicDetailPage(item)">
...@@ -17,36 +20,45 @@ ...@@ -17,36 +20,45 @@
</view> </view>
</view> </view>
</view> </view>
<list-empty v-else text="暂无匹配话题~"></list-empty>
</view>
</view> </view>
</template> </template>
<script> <script>
import {hotTopicRanking} from '@/api/api.js'; import {
hotTopicRanking
} from '@/api/api.js';
import ListEmpty from '@/components/ListEmpty.vue'
export default { export default {
data() { data() {
return { return {
hotList:[], hotList: [],
topicName:'' topicName: ''
} }
}, },
components: {
ListEmpty
},
onShow() { onShow() {
this.getList() this.getList()
}, },
methods: { methods: {
// 话题热搜榜 // 话题热搜榜
getList(){ getList() {
let params = { let params = {
name:this.topicName name: this.topicName
} }
hotTopicRanking(params).then(res=>{ hotTopicRanking(params).then(res => {
console.log(res) console.log(res)
this.hotList = res.data this.hotList = res.data
}) })
}, },
topTopicDetailPage(item){ topTopicDetailPage(item) {
uni.navigateTo({ uni.navigateTo({
url:'/pages/topic-detail/topic-detail?topicId='+item.id+'&topicName='+item.name url: '/pages/topic-detail/topic-detail?topicId=' + item.id + '&topicName=' + item.name
}) })
} }
} }
...@@ -55,28 +67,32 @@ ...@@ -55,28 +67,32 @@
<style lang="scss" scoped> <style lang="scss" scoped>
@import '@/static/styles/common.scss'; @import '@/static/styles/common.scss';
.topics-page{
.topics-page {
background-color: white; background-color: white;
} }
.search-box-common{ .search-box-common {
background-color: rgba(244, 244, 244, 1); background-color: rgba(244, 244, 244, 1);
} }
.hot-container{
.hot-container {
padding: 0 34rpx; padding: 0 34rpx;
box-sizing: border-box; box-sizing: border-box;
.hot-tag-box{
.hot-tag-box {
margin-bottom: 32rpx; margin-bottom: 32rpx;
.tag{
.tag {
width: 120rpx; width: 120rpx;
height: 30rpx; height: 30rpx;
} }
} }
.hot-item{ .hot-item {
height: 76rpx; height: 76rpx;
border-radius: 12rpx; border-radius: 12rpx;
background: linear-gradient(93.14deg, rgba(149,153,167,0.1) 3.32%,rgba(255,255,255,0) 98.5%); background: linear-gradient(93.14deg, rgba(149, 153, 167, 0.1) 3.32%, rgba(255, 255, 255, 0) 98.5%);
color: rgba(0, 0, 0, 1); color: rgba(0, 0, 0, 1);
font-size: 28rpx; font-size: 28rpx;
margin-bottom: 20rpx; margin-bottom: 20rpx;
...@@ -85,47 +101,56 @@ ...@@ -85,47 +101,56 @@
justify-content: space-between; justify-content: space-between;
padding: 0 24rpx; padding: 0 24rpx;
box-sizing: border-box; box-sizing: border-box;
.index{
.index {
color: rgba(149, 153, 167, 1); color: rgba(149, 153, 167, 1);
font-size: 30rpx; font-size: 30rpx;
width: 40rpx; width: 40rpx;
line-height: 30rpx; line-height: 30rpx;
} }
.text{
.text {
font-size: 28rpx; font-size: 28rpx;
width: calc(100% - 142rpx); width: calc(100% - 142rpx);
} }
.more{
.more {
width: 90rpx; width: 90rpx;
color: rgba(187, 187, 187, 1); color: rgba(187, 187, 187, 1);
font-size: 24rpx; font-size: 24rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-end; justify-content: flex-end;
.icon{
.icon {
width: 36rpx; width: 36rpx;
height: 36rpx; height: 36rpx;
} }
} }
} }
.first{
background: linear-gradient(93.14deg, rgba(254,68,91,0.1) 3.32%,rgba(255,255,255,0) 98.5%); .first {
.index{ background: linear-gradient(93.14deg, rgba(254, 68, 91, 0.1) 3.32%, rgba(255, 255, 255, 0) 98.5%);
.index {
color: #FE445B; color: #FE445B;
} }
} }
.second{
background: linear-gradient(93.14deg, rgba(255,122,31,0.1) 3.32%,rgba(255,255,255,0) 98.5%); .second {
.index{ background: linear-gradient(93.14deg, rgba(255, 122, 31, 0.1) 3.32%, rgba(255, 255, 255, 0) 98.5%);
.index {
color: #FF7A1F; color: #FF7A1F;
} }
} }
.third{
background: linear-gradient(93.14deg, rgba(250,174,26,0.1) 3.32%,rgba(255,255,255,0) 98.5%); .third {
.index{ background: linear-gradient(93.14deg, rgba(250, 174, 26, 0.1) 3.32%, rgba(255, 255, 255, 0) 98.5%);
.index {
color: #FAAE1A; color: #FAAE1A;
} }
} }
} }
</style> </style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment