| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <template>
- <div class="go-items-list-card">
- <n-card hoverable size="small">
- <div class="list-content">
- <!-- 顶部按钮 -->
- <n-space class="list-content-top">
- <AppleControlBtn @close="deleteHanlde" />
- </n-space>
- <!-- 中间 -->
- <div class="list-content-img">
- <n-image
- object-fit="contain"
- height="200"
- :src="requireUrl('.', '20211219181327.png')"
- :alt="CardData.title"
- />
- </div>
- </div>
- <template #action>
- <Skeleton v-if="loading" :loading="loading" text round size="small" />
- <n-space v-else justify="space-between">
- <n-text>
- {{ CardData.title || '' }}
- </n-text>
- <!-- 工具 -->
- <n-space>
- <n-text>
- <n-badge class="animation-twinkle" dot :color="CardData.release ? '#34c749' : '#fcbc40'" />
- {{ CardData.release ? '已发布' : '未发布' }}
- </n-text>
- <template v-for="item in fnBtnList" :key="item.key">
- <template v-if="item.key === 'select'">
- <n-dropdown
- trigger="hover"
- placement="bottom-start"
- :options="selectOptions"
- :show-arrow="true"
- @select="handleSelect"
- >
- <n-button size="small">
- <template #icon>
- <component :is="item.icon" />
- </template>
- </n-button>
- </n-dropdown>
- </template>
- <n-button v-else size="small">
- <template #icon>
- <component :is="item.icon" />
- </template>
- </n-button>
- </template>
- </n-space>
- <!-- end -->
- </n-space>
- </template>
- </n-card>
- </div>
- </template>
- <script setup lang="ts">
- import { ref } from 'vue'
- import { renderIcon, goDialog } from '@/utils/index'
- import { icon } from '@/plugins'
- import { AppleControlBtn } from '@/components/AppleControlBtn'
- import { useMessage, useDialog } from 'naive-ui'
- const {
- EllipsisHorizontalCircleSharpIcon,
- CopyIcon,
- TrashIcon,
- PencilIcon,
- ApertureSharpIcon,
- DownloadIcon
- } = icon.ionicons5
- const loading = ref<boolean>(true)
- const dialog = useDialog()
- const message = useMessage()
- defineProps({
- CardData: Object
- })
- const fnBtnList = [
- {
- lable: '更多',
- key: 'select',
- icon: renderIcon(EllipsisHorizontalCircleSharpIcon)
- }
- ]
- const selectOptions = [
- {
- label: '预览',
- key: 'preview',
- icon: renderIcon(ApertureSharpIcon)
- },
- {
- label: '复制',
- key: 'copy',
- icon: renderIcon(CopyIcon)
- },
- {
- label: '重命名',
- key: 'rename',
- icon: renderIcon(PencilIcon)
- },
- {
- label: '下载',
- key: 'download',
- icon: renderIcon(DownloadIcon)
- },
- {
- type: 'divider',
- key: 'd1'
- },
- {
- label: '删除',
- key: 'delete',
- icon: renderIcon(TrashIcon)
- }
- ]
- const handleSelect = (key: string) => {
- console.log(key)
- }
- const requireUrl = (path: string, name: string) => {
- return new URL(`${path}/${name}`, import.meta.url).href
- }
- const deleteHanlde = () => {
- goDialog(dialog.warning, {
- type: 'delete',
- onPositiveCallback: () => {
- message.success('确定')
- }
- })
- }
- setTimeout(() => {
- loading.value = false
- }, 1500)
- </script>
- <style lang="scss" scoped>
- $contentHeight: 200px;
- @include go('items-list-card') {
- position: relative;
- .list-content {
- margin-top: 20px;
- margin-bottom: 5px;
- border-radius: $--border-radius-base;
- @include background-point('background-point');
- @extend .go-point-bg;
- &-top {
- position: absolute;
- top: 5px;
- left: 10px;
- height: 22px;
- }
- &-img {
- height: $contentHeight;
- @extend .go-flex-center;
- @extend .go-border-radius;
- @include deep() {
- img {
- @extend .go-border-radius;
- }
- }
- }
- }
- }
- </style>
|