inhert.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <template>
  2. <FlexCol :padding="[0, 30]" backgroundColor="background.page">
  3. <Tabs
  4. v-model:currentIndex="activeIndex"
  5. :width="690"
  6. :tabs="[
  7. {
  8. text: '非物质文化遗产',
  9. },
  10. {
  11. text: '物质文化遗产',
  12. },
  13. ]"
  14. />
  15. <template v-if="activeIndex === 0">
  16. <HomeTitle title="非遗项目" showMore @clickMore="navTo('/pages/inhert/intangible/list')" />
  17. <!-- 非遗项目 -->
  18. <SimplePageContentLoader :loader="intangibleData" >
  19. <scroll-view scroll-x>
  20. <FlexRow>
  21. <Box2LineLargeImageUserShadow
  22. v-for="(item, i) in intangibleData.content.value"
  23. classNames="width-2-3 mr-2"
  24. titleColor="title-text"
  25. fixSize
  26. title1
  27. :key="i"
  28. :title="item.title"
  29. :desc="item.desc"
  30. :image="item.image"
  31. :tags="item.bottomTags"
  32. @click="navTo('/pages/inhert/intangible/details', { id: item.id })"
  33. />
  34. </FlexRow>
  35. </scroll-view>
  36. </SimplePageContentLoader>
  37. <!-- 非遗传承人 -->
  38. <HomeTitle title="非遗传承人" showMore @clickMore="navTo('/pages/inhert/inheritor/list')" />
  39. <SimplePageContentLoader :loader="inheritorData">
  40. <FlexCol>
  41. <Box2LineImageRightShadow
  42. v-for="(item, i) in inheritorData.content.value"
  43. titleColor="title-text"
  44. fixSize
  45. :key="i"
  46. :title="item.title"
  47. :desc="item.desc"
  48. :image="item.image"
  49. :tags="item.bottomTags"
  50. @click="navTo('/pages/inhert/inheritor/details', { id: item.id })"
  51. />
  52. </FlexCol>
  53. </SimplePageContentLoader>
  54. <!-- 保护单位 -->
  55. <HomeTitle title="保护单位" showMore @clickMore="navTo('/pages/inhert/unit/list')" />
  56. <SimplePageContentLoader :loader="unitData">
  57. <FlexCol>
  58. <Box2LineImageRightShadow
  59. v-for="(item, i) in unitData.content.value"
  60. titleColor="title-text"
  61. :border="false"
  62. fixSize
  63. :key="i"
  64. :title="item.title"
  65. :desc="item.desc"
  66. :showImage="false"
  67. :tags="item.bottomTags"
  68. />
  69. </FlexCol>
  70. </SimplePageContentLoader>
  71. <!-- 非遗传习所 -->
  72. <HomeTitle title="非遗传习所" showMore @clickMore="navCommonList({
  73. title: '非遗传习所',
  74. modelId: SeminarContent.modelId,
  75. mainBodyColumnId: SeminarContent.mainBodyColumnId,
  76. detailsPage: '/pages/inhert/seminar/details',
  77. })" />
  78. <SimplePageContentLoader :loader="seminarData">
  79. <FlexCol overflow="visible">
  80. <Box2LineImageRightShadow
  81. v-for="(item, i) in seminarData.content.value"
  82. titleColor="title-text"
  83. fixSize
  84. :key="i"
  85. :title="item.title"
  86. :desc="item.desc"
  87. :image="item.image"
  88. :tags="item.bottomTags"
  89. @click="navTo('/pages/inhert/seminar/details', { id: item.id })"
  90. />
  91. </FlexCol>
  92. </SimplePageContentLoader>
  93. <!-- 非遗活动 -->
  94. <HomeTitle title="非遗活动" showMore @clickMore="goActivityList" />
  95. <SimplePageContentLoader :loader="activityData">
  96. <FlexRow wrap align="stretch" justify="space-between" overflow="visible">
  97. <Box2LineLargeImageUserShadow
  98. v-for="(item, i) in activityData.content.value"
  99. titleColor="title-text"
  100. width="calc(50% - 10rpx)"
  101. fixSize
  102. :key="i"
  103. :title="item.title"
  104. :desc="item.desc"
  105. :image="item.image"
  106. @click="goActivityDetail(item)"
  107. />
  108. </FlexRow>
  109. </SimplePageContentLoader>
  110. </template>
  111. <template v-else-if="activeIndex === 1">
  112. <!-- 文物 -->
  113. <HomeTitle title="文物古迹" showMore @clickMore="navTo('/pages/inhert/artifact/list')" />
  114. <SimplePageContentLoader :loader="artifactData">
  115. <FlexRow wrap align="stretch" justify="space-between" overflow="visible">
  116. <Box2LineLargeImageUserShadow
  117. v-for="(item, i) in artifactData.content.value"
  118. width="calc(50% - 10rpx)"
  119. titleColor="title-text"
  120. fixSize
  121. :key="i"
  122. :title="item.title"
  123. :image="item.image"
  124. :tags="item.tags"
  125. title1
  126. @click="navTo('/pages/inhert/artifact/details', { id: item.id })"
  127. />
  128. </FlexRow>
  129. <Touchable direction="row" center :padding="10" :gap="20" @click="navTo('/pages/inhert/artifact/list')">
  130. <text>查看全部</text>
  131. <Icon name="arrow-right" />
  132. </Touchable>
  133. </SimplePageContentLoader>
  134. </template>
  135. <Footer text="到底了~" />
  136. </FlexCol>
  137. </template>
  138. <script setup lang="ts">
  139. import { ref } from 'vue';
  140. import { navTo } from '@/components/utils/PageAction';
  141. import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
  142. import { GetContentListParams } from '@/api/CommonContent';
  143. import { navCommonList, useHomeCommonCategoryBlock } from '../article/common/CommonContent';
  144. import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
  145. import FlexCol from '@/components/layout/FlexCol.vue';
  146. import HomeTitle from '../parts/HomeTitle.vue';
  147. import Box2LineLargeImageUserShadow from '../parts/Box2LineLargeImageUserShadow.vue';
  148. import Box2LineImageRightShadow from '../parts/Box2LineImageRightShadow.vue';
  149. import InheritorContent from '@/api/inheritor/InheritorContent';
  150. import ProjectsContent from '@/api/inheritor/ProjectsContent';
  151. import UnitContent from '@/api/inheritor/UnitContent';
  152. import SeminarContent from '@/api/inheritor/SeminarContent';
  153. import FlexRow from '@/components/layout/FlexRow.vue';
  154. import UnmoveableContent from '@/api/inheritor/UnmoveableContent';
  155. import Footer from '@/components/display/Footer.vue';
  156. import Tabs from '@/components/nav/Tabs.vue';
  157. import Touchable from '@/components/feedback/Touchable.vue';
  158. import Icon from '@/components/basic/Icon.vue';
  159. const activeIndex = ref(0);
  160. const intangibleData = useSimpleDataLoader(async () =>
  161. (await ProjectsContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
  162. id: p.id,
  163. title: p.title,
  164. desc: p.desc,
  165. image: p.thumbnail || p.image,
  166. bottomTags: [
  167. p.levelText,
  168. p.ichTypeText,
  169. p.batchText,
  170. p.regionText,
  171. ] as string[],
  172. }))
  173. );
  174. const inheritorData = useSimpleDataLoader(async () =>
  175. (await InheritorContent.getContentList(new GetContentListParams(), 2, 4)).list.map(p => ({
  176. id: p.id,
  177. title: p.title,
  178. desc: p.desc,
  179. image: p.thumbnail || p.image,
  180. titleBox: Boolean(p.deathBirth),
  181. bottomTags: [
  182. p.levelText,
  183. p.nation,
  184. p.ichName
  185. ] as string[],
  186. }))
  187. );
  188. const unitData = useSimpleDataLoader(async () =>
  189. (await UnitContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
  190. id: p.id,
  191. title: p.title,
  192. desc: '',
  193. image: p.thumbnail || p.image,
  194. bottomTags: [
  195. p.levelText,
  196. p.ichTypeText,
  197. p.batchText,
  198. p.regionText,
  199. ] as string[],
  200. }))
  201. );
  202. const seminarData = useSimpleDataLoader(async () =>
  203. (await SeminarContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
  204. id: p.id,
  205. title: p.title,
  206. desc: p.desc,
  207. image: p.thumbnail || p.image,
  208. bottomTags: [
  209. p.levelText,
  210. p.ichTypeText,
  211. p.batchText,
  212. p.regionText,
  213. ] as string[],
  214. }))
  215. );
  216. const artifactData = useSimpleDataLoader(async () =>
  217. (await UnmoveableContent.getContentList(new GetContentListParams(), 1, 16)).list.map(p => ({
  218. id: p.id,
  219. title: p.title,
  220. desc: '',
  221. image: p.thumbnail || p.image,
  222. likes: p.likes,
  223. tags: [p.levelText, p.district] as string[],
  224. comment: p.comments,
  225. }))
  226. );
  227. const {
  228. loader: activityData,
  229. goList: goActivityList,
  230. goDetail: goActivityDetail,
  231. } = useHomeCommonCategoryBlock({
  232. title: '非遗活动',
  233. mainBodyColumnId: 290,
  234. modelId: 18,
  235. itemType: 'article-common',
  236. detailsPage: '/pages/article/details',
  237. });
  238. </script>