index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <view class="facility-facilityDetail">
  3. <wd-swiper :autoplay="false" :list="state.photoList" :indicator="{ type: 'fraction' }"
  4. indicatorPosition="bottom-right" @click="onClickSwiper(state.photoList)" />
  5. <view class="facility-facilityDetail-content">
  6. <view class="facility-facilityDetail-content-title">
  7. {{ state.info.title }}
  8. </view>
  9. <view class="facility-facilityDetail-content-text">
  10. {{ state.info.description }}
  11. </view>
  12. </view>
  13. </view>
  14. </template>
  15. <script lang="ts" setup>
  16. import { reactive } from 'vue';
  17. import { onLoad } from '@dcloudio/uni-app';
  18. import { apis } from '@/apis';
  19. interface State {
  20. id: string,
  21. photoList: string[],
  22. info: {
  23. title: string,// 标题
  24. description: string,// 描述
  25. },
  26. };
  27. const state = reactive<State>({
  28. id: '',
  29. photoList: [],
  30. info: {
  31. title: '',
  32. description: '',
  33. },
  34. });
  35. const api = {
  36. // 获取设施详情
  37. fetchFacilityDetail: async () => {
  38. try {
  39. const res = await apis.fetchFacilityDetail(state.id);
  40. const data = res.data;
  41. const photoList = data.sysimg.map((item: any) => item.url);
  42. state.photoList = photoList;
  43. state.info = {
  44. title: data.facilitiesTitle,
  45. description: data.facilitiesDesc,
  46. }
  47. } catch (error: any) {
  48. uni.showToast({
  49. icon: 'none',
  50. mask: true,
  51. duration: 2000,
  52. title: error.msg,
  53. });
  54. }
  55. },
  56. }
  57. const init = async () => {
  58. uni.showLoading({
  59. title: '加载中',
  60. });
  61. // 获取设施详情
  62. await api.fetchFacilityDetail();
  63. uni.hideLoading();
  64. };
  65. onLoad((options) => {
  66. const data = options as { id: string };
  67. state.id = data.id;
  68. init();
  69. });
  70. // 点击轮播
  71. const onClickSwiper = (list: string[]) => {
  72. uni.previewImage({
  73. urls: list,
  74. });
  75. }
  76. </script>
  77. <style lang="scss" scoped>
  78. .facility-facilityDetail {
  79. :deep(.wd-swiper__track) {
  80. border-radius: 0;
  81. }
  82. &-content {
  83. padding: 0 20rpx;
  84. background: #FFFFFF;
  85. &-title {
  86. font-weight: bold;
  87. margin: 20rpx 0;
  88. }
  89. &-text {
  90. color: #101010;
  91. }
  92. }
  93. }
  94. </style>