index.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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, watch } 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. export default defineComponent({
  11. name: 'photo-detail',
  12. props: {
  13. orchestraId: {
  14. type: String,
  15. default: ''
  16. }
  17. },
  18. setup(props) {
  19. const route = useRoute()
  20. const router = useRouter()
  21. const data = reactive({
  22. loading: false,
  23. finished: false,
  24. pages: {
  25. page: 1,
  26. rows: 20
  27. },
  28. list: [] as any[]
  29. })
  30. const getList = async () => {
  31. data.loading = true
  32. try {
  33. const res = await request.post(`${state.platformApi}/orchestraPhotoAlbum/page`, {
  34. data: {
  35. ...data.pages,
  36. orchestraId: props.orchestraId
  37. },
  38. hideLoading: true
  39. })
  40. if (Array.isArray(res?.data?.rows)) {
  41. data.list = data.list.concat(res.data.rows)
  42. data.pages.page += 1
  43. if (!res.data.rows.length) {
  44. data.finished = true
  45. }
  46. }
  47. } catch {
  48. data.finished = true
  49. }
  50. data.loading = false
  51. }
  52. watch(
  53. () => props.orchestraId,
  54. () => {
  55. data.pages.page = 1
  56. data.list = []
  57. data.finished = false
  58. getList()
  59. }
  60. )
  61. // 预览图片
  62. const onShowImage = (index: number) => {
  63. const files = data.list.map((file: any) => {
  64. return file.fileUrl
  65. })
  66. showImagePreview({
  67. images: files,
  68. startPosition: index,
  69. closeable: true
  70. })
  71. }
  72. onMounted(() => {
  73. getList()
  74. document.title = (route.query.name as any) || ''
  75. })
  76. return () => (
  77. <div
  78. class={[styles.phoneDetail, !data.list.length && 'emptyRootContainer']}
  79. // style={{ height: '100%', minHeight: 'auto' }}
  80. >
  81. {!data.loading && !!data.list.length && (
  82. <List
  83. // v-model:loading={data.loading}
  84. finished={data.finished}
  85. finishedText="没有更多数据"
  86. onLoad={getList}
  87. immediateCheck={false}
  88. >
  89. <div class={styles.photoWrap}>
  90. {data.list.map((item: any, index: number) => (
  91. <div
  92. class={styles.photoItem}
  93. onClick={() => {
  94. router.push({
  95. path: '/photo-list',
  96. query: {
  97. id: item.id
  98. }
  99. })
  100. }}
  101. >
  102. <div
  103. class={styles.gridImg}
  104. style={
  105. item.coverUrl
  106. ? { backgroundImage: `url(${item.coverUrl})`, backgroundSize: 'cover' }
  107. : ''
  108. }
  109. ></div>
  110. <div class={styles.gridName}>{item.name}</div>
  111. <div class={styles.gridDes}>{item.photoCount}张</div>
  112. </div>
  113. ))}
  114. </div>
  115. </List>
  116. )}
  117. {!data.loading && !data.list.length && <OEmpty btnStatus={false} tips="暂无相册" />}
  118. </div>
  119. )
  120. }
  121. })