| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <template>
- <div class="model-list">
- <div class="list-header">
- <div class="list-info">
- <img class="icon" :src="getIconModel(model_item.img_src)" alt="" />
- <div class="info-desc">
- <div class="name">{{ model_item.name }}</div>
- <div class="desc">{{ model_item.desc }}</div>
- </div>
- </div>
- <div class="list-tools">
- <a-space>
- <a-button @click="handlerAddModel">
- <template #icon>
- <icon-plus />
- </template>
- {{ $t('management.addModelBtn') }}
- </a-button>
- <a-button @click="showMoreModel(model_item)">
- {{ $t('management.showMoreModelBtn') }}
- <template v-if="model_item.show_more">
- <icon-down />
- </template>
- <template v-if="!model_item.show_more">
- <icon-up />
- </template>
- </a-button>
- <icon-delete class="delete-icon" @click="handlerDeleteModel" />
- </a-space>
- </div>
- </div>
- <transition name="expand-collapse" @before-enter="beforeEnter" @enter="enter" @leave="leave">
- <div v-if="model_item.show_more" class="list-collapse">
- <CollapseItem v-for="item in model_item.models" :key="item.id" :models="item" />
- </div>
- </transition>
- </div>
- </template>
- <script setup>
- import CollapseItem from './CollapseItem.vue';
- import { useCollapse } from './use-collapse';
- import { getIconModel } from '../common/icon-map';
- const props = defineProps({
- model_item: {
- request: true,
- type: Object
- }
- });
- const emit = defineEmits(['showMore']);
- const { beforeEnter, enter, leave } = useCollapse(500);
- const handlerAddModel = () => {};
- const handlerDeleteModel = () => {};
- const showMoreModel = (item) => {
- emit('showMore', item);
- };
- </script>
- <style scoped lang="css">
- .model-list {
- padding: 20px 30px;
- margin-top: 10px;
- background-color: var(--color-bg-2);
- }
- .list-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
- .list-info {
- display: flex;
- flex-direction: row;
- align-items: center;
- gap: 20px;
- .icon {
- width: 44px;
- }
- }
- .info-desc {
- display: flex;
- flex-direction: column;
- gap: 10px;
- }
- .name {
- font-size: 16px;
- font-weight: bold;
- }
- .desc {
- color: var(--color-text-3);
- }
- .delete-icon {
- font-size: 20px;
- color: rgb(var(--orange-5));
- cursor: pointer;
- }
- .list-collapse {
- padding: 20px 20px 0 20px;
- max-height: 0;
- }
- </style>
|