preview.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <FlexCol :padding="30" :gap="20">
  3. <ImageSwiper
  4. :images="imageList"
  5. radius="radius.md"
  6. round
  7. mode="widthFix"
  8. :width="690"
  9. />
  10. <FlexCol v-if="overviewLoader.content.value">
  11. <SubTitle :title="overviewLoader.content.value.villageName || querys.villageName" />
  12. <IntroBlock
  13. small
  14. :descItems="[
  15. {
  16. label: '村社类型',
  17. value: overviewLoader.content.value.villageTypeText ,
  18. },
  19. {
  20. label: '地址',
  21. value: overviewLoader.content.value.cityAddress?.join(' '),
  22. },
  23. ]"
  24. />
  25. <FlexCol :margin="[20, 0, 0, 0]">
  26. <Parse :content="(overviewLoader.content.value.overview as string)" />
  27. <Text v-if="!overviewLoader.content.value.overview" fontConfig="subText">暂无采编简内容</Text>
  28. </FlexCol>
  29. </FlexCol>
  30. <FlexCol :gap="20">
  31. <CollectModuleList
  32. :villageId="querys.villageId"
  33. :villageVolunteerId="querys.villageVolunteerId"
  34. :taskName="''"
  35. :taskTitle="''"
  36. :taskPid="0"
  37. isView
  38. />
  39. </FlexCol>
  40. <FlexCol :margin="[20, 0, 30, 0]">
  41. <SubTitle title="地理位置" />
  42. <FlexCol radius="radius.md" backgroundColor="white" :margin="[20, 0, 0, 0]">
  43. <map
  44. id="map"
  45. :latitude="center[1]"
  46. :longitude="center[0]"
  47. :markers="markers"
  48. :scale="15"
  49. :style="{
  50. width: '100%',
  51. height: '350rpx',
  52. }"
  53. />
  54. </FlexCol>
  55. </FlexCol>
  56. <XBarSpace />
  57. </FlexCol>
  58. </template>
  59. <script setup lang="ts">
  60. import { computed, ref } from 'vue';
  61. import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
  62. import { useSimpleDataLoader } from '@/components/composeabe/loader/SimpleDataLoader';
  63. import { useCollectStore } from '@/store/collect';
  64. import FlexCol from '@/components/layout/FlexCol.vue';
  65. import CollectModuleList from '../components/CollectModuleList.vue';
  66. import XBarSpace from '@/components/layout/space/XBarSpace.vue';
  67. import ImageSwiper from '@/common/components/parts/ImageSwiper.vue';
  68. import VillageInfoApi, { CommonInfoModel } from '@/api/inhert/VillageInfoApi';
  69. import SubTitle from '@/components/display/title/SubTitle.vue';
  70. import IntroBlock from '@/pages/article/common/IntroBlock.vue';
  71. import Parse from '@/components/display/parse/Parse.vue';
  72. import Text from '@/components/basic/Text.vue';
  73. import ImagesUrls from '@/common/config/ImagesUrls';
  74. const { querys } = useLoadQuerys({
  75. villageId: 0,
  76. villageName: '',
  77. villageVolunteerId: 0,
  78. });
  79. const { getCollectModuleId } = useCollectStore();
  80. const center = ref([118.15723, 24.48147]);
  81. const markers = ref<any>([]);
  82. const imageList = computed(() => {
  83. const content = overviewLoader.content.value;
  84. if (!content) return [];
  85. if (content.images && content.images.length > 0)
  86. return content.images;
  87. if (content.image)
  88. return [content.image];
  89. return ["https://mn.wenlvti.net/app_static/xiangan/banner_dig_1.jpg" ];
  90. });
  91. const overviewLoader = useSimpleDataLoader<CommonInfoModel>(async () => {
  92. const subType = 'overview';
  93. const collectModuleId = getCollectModuleId('overview');
  94. const list = await VillageInfoApi.getList(
  95. collectModuleId, subType, undefined, undefined,
  96. querys.value.villageId, querys.value.villageVolunteerId
  97. );
  98. if (list.length > 0) {
  99. const info = (await VillageInfoApi.getInfo(
  100. collectModuleId,
  101. subType,
  102. undefined,
  103. undefined,
  104. querys.value.villageId,
  105. querys.value.villageVolunteerId,
  106. undefined,
  107. list[0].id,
  108. )) as CommonInfoModel
  109. if (info.longitude && info.latitude) {
  110. center.value = [Number(info.longitude), Number(info.latitude)];
  111. } else {
  112. center.value = [118.11593, 24.467580];
  113. }
  114. markers.value = [
  115. {
  116. id: 1,
  117. latitude: center.value[1],
  118. longitude: center.value[0],
  119. iconPath: ImagesUrls.IconMarker,
  120. width: 40,
  121. height: 40,
  122. }
  123. ];
  124. return info;
  125. }
  126. return new CommonInfoModel();
  127. });
  128. </script>