ColumnContentMessage.tsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import React, { useEffect, useState } from 'react'
  2. import useRequest from '@ahooksjs/use-request/es'
  3. import { Input, message, Modal } from 'antd'
  4. import { ColumnService, IMessageDetail } from 'Column/Column.service'
  5. import { LikeOutlined, DeleteOutlined } from '@ant-design/icons'
  6. import styles from '../css/ColumnMessage.module.scss'
  7. interface IColumnCenterProps {
  8. detailId: number
  9. }
  10. /**研选专栏 */
  11. const ColumnContentMessage: React.FC<IColumnCenterProps> = props => {
  12. const { detailId } = props
  13. const pageSize = 100000
  14. const currentIndex = 1
  15. const [inputShow, setInputShow] = useState<boolean>(false) // 是否显示留言输入框
  16. const [massageList, setMassageList] = useState<IMessageDetail[]>([]) // 是否显示留言输入框
  17. const [messageContent, setMessageContent] = useState<string>('') // 是否显示留言输入框
  18. const handleChangeMessage = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
  19. setMessageContent(e.target.value)
  20. }
  21. const submitHandler = () => {
  22. applyCheckColumnNote(detailId, messageContent)
  23. }
  24. // 添加留言
  25. const { run: applyCheckColumnNote } = useRequest(ColumnService.postMessageAdd, {
  26. manual: true,
  27. onSuccess: res => {
  28. res.data.Success ? message.success(res.data.Msg) : message.error(res.data.Msg || res.data.ErrMsg)
  29. setInputShow(false)
  30. }
  31. })
  32. // 获取留言数据
  33. const { run: getColumnSpecialList } = useRequest(ColumnService.getColumnSpecialList, {
  34. manual: true,
  35. formatResult: response => response.data.Data,
  36. onSuccess: res => {
  37. setMassageList(res.List)
  38. }
  39. })
  40. // deleceMessageHandler
  41. const deleceMessageHandler = (item: IMessageDetail) => {
  42. Modal.confirm({
  43. title: '提醒',
  44. content: '确定要删除此回复内容吗?',
  45. okText: '确定',
  46. cancelText: '取消',
  47. centered: true,
  48. closable: true,
  49. onOk: () => {
  50. postMessageDelete(item.MessageId)
  51. }
  52. })
  53. }
  54. // 删除留言的接口
  55. const { run: postMessageDelete } = useRequest(ColumnService.postMessageDelete, {
  56. manual: true,
  57. onSuccess: res => {
  58. res.data.Success ? message.success(res.data.Msg) : message.error(res.data.Msg || res.data.ErrMsg)
  59. getColumnSpecialList(pageSize, currentIndex, detailId)
  60. }
  61. })
  62. useEffect(() => {
  63. if (detailId) {
  64. getColumnSpecialList(pageSize, currentIndex, detailId)
  65. }
  66. }, [detailId])
  67. return (
  68. <div>
  69. {!inputShow ? (
  70. <div
  71. className={styles['columndetail-messge-select-ipt']}
  72. onClick={() => {
  73. setInputShow(true)
  74. }}
  75. >
  76. 留言会私信给作者,作者设置留言公开后将在文章下展示
  77. </div>
  78. ) : (
  79. <div style={{ marginTop: 20 }}>
  80. <Input.TextArea
  81. placeholder="留言会私信给作者,作者设置留言公开后将在文章下展示"
  82. autoSize={{ minRows: 3, maxRows: 3 }}
  83. required
  84. value={messageContent}
  85. onChange={handleChangeMessage}
  86. />
  87. <div className={styles['columndetail-messge-ipt-btn']}>
  88. <span
  89. onClick={() => {
  90. setInputShow(false)
  91. }}
  92. >
  93. 取消
  94. </span>
  95. <span onClick={submitHandler}>提交</span>
  96. </div>
  97. </div>
  98. )}
  99. {massageList.length > 0 &&
  100. massageList.map(item => (
  101. <div key={item.MessageId} className={styles['columndetail-message-list']}>
  102. <div className={styles['item-img-btn']}>
  103. <div>
  104. <img src={item.Headimgurl} />
  105. <span>{item.CreateTime}</span>
  106. </div>
  107. <div>
  108. {item.Status === 0 ? (
  109. <DeleteOutlined className={styles['delete-icon']} onClick={() => deleceMessageHandler(item)} />
  110. ) : (
  111. <>
  112. <LikeOutlined className={styles['collect-icon']} />
  113. <span>{item.LikeCount}</span>
  114. </>
  115. )}
  116. </div>
  117. </div>
  118. <div className={styles['columndetail-messge-content']}>{item.Content}</div>
  119. {item.ChildList.length > 0 &&
  120. item.ChildList.map(child => (
  121. <div key={child.MessageId} className={styles['columndetail-messge-child-list']}>
  122. <div className={styles['item-img-btn']}>
  123. <div>
  124. <img src={child.Headimgurl} />
  125. <span>{child.CreateTime}</span>
  126. </div>
  127. </div>
  128. <div className={styles['columndetail-messge-content']}>{child.Content}</div>
  129. </div>
  130. ))}
  131. </div>
  132. ))}
  133. </div>
  134. )
  135. }
  136. export default ColumnContentMessage