CommonCategoryList.vue 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template>
  2. <FlexCol>
  3. <FlexCol v-if="errorMessage" :padding="30" :gap="30" center height="100%">
  4. <Result status="error" :description="errorMessage" />
  5. <Button type="primary" @click="loadPageConfig">重新加载</Button>
  6. </FlexCol>
  7. <CommonCategoryListBlock
  8. v-else-if="currentCommonCategoryDefine && currentCommonCategoryContentDefine"
  9. :currentCommonCategoryDefine="currentCommonCategoryDefine"
  10. :currentCommonCategoryContentDefine="currentCommonCategoryContentDefine"
  11. :pageStartTab="pageStartTab"
  12. :pageQuerys="pageQuerys"
  13. @error="errorMessage = $event"
  14. />
  15. <LoadingPage v-else />
  16. </FlexCol>
  17. </template>
  18. <script setup lang="ts">
  19. import { onMounted, ref, watch } from 'vue';
  20. import { injectCommonCategory } from './CommonCategoryGlobalLoader';
  21. import { type IHomeCommonCategoryDefine, type IHomeCommonCategoryListDefine } from './CommonCategoryDefine';
  22. import Result from '@/components/feedback/Result.vue';
  23. import FlexCol from '@/components/layout/FlexCol.vue';
  24. import LoadingPage from '@/components/display/loading/LoadingPage.vue';
  25. import Button from '@/components/basic/Button.vue';
  26. import CommonCategoryListBlock from './CommonCategoryListBlock.vue';
  27. import { getIsDevtoolsPlatform } from '@/common/utils/MpVersions';
  28. import { waitTimeOut } from '@imengyu/imengyu-utils';
  29. /**
  30. * 动态通用内容 - 通用列表页
  31. */
  32. const errorMessage = ref('');
  33. const currentCommonCategoryDefine = ref<IHomeCommonCategoryDefine['page'][0]>();
  34. const currentCommonCategoryContentDefine = ref<IHomeCommonCategoryListDefine>();
  35. const commonCategory = injectCommonCategory();
  36. const props = defineProps({
  37. pageConfigName: {
  38. type: String,
  39. default: '',
  40. },
  41. pageStartTab: {
  42. type: Number,
  43. default: 0,
  44. },
  45. pageQuerys: {
  46. type: Object as () => Record<string, string|number|number[]|undefined>,
  47. default: () => ({}),
  48. },
  49. });
  50. async function loadPageConfig() {
  51. if (!props.pageConfigName) {
  52. errorMessage.value = '配置有误';
  53. return;
  54. }
  55. currentCommonCategoryDefine.value = commonCategory.value.page.find((item) => item.name === props.pageConfigName);
  56. if (!currentCommonCategoryDefine.value) {
  57. await waitTimeOut(1000);
  58. currentCommonCategoryDefine.value = commonCategory.value.page.find((item) => item.name === props.pageConfigName);
  59. }
  60. if (!currentCommonCategoryDefine.value) {
  61. errorMessage.value = '未找到指定的分类配置:' + props.pageConfigName;
  62. return;
  63. }
  64. if (currentCommonCategoryDefine.value.content.type !== 'CommonList') {
  65. errorMessage.value = '分类配置:' + props.pageConfigName + ' 不是列表类型';
  66. return;
  67. }
  68. currentCommonCategoryContentDefine.value =
  69. currentCommonCategoryDefine.value.content as IHomeCommonCategoryListDefine;
  70. uni.setNavigationBarTitle({
  71. title: currentCommonCategoryDefine.value?.title || '',
  72. })
  73. }
  74. watch(() => props.pageConfigName, loadPageConfig);
  75. onMounted(loadPageConfig);
  76. </script>