PropsEditorTree.vue 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <div class="props-editor-tree">
  3. <a-form :labelCol="{ span: 6 }" size="small" class="props-form">
  4. <a-form-item label="页面 key">
  5. <a-input v-model:value="props.page.name" />
  6. </a-form-item>
  7. <a-form-item label="页面标题">
  8. <a-input v-model:value="props.page.title" />
  9. </a-form-item>
  10. </a-form>
  11. <a-divider />
  12. <div class="content-props-editor">
  13. <HomePropsEditor
  14. v-if="contentType === 'Home'"
  15. :props="(props.page?.content?.props as IHomeCommonCategoryHomeDefine['props'])"
  16. />
  17. <CommonListPropsEditor
  18. v-else-if="contentType === 'CommonList'"
  19. :props="(props.page?.content?.props as IHomeCommonCategoryListDefine['props'])"
  20. />
  21. <DetailPropsEditor
  22. v-else-if="contentType === 'Details'"
  23. :props="(props.page?.content?.props as IHomeCommonCategoryDetailDefine['props'])"
  24. :test-detail-id="testDetailId"
  25. @update:testDetailId="emit('update:testDetailId', $event)"
  26. />
  27. <div v-else class="unknown-type">未知模板类型: {{ contentType }}</div>
  28. </div>
  29. </div>
  30. </template>
  31. <script setup lang="ts">
  32. import { computed } from 'vue';
  33. import type {
  34. IHomeCommonCategoryDefine,
  35. IHomeCommonCategoryDetailDefine,
  36. IHomeCommonCategoryHomeDefine,
  37. IHomeCommonCategoryListDefine,
  38. } from '../../CommonCategoryDefine';
  39. import HomePropsEditor from '../editors/HomePropsEditor.vue';
  40. import CommonListPropsEditor from '../editors/CommonListPropsEditor.vue';
  41. import DetailPropsEditor from '../editors/DetailPropsEditor.vue';
  42. const props = defineProps<{
  43. page: IHomeCommonCategoryDefine['page'][0];
  44. testDetailId: number;
  45. }>();
  46. const emit = defineEmits<{
  47. (e: 'update:page', page: IHomeCommonCategoryDefine['page'][0]): void;
  48. (e: 'update:testDetailId', value: number): void;
  49. }>();
  50. const contentType = computed(() => props.page?.content?.type);
  51. </script>
  52. <style>
  53. .props-editor-tree {
  54. flex: 1;
  55. overflow: auto;
  56. padding: 8px;
  57. }
  58. .props-editor-tree .ant-form-item{
  59. margin-bottom: 14px !important;
  60. }
  61. .props-form {
  62. margin-bottom: 0;
  63. }
  64. .content-props-editor {
  65. font-size: 12px;
  66. }
  67. .unknown-type {
  68. color: #999;
  69. padding: 8px 0;
  70. }
  71. </style>