index.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <FlexCol :gap="20" :padding="20">
  3. <SearchBar placeholder="输入关键词搜索" @search="goList(undefined, '知识库 · 全部', $event)" />
  4. <FlexCol :radius="15" overflow="hidden">
  5. <ImageSwiper
  6. :height="300"
  7. :images="[
  8. 'https://mncdn.wenlvti.net/app_static/xiangyuan/images/causel/B1.jpg',
  9. 'https://mncdn.wenlvti.net/app_static/xiangyuan/images/causel/B2.jpg',
  10. ]"
  11. />
  12. </FlexCol>
  13. <Box title="主题导览" icon="/static/images/home/icon-compass.png">
  14. <ProvideVar :vars="{
  15. GridItemIconSize: 70,
  16. GridItemBackgroundColor: 'transparent',
  17. GridItemPaddingHorizontal: 0,
  18. }">
  19. <Grid :borderGrid="false" :mainAxisCount="3">
  20. <GridItem title="全部" icon="/static/images/icons/icon-all.png" touchable @click="goList(undefined, '知识库 · 全部')" />
  21. <GridItem title="优秀案例" icon="/static/images/icons/icon-camera.png" touchable @click="goList(359, '知识库 · 优秀案例')" />
  22. <GridItem title="经验分享" icon="/static/images/icons/icon-rules.png" touchable @click="goList(358, '知识库 · 经验分享')" />
  23. <GridItem title="常见问题" icon="/static/images/icons/icon-mark.png" touchable @click="goList(357, '知识库 · 常见问题')" />
  24. <GridItem title="挖掘技巧" icon="/static/images/icons/icon-pac.png" touchable @click="goList(356, '知识库 · 挖掘技巧')" />
  25. <GridItem title="认知基础" icon="/static/images/icons/icon-route.png" touchable @click="goList(355, '知识库 · 认知基础')" />
  26. </Grid>
  27. </ProvideVar>
  28. </Box>
  29. <Box title="最新" icon="/static/images/home/icon-shining.png" showMore @moreClicked="goList(undefined, '知识库 · 全部')">
  30. <SimplePageContentLoader :loader="discoverLoader">
  31. <FlexCol :gap="20">
  32. <Touchable
  33. v-for="(item, i) in discoverLoader.content.value"
  34. :key="i"
  35. justify="space-between"
  36. align="center"
  37. direction="row"
  38. @click="goDetail(item)"
  39. >
  40. <FlexCol flex="1" :gap="10">
  41. <Text :text="item.title" fontConfig="h5" />
  42. <Text :text="item.desc" fontConfig="subText" />
  43. <FlexRow :gap="10">
  44. <Tag v-for="tag in item.keywords" :key="tag" :text="tag" size="small" type="primary" scheme="light" />
  45. </FlexRow>
  46. </FlexCol>
  47. <Width :width="25" />
  48. <Image
  49. :src="item.thumbnail || item.image"
  50. :width="120"
  51. :height="120"
  52. :radius="15"
  53. mode="aspectFill"
  54. />
  55. </Touchable>
  56. </FlexCol>
  57. </SimplePageContentLoader>
  58. </Box>
  59. <Loadmore status="nomore" />
  60. <Height :height="150" />
  61. </FlexCol>
  62. </template>
  63. <script setup lang="ts">
  64. import CommonContent, { GetContentListItem, GetContentListParams } from '@/api/CommonContent';
  65. import Box from '@/common/components/parts/Box.vue';
  66. import ImageSwiper from '@/common/components/parts/ImageSwiper.vue';
  67. import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
  68. import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
  69. import Image from '@/components/basic/Image.vue';
  70. import Text from '@/components/basic/Text.vue';
  71. import Loadmore from '@/components/display/loading/Loadmore.vue';
  72. import Tag from '@/components/display/Tag.vue';
  73. import Touchable from '@/components/feedback/Touchable.vue';
  74. import SearchBar from '@/components/form/SearchBar.vue';
  75. import FlexCol from '@/components/layout/FlexCol.vue';
  76. import FlexRow from '@/components/layout/FlexRow.vue';
  77. import Grid from '@/components/layout/grid/Grid.vue';
  78. import GridItem from '@/components/layout/grid/GridItem.vue';
  79. import Height from '@/components/layout/space/Height.vue';
  80. import Width from '@/components/layout/space/Width.vue';
  81. import ProvideVar from '@/components/theme/ProvideVar.vue';
  82. import { navTo } from '@/components/utils/PageAction';
  83. const discoverLoader = useSimpleDataLoader(async () => {
  84. return (await CommonContent.getContentList(new GetContentListParams()
  85. .setModelId(18)
  86. .setMainBodyColumnId(354)
  87. , 1, 30)).list
  88. });
  89. function goDetail(item: GetContentListItem) {
  90. navTo('/pages/article/details', {
  91. modelId: item.modelId,
  92. mainBodyColumnId: item.mainBodyColumnId,
  93. id: item.id,
  94. });
  95. }
  96. function goList(mainBodyColumnId: number|undefined, title: string, search?: string) {
  97. navTo('/pages/article/common/list', {
  98. modelId: 18,
  99. mainBodyColumnId,
  100. title,
  101. search: search || '',
  102. });
  103. }
  104. </script>