content.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <template>
  2. <SimplePageContentLoader :loader="newsLoader">
  3. <div class="d-flex flex-column details">
  4. <div class="nav-back-title">
  5. <img :src="BackArrow" @click="back" />
  6. <h2>{{ newsLoader.content.value?.title }}</h2>
  7. </div>
  8. <SimpleRichHtml
  9. class="news-content mt-3"
  10. :contents="[
  11. newsLoader.content.value?.intro ?? '',
  12. newsLoader.content.value?.value ?? '',
  13. newsLoader.content.value?.content ?? '',
  14. ]"
  15. />
  16. </div>
  17. </SimplePageContentLoader>
  18. </template>
  19. <script setup lang="ts">
  20. import { watch } from 'vue';
  21. import { useRoute, useRouter } from 'vue-router';
  22. import { useSimpleDataLoader } from '@/composeable/SimpleDataLoader';
  23. import { useLoadQuerys } from '@/composeable/PageQuerys';
  24. import BackArrow from '@/assets/images/BackArrow.png';
  25. import CommonContent, { GetContentDetailItem } from '@/api/CommonContent';
  26. import SimplePageContentLoader from '@/components/content/SimplePageContentLoader.vue';
  27. import SimpleRichHtml from '@/components/display/SimpleRichHtml.vue';
  28. const router = useRouter();
  29. const route = useRoute();
  30. function back() {
  31. router.back();
  32. }
  33. watch(() => route.query.id, (newVal) => {
  34. newsLoader.loadData(undefined);
  35. });
  36. const newsLoader = useSimpleDataLoader<GetContentDetailItem, { id: number, modelId: number }>(async (p) => {
  37. if (!p)
  38. throw new Error('参数错误');
  39. return (await CommonContent.getContentDetail<GetContentDetailItem>(p.id, p.modelId ? p.modelId : undefined));
  40. }, false)
  41. useLoadQuerys({
  42. id: 0,
  43. modelId: 0,
  44. }, async (p) => {
  45. if (p.id <= 0) {
  46. router.push({ name: 'NotFound' });
  47. return;
  48. }
  49. newsLoader.loadData(p);
  50. })
  51. </script>
  52. <style>
  53. </style>