dev_local_scyd
杨树林 5 years ago
parent fc4a68932c
commit fac2c50d17

@ -65,7 +65,7 @@ class TopicDetail extends Component {
const topicId = this.props.match.params.topicId const topicId = this.props.match.params.topicId
const bid = this.props.match.params.boardId const bid = this.props.match.params.boardId
const memoUrl = `/messages/${topicId}.json`; const memoUrl = `/messages/${topicId}.json`;
this.setState({ this.setState({
memoLoading: true memoLoading: true
@ -73,7 +73,7 @@ class TopicDetail extends Component {
axios.get(memoUrl,{ axios.get(memoUrl,{
}) })
.then((response) => { .then((response) => {
if (response.data.status === -1) { if (response.data.status === -1) {
setTimeout(() => { setTimeout(() => {
this.props.showNotification('帖子不存在!') this.props.showNotification('帖子不存在!')
@ -81,7 +81,7 @@ class TopicDetail extends Component {
// this.props.toListPage(response.data.data.course_id, bid) // this.props.toListPage(response.data.data.course_id, bid)
return; return;
} else { } else {
this.setState({ this.setState({
memo: Object.assign({}, { memo: Object.assign({}, {
...response.data.data, ...response.data.data,
@ -93,7 +93,7 @@ class TopicDetail extends Component {
// const { memo_replies, memo } = response.data; // const { memo_replies, memo } = response.data;
// let hasMoreComments = false; // let hasMoreComments = false;
// if (memo_replies && memo_replies.length === 10 && memo.total_replies_count > 10) { // if (memo_replies && memo_replies.length === 10 && memo.total_replies_count > 10) {
// // 遍历一遍,计算下是否还有评论未加载 // // 遍历一遍,计算下是否还有评论未加载
// let totalCount = 10; // let totalCount = 10;
// memo_replies.forEach(item=>{ // memo_replies.forEach(item=>{
@ -123,14 +123,14 @@ class TopicDetail extends Component {
}) })
this.fetchReplies() this.fetchReplies()
$('body>#root').on('onMemoDelete', (event) => { $('body>#root').on('onMemoDelete', (event) => {
// const val = $('body>#root').data('onMemoDelete') // const val = $('body>#root').data('onMemoDelete')
const val = window.onMemoDelete ; const val = window.onMemoDelete ;
this.onMemoDelete( JSON.parse(decodeURIComponent(val)) ) this.onMemoDelete( JSON.parse(decodeURIComponent(val)) )
}) })
} }
onPaginationChange = (pageCount) => { onPaginationChange = (pageCount) => {
@ -157,7 +157,7 @@ class TopicDetail extends Component {
this.props.showNotification('删除成功'); this.props.showNotification('删除成功');
const props = Object.assign({}, this.props, {}) const props = Object.assign({}, this.props, {})
this.props.toListPage( Object.assign({}, this.props.match.params, {'coursesId': this.state.memo.course_id} ) ) this.props.toListPage( Object.assign({}, this.props.match.params, {'coursesId': this.state.memo.course_id} ) )
} else if (status === -1) { } else if (status === -1) {
this.props.showNotification('帖子已被删除'); this.props.showNotification('帖子已被删除');
this.props.history.push(`/forums`) this.props.history.push(`/forums`)
@ -168,11 +168,11 @@ class TopicDetail extends Component {
} }
componentDidUpdate(prevProps, prevState, snapshot) { componentDidUpdate(prevProps, prevState, snapshot) {
// if (this.state.memo && this.state.memo.content // if (this.state.memo && this.state.memo.content
// && (!prevProps.memo || prevProps.memo.content != this.state.memo.content) ) { // && (!prevProps.memo || prevProps.memo.content != this.state.memo.content) ) {
if (this.state.memo && this.state.memo.content && prevState.memoLoading === true && this.state.memoLoading === false) { if (this.state.memo && this.state.memo.content && prevState.memoLoading === true && this.state.memoLoading === false) {
// md渲染content等xhr执行完即memoLoading变化memo.content更新后初始化md // md渲染content等xhr执行完即memoLoading变化memo.content更新后初始化md
setTimeout(()=>{ setTimeout(()=>{
// var shixunDescr = window.editormd.markdownToHTML("memo_content_editorMd", { // var shixunDescr = window.editormd.markdownToHTML("memo_content_editorMd", {
// htmlDecode: "style,script,iframe", // you can filter tags decode // htmlDecode: "style,script,iframe", // you can filter tags decode
@ -183,7 +183,7 @@ class TopicDetail extends Component {
// }); // });
}, 200) }, 200)
} }
} }
clickPraise(){ clickPraise(){
@ -192,7 +192,7 @@ class TopicDetail extends Component {
const url = memo.user_praise ? '/praise_tread/unlike.json' : `/praise_tread/like.json`; const url = memo.user_praise ? '/praise_tread/unlike.json' : `/praise_tread/like.json`;
const _method = memo.user_praise ? axios.delete : axios.post const _method = memo.user_praise ? axios.delete : axios.post
let _data = { let _data = {
object_id: memo.id, object_id: memo.id,
object_type: 'message', //Discuss object_type: 'message', //Discuss
} }
if (memo.user_praise) { if (memo.user_praise) {
@ -204,10 +204,10 @@ class TopicDetail extends Component {
..._data ..._data
}, },
{ {
} }
).then((response) => { ).then((response) => {
const newMemo = Object.assign({}, this.state.memo) const newMemo = Object.assign({}, this.state.memo)
newMemo.praises_count = newMemo.user_praise ? newMemo.praises_count - 1 : newMemo.praises_count + 1 newMemo.praises_count = newMemo.user_praise ? newMemo.praises_count - 1 : newMemo.praises_count + 1
newMemo.total_praises_count = newMemo.user_praise ? newMemo.total_praises_count - 1 : newMemo.total_praises_count + 1 newMemo.total_praises_count = newMemo.user_praise ? newMemo.total_praises_count - 1 : newMemo.total_praises_count + 1
@ -248,10 +248,10 @@ class TopicDetail extends Component {
className="mr12 color9B9B overflowHidden1" length="58" style={{maxWidth: '480px'}}> className="mr12 color9B9B overflowHidden1" length="58" style={{maxWidth: '480px'}}>
{fileName} {fileName}
</a> </a>
<span className="color656565 mt2 color-grey-6 font-12 mr8">{item.filesize}</span> <span className="color656565 mt2 color-grey-6 font-12 mr8">{item.filesize}</span>
</div> </div>
) )
}) })
@ -268,7 +268,7 @@ class TopicDetail extends Component {
permission: true, // permission: true, //
children: children, children: children,
child_message_count: reply.total_count, child_message_count: reply.total_count,
hidden: reply.is_hidden, hidden: reply.is_hidden,
id: reply.id, id: reply.id,
image_url: reply.author.image_url, image_url: reply.author.image_url,
reward: null, // reward: null, //
@ -289,7 +289,7 @@ class TopicDetail extends Component {
}) })
.then((response) => { .then((response) => {
const { replies, liked, total_replies_count, total_count } = response.data.data const { replies, liked, total_replies_count, total_count } = response.data.data
const memo = Object.assign({}, this.state.memo) const memo = Object.assign({}, this.state.memo)
memo.user_praise = liked memo.user_praise = liked
memo.total_replies_count = total_replies_count; memo.total_replies_count = total_replies_count;
@ -322,15 +322,15 @@ class TopicDetail extends Component {
return; return;
} }
const url = `/messages/${id}/reply.json`; const url = `/messages/${id}/reply.json`;
const { comments } = this.state; const { comments } = this.state;
const user = this._getUser(); const user = this._getUser();
/* /*
移除末尾的空行 移除末尾的空行
.replace(/(\n<p>\n\t<br \/>\n<\/p>)*$/g,''); .replace(/(\n<p>\n\t<br \/>\n<\/p>)*$/g,'');
*/ */
commentContent = handleContentBeforeCreateSecondLevelComment(commentContent) commentContent = handleContentBeforeCreateSecondLevelComment(commentContent)
if (!commentContent) { if (!commentContent) {
this.props.showNotification('不能为空') this.props.showNotification('不能为空')
@ -340,16 +340,18 @@ class TopicDetail extends Component {
content: commentContent content: commentContent
}, },
{ {
} }
).then((response) => { ).then((response) => {
if (response.data.data.id) { if (response.data.data.id) {
let newId = response.data.data.id; let newId = response.data.data.id;
const commentIndex = this._findById(id, comments); let mycontent = response.data.data.content;
const commentIndex = this._findById(id, comments);
const parentComment = comments[commentIndex] const parentComment = comments[commentIndex]
this.setState({ this.setState({
// runTesting: false, // runTesting: false,
comments: addSecondLevelComment(comments, parentComment, commentIndex, newId, commentContent, user, editor) comments: addSecondLevelComment(comments, parentComment, commentIndex, newId, mycontent, user, editor)
}, ()=>{ }, ()=>{
// keditor代码美化 // keditor代码美化
editor.html && window.prettyPrint() editor.html && window.prettyPrint()
@ -361,7 +363,7 @@ class TopicDetail extends Component {
memo: newMemo2 memo: newMemo2
}) })
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
}) })
@ -369,14 +371,14 @@ class TopicDetail extends Component {
// 公共接口 --- 删除回复 // 公共接口 --- 删除回复
deleteComment = (parrentComment, childCommentId) => { deleteComment = (parrentComment, childCommentId) => {
handleDeleteComment(this, parrentComment, childCommentId, 'message') handleDeleteComment(this, parrentComment, childCommentId, 'message')
} }
// 公共接口 --- 回复点赞 // 公共接口 --- 回复点赞
commentPraise = (discussId) => { commentPraise = (discussId) => {
handleCommentPraise(this, discussId, 'message', (old_user_praise) => { handleCommentPraise(this, discussId, 'message', (old_user_praise) => {
const newMemo2 = Object.assign({}, this.state.memo); const newMemo2 = Object.assign({}, this.state.memo);
newMemo2.total_praises_count = old_user_praise newMemo2.total_praises_count = old_user_praise
? newMemo2.total_praises_count - 1 : newMemo2.total_praises_count + 1; ? newMemo2.total_praises_count - 1 : newMemo2.total_praises_count + 1;
this.setState({ this.setState({
memo: newMemo2 memo: newMemo2
@ -390,7 +392,7 @@ class TopicDetail extends Component {
createNewComment = (commentContent, id, editor) => { createNewComment = (commentContent, id, editor) => {
let content = handleContentBeforeCreateNew(commentContent); let content = handleContentBeforeCreateNew(commentContent);
const { memo } = this.props; const { memo } = this.props;
const url = `/messages/${id}/reply.json`; const url = `/messages/${id}/reply.json`;
// const url = `/api/v1/memos/${memo.id}/reply`; // const url = `/api/v1/memos/${memo.id}/reply`;
@ -399,7 +401,7 @@ class TopicDetail extends Component {
content: content content: content
}, },
{ {
} }
).then((response) => { ).then((response) => {
if (response.data.status === -1) { if (response.data.status === -1) {
console.error('服务端异常') console.error('服务端异常')
@ -407,18 +409,19 @@ class TopicDetail extends Component {
} }
// this.props.showNotification('帖子发表成功') // this.props.showNotification('帖子发表成功')
if (response.data) { if (response.data) {
const _id = response.data.data.id; const _id = response.data.data.id;
let mycontent=response.data.data.content;
// ke // ke
editor.html && editor.html(''); editor.html && editor.html('');
editor.afterBlur && editor.afterBlur() editor.afterBlur && editor.afterBlur()
// md // md
editor.setValue && editor.setValue('') editor.setValue && editor.setValue('')
const user = this._getUser(); const user = this._getUser();
this.setState({ this.setState({
comments: addNewComment(comments, _id, content, user, this.props.isSuperAdmin(), this) comments: addNewComment(comments, _id, mycontent, user, this.props.isSuperAdmin(), this)
}) })
const newMemo2 = Object.assign({}, this.state.memo); const newMemo2 = Object.assign({}, this.state.memo);
newMemo2.total_replies_count = newMemo2.total_replies_count + 1; newMemo2.total_replies_count = newMemo2.total_replies_count + 1;
@ -427,8 +430,8 @@ class TopicDetail extends Component {
}) })
this.refs.editor.showEditor(); this.refs.editor.showEditor();
this.refs.editor.close(); this.refs.editor.close();
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -444,7 +447,7 @@ class TopicDetail extends Component {
}) })
.then((response) => { .then((response) => {
const { replies, liked, total_replies_count } = response.data.data const { replies, liked, total_replies_count } = response.data.data
// const memo = Object.assign({}, this.state.memo) // const memo = Object.assign({}, this.state.memo)
// memo.total_replies_count = total_replies_count; // memo.total_replies_count = total_replies_count;
this.setState({ this.setState({
@ -460,19 +463,19 @@ class TopicDetail extends Component {
// 置顶 // 置顶
setTop(memo) { setTop(memo) {
// const params = { // const params = {
// sticky: memo.sticky ? 0 : 1, // sticky: memo.sticky ? 0 : 1,
// } // }
// if (this.state.p_s_order) { // if (this.state.p_s_order) {
// params.order = this.state.p_s_order; // params.order = this.state.p_s_order;
// } // }
// if (this.state.p_forum_id) { // if (this.state.p_forum_id) {
// params.forum_id = this.state.p_forum_id; // params.forum_id = this.state.p_forum_id;
// } // }
// let paramsUrl = urlStringify(params) // let paramsUrl = urlStringify(params)
const set_top_or_down_Url = `/messages/${memo.id}/sticky_top.json`; const set_top_or_down_Url = `/messages/${memo.id}/sticky_top.json`;
// 获取memo list // 获取memo list
axios.put(set_top_or_down_Url, { axios.put(set_top_or_down_Url, {
}) })
.then((response) => { .then((response) => {
const status = response.data.status const status = response.data.status
@ -487,7 +490,7 @@ class TopicDetail extends Component {
console.log(error) console.log(error)
}) })
} }
setRewardDialogVisible = (visible) => { setRewardDialogVisible = (visible) => {
this.setState({ this.setState({
goldRewardDialogOpen: visible goldRewardDialogOpen: visible
@ -512,7 +515,7 @@ class TopicDetail extends Component {
} }
} }
render() { render() {
const { match, history } = this.props const { match, history } = this.props
const { recommend_shixun, current_user,author_info } = this.props; const { recommend_shixun, current_user,author_info } = this.props;
@ -567,7 +570,7 @@ class TopicDetail extends Component {
<div className="padding30 bor-bottom-greyE" style={{paddingBottom: '20px'}}> <div className="padding30 bor-bottom-greyE" style={{paddingBottom: '20px'}}>
<div className="font-16 cdefault clearfix pr pr35"> <div className="font-16 cdefault clearfix pr pr35">
<span className="noteDetailTitle">{memo.subject}</span> <span className="noteDetailTitle">{memo.subject}</span>
{ !!memo.sticky && <span className="btn-cir btn-cir-red ml10" { !!memo.sticky && <span className="btn-cir btn-cir-red ml10"
style={{position: 'relative', bottom: '4px'}}>置顶</span>} style={{position: 'relative', bottom: '4px'}}>置顶</span>}
{ !!memo.reward && <span className="color-orange font-14 ml15" { !!memo.reward && <span className="color-orange font-14 ml15"
data-tip-down={`获得平台奖励金币:${memo.reward}`} > data-tip-down={`获得平台奖励金币:${memo.reward}`} >
@ -578,9 +581,9 @@ class TopicDetail extends Component {
<div className="edu-position-hidebox" style={{position: 'absolute', right: '2px',top:'4px'}}> <div className="edu-position-hidebox" style={{position: 'absolute', right: '2px',top:'4px'}}>
<a href="javascript:void(0);"><i className="fa fa-bars font-16"></i></a> <a href="javascript:void(0);"><i className="fa fa-bars font-16"></i></a>
<ul className="edu-position-hide undis"> <ul className="edu-position-hide undis">
{ ( isCurrentUserTheAuthor || isAdmin ) && { ( isCurrentUserTheAuthor || isAdmin ) &&
<li><a <li><a
onClick={() => this.props.toEditPage( Object.assign({}, this.props.match.params, {'coursesId': this.state.memo.course_id}) ) } onClick={() => this.props.toEditPage( Object.assign({}, this.props.match.params, {'coursesId': this.state.memo.course_id}) ) }
>&nbsp;&nbsp;</a></li>} >&nbsp;&nbsp;</a></li>}
{ isAdmin && { isAdmin &&
@ -590,7 +593,7 @@ class TopicDetail extends Component {
<li><a href="javascript:void(0);" onClick={() => this.setTop(memo)}>&nbsp;&nbsp;</a></li> ) <li><a href="javascript:void(0);" onClick={() => this.setTop(memo)}>&nbsp;&nbsp;</a></li> )
} }
{ isAdmin && { isAdmin &&
<li><a href="javascript:void(0);" onClick={() => this.refs.sendToCourseModal.setVisible(true)}>&nbsp;&nbsp;</a></li> <li><a href="javascript:void(0);" onClick={() => this.refs.sendToCourseModal.setVisible(true)}>&nbsp;&nbsp;</a></li>
} }
{ ( isCurrentUserTheAuthor || isAdmin ) && <li> { ( isCurrentUserTheAuthor || isAdmin ) && <li>
<a href="javascript:void(0)" onClick={() => <a href="javascript:void(0)" onClick={() =>
@ -602,9 +605,9 @@ class TopicDetail extends Component {
</ul> </ul>
</div> </div>
} }
</div> </div>
<div className="df mt20"> <div className="df mt20">
<img src={setImagesUrl(`/images/${author && author.image_url}`)} className="radius mr10 mt2" width="40px" height="40px"/> <img src={setImagesUrl(`/images/${author && author.image_url}`)} className="radius mr10 mt2" width="40px" height="40px"/>
<div className="flex1"> <div className="flex1">
<div className="color-grey-9 lineh-20"> <div className="color-grey-9 lineh-20">
@ -625,7 +628,7 @@ class TopicDetail extends Component {
<span style={{ top: "1px", position: "relative" }}>{memo.visits || '1'}</span> <span style={{ top: "1px", position: "relative" }}>{memo.visits || '1'}</span>
</span> </span>
</Tooltip> </Tooltip>
{ !!memo.total_replies_count && { !!memo.total_replies_count &&
<Tooltip title={"回复数"}> <Tooltip title={"回复数"}>
<a href="javascript:void(0)" className="noteDetailNum"> <a href="javascript:void(0)" className="noteDetailNum">
<i className="iconfont icon-huifu1 mr5" onClick={this.showCommentInput}></i> <i className="iconfont icon-huifu1 mr5" onClick={this.showCommentInput}></i>
@ -633,8 +636,8 @@ class TopicDetail extends Component {
</a> </a>
</Tooltip> </Tooltip>
} }
{!!memo.total_praises_count && {!!memo.total_praises_count &&
<Tooltip title={"点赞数"}> <Tooltip title={"点赞数"}>
<span className={`noteDetailNum `} style={{}}> <span className={`noteDetailNum `} style={{}}>
<i className="iconfont icon-dianzan-xian mr5"></i> <i className="iconfont icon-dianzan-xian mr5"></i>
<span style={{ top: "2px", position: "relative" }}>{ memo.total_praises_count }</span> <span style={{ top: "2px", position: "relative" }}>{ memo.total_praises_count }</span>
@ -654,12 +657,12 @@ class TopicDetail extends Component {
</div> </div>
</div> </div>
<div className="padding30 memoContent new_li" style={{ paddingBottom: '10px'}}> <div className="padding30 memoContent new_li" style={{ paddingBottom: '10px'}}>
{/* <MarkdownToHtml content={memo.content}></MarkdownToHtml> */} {/* <MarkdownToHtml content={memo.content}></MarkdownToHtml> */}
{memo.is_md == true ? {memo.is_md == true ?
<MarkdownToHtml content={memo.content}></MarkdownToHtml> <MarkdownToHtml content={memo.content}></MarkdownToHtml>
: :
<div dangerouslySetInnerHTML={{ __html: memo.content }}></div> <div dangerouslySetInnerHTML={{ __html: memo.content }}></div>
} }
</div> </div>
@ -674,17 +677,17 @@ class TopicDetail extends Component {
</Tooltip> </Tooltip>
</div> </div>
{ memo.attachments && !!memo.attachments.length && { memo.attachments && !!memo.attachments.length &&
<div> <div>
{this.renderAttachment()} {this.renderAttachment()}
</div> </div>
} }
</div> </div>
{!isCourseEnd && <MemoDetailMDEditor ref="editor" memo={memo} usingMockInput={true} placeholder="说点什么" {!isCourseEnd && <MemoDetailMDEditor ref="editor" memo={memo} usingMockInput={true} placeholder="说点什么"
height={160} showError={true} buttonText={'发表'} className={comments && comments.length && 'borderBottom'}></MemoDetailMDEditor>} height={160} showError={true} buttonText={'发表'} className={comments && comments.length && 'borderBottom'}></MemoDetailMDEditor>}
{/* onClick={ this.createNewComment } {/* onClick={ this.createNewComment }
enableReplyTo={true} enableReplyTo={true}
*/} */}
<div className="padding20 memoReplies commentsDelegateParent comments_hideSecondReplyUserHeader" <div className="padding20 memoReplies commentsDelegateParent comments_hideSecondReplyUserHeader"
@ -711,22 +714,22 @@ class TopicDetail extends Component {
onlySuperAdminCouldHide={true} onlySuperAdminCouldHide={true}
></Comments> ></Comments>
{/* { true ? : {/* { true ? :
<div className="memoMore"> <div className="memoMore">
<div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div> <div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>
</div>} */} </div>} */}
</div> </div>
<div className="memoMore" style={{'margin-top': '20px'}}> <div className="memoMore" style={{'margin-top': '20px'}}>
{ total_count > REPLY_PAGE_COUNT && { total_count > REPLY_PAGE_COUNT &&
<Pagination showQuickJumper onChange={this.onPaginationChange} current={pageCount} total={total_count} pageSize={10}/> <Pagination showQuickJumper onChange={this.onPaginationChange} current={pageCount} total={total_count} pageSize={10}/>
} }
{!isCourseEnd && <div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>} {!isCourseEnd && <div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>}
</div> </div>
</div> </div>
</div> </div>
</div> </div>

@ -1,296 +1,299 @@
import React,{ Component } from "react"; import React,{ Component } from "react";
import { Pagination } from "antd"; import { Pagination } from "antd";
import update from 'immutability-helper' import update from 'immutability-helper'
import axios from 'axios' import axios from 'axios'
import MemoDetailMDEditor from '../../../forums/MemoDetailMDEditor' import MemoDetailMDEditor from '../../../forums/MemoDetailMDEditor'
import '../../../forums/Post.css' import '../../../forums/Post.css'
import '../../../forums/RightSection.css' import '../../../forums/RightSection.css'
import {ImageLayerOfCommentHOC} from '../../../page/layers/ImageLayerOfCommentHOC' import {ImageLayerOfCommentHOC} from '../../../page/layers/ImageLayerOfCommentHOC'
import Comments from '../../../comment/Comments' import Comments from '../../../comment/Comments'
// import './GraduateTopicReply.css' // import './GraduateTopicReply.css'
import '../../common/courseMessage.css' import '../../common/courseMessage.css'
import { generateComments, generateChildComments, _findById, handleContentBeforeCreateNew, addNewComment import { generateComments, generateChildComments, _findById, handleContentBeforeCreateNew, addNewComment
, addSecondLevelComment, NEED_TO_WRITE_CONTENT, handleContentBeforeCreateSecondLevelComment , addSecondLevelComment, NEED_TO_WRITE_CONTENT, handleContentBeforeCreateSecondLevelComment
, handleDeleteComment, handleCommentPraise, handleHiddenComment } from '../../common/CommentsHelper' , handleDeleteComment, handleCommentPraise, handleHiddenComment } from '../../common/CommentsHelper'
const REPLY_PAGE_COUNT = 10 const REPLY_PAGE_COUNT = 10
const $ = window.$; const $ = window.$;
/* /*
相比较GraduateTopicReply 改动的地方 相比较GraduateTopicReply 改动的地方
列表接口名 /graduation_tasks/${graduation_topic_id}/show_comment.json?parent_id=${parent.id}&limit=500 列表接口名 /graduation_tasks/${graduation_topic_id}/show_comment.json?parent_id=${parent.id}&limit=500
回复类型名 jour_type: this.props.jour_type, 回复类型名 jour_type: this.props.jour_type,
*/ */
class CommonReply extends Component{ class CommonReply extends Component{
constructor(props){ constructor(props){
super(props); super(props);
this.state={ this.state={
pageCount: 1 pageCount: 1
} }
} }
componentDidMount(){ componentDidMount(){
this.fetchReplies() this.fetchReplies()
} }
_getUser() { _getUser() {
const { current_user } = this.props; const { current_user } = this.props;
current_user.user_url = `/users/${current_user.login}`; current_user.user_url = `/users/${current_user.login}`;
return current_user; return current_user;
} }
_findById = _findById _findById = _findById
createNewComment = (commentContent, id, editor) => { createNewComment = (commentContent, id, editor) => {
const graduation_topic_id = this.props.memo.id const graduation_topic_id = this.props.memo.id
let content = handleContentBeforeCreateNew(commentContent); let content = handleContentBeforeCreateNew(commentContent);
const { memo } = this.props; const { memo } = this.props;
const url = `/users/reply_message.json`; const url = `/users/reply_message.json`;
let { comments } = this.state; let { comments } = this.state;
axios.post(url, { axios.post(url, {
journals_for_message: { journals_for_message: {
jour_type: this.props.jour_type, jour_type: this.props.jour_type,
jour_id: graduation_topic_id, jour_id: graduation_topic_id,
notes: content, notes: content,
// m_parent_id // m_parent_id
reply_id: memo.user_id || this.state.homework_user_id reply_id: memo.user_id || this.state.homework_user_id
} }
} }
).then((response) => { ).then((response) => {
if (response.data.status === -1) { if (response.data.status === -1) {
console.error('服务端异常') console.error('服务端异常')
return; return;
} }
// this.props.showNotification('帖子发表成功') // this.props.showNotification('帖子发表成功')
if (response.data && response.data.id) { if (response.data && response.data.id) {
const _id = response.data.id; const _id = response.data.id;
// md let mycontent= response.data.content;
editor.setValue && editor.setValue('')
this.refs.editor.close && this.refs.editor.close() // md
editor.setValue && editor.setValue('')
const user = this._getUser(); this.refs.editor.close && this.refs.editor.close()
const isSuperAdmin = this.props.isSuperAdmin()
const user = this._getUser();
this.setState({ const isSuperAdmin = this.props.isSuperAdmin()
comments: addNewComment(this.state.comments, _id, content, user, isSuperAdmin, this),
total_count: this.state.total_count + 1 this.setState({
}) comments: addNewComment(this.state.comments, _id, mycontent, user, isSuperAdmin, this),
this.refs.editor.showEditor(); total_count: this.state.total_count + 1
})
} this.refs.editor.showEditor();
}).catch((error) => {
console.log(error) }
}) }).catch((error) => {
} console.log(error)
replyComment = (commentContent, id, editor) => { })
const { showNotification } = this.props; }
// if (!commentContent || commentContent.length === 0) { replyComment = (commentContent, id, editor) => {
// showNotification(NEED_TO_WRITE_CONTENT) const { showNotification } = this.props;
// return; // if (!commentContent || commentContent.length === 0) {
// } // showNotification(NEED_TO_WRITE_CONTENT)
// return;
if (this.props.memo.id === id ) { // 回复帖子 // }
this.createNewComment(commentContent, id, editor);
return; if (this.props.memo.id === id ) { // 回复帖子
} this.createNewComment(commentContent, id, editor);
const url = `/users/reply_message.json`; return;
}
const { comments } = this.state; const url = `/users/reply_message.json`;
const user = this._getUser();
const graduation_topic_id = this.props.memo.id const { comments } = this.state;
const commentIndex = this._findById(id, comments); const user = this._getUser();
let comment = comments[commentIndex]; const graduation_topic_id = this.props.memo.id
const commentIndex = this._findById(id, comments);
commentContent = handleContentBeforeCreateSecondLevelComment(commentContent) let comment = comments[commentIndex];
axios.post(url, {
journals_for_message: { commentContent = handleContentBeforeCreateSecondLevelComment(commentContent)
// 'GraduationTask' axios.post(url, {
jour_type: this.props.jour_type, journals_for_message: {
jour_id: graduation_topic_id, // 'GraduationTask'
notes: commentContent, jour_type: this.props.jour_type,
m_parent_id: id, jour_id: graduation_topic_id,
reply_id: comment.user_id notes: commentContent,
} m_parent_id: id,
}, reply_id: comment.user_id
{ }
} },
).then((response) => { {
if (response.data.id) { }
let newId = response.data.id; ).then((response) => {
if (response.data.id) {
const newMemo2 = Object.assign({}, this.props.memo); let newId = response.data.id;
newMemo2.total_count = newMemo2.total_count + 1; let mycontent= response.data.content;
this.setState({ const newMemo2 = Object.assign({}, this.props.memo);
comments: addSecondLevelComment(comments, comment, commentIndex, newId, commentContent, user, editor), newMemo2.total_count = newMemo2.total_count + 1;
memo: newMemo2,
total_count: this.state.total_count + 1 this.setState({
comments: addSecondLevelComment(comments, comment, commentIndex, newId, mycontent, user, editor),
}) memo: newMemo2,
} total_count: this.state.total_count + 1
}).catch((error) => { })
console.log(error) }
})
} }).catch((error) => {
console.log(error)
loadMoreChildComments = (parent) => { })
const graduation_topic_id = this.props.memo.id }
const course_id = this.props.course_id
const url = `/${this.props.apiRouteName}/${graduation_topic_id}/show_comment.json?parent_id=${parent.id}&limit=500` loadMoreChildComments = (parent) => {
axios.get(url,{ const graduation_topic_id = this.props.memo.id
}) const course_id = this.props.course_id
.then((response) => { const url = `/${this.props.apiRouteName}/${graduation_topic_id}/show_comment.json?parent_id=${parent.id}&limit=500`
const { comments } = response.data axios.get(url,{
})
.then((response) => {
// const memo = Object.assign({}, this.state.memo) const { comments } = response.data
// memo.sum_replies_count = sum_replies_count;
this.setState({
// memo, // const memo = Object.assign({}, this.state.memo)
comments: generateChildComments(comments, this.state.comments, parent, this.transformReply) // memo.sum_replies_count = sum_replies_count;
}) this.setState({
}).catch((error) => { // memo,
console.log(error) comments: generateChildComments(comments, this.state.comments, parent, this.transformReply)
}) })
} }).catch((error) => {
console.log(error)
onPaginationChange = (pageCount) => { })
this.setState({ pageCount }, () => { }
this.fetchReplies()
}) onPaginationChange = (pageCount) => {
} this.setState({ pageCount }, () => {
this.fetchReplies()
fetchReplies = () => { })
const graduation_topic_id = this.props.memo.id }
const course_id = this.props.course_id
const url = `/${this.props.apiRouteName}/${graduation_topic_id}/show_comment.json?page=${this.state.pageCount}` fetchReplies = () => {
// page limit parent_id const graduation_topic_id = this.props.memo.id
axios.get(url,{ const course_id = this.props.course_id
}) const url = `/${this.props.apiRouteName}/${graduation_topic_id}/show_comment.json?page=${this.state.pageCount}`
.then((response) => { // page limit parent_id
const { comments, messages_count, homework_user_id, parent_messages_count } = response.data axios.get(url,{
})
this.setState({ .then((response) => {
comments: generateComments(comments, this.transformReply), const { comments, messages_count, homework_user_id, parent_messages_count } = response.data
// : this.state.comments.concat(comments),
total_count: parent_messages_count, this.setState({
homework_user_id comments: generateComments(comments, this.transformReply),
}) // : this.state.comments.concat(comments),
}).catch((error) => { total_count: parent_messages_count,
console.log(error) homework_user_id
}) })
} }).catch((error) => {
console.log(error)
transformReply = (reply, children = []) => { })
const isAdmin = this.props.isAdmin() }
const isSuperAdmin = this.props.isSuperAdmin()
return { transformReply = (reply, children = []) => {
admin: isAdmin, // const isAdmin = this.props.isAdmin()
isSuperAdmin: isSuperAdmin, const isSuperAdmin = this.props.isSuperAdmin()
permission: true, // return {
children: children, admin: isAdmin, //
hidden: reply.hidden, isSuperAdmin: isSuperAdmin,
id: reply.id, permission: true, //
image_url: reply.author.image_url, children: children,
reward: null, // hidden: reply.hidden,
time: reply.time, // moment(reply.created_on).fromNow(), id: reply.id,
user_id: reply.author.id, image_url: reply.author.image_url,
user_login: reply.author.login, reward: null, //
user_praise: reply.user_praise, time: reply.time, // moment(reply.created_on).fromNow(),
username: reply.author.name, user_id: reply.author.id,
content: reply.content, user_login: reply.author.login,
praise_count: reply.praise_count, user_praise: reply.user_praise,
child_message_count: reply.child_message_count username: reply.author.name,
} content: reply.content,
} praise_count: reply.praise_count,
child_message_count: reply.child_message_count
// 公共接口 --- 删除回复 }
deleteComment = (parrentComment, childCommentId) => { }
handleDeleteComment(this, parrentComment, childCommentId, 'journals_for_message')
} // 公共接口 --- 删除回复
// 公共接口 --- 回复点赞 deleteComment = (parrentComment, childCommentId) => {
commentPraise = (discussId) => { handleDeleteComment(this, parrentComment, childCommentId, 'journals_for_message')
handleCommentPraise(this, discussId, 'journals_for_message') }
} // 公共接口 --- 回复点赞
// 公共接口 --- 隐藏回复 commentPraise = (discussId) => {
hiddenComment = (item, childCommentId) => { handleCommentPraise(this, discussId, 'journals_for_message')
handleHiddenComment(this, item, childCommentId, 'journals_for_message') }
} // 公共接口 --- 隐藏回复
hiddenComment = (item, childCommentId) => {
showCommentInput = () => { handleHiddenComment(this, item, childCommentId, 'journals_for_message')
this.refs.editor.showEditor(); }
}
initReply = (parent) => { showCommentInput = () => {
if (!parent.isAllChildrenLoaded) { this.refs.editor.showEditor();
this.loadMoreChildComments(parent) }
} initReply = (parent) => {
} if (!parent.isAllChildrenLoaded) {
this.loadMoreChildComments(parent)
render(){ }
let { total_count, comments, pageCount } = this.state }
const { current_user, memo } = this.props
render(){
return( let { total_count, comments, pageCount } = this.state
<div style={{background: 'rgb(255, 255, 255)', marginTop: '20px'}} className="course-message"> const { current_user, memo } = this.props
<style>{`
.course-message .commentInput { return(
padding-bottom: 56px !important; <div style={{background: 'rgb(255, 255, 255)', marginTop: '20px'}} className="course-message">
} <style>{`
.course-message .commentInput.mockInputWrapper { .course-message .commentInput {
padding-bottom: 20px !important; padding-bottom: 56px !important;
} }
.course-message .memoReplies { .course-message .commentInput.mockInputWrapper {
/* border-top: 1px solid #EDEDED; */ padding-bottom: 20px !important;
padding-bottom: 30px; }
} .course-message .memoReplies {
`}</style> /* border-top: 1px solid #EDEDED; */
<MemoDetailMDEditor ref="editor" memo={memo} usingMockInput={true} placeholder="说点什么" padding-bottom: 30px;
height={160} showError={true} imageExpand={true} }
replyComment={this.replyComment} `}</style>
commentsLength={comments ? comments.length : 0} <MemoDetailMDEditor ref="editor" memo={memo} usingMockInput={true} placeholder="说点什么"
></MemoDetailMDEditor> height={160} showError={true} imageExpand={true}
{/* bor-bottom-greyE */} replyComment={this.replyComment}
<div className="padding40 memoReplies commentsDelegateParent" commentsLength={comments ? comments.length : 0}
style={{ display: (comments && !!comments.length) ? 'block' : 'none' }}> ></MemoDetailMDEditor>
<div className="replies_count"> {/* bor-bottom-greyE */}
<span className="labal">全部回复</span> <div className="padding40 memoReplies commentsDelegateParent"
<span className="count">{total_count}</span> style={{ display: (comments && !!comments.length) ? 'block' : 'none' }}>
</div> <div className="replies_count">
<span className="labal">全部回复</span>
<Comments comments={comments} user={current_user} <span className="count">{total_count}</span>
replyComment={this.replyComment} </div>
deleteComment={this.deleteComment}
commentPraise={this.commentPraise} <Comments comments={comments} user={current_user}
rewardCode={this.rewardCode} replyComment={this.replyComment}
hiddenComment={this.hiddenComment} deleteComment={this.deleteComment}
commentPraise={this.commentPraise}
usingAntdModal={true} rewardCode={this.rewardCode}
isChildCommentPagination={true} hiddenComment={this.hiddenComment}
loadMoreChildComments={this.loadMoreChildComments}
initReply={this.initReply} usingAntdModal={true}
showRewardButton={false} isChildCommentPagination={true}
onlySuperAdminCouldHide={true} loadMoreChildComments={this.loadMoreChildComments}
></Comments> initReply={this.initReply}
showRewardButton={false}
onlySuperAdminCouldHide={true}
{/* { true ? : ></Comments>
<div className="memoMore">
<div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>
</div>} */} {/* { true ? :
</div> <div className="memoMore">
<div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>
{ total_count > REPLY_PAGE_COUNT && </div>} */}
<div className="memoMore"> </div>
<Pagination showQuickJumper onChange={this.onPaginationChange} current={pageCount} total={total_count} pageSize={10}/>
<div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div> { total_count > REPLY_PAGE_COUNT &&
</div> } <div className="memoMore">
</div> <Pagination showQuickJumper onChange={this.onPaginationChange} current={pageCount} total={total_count} pageSize={10}/>
) <div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>
} </div> }
} </div>
export default ImageLayerOfCommentHOC() (CommonReply); )
}
}
export default ImageLayerOfCommentHOC() (CommonReply);

@ -18,7 +18,7 @@ import { generateComments, generateChildComments, _findById, handleContentBefore
const REPLY_PAGE_COUNT = 10 const REPLY_PAGE_COUNT = 10
const $ = window.$; const $ = window.$;
/* /*
相比较GraduateTopicReply 改动的地方 相比较GraduateTopicReply 改动的地方
列表接口名 /graduation_tasks/${graduation_topic_id}/show_comment.json?parent_id=${parent.id}&limit=500 列表接口名 /graduation_tasks/${graduation_topic_id}/show_comment.json?parent_id=${parent.id}&limit=500
回复类型名 jour_type: 'GraduationTask', 回复类型名 jour_type: 'GraduationTask',
@ -34,7 +34,7 @@ class GraduationTaskssettingReply extends Component{
componentDidMount(){ componentDidMount(){
this.fetchReplies() this.fetchReplies()
} }
_getUser() { _getUser() {
const { current_user } = this.props; const { current_user } = this.props;
@ -58,7 +58,7 @@ class GraduationTaskssettingReply extends Component{
// m_parent_id // m_parent_id
reply_id: memo.user_id reply_id: memo.user_id
} }
} }
).then((response) => { ).then((response) => {
if (response.data.status === -1) { if (response.data.status === -1) {
console.error('服务端异常') console.error('服务端异常')
@ -66,18 +66,20 @@ class GraduationTaskssettingReply extends Component{
} }
// this.props.showNotification('帖子发表成功') // this.props.showNotification('帖子发表成功')
if (response.data && response.data.id) { if (response.data && response.data.id) {
const _id = response.data.id; const _id = response.data.id;
// md let mycontent= response.data.content;
// md
editor.setValue && editor.setValue('') editor.setValue && editor.setValue('')
const user = this._getUser(); const user = this._getUser();
this.setState({ this.setState({
comments: addNewComment(this.state.comments, _id, content, user, this.props.isSuperAdmin(), this), comments: addNewComment(this.state.comments, _id, mycontent, user, this.props.isSuperAdmin(), this),
total_count: this.state.total_count + 1 total_count: this.state.total_count + 1
}) })
this.refs.editor.showEditor(); this.refs.editor.showEditor();
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -95,13 +97,13 @@ class GraduationTaskssettingReply extends Component{
return; return;
} }
const url = `/users/reply_message.json`; const url = `/users/reply_message.json`;
const { comments } = this.state; const { comments } = this.state;
const user = this._getUser(); const user = this._getUser();
const graduation_topic_id = this.props.memo.id const graduation_topic_id = this.props.memo.id
const commentIndex = this._findById(id, comments); const commentIndex = this._findById(id, comments);
let comment = comments[commentIndex]; let comment = comments[commentIndex];
commentContent = handleContentBeforeCreateSecondLevelComment(commentContent) commentContent = handleContentBeforeCreateSecondLevelComment(commentContent)
axios.post(url, { axios.post(url, {
journals_for_message: { journals_for_message: {
@ -113,13 +115,14 @@ class GraduationTaskssettingReply extends Component{
} }
}, },
{ {
} }
).then((response) => { ).then((response) => {
if (response.data.id) { if (response.data.id) {
let newId = response.data.id; let newId = response.data.id;
let mycontent= response.data.content;
this.setState({ this.setState({
comments: addSecondLevelComment(comments, comment, commentIndex, newId, commentContent, user, editor) comments: addSecondLevelComment(comments, comment, commentIndex, newId, mycontent, user, editor)
}) })
const newMemo2 = Object.assign({}, this.props.memo); const newMemo2 = Object.assign({}, this.props.memo);
@ -128,7 +131,7 @@ class GraduationTaskssettingReply extends Component{
memo: newMemo2 memo: newMemo2
}) })
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
}) })
@ -142,7 +145,7 @@ class GraduationTaskssettingReply extends Component{
}) })
.then((response) => { .then((response) => {
const { comments } = response.data const { comments } = response.data
// const memo = Object.assign({}, this.state.memo) // const memo = Object.assign({}, this.state.memo)
// memo.sum_replies_count = sum_replies_count; // memo.sum_replies_count = sum_replies_count;
@ -160,7 +163,7 @@ class GraduationTaskssettingReply extends Component{
this.fetchReplies() this.fetchReplies()
}) })
} }
fetchReplies = () => { fetchReplies = () => {
const graduation_topic_id = this.props.memo.id const graduation_topic_id = this.props.memo.id
const course_id = this.props.course_id const course_id = this.props.course_id
@ -170,7 +173,7 @@ class GraduationTaskssettingReply extends Component{
}) })
.then((response) => { .then((response) => {
const { comments, messages_count } = response.data const { comments, messages_count } = response.data
this.setState({ this.setState({
comments: generateComments(comments, this.transformReply), comments: generateComments(comments, this.transformReply),
// : this.state.comments.concat(comments), // : this.state.comments.concat(comments),
@ -180,7 +183,7 @@ class GraduationTaskssettingReply extends Component{
console.log(error) console.log(error)
}) })
} }
transformReply = (reply, children = []) => { transformReply = (reply, children = []) => {
const isAdmin = this.props.isAdmin() const isAdmin = this.props.isAdmin()
const isSuperAdmin = this.props.isSuperAdmin() const isSuperAdmin = this.props.isSuperAdmin()
@ -189,7 +192,7 @@ class GraduationTaskssettingReply extends Component{
isSuperAdmin: isSuperAdmin, isSuperAdmin: isSuperAdmin,
permission: true, // permission: true, //
children: children, children: children,
hidden: reply.hidden, hidden: reply.hidden,
id: reply.id, id: reply.id,
image_url: reply.author.image_url, image_url: reply.author.image_url,
reward: null, // reward: null, //
@ -251,7 +254,7 @@ class GraduationTaskssettingReply extends Component{
commentPraise={this.commentPraise} commentPraise={this.commentPraise}
rewardCode={this.rewardCode} rewardCode={this.rewardCode}
hiddenComment={this.hiddenComment} hiddenComment={this.hiddenComment}
usingAntdModal={true} usingAntdModal={true}
isChildCommentPagination={true} isChildCommentPagination={true}
loadMoreChildComments={this.loadMoreChildComments} loadMoreChildComments={this.loadMoreChildComments}
@ -259,15 +262,15 @@ class GraduationTaskssettingReply extends Component{
showRewardButton={false} showRewardButton={false}
onlySuperAdminCouldHide={true} onlySuperAdminCouldHide={true}
></Comments> ></Comments>
{/* { true ? : {/* { true ? :
<div className="memoMore"> <div className="memoMore">
<div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div> <div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>
</div>} */} </div>} */}
</div> </div>
{ total_count > REPLY_PAGE_COUNT && { total_count > REPLY_PAGE_COUNT &&
<div className="memoMore"> <div className="memoMore">
<Pagination showQuickJumper onChange={this.onPaginationChange} current={pageCount} total={total_count} pageSize={10}/> <Pagination showQuickJumper onChange={this.onPaginationChange} current={pageCount} total={total_count} pageSize={10}/>
<div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div> <div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>
@ -276,4 +279,4 @@ class GraduationTaskssettingReply extends Component{
) )
} }
} }
export default ImageLayerOfCommentHOC() (GraduationTaskssettingReply); export default ImageLayerOfCommentHOC() (GraduationTaskssettingReply);

@ -1,271 +1,273 @@
import React,{ Component } from "react"; import React,{ Component } from "react";
import { Pagination } from "antd"; import { Pagination } from "antd";
import update from 'immutability-helper' import update from 'immutability-helper'
import axios from 'axios' import axios from 'axios'
import MemoDetailMDEditor from '../../../forums/MemoDetailMDEditor' import MemoDetailMDEditor from '../../../forums/MemoDetailMDEditor'
import '../../../forums/Post.css' import '../../../forums/Post.css'
import '../../../forums/RightSection.css' import '../../../forums/RightSection.css'
import {ImageLayerOfCommentHOC} from '../../../page/layers/ImageLayerOfCommentHOC' import {ImageLayerOfCommentHOC} from '../../../page/layers/ImageLayerOfCommentHOC'
import Comments from '../../../comment/Comments' import Comments from '../../../comment/Comments'
import './GraduateTopicReply.css' import './GraduateTopicReply.css'
import '../../common/courseMessage.css' import '../../common/courseMessage.css'
import { generateComments, generateChildComments, _findById, handleContentBeforeCreateNew, addNewComment import { generateComments, generateChildComments, _findById, handleContentBeforeCreateNew, addNewComment
, addSecondLevelComment, NEED_TO_WRITE_CONTENT, handleContentBeforeCreateSecondLevelComment , addSecondLevelComment, NEED_TO_WRITE_CONTENT, handleContentBeforeCreateSecondLevelComment
, handleDeleteComment, handleCommentPraise, handleHiddenComment } from '../../common/CommentsHelper' , handleDeleteComment, handleCommentPraise, handleHiddenComment } from '../../common/CommentsHelper'
const REPLY_PAGE_COUNT = 10 const REPLY_PAGE_COUNT = 10
const $ = window.$; const $ = window.$;
class GraduateTopicReply extends Component{ class GraduateTopicReply extends Component{
constructor(props){ constructor(props){
super(props); super(props);
this.state={ this.state={
pageCount: 1 pageCount: 1
} }
} }
componentDidMount(){ componentDidMount(){
this.fetchReplies() this.fetchReplies()
} }
_getUser() { _getUser() {
const { current_user } = this.props; const { current_user } = this.props;
current_user.user_url = `/users/${current_user.login}`; current_user.user_url = `/users/${current_user.login}`;
return current_user; return current_user;
} }
_findById = _findById _findById = _findById
createNewComment = (commentContent, id, editor) => { createNewComment = (commentContent, id, editor) => {
const graduation_topic_id = this.props.memo.id const graduation_topic_id = this.props.memo.id
let content = handleContentBeforeCreateNew(commentContent); let content = handleContentBeforeCreateNew(commentContent);
const { memo } = this.props; const { memo } = this.props;
const url = `/users/reply_message.json`; const url = `/users/reply_message.json`;
let { comments } = this.state; let { comments } = this.state;
axios.post(url, { axios.post(url, {
journals_for_message: { journals_for_message: {
jour_type: 'GraduationTopic', jour_type: 'GraduationTopic',
jour_id: graduation_topic_id, jour_id: graduation_topic_id,
notes: content, notes: content,
// m_parent_id // m_parent_id
reply_id: memo.user_id reply_id: memo.user_id
} }
} }
).then((response) => { ).then((response) => {
if (response.data.status === -1) { if (response.data.status === -1) {
console.error('服务端异常') console.error('服务端异常')
return; return;
} }
// this.props.showNotification('帖子发表成功') // this.props.showNotification('帖子发表成功')
if (response.data && response.data.id) { if (response.data && response.data.id) {
const _id = response.data.id; const _id = response.data.id;
// md let mycontent= response.data.content;
editor.setValue && editor.setValue('') // md
editor.setValue && editor.setValue('')
const user = this._getUser();
this.setState({ const user = this._getUser();
comments: addNewComment(this.state.comments, _id, content, user, this.props.isSuperAdmin(), this), this.setState({
total_count: this.state.total_count + 1 comments: addNewComment(this.state.comments, _id, mycontent, user, this.props.isSuperAdmin(), this),
}) total_count: this.state.total_count + 1
this.refs.editor.showEditor(); })
this.refs.editor.showEditor();
}
}).catch((error) => { }
console.log(error) }).catch((error) => {
}) console.log(error)
} })
replyComment = (commentContent, id, editor) => { }
const { showNotification } = this.props; replyComment = (commentContent, id, editor) => {
// if (!commentContent || commentContent.length === 0) { const { showNotification } = this.props;
// showNotification(NEED_TO_WRITE_CONTENT) // if (!commentContent || commentContent.length === 0) {
// return; // showNotification(NEED_TO_WRITE_CONTENT)
// } // return;
// }
if (this.props.memo.id === id ) { // 回复帖子
this.createNewComment(commentContent, id, editor); if (this.props.memo.id === id ) { // 回复帖子
return; this.createNewComment(commentContent, id, editor);
} return;
const url = `/users/reply_message.json`; }
const url = `/users/reply_message.json`;
const { comments } = this.state;
const user = this._getUser(); const { comments } = this.state;
const graduation_topic_id = this.props.memo.id const user = this._getUser();
const commentIndex = this._findById(id, comments); const graduation_topic_id = this.props.memo.id
let comment = comments[commentIndex]; const commentIndex = this._findById(id, comments);
let comment = comments[commentIndex];
commentContent = handleContentBeforeCreateSecondLevelComment(commentContent)
axios.post(url, { commentContent = handleContentBeforeCreateSecondLevelComment(commentContent)
journals_for_message: { axios.post(url, {
jour_type: 'GraduationTopic', journals_for_message: {
jour_id: graduation_topic_id, jour_type: 'GraduationTopic',
notes: commentContent, jour_id: graduation_topic_id,
m_parent_id: id, notes: commentContent,
reply_id: comment.user_id m_parent_id: id,
} reply_id: comment.user_id
}, }
{ },
} {
).then((response) => { }
if (response.data.id) { ).then((response) => {
let newId = response.data.id; if (response.data.id) {
let newId = response.data.id;
this.setState({ let mycontent= response.data.content;
comments: addSecondLevelComment(comments, comment, commentIndex, newId, commentContent, user, editor)
}) this.setState({
comments: addSecondLevelComment(comments, comment, commentIndex, newId, mycontent, user, editor)
const newMemo2 = Object.assign({}, this.props.memo); })
newMemo2.total_count = newMemo2.total_count + 1;
this.setState({ const newMemo2 = Object.assign({}, this.props.memo);
memo: newMemo2 newMemo2.total_count = newMemo2.total_count + 1;
}) this.setState({
} memo: newMemo2
})
}).catch((error) => { }
console.log(error)
}) }).catch((error) => {
} console.log(error)
})
loadMoreChildComments = (parent) => { }
const graduation_topic_id = this.props.memo.id
const course_id = this.props.course_id loadMoreChildComments = (parent) => {
const url = `/courses/${course_id}/graduation_topics/${graduation_topic_id}/show_comment.json?parent_id=${parent.id}&limit=500` const graduation_topic_id = this.props.memo.id
axios.get(url,{ const course_id = this.props.course_id
}) const url = `/courses/${course_id}/graduation_topics/${graduation_topic_id}/show_comment.json?parent_id=${parent.id}&limit=500`
.then((response) => { axios.get(url,{
const { comments } = response.data })
.then((response) => {
const { comments } = response.data
// const memo = Object.assign({}, this.state.memo)
// memo.sum_replies_count = sum_replies_count;
this.setState({ // const memo = Object.assign({}, this.state.memo)
// memo, // memo.sum_replies_count = sum_replies_count;
comments: generateChildComments(comments, this.state.comments, parent, this.transformReply) this.setState({
}) // memo,
}).catch((error) => { comments: generateChildComments(comments, this.state.comments, parent, this.transformReply)
console.log(error) })
}) }).catch((error) => {
} console.log(error)
})
onPaginationChange = (pageCount) => { }
this.setState({ pageCount }, () => {
this.fetchReplies() onPaginationChange = (pageCount) => {
}) this.setState({ pageCount }, () => {
} this.fetchReplies()
})
fetchReplies = () => { }
const graduation_topic_id = this.props.memo.id
const course_id = this.props.course_id fetchReplies = () => {
const url = `/courses/${course_id}/graduation_topics/${graduation_topic_id}/show_comment.json?page=${this.state.pageCount}` const graduation_topic_id = this.props.memo.id
// page limit parent_id const course_id = this.props.course_id
axios.get(url,{ const url = `/courses/${course_id}/graduation_topics/${graduation_topic_id}/show_comment.json?page=${this.state.pageCount}`
}) // page limit parent_id
.then((response) => { axios.get(url,{
const { comments, messages_count } = response.data })
.then((response) => {
this.setState({ const { comments, messages_count } = response.data
comments: generateComments(comments, this.transformReply),
// : this.state.comments.concat(comments), this.setState({
total_count: messages_count comments: generateComments(comments, this.transformReply),
}) // : this.state.comments.concat(comments),
}).catch((error) => { total_count: messages_count
console.log(error) })
}) }).catch((error) => {
} console.log(error)
})
transformReply = (reply, children = []) => { }
const isAdmin = this.props.isAdmin()
const isSuperAdmin = this.props.isSuperAdmin() transformReply = (reply, children = []) => {
return { const isAdmin = this.props.isAdmin()
isSuperAdmin: isSuperAdmin, const isSuperAdmin = this.props.isSuperAdmin()
admin: isAdmin, // return {
permission: true, // isSuperAdmin: isSuperAdmin,
children: children, admin: isAdmin, //
child_message_count: reply.child_message_count, permission: true, //
hidden: reply.hidden, children: children,
id: reply.id, child_message_count: reply.child_message_count,
image_url: reply.author.image_url, hidden: reply.hidden,
reward: null, // id: reply.id,
time: reply.time, // moment(reply.created_on).fromNow(), image_url: reply.author.image_url,
user_id: reply.author.id, reward: null, //
user_login: reply.author.login, time: reply.time, // moment(reply.created_on).fromNow(),
user_praise: reply.user_praise, user_id: reply.author.id,
username: reply.author.name, user_login: reply.author.login,
content: reply.content, user_praise: reply.user_praise,
praise_count: reply.praise_count username: reply.author.name,
} content: reply.content,
} praise_count: reply.praise_count
}
// 公共接口 --- 删除回复 }
deleteComment = (parrentComment, childCommentId) => {
handleDeleteComment(this, parrentComment, childCommentId, 'journals_for_message') // 公共接口 --- 删除回复
} deleteComment = (parrentComment, childCommentId) => {
// 公共接口 --- 回复点赞 handleDeleteComment(this, parrentComment, childCommentId, 'journals_for_message')
commentPraise = (discussId) => { }
handleCommentPraise(this, discussId, 'journals_for_message') // 公共接口 --- 回复点赞
} commentPraise = (discussId) => {
// 公共接口 --- 隐藏回复 handleCommentPraise(this, discussId, 'journals_for_message')
hiddenComment = (item, childCommentId) => { }
handleHiddenComment(this, item, childCommentId, 'journals_for_message') // 公共接口 --- 隐藏回复
} hiddenComment = (item, childCommentId) => {
handleHiddenComment(this, item, childCommentId, 'journals_for_message')
showCommentInput = () => { }
this.refs.editor.showEditor();
} showCommentInput = () => {
initReply = (parent) => { this.refs.editor.showEditor();
if (!parent.isAllChildrenLoaded) { }
this.loadMoreChildComments(parent) initReply = (parent) => {
} if (!parent.isAllChildrenLoaded) {
} this.loadMoreChildComments(parent)
}
render(){ }
let { total_count, comments, pageCount } = this.state
const { current_user, memo } = this.props render(){
let { total_count, comments, pageCount } = this.state
return( const { current_user, memo } = this.props
<React.Fragment>
<MemoDetailMDEditor ref="editor" memo={memo} usingMockInput={true} placeholder="说点什么" return(
height={160} showError={true}></MemoDetailMDEditor> <React.Fragment>
<MemoDetailMDEditor ref="editor" memo={memo} usingMockInput={true} placeholder="说点什么"
<div className="padding40 bor-bottom-greyE memoReplies commentsDelegateParent" height={160} showError={true}></MemoDetailMDEditor>
style={{ display: (comments && !!comments.length) ? 'block' : 'none' }}>
<div className="replies_count"> <div className="padding40 bor-bottom-greyE memoReplies commentsDelegateParent"
<span className="labal">全部回复</span> style={{ display: (comments && !!comments.length) ? 'block' : 'none' }}>
<span className="count">{total_count}</span> <div className="replies_count">
</div> <span className="labal">全部回复</span>
<span className="count">{total_count}</span>
<Comments comments={comments} user={current_user} </div>
replyComment={this.replyComment}
deleteComment={this.deleteComment} <Comments comments={comments} user={current_user}
commentPraise={this.commentPraise} replyComment={this.replyComment}
rewardCode={this.rewardCode} deleteComment={this.deleteComment}
hiddenComment={this.hiddenComment} commentPraise={this.commentPraise}
rewardCode={this.rewardCode}
usingAntdModal={true} hiddenComment={this.hiddenComment}
isChildCommentPagination={true}
loadMoreChildComments={this.loadMoreChildComments} usingAntdModal={true}
initReply={this.initReply} isChildCommentPagination={true}
showRewardButton={false} loadMoreChildComments={this.loadMoreChildComments}
initReply={this.initReply}
onlySuperAdminCouldHide={true} showRewardButton={false}
></Comments>
onlySuperAdminCouldHide={true}
></Comments>
{/* { true ? :
<div className="memoMore">
<div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div> {/* { true ? :
</div>} */} <div className="memoMore">
</div> <div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>
</div>} */}
{ total_count > REPLY_PAGE_COUNT && </div>
<div className="memoMore">
<Pagination showQuickJumper onChange={this.onPaginationChange} current={pageCount} total={total_count} pageSize={10}/> { total_count > REPLY_PAGE_COUNT &&
<div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div> <div className="memoMore">
</div> } <Pagination showQuickJumper onChange={this.onPaginationChange} current={pageCount} total={total_count} pageSize={10}/>
</React.Fragment> <div className="writeCommentBtn" onClick={this.showCommentInput}>写评论</div>
) </div> }
} </React.Fragment>
} )
export default ImageLayerOfCommentHOC() (GraduateTopicReply); }
}
export default ImageLayerOfCommentHOC() (GraduateTopicReply);

Loading…
Cancel
Save