index.jsx 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { useState, useEffect } from 'react'
  2. import Taro from '@tarojs/taro'
  3. import { ScrollView, Image } from '@tarojs/components'
  4. import withLayout from '@/layout'
  5. import { queryChatFriends } from '@/services/chat'
  6. import { formatDate } from '@/utils/chatDate'
  7. import './index.scss'
  8. const defaultRuleImage = 'https://yz-websit.oss-cn-hangzhou.aliyuncs.com/xlk/index-icon18.jpg'
  9. export default withLayout((props) => {
  10. // const [PageProps] = useState(props)
  11. const [IsPull, setPull] = useState(false)
  12. const [PullTimer, setPullTimer] = useState(null)
  13. const [PageList, setPageList] = useState([])
  14. const getList = (params) => {
  15. Taro.showLoading()
  16. queryChatFriends({
  17. pageSize: 20,
  18. ...params || {},
  19. }).then((res) => {
  20. Taro.hideLoading()
  21. const { records } = res
  22. setPageList(records || [])
  23. }).catch((err) => {
  24. console.error(err)
  25. Taro.hideLoading()
  26. })
  27. }
  28. const handleChat = (item) => {
  29. Taro.navigateTo({
  30. url: `/pages/chat/chatDetail/index?friend=${item.friendId}`
  31. })
  32. }
  33. useEffect(() => {
  34. getList({ pageNumber: 1 })
  35. }, [])
  36. const PageRefresh = () => { // 页面下拉刷新回调
  37. setPull(true)
  38. }
  39. useEffect(() => { // 下拉刷新触发
  40. if (IsPull) {
  41. clearTimeout(PullTimer)
  42. setPullTimer(setTimeout(() => {
  43. setPull(false)
  44. }, 2000))
  45. }
  46. }, [IsPull])
  47. return (
  48. <view className='Page Chat'>
  49. <ScrollView scrollY refresherEnabled refresherTriggered={IsPull} onRefresherrefresh={PageRefresh} refresherBackground='#fff'>
  50. <view className='PageContent'>
  51. {
  52. PageList.map((item) => (
  53. <view className='ListItem flex-h' key={item.friendId} onClick={() => handleChat(item)}>
  54. <view className='Icon'>
  55. <view>
  56. <Image mode='aspectFill' className='centerLabel' src={item.avatar || defaultRuleImage} />
  57. </view>
  58. {!!item.unReadNum && <text className='Num'>{item.unReadNum}</text>}
  59. </view>
  60. <view className='flex-item'>
  61. <view className='flex-h'>
  62. <text className='flex-item'>{item.name}</text>
  63. <text>{formatDate(item.createDate, 'yyyy/M/d')}</text>
  64. </view>
  65. <view className='Msg'>
  66. <text>{item.messageType === 'text' ? item.message : '[图片]'}</text>
  67. </view>
  68. </view>
  69. </view>
  70. ))
  71. }
  72. {
  73. PageList.length === 0 &&
  74. <view className='NoData centerLabel'>
  75. <text className='iconfont icon-nodata'></text>
  76. <text>没有更多聊天信息了~</text>
  77. </view>
  78. }
  79. </view>
  80. </ScrollView>
  81. </view>
  82. )
  83. })