178 lines
4.8 KiB
Vue
178 lines
4.8 KiB
Vue
<template>
|
||
<view class="u-page">
|
||
<view class="u-page0-top">
|
||
</view>
|
||
<view class="u-demo-block">
|
||
<view class="reply-button" @click="handleReply">
|
||
<up-text
|
||
text="回复"
|
||
type="primary"
|
||
size="14"
|
||
></up-text>
|
||
</view>
|
||
<view class="u-demo-block__content">
|
||
<view class="album">
|
||
<view class="album__avatar">
|
||
<image
|
||
:src="props.data.userAvatar"
|
||
mode=""
|
||
style="width:32px;height:32px;"
|
||
></image>
|
||
</view>
|
||
<view class="album__content">
|
||
<up-text
|
||
:text="props.data.userName"
|
||
type="primary"
|
||
bold
|
||
size="17"
|
||
></up-text>
|
||
<up-text
|
||
margin="0 0 8px 0"
|
||
:text="props.data.content"
|
||
></up-text>
|
||
<!-- <up-album
|
||
:urls="urls1"
|
||
keyName="src2"
|
||
></up-album> -->
|
||
<!-- 子列表展示 -->
|
||
<view class="sub-discussions">
|
||
<view class="sub-discussion-item" v-for="(item, index) in displayedSubDiscussions" :key="index" >
|
||
<view class="">
|
||
<up-text
|
||
:text="item.userName+':'"
|
||
type="secondary"
|
||
size="15"
|
||
></up-text>
|
||
</view>
|
||
<view class="sub-discussion-text">
|
||
<up-text
|
||
:text="item.content"
|
||
size="14"
|
||
></up-text>
|
||
</view>
|
||
</view>
|
||
<view v-if="props.data.children.length > 2" class="toggle-btn" @click="toggleExpand">
|
||
<up-text
|
||
:text="isExpanded ? '收起' : '展开更多'"
|
||
type="primary"
|
||
size="14"
|
||
></up-text>
|
||
</view>
|
||
</view>
|
||
<!-- 回复按钮 -->
|
||
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref, computed, defineProps } from 'vue';
|
||
const emit=defineEmits(['clickHf'])
|
||
// 定义属性
|
||
const props = defineProps({
|
||
data: {
|
||
type: Object,
|
||
default: () => ({
|
||
id: 1,
|
||
children: [],
|
||
content: "内容",
|
||
createTime: "2024-06-05T11:32:09.000+08:00",
|
||
parentId: -1,
|
||
userAvatar: null,
|
||
userId: 1,
|
||
userName: "123",
|
||
})
|
||
}
|
||
});
|
||
|
||
// 初始化响应式变量
|
||
const urls1 = ref([]); // 示例图片数据
|
||
const isExpanded = ref(false);
|
||
|
||
// 计算属性:显示的子讨论列表
|
||
const displayedSubDiscussions = computed(() => {
|
||
if(props.data.children==null){
|
||
props.data.children=[];
|
||
}
|
||
return isExpanded.value ? props.data.children: props.data.children.slice(0, 2);
|
||
});
|
||
|
||
// 切换展开状态的方法
|
||
const toggleExpand = () => {
|
||
isExpanded.value = !isExpanded.value;
|
||
};
|
||
|
||
// 处理回复按钮点击事件的方法
|
||
const handleReply = () => {
|
||
// 实现回复功能的逻辑
|
||
// alert("点击了回复按钮");
|
||
emit('clickHf',props.data.id);
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.u-page {
|
||
width: 100%;
|
||
}
|
||
|
||
.u-page0-top {
|
||
height: 20rpx;
|
||
width: 98%;
|
||
margin: 10rpx auto;
|
||
background-color: #A8E6CF;
|
||
}
|
||
.sub-discussion-item{
|
||
display: flex;
|
||
}
|
||
.sub-discussion-text{
|
||
margin-left: 20rpx;
|
||
}
|
||
.reply-button{
|
||
float:right;
|
||
}
|
||
.album {
|
||
display: flex;
|
||
align-items: flex-start;
|
||
|
||
&__avatar {
|
||
background-color: #f5f5f5;
|
||
padding: 5px;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
&__content {
|
||
margin-left: 10px;
|
||
flex: 1;
|
||
position: relative;
|
||
|
||
.reply-button {
|
||
position: absolute;
|
||
right: 0;
|
||
bottom: 0;
|
||
cursor: pointer;
|
||
background-color: #f5f5f5;
|
||
padding: 5px 10px;
|
||
border-radius: 3px;
|
||
text-align: center;
|
||
}
|
||
}
|
||
|
||
.sub-discussions {
|
||
margin-top: 10px;
|
||
|
||
.sub-discussion-item {
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.toggle-btn {
|
||
cursor: pointer;
|
||
text-align: center;
|
||
margin-top: 10px;
|
||
}
|
||
}
|
||
}
|
||
</style>
|