HomePropsEditor.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <template>
  2. <div class="home-props-editor">
  3. <a-form :labelCol="{ span: 6 }" size="small">
  4. <a-form-item label="首页标题">
  5. <a-input v-model:value="props.props.title" />
  6. </a-form-item>
  7. <a-form-item label="首页副标题">
  8. <a-input v-model:value="props.props.subTitle" />
  9. </a-form-item>
  10. <a-form-item label="Banner 图 URL">
  11. <IconEditor v-model="props.props.homeBanner" />
  12. </a-form-item>
  13. </a-form>
  14. <a-collapse v-model:activeKey="activeKeys" class="props-collapse">
  15. <a-collapse-panel key="homeButtons" header="首页按钮 (homeButtons)">
  16. <template #extra>
  17. <PlusOutlined @click="addHomeButton" />
  18. </template>
  19. <div v-for="(btn, i) in props.props.homeButtons" :key="i" class="nested-item">
  20. <a-form :labelCol="{ span: 6 }" size="small">
  21. <a-form-item label="标题">
  22. <a-input v-model:value="btn.title" />
  23. </a-form-item>
  24. <a-form-item label="按钮样式">
  25. <a-select v-model:value="btn.style">
  26. <a-select-option value="text">文本按钮</a-select-option>
  27. <a-select-option value="large-bg">大背景按钮</a-select-option>
  28. </a-select>
  29. </a-form-item>
  30. <a-form-item label="图标 URL">
  31. <IconEditor v-model="btn.icon" />
  32. </a-form-item>
  33. <a-form-item label="按钮尺寸%">
  34. <a-input-number v-model:value="btn.size" :min="1" style="width: 100%" />
  35. </a-form-item>
  36. <LinkPathEditor v-model="btn.link" />
  37. <a-popconfirm title="确定要删除这个按钮吗?" @confirm="removeHomeButton(i)">
  38. <a-button type="link" danger size="small">删除</a-button>
  39. </a-popconfirm>
  40. </a-form>
  41. </div>
  42. </a-collapse-panel>
  43. <a-collapse-panel key="categorys" header="首页栏目">
  44. <NestCategoryEditor v-model:categorys="props.props.categorys" />
  45. </a-collapse-panel>
  46. </a-collapse>
  47. </div>
  48. </template>
  49. <script setup lang="ts">
  50. import { ref } from 'vue';
  51. import { PlusOutlined } from '@ant-design/icons-vue';
  52. import type { IHomeCommonCategoryHomeDefine, IHomeCommonCategoryListTabNestCategoryItemDefine } from '../../CommonCategoryDefine';
  53. import LinkPathEditor from '../components/LinkPathEditor.vue';
  54. import IconEditor from '../components/IconEditor.vue';
  55. import DynamicDataEditor from '../components/DynamicDataEditor.vue';
  56. import NestCategoryEditor from '../subpart/NestCategoryEditor.vue';
  57. const props = defineProps<{
  58. props: IHomeCommonCategoryHomeDefine['props'];
  59. }>();
  60. const activeKeys = ref<string[]>(['homeButtons', 'categorys']);
  61. function addHomeButton(event: MouseEvent) {
  62. event.stopPropagation();
  63. props.props.homeButtons = props.props.homeButtons || [];
  64. props.props.homeButtons.push({ title: '新按钮', icon: '', style: 'text', link: ['', {}], size: 50 });
  65. }
  66. function removeHomeButton(i: number) {
  67. props.props.homeButtons.splice(i, 1);
  68. }
  69. function addCategory() {
  70. props.props.categorys = props.props.categorys || [];
  71. props.props.categorys.push({ text: '新分类', type: '', data: undefined } as unknown as IHomeCommonCategoryListTabNestCategoryItemDefine);
  72. }
  73. function removeCategory(i: number) {
  74. props.props.categorys.splice(i, 1);
  75. }
  76. </script>
  77. <style scoped>
  78. .home-props-editor {
  79. font-size: 12px;
  80. }
  81. .props-collapse {
  82. margin-top: 8px;
  83. }
  84. .nested-item {
  85. margin-bottom: 12px;
  86. padding: 8px;
  87. background: #fafafa;
  88. border-radius: 4px;
  89. }
  90. .category-item :deep(.ant-collapse) {
  91. border: none;
  92. background: transparent;
  93. }
  94. .category-item :deep(.ant-collapse-item) {
  95. border: none;
  96. }
  97. </style>