index.tsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import OEmpty from '@/components/o-empty'
  2. import OHeader from '@/components/o-header'
  3. import request from '@/helpers/request'
  4. import { state } from '@/state'
  5. import { Grid, GridItem, Image, List, Loading, showImagePreview } from 'vant'
  6. import { defineComponent, onMounted, reactive } from 'vue'
  7. import { useRoute, useRouter } from 'vue-router'
  8. import styles from './index.module.less'
  9. import iconImage from '../images/icon-photo-default.png'
  10. import OSticky from '@/components/o-sticky'
  11. export default defineComponent({
  12. name: 'photo-detail',
  13. props: {
  14. orchestraId: {
  15. type: String,
  16. default: ''
  17. }
  18. },
  19. setup(props) {
  20. const route = useRoute()
  21. const router = useRouter()
  22. console.log('🚀 ~ route', route)
  23. const data = reactive({
  24. loading: false,
  25. finished: false,
  26. pages: {
  27. page: 1,
  28. rows: 20
  29. },
  30. list: [] as any[]
  31. })
  32. const getList = async () => {
  33. data.loading = true
  34. try {
  35. const res = await request.post(`${state.platformApi}/orchestraPhotoAlbum/page`, {
  36. data: {
  37. ...data.pages,
  38. orchestraId: props.orchestraId || route.query.orchestraId,
  39. parentId: route.query.id
  40. }
  41. })
  42. if (Array.isArray(res?.data?.rows)) {
  43. data.list = data.list.concat(res.data.rows)
  44. data.pages.page += 1
  45. if (!res.data.rows.length) {
  46. data.finished = true
  47. }
  48. }
  49. } catch {}
  50. data.loading = false
  51. }
  52. // 预览图片
  53. const onShowImage = (index: number) => {
  54. const files = data.list.map((file: any) => {
  55. return file.fileUrl
  56. })
  57. showImagePreview({
  58. images: files,
  59. startPosition: index,
  60. closeable: true
  61. })
  62. }
  63. onMounted(() => {
  64. getList()
  65. document.title = (route.query.name as any) || ''
  66. })
  67. return () => (
  68. <div>
  69. <OSticky>
  70. <OHeader title={(route.query.name as string) || '我的乐团'} />
  71. </OSticky>
  72. <div class={styles.phoneDetail}>
  73. {!data.loading && !!data.list.length && (
  74. <List
  75. // v-model:loading={data.loading}
  76. finished={data.finished}
  77. finishedText="没有更多数据"
  78. onLoad={getList}
  79. immediateCheck={false}
  80. >
  81. <div class={styles.photoWrap}>
  82. {data.list.map((item: any, index: number) => (
  83. <div
  84. class={styles.photoItem}
  85. onClick={() => {
  86. router.push({
  87. path: '/photo-list-detail',
  88. query: {
  89. orchestraPhotoAlbumId: item.id
  90. }
  91. })
  92. }}
  93. >
  94. <Image class={styles.gridImg} src={item.coverUrl} fit="cover">
  95. {{ loading: () => <Loading type="spinner" /> }}
  96. </Image>
  97. <div class={styles.gridName}>{item.name || ''}</div>
  98. <div class={styles.gridDes}>{item.photoCount || 0}张</div>
  99. </div>
  100. ))}
  101. </div>
  102. </List>
  103. )}
  104. {!data.loading && !data.list.length && <OEmpty btnStatus={false} tips="暂无相册" />}
  105. </div>
  106. </div>
  107. )
  108. }
  109. })