forked from Gitlink/forgeplus-react
248 lines
6.7 KiB
JavaScript
248 lines
6.7 KiB
JavaScript
|
|
|
|||
|
|
import React, { Component } from 'react';
|
|||
|
|
import { Pagination , Spin } from 'antd';
|
|||
|
|
|
|||
|
|
import '../exchange.css'
|
|||
|
|
import './post.css'
|
|||
|
|
|
|||
|
|
import Nav from '../NavComponent/Index'
|
|||
|
|
import Parse from './Parse';
|
|||
|
|
import ExchangeItem from '../ExchangeItem'
|
|||
|
|
|
|||
|
|
import CommentsIndex from './CommentsIndex';
|
|||
|
|
import CommentsSend from '../Comments/CommentsSend';
|
|||
|
|
import RenderHtml from "../../components/render-html";
|
|||
|
|
|
|||
|
|
import FileList from '../../common/FileList';
|
|||
|
|
|
|||
|
|
import update from 'immutability-helper'
|
|||
|
|
|
|||
|
|
import axios from 'axios';
|
|||
|
|
|
|||
|
|
class Index extends Component{
|
|||
|
|
constructor(props){
|
|||
|
|
super(props);
|
|||
|
|
this.state={
|
|||
|
|
// 当前用户是否点赞
|
|||
|
|
judge:true,
|
|||
|
|
parseNum:0,
|
|||
|
|
// 帖子用户信息
|
|||
|
|
author_info:undefined,
|
|||
|
|
// 当前用户信息
|
|||
|
|
current_user:undefined,
|
|||
|
|
// 面包屑
|
|||
|
|
bread_crumb:undefined,
|
|||
|
|
// 当前帖子详情
|
|||
|
|
memos:undefined,
|
|||
|
|
// 帖子评论
|
|||
|
|
repliesData:undefined,
|
|||
|
|
// 帖子评论分页相关
|
|||
|
|
replyPage:1,
|
|||
|
|
replyPageSize:10,
|
|||
|
|
replyCount:0,
|
|||
|
|
is_Spin:true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
componentDidMount = () =>{
|
|||
|
|
this.getInfo();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getInfo=()=>{
|
|||
|
|
this.InitDetailInfo();
|
|||
|
|
this.getReply(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
InitDetailInfo = ()=>{
|
|||
|
|
let postid = this.props.match.params.postid;
|
|||
|
|
const url = `/memos/${postid}.json`;
|
|||
|
|
axios.get(url).then((result)=>{
|
|||
|
|
if(result.data && result.data.status === -1){
|
|||
|
|
this.props.history.push("/forums");
|
|||
|
|
}
|
|||
|
|
if(result){
|
|||
|
|
this.setState({
|
|||
|
|
judge:result.data.memo.user_praise,
|
|||
|
|
parseNum:result.data.memo && result.data.memo.praises_count,
|
|||
|
|
author_info:result.data.author_info,
|
|||
|
|
current_user:result.data.current_user,
|
|||
|
|
bread_crumb:result.data.bread_crumb,
|
|||
|
|
memos:result.data.memo,
|
|||
|
|
is_Spin:false
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}).catch((error)=>{
|
|||
|
|
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getReply = (replyPage) =>{
|
|||
|
|
let postid = this.props.match.params.postid;
|
|||
|
|
const url = `/memos/${postid}/more_reply.json`;
|
|||
|
|
axios.get(url,{params:{
|
|||
|
|
page:replyPage
|
|||
|
|
}}).then((result)=>{
|
|||
|
|
if(result){
|
|||
|
|
this.setState({
|
|||
|
|
repliesData:result.data.memo_replies,
|
|||
|
|
replyCount:result.data.memos_count,
|
|||
|
|
is_Spin:false
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}).catch((error)=>{
|
|||
|
|
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 点赞
|
|||
|
|
thumbForum = () =>{
|
|||
|
|
let postid = this.props.match.params.postid;
|
|||
|
|
const url = `/discusses/${postid}/plus.json`
|
|||
|
|
axios.post(url,{
|
|||
|
|
container_type:'Memo',
|
|||
|
|
type:1
|
|||
|
|
}).then((result)=>{
|
|||
|
|
if(result){
|
|||
|
|
this.InitDetailInfo();
|
|||
|
|
}
|
|||
|
|
}).catch((error)=>{
|
|||
|
|
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 切换评论分页
|
|||
|
|
changeReplyEvent=(pageNumber)=>{
|
|||
|
|
this.setState({
|
|||
|
|
replyPage:pageNumber
|
|||
|
|
})
|
|||
|
|
this.getReply(pageNumber);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 点击显示评论输入框
|
|||
|
|
commentReplyEvent=(index,flag)=>{
|
|||
|
|
console.log("2",flag);
|
|||
|
|
|
|||
|
|
this.setState(
|
|||
|
|
(prevState) => ({
|
|||
|
|
repliesData : update(prevState.repliesData, {[index]: { commentsFlag: {$set: flag} }}),
|
|||
|
|
})
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 删除评论
|
|||
|
|
deleteReplyEvent=(id)=>{
|
|||
|
|
const url = `/memos/${id}/destroy.json`
|
|||
|
|
axios.post(url).then((result)=>{
|
|||
|
|
if(result){
|
|||
|
|
this.props.showNotification(result.data.message);
|
|||
|
|
let{ replyPage } = this.state;
|
|||
|
|
this.getReply(replyPage);
|
|||
|
|
}
|
|||
|
|
}).catch((error)=>{
|
|||
|
|
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
render(){
|
|||
|
|
let {
|
|||
|
|
judge , parseNum , author_info , current_user , bread_crumb , memos , repliesData ,
|
|||
|
|
replyPage,
|
|||
|
|
replyPageSize,
|
|||
|
|
replyCount,
|
|||
|
|
is_Spin
|
|||
|
|
} = this.state;
|
|||
|
|
let postid = this.props.match.params.postid;
|
|||
|
|
|
|||
|
|
const NavMap=[
|
|||
|
|
{
|
|||
|
|
url:`/users/${current_user && current_user.login}`,
|
|||
|
|
name:current_user && current_user.username
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
url:"/forums",
|
|||
|
|
name:bread_crumb && bread_crumb.forum && bread_crumb.forum.title
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
url:`/forums/theme/${bread_crumb && bread_crumb.forum_tag && bread_crumb.forum_tag.id}`,
|
|||
|
|
name:bread_crumb && bread_crumb.forum_tag && bread_crumb.forum_tag.title
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name:"帖子详情"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
//插入字段从author_info表内选取
|
|||
|
|
const memos_list = [{
|
|||
|
|
...memos,
|
|||
|
|
image_url:author_info && author_info.image_url,
|
|||
|
|
username:author_info && author_info.username,
|
|||
|
|
user_login:author_info && author_info.login
|
|||
|
|
}];
|
|||
|
|
|
|||
|
|
// 评论列表
|
|||
|
|
const memo_replies = repliesData;
|
|||
|
|
const repliesList = (
|
|||
|
|
memo_replies && memo_replies.length > 0 &&
|
|||
|
|
<div className="commentsForm">
|
|||
|
|
<p className="replyTitle">
|
|||
|
|
<span className="font-24 color-grey-3 mr20">全部回复</span>
|
|||
|
|
<span className="color-grey9 font-20">{replyCount}</span>
|
|||
|
|
</p>
|
|||
|
|
<CommentsIndex {...this.props} {...this.state} refresh={this.getReply} page={replyPage} showCommentEvent={this.commentReplyEvent}></CommentsIndex>
|
|||
|
|
</div>
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 附件显示
|
|||
|
|
const fileListCom = ( memos && memos.attachment_url && <FileList list = { memos.attachment_url } className="fileTeam"></FileList> )
|
|||
|
|
|
|||
|
|
return(
|
|||
|
|
<Spin spinning={is_Spin}>
|
|||
|
|
<div className="educontent">
|
|||
|
|
<Nav className="mt20 mb20" NavMap = {NavMap}></Nav>
|
|||
|
|
|
|||
|
|
<div className="educontent-min bc-white mb30">
|
|||
|
|
|
|||
|
|
{/* 调用和首页共用的列表item,传了enshine就代表底部右侧操作按钮只有收藏或者取消收藏,否则就是置顶、推荐等 */}
|
|||
|
|
<ExchangeItem
|
|||
|
|
{...this.props}
|
|||
|
|
{...this.state}
|
|||
|
|
memos={memos_list}
|
|||
|
|
current_user = { current_user }
|
|||
|
|
detail={true}
|
|||
|
|
refresh={this.getInfo}
|
|||
|
|
></ExchangeItem>
|
|||
|
|
|
|||
|
|
<div className="postContent">
|
|||
|
|
{/* 帖子详情 */}
|
|||
|
|
<RenderHtml className="postDetail" value={memos && memos.content} />
|
|||
|
|
{/* 文件列表 */}
|
|||
|
|
{ fileListCom }
|
|||
|
|
|
|||
|
|
{/* 点赞 */}
|
|||
|
|
<div className="edu-txt-center pb40">
|
|||
|
|
<Parse judge={!judge} current_user = { current_user } num = {parseNum} clickEvent = { this.thumbForum }></Parse>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
{/* 发送评论部分 */}
|
|||
|
|
{
|
|||
|
|
current_user && (current_user.is_banned === false || current_user.admin) &&
|
|||
|
|
<CommentsSend unique={`main_Send`} id={postid} refresh={()=>this.getReply(replyPage)}/>
|
|||
|
|
}
|
|||
|
|
{/* 评论列表 */}
|
|||
|
|
{ repliesList }
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
{
|
|||
|
|
replyCount && replyCount > replyPageSize ?
|
|||
|
|
<div className="edu-txt-center mb50">
|
|||
|
|
<Pagination showQuickJumper current={replyPage} pageSize={replyPageSize} total={replyCount} onChange={this.changeReplyEvent}></Pagination>
|
|||
|
|
</div>:""
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</Spin>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export default Index;
|