index.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import React, {useState} from 'react'
  2. import { View, Image, Text } from '@tarojs/components'
  3. import './index.scss'
  4. const stepList = new Array(8).fill(0)
  5. const RankList: React.FC = () => {
  6. // 当前选中的Menu下标
  7. const [MenuIndex, setMenuIndex] = useState(0)
  8. // 渲染排名等级
  9. const RenderThree = (rank: number) => {
  10. if (rank < 4) {
  11. return <Image style={{width: 26, height: 29}} src={require(`../../assets/My/rank${rank}.png`)} />
  12. } else {
  13. return rank
  14. }
  15. }
  16. // 渲染做题记录
  17. const RenderTopicRecord = () => {
  18. return (
  19. <View className='topic'>
  20. <View className='topic-item'>
  21. <View className='date'>2020/4/18</View>
  22. </View>
  23. </View>
  24. )
  25. }
  26. // 渲染排行榜
  27. const RenderRank = () => {
  28. return (
  29. <React.Fragment>
  30. <View className='rank-item'>
  31. <View className='rank-count'>
  32. {RenderThree(2)}
  33. </View>
  34. <Image className='user-ava' src={require('../../assets/My/ava.jpg')} />
  35. <View className='user-name over1'>22222222222222222</View>
  36. <View className='success-rate'>正确率:<Text>80%</Text></View>
  37. <View className='date'>用时:<Text>10s</Text></View>
  38. </View>
  39. <View className='rank'>
  40. {
  41. stepList.map( (item, index) => (
  42. <View className='rank-item' key={index}>
  43. <View className='rank-count'>
  44. {RenderThree(index + 1)}
  45. </View>
  46. <Image className='user-ava' src={require('../../assets/My/ava.jpg')} />
  47. <View className='user-name over1'>22222222222222222</View>
  48. <View className='success-rate'>正确率:<Text>80%</Text></View>
  49. <View className='date'>用时:<Text>10s</Text></View>
  50. </View>
  51. ))
  52. }
  53. </View>
  54. </React.Fragment>
  55. )
  56. }
  57. return (
  58. <View className='RankList'>
  59. <View className='self'>
  60. <View className='menu'>
  61. <View className={[MenuIndex === 0 ? 'active' : ''].join('')} onClick={() => setMenuIndex(0)}> 排行榜 </View>
  62. <View className={[MenuIndex === 1 ? 'active' : ''].join('')} onClick={() => setMenuIndex(1)}> 做题记录 </View>
  63. </View>
  64. <View className='line'></View>
  65. </View>
  66. {/* 排行榜 */}
  67. {
  68. MenuIndex === 0 ? RenderRank() : RenderTopicRecord()
  69. }
  70. </View>
  71. )
  72. }
  73. const My: React.FC = () => {
  74. const RenderTopicResult = () => {
  75. // return <Image className='star' src={require('../../assets/My/star0.png')} />
  76. return (
  77. <View className='clock'>
  78. <Image style={{width: 8, height: 9}} src={require('../../assets/My/clock.png')} />
  79. <Text>未解锁</Text>
  80. </View>
  81. )
  82. }
  83. return (
  84. <View className='My'>
  85. <View className='header'></View>
  86. <View className='user'>
  87. <Image className='user-ava' src={require('../../assets/My/ava.jpg')} />
  88. <Text>小明</Text>
  89. </View>
  90. {/* 闯关进度 */}
  91. <View className='customs-step'>
  92. {
  93. stepList.map( (item, index) => (
  94. <View className='step' style={{marginRight: [3, 7].includes(index)? 0 : 27}} key={index} >
  95. <Image style={{width: 21, height: 27}} src={require(`../../assets/My/${index + 1 }.png`)} />
  96. {
  97. RenderTopicResult()
  98. }
  99. </View>
  100. ))
  101. }
  102. </View>
  103. {/* 卡片 */}
  104. <View className='card'>
  105. <Image className='card-btn' src={require('../../assets/My/card-btn.png')} />
  106. </View>
  107. {/* 排行榜 */}
  108. <RankList />
  109. </View>
  110. )
  111. }
  112. export default My