gree_leran/pages/newsInfo/newsInfo.vue

294 lines
6.7 KiB
Vue
Raw Normal View History

2024-06-22 07:20:39 +00:00
<template>
<view class="case-info-box">
<view class="case-info">
<view class="user-info">
<up-avatar :src="info.iamge" size="70"></up-avatar>
<!-- <up-text :text="info.name"></up-text>1 -->
<view class="user-info-box">
<view class="user-name">
<up-text text="作者名" size="33rpx" :bold="true"></up-text>
</view>
<view class="user-data">
<up-text :text="'发布于-'+info.createTime"></up-text>
</view>
</view>
</view>
<view class="title-info">
<view class="title-info-main">
<up-text :text="info.title" bold="true" size="47rpx"></up-text>
</view>
<view class="title-info-fu">
<up-text :text="info.content" color="#8f8f8f"></up-text>
</view>
</view>
<view class="body-info">
<up-text :text="info.description" size="40rpx"></up-text>
<img :src="info.imageUrl" alt="" />
</view>
</view>
<view class="comment-info">
<view class="comment-titls">
评论留言
</view>
<view class="comment-titls-list">
<CommentsBox @addComment="addComment" v-for="(item, index) in commentList" :key="item.id" :data="item">
</CommentsBox>
</view>
</view>
<InputBox v-if="inputVisible" @submit="submitNote" @blurCom="blurCom"></InputBox>
<view class="input-di">
<view class="input-di-ico" style="width: 30vw;">
<up-icon @click="clickLike" v-if="info.isLike" name="heart-fill" color="red" size="28"></up-icon>
<up-icon @click="clickLike" v-else name="heart" color="#000" size="28"></up-icon>
<up-icon @click="clickCollection" v-if="info.isCollection" name="star-fill" color="#ffe135" size="28"></up-icon>
<up-icon @click="clickCollection" v-else name="star" color="#000" size="28"></up-icon>
</view>
<view class="input-di-button" @click="addComment()">评论</view>
</view>
<view class="di"></view>
</view>
</template>
<script setup>
import {
reactive,
ref
} from 'vue';
import {
onLoad
} from "@dcloudio/uni-app"
import {
getCastInfo
} from '@/apis/cast.js'
import{getImageById}from '@/apis/user.js'
import {
getCommentsByRelatedPostId,
addComments
} from '@/apis/comments.js'
//点赞列表
import {addLike} from '@/apis/likes.js'
//收藏列表
import {addCollections} from "@/apis/collections.js"
const id = ref(null);
const value = ref('');
const src = ref('path/to/avatar'); // 替换为实际头像路径
const inputVisible = ref(false);
const inputContent = ref('');
const inputHeight = ref('40px');
const info = reactive({
caseId: null,
title: null,
content: null,
description: null,
imageUrl: null,
userId: null,
name: null,
createTime:null,
isLike:false,
isCollection:false,
iamge:null,
})
const commentList = ref([]);
const currParentCommentId = ref(null);
const currReplyUseId = ref(null);
const getInfo = async (id) => {
let res = await getCastInfo(id);
if (res.code == 200) {
console.log("详细数据", res.data);
return res;
}
return null;
}
const addComment = (data) => {
if(data!=undefined){
currParentCommentId.value = data.parentCommentId | null;
currReplyUseId.value = data.replyUseId | null;
}else{
currParentCommentId.value=null;
currReplyUseId.value=null;
}
showInputBox();
// 点击写笔记,唤起软件盘
}
const submitNote = (text) => {
inputContent.value = text;
submitComment();
inputContent.value = null;
}
const blurCom = () => {
// this.focus = false
inputVisible.value = false;
}
const showInputBox = () => {
inputVisible.value = true;
uni.nextTick(() => {
// this.focus = true
})
// inputVisible.value = false;
}
const hideInputBox = () => {}
const adjustHeight = (event) => {
inputHeight.value = event.target.scrollHeight + 'px';
}
const submitComment = async () => {
console.log("提交评论", currParentCommentId.value,currReplyUseId.value);
let res = await addComments({
relatedPostId: info.caseId,
commentContent: inputContent.value,
parentCommentId: currParentCommentId.value,
replyUseId: currReplyUseId.value,
})
currParentCommentId.value = null;
currReplyUseId.value = null;
console.log("保存评论", res);
// 提交评论的逻辑
inputContent.value = '';
getData(id.value);
}
const getData = async () => {
let com = await getInfo(id.value);
com = com.data;
let list = await getCommentsByRelatedPostId(id.value);
let image= await getImageById(com.userId);
list = list.data;
console.log("接口", com, list);
commentList.value = list;
info.iamge=image.msg;
info.caseId = com.caseId
info.title = com.title;
info.content = com.content;
info.description = com.description
info.imageUrl = com.imageUrl
info.userId = com.userId
info.createTime=com.createTime;
info.isLike=com.extField4=="1";
info.isCollection=com.extField5=="1";
}
const clickLike=()=>{
// console.log("点赞",info)
info.isLike=!info.isLike;
let bo="0";
if(info.isLike){
bo="1"
}
addLike({
contentType:0,
contentId:info.caseId,
extField1:bo,
})
}
const clickCollection=()=>{
// console.log("点赞",info)
info.isCollection=!info.isCollection;
let bo="0";
if(info.isCollection){
bo="1"
}
addCollections({
contentType:0,
contentId:info.caseId,
extField1:bo,
})
}
onLoad((e) => {
console.log("进入", e)
id.value = e.id;
getData();
})
</script>
<style lang="scss">
.case-info-box{
// background-color: #E8E8E8;
}
.case-info{
width: 97%;
box-sizing: border-box;
padding: 20rpx;
margin: 10rpx auto;
border-radius: 10rpx;
background-color: #fff;
.user-info{
display: flex;
align-items:end;
.user-data{
margin-top:40rpx;
height: 30%;
margin-left: 20rpx;
}
.user-name{
margin-left: 20rpx;
display: flex;
flex-flow: column;
}
}
.title-info{
margin-top: 20rpx;
}
.body-info{
margin-top:40rpx;
}
}
.comment-titls{
font-size: 37rpx;
height: 50rpx;
display: flex;
justify-content: left;
align-items: center;
width: 95%;
margin:20rpx auto;
background-color: #A8E6CF;
}
.input-di {
display: flex;
position: fixed;
justify-content: space-between;
align-items: center;
bottom: 0;
height: 10vh;
width: 100%;
background-color: #A8E6CF;
border-radius: 20rpx 20rpx 10rpx 10rpx;
}
.di {
height: 10vh;
width: 100%;
}
.input-di-ico {
display: flex;
justify-content: center;
align-items: center;
width: 30%;
}
.input-di-button {
display: flex;
justify-content: center;
align-items: center;
height: 50%;
width: 30%;
margin-right: 20rpx;
// margin-left: auto;
background-color: #000;
color: #fff;
border-radius: 40rpx;
}
.album {
@include flex;
align-items: flex-start;
&__avatar {
background-color: $u-bg-color;
padding: 5px;
border-radius: 3px;
}
&__content {
margin-left: 10px;
flex: 1;
}
}
</style>