index.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import ColEmpty from '@/components/col-empty'
  2. import Pagination from '@/components/pagination'
  3. import request from '@/helpers/request'
  4. import { ElImage, ElSkeleton, ElSkeletonItem, ElTag } from 'element-plus'
  5. import { defineComponent } from 'vue'
  6. export default defineComponent({
  7. name: 'MyFans',
  8. data() {
  9. return {
  10. pageInfo: {
  11. // 分页规则
  12. limit: 12, // 限制显示条数
  13. page: 1, // 当前页
  14. total: 0, // 总条数
  15. page_size: [12, 24, 48, 60] // 选择限制显示条数
  16. },
  17. list: [] as any[],
  18. loading: false,
  19. dataShow: false // 是否有数据
  20. }
  21. },
  22. mounted() {
  23. this.getList()
  24. },
  25. methods: {
  26. async getList() {
  27. this.loading = true
  28. try {
  29. const { data } = await request.post(
  30. '/api-website/teacher/queryMyFans',
  31. {
  32. requestType: 'json',
  33. data: {
  34. page: this.pageInfo.page,
  35. rows: this.pageInfo.limit
  36. }
  37. }
  38. )
  39. this.list = data.rows || []
  40. console.log(this.list)
  41. this.pageInfo.total = data.total
  42. if (data.total <= 0) {
  43. this.dataShow = true
  44. }
  45. } catch {}
  46. if (this.dataShow) {
  47. this.loading = false
  48. } else {
  49. setTimeout(() => {
  50. this.loading = false
  51. }, 200)
  52. }
  53. }
  54. },
  55. render() {
  56. return (
  57. <div class="h-full bg-[#FAFAFA] rounded-md overflow-hidden">
  58. <div class="text-sm text-[#333] bg-white leading-none px-6 py-5 border-b border-b-[#E5E5E5]">
  59. 我的粉丝
  60. </div>
  61. <div class=" pt-4">
  62. <ElSkeleton
  63. loading={this.loading}
  64. animated
  65. class=" w-full m-auto px-[14px] flex"
  66. count={3}
  67. v-slots={{
  68. template: () => (
  69. <div class="w-[296px] rounded-md bg-white py-4 px-[14px] mb-4 m-auto flex items-center hover:drop-shadow-lg transition-all">
  70. <ElSkeletonItem
  71. variant="circle"
  72. style={{ width: '56px', height: '56px' }}
  73. ></ElSkeletonItem>
  74. <div class="flex w-32 flex-col pl-2.5">
  75. <ElSkeletonItem variant="h3"></ElSkeletonItem>
  76. <ElSkeletonItem
  77. variant="p"
  78. style={{ width: '60%', marginTop: '6px' }}
  79. ></ElSkeletonItem>
  80. </div>
  81. </div>
  82. )
  83. }}
  84. >
  85. <div class="flex flex-wrap px-3">
  86. {this.list.map((item: any) => (
  87. <div class="basis-1/3 ">
  88. <div class="w-[296px] rounded-md bg-white py-4 px-[14px] mb-4 m-auto flex items-center hover:drop-shadow-lg transition-all">
  89. <ElImage src={item.avatar} class="w-14 h-14 rounded-full" />
  90. <div class="pl-2.5">
  91. <p class="text-base text-[#333] font-medium leading-tight pb-1.5">
  92. {item.userName}
  93. </p>
  94. <p>
  95. <ElTag
  96. effect="dark"
  97. size="small"
  98. color="#FFF1DE"
  99. style={{
  100. borderColor: '#FFF1DE',
  101. color: '#FF8C00',
  102. marginRight: '5px'
  103. }}
  104. >
  105. {item.subjectName}
  106. </ElTag>
  107. </p>
  108. </div>
  109. </div>
  110. </div>
  111. ))}
  112. </div>
  113. </ElSkeleton>
  114. </div>
  115. <Pagination
  116. total={this.pageInfo.total}
  117. v-model:page={this.pageInfo.page}
  118. v-model:limit={this.pageInfo.limit}
  119. pageSizes={this.pageInfo.page_size}
  120. pagination={this.getList}
  121. />
  122. {this.dataShow && <ColEmpty />}
  123. </div>
  124. )
  125. }
  126. })