ModelList.vue 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div class="model-list">
  3. <div class="list-header">
  4. <div class="list-info">
  5. <img :src="model_item.img_src" alt="" />
  6. <div class="info-desc">
  7. <div class="name">{{ model_item.name }}</div>
  8. <div class="desc">{{ model_item.desc }}</div>
  9. </div>
  10. </div>
  11. <div class="list-tools">
  12. <a-space>
  13. <a-button @click="handlerAddModel">
  14. <template #icon>
  15. <icon-plus />
  16. </template>
  17. 添加模型
  18. </a-button>
  19. <a-button @click="showMoreModel(model_item)">
  20. 展示更多模型
  21. <template v-if="model_item.show_more">
  22. <icon-down />
  23. </template>
  24. <template v-if="!model_item.show_more">
  25. <icon-up />
  26. </template>
  27. </a-button>
  28. <icon-delete class="delete-icon" @click="handlerDeleteModel" />
  29. </a-space>
  30. </div>
  31. </div>
  32. <transition name="expand-collapse" @before-enter="beforeEnter" @enter="enter" @leave="leave">
  33. <div v-if="model_item.show_more" class="list-collapse">
  34. <CollapseItem v-for="item in model_item.models" :key="item.id" :models="item" />
  35. </div>
  36. </transition>
  37. </div>
  38. </template>
  39. <script setup>
  40. import CollapseItem from './CollapseItem.vue';
  41. import { useCollapse } from './use-collapse';
  42. const props = defineProps({
  43. model_item: {
  44. request: true,
  45. type: Object
  46. }
  47. });
  48. const emit = defineEmits(['showMore']);
  49. const { beforeEnter, enter, leave } = useCollapse(500);
  50. const handlerAddModel = () => {};
  51. const handlerDeleteModel = () => {};
  52. const showMoreModel = (item) => {
  53. emit('showMore', item);
  54. };
  55. </script>
  56. <style scoped lang="css">
  57. .model-list {
  58. padding: 20px 30px;
  59. margin-top: 10px;
  60. background-color: var(--color-bg-2);
  61. }
  62. .list-header {
  63. display: flex;
  64. justify-content: space-between;
  65. align-items: center;
  66. }
  67. .list-info {
  68. display: flex;
  69. flex-direction: row;
  70. align-items: center;
  71. gap: 20px;
  72. }
  73. .info-desc {
  74. display: flex;
  75. flex-direction: column;
  76. gap: 10px;
  77. }
  78. .name {
  79. font-size: 16px;
  80. font-weight: bold;
  81. }
  82. .desc {
  83. color: var(--color-neutral-4);
  84. }
  85. .delete-icon {
  86. font-size: 20px;
  87. color: rgb(var(--orange-5));
  88. cursor: pointer;
  89. }
  90. .list-collapse {
  91. padding: 20px;
  92. max-height: 0;
  93. }
  94. </style>