217 lines
4.9 KiB
Vue
Raw Normal View History

2021-12-19 19:19:46 +08:00
<template>
<div class="go-items-list-card">
<n-card hoverable size="small">
<div class="list-content">
<!-- 顶部按钮 -->
<n-space class="list-content-top">
2021-12-20 17:38:44 +08:00
<AppleControlBtn
:hidden="['remove']"
@close="deleteHanlde"
@resize="resizeHandle"
/>
2021-12-19 19:19:46 +08:00
</n-space>
<!-- 中间 -->
<div class="list-content-img">
<n-image
object-fit="contain"
height="200"
2021-12-20 13:36:54 +08:00
preview-disabled
2021-12-20 18:06:08 +08:00
:src="
requireUrl('../assets/images/project', 'moke-20211219181327.png')
"
2021-12-20 13:36:54 +08:00
:alt="cardData.title"
2021-12-20 18:06:08 +08:00
:fallback-src="requireFallbackImg()"
2021-12-19 19:19:46 +08:00
/>
</div>
</div>
<template #action>
2021-12-20 13:36:54 +08:00
<n-space class="list-footer" justify="space-between">
2021-12-19 19:19:46 +08:00
<n-text>
2021-12-20 13:36:54 +08:00
{{ cardData.title || '' }}
2021-12-19 19:19:46 +08:00
</n-text>
<!-- 工具 -->
<n-space>
<n-text>
2021-12-20 13:36:54 +08:00
<n-badge
class="animation-twinkle"
dot
:color="cardData.release ? '#34c749' : '#fcbc40'"
/>
{{ cardData.release ? '已发布' : '未发布' }}
2021-12-19 19:19:46 +08:00
</n-text>
<template v-for="item in fnBtnList" :key="item.key">
<template v-if="item.key === 'select'">
<n-dropdown
trigger="hover"
2021-12-20 13:36:54 +08:00
placement="bottom"
2021-12-19 19:19:46 +08:00
:options="selectOptions"
:show-arrow="true"
@select="handleSelect"
>
<n-button size="small">
<template #icon>
<component :is="item.icon" />
</template>
</n-button>
</n-dropdown>
</template>
2021-12-20 13:36:54 +08:00
<n-tooltip v-else placement="bottom" trigger="hover">
<template #trigger>
<n-button size="small">
<template #icon>
<component :is="item.icon" />
</template>
</n-button>
2021-12-19 19:19:46 +08:00
</template>
2021-12-20 13:36:54 +08:00
<span> {{ item.label }}</span>
</n-tooltip>
2021-12-19 19:19:46 +08:00
</template>
</n-space>
<!-- end -->
</n-space>
</template>
</n-card>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
2021-12-20 18:06:08 +08:00
import { renderIcon, goDialog, requireUrl, requireFallbackImg } from '@/utils'
2021-12-19 19:19:46 +08:00
import { icon } from '@/plugins'
import { AppleControlBtn } from '@/components/AppleControlBtn'
import { useMessage, useDialog } from 'naive-ui'
2021-12-20 17:38:44 +08:00
import { DialogEnum } from '@/enums/pluginEnum'
2021-12-20 18:06:08 +08:00
2021-12-19 19:19:46 +08:00
const {
EllipsisHorizontalCircleSharpIcon,
CopyIcon,
TrashIcon,
PencilIcon,
ApertureSharpIcon,
2021-12-20 13:36:54 +08:00
DownloadIcon,
HammerIcon,
SendIcon
2021-12-19 19:19:46 +08:00
} = icon.ionicons5
const dialog = useDialog()
const message = useMessage()
2021-12-20 13:36:54 +08:00
const emit = defineEmits(['resize'])
const props = defineProps({
cardData: Object
2021-12-19 19:19:46 +08:00
})
const fnBtnList = [
2021-12-20 13:36:54 +08:00
{
label: '编辑',
key: 'edit',
icon: renderIcon(HammerIcon)
},
2021-12-19 19:19:46 +08:00
{
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)
},
2021-12-20 13:36:54 +08:00
{
type: 'divider',
key: 'd1'
},
{
label: props.cardData?.release ? '取消发布' : '发布',
key: 'send',
icon: renderIcon(SendIcon)
},
2021-12-19 19:19:46 +08:00
{
label: '下载',
key: 'download',
icon: renderIcon(DownloadIcon)
},
{
type: 'divider',
2021-12-20 13:36:54 +08:00
key: 'd2'
2021-12-19 19:19:46 +08:00
},
{
label: '删除',
key: 'delete',
icon: renderIcon(TrashIcon)
}
]
const handleSelect = (key: string) => {
console.log(key)
}
2021-12-20 13:36:54 +08:00
// 删除处理
2021-12-19 19:19:46 +08:00
const deleteHanlde = () => {
2021-12-20 17:38:44 +08:00
goDialog({
type: DialogEnum.delete,
promise: true,
onPositiveCallback: () =>
new Promise(res => setTimeout(() => res(1), 1000)),
promiseResCallback: (e: any) => {
window.$message.success('删除成功')
2021-12-19 19:19:46 +08:00
}
})
}
2021-12-20 13:36:54 +08:00
// 放大处理
const resizeHandle = () => {
emit('resize', props.cardData)
}
2021-12-19 19:19:46 +08:00
</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;
2021-12-20 13:36:54 +08:00
top: 10px;
2021-12-19 19:19:46 +08:00
left: 10px;
height: 22px;
}
&-img {
height: $contentHeight;
@extend .go-flex-center;
@extend .go-border-radius;
@include deep() {
img {
@extend .go-border-radius;
}
}
}
}
2021-12-20 13:36:54 +08:00
.list-footer {
line-height: 30px;
}
2021-12-19 19:19:46 +08:00
}
</style>