2021-12-22 15:31:20 +08:00

147 lines
3.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- mask-closable 暂时是失效的不知道为啥 -->
<n-modal
class="go-modal-box"
v-model:show="show"
@on-after-leave="closeHandle"
>
<n-card hoverable size="small">
<div class="list-content">
<!-- 标题 -->
<n-space class="list-content-top go-px-0" justify="center">
<n-space>
<n-text>
{{ cardData?.title || '' }}
</n-text>
</n-space>
</n-space>
<!-- 顶部按钮 -->
<n-space class="list-content-top">
<AppleControlBtn
:narrow="true"
:hidden="['close']"
@remove="closeHandle"
/>
</n-space>
<!-- 中间 -->
<div class="list-content-img">
<img
:src="
requireUrl('../assets/images/project', 'moke-20211219181327.png')
"
:alt="cardData?.title"
/>
</div>
</div>
<template #action>
<n-space class="list-footer" justify="space-between">
<n-text depth="3">
{{$t('project.last_edit')}}
<n-time :time="new Date()" format="yyyy-MM-dd hh:mm" />
</n-text>
<!-- 工具 -->
<n-space>
<n-text>
<n-badge
class="animation-twinkle"
dot
:color="cardData?.release ? '#34c749' : '#fcbc40'"
/>
{{ cardData?.release ? $t('project.release') : $t('project.unreleased') }}
</n-text>
<template v-for="item in fnBtnList" :key="item.key">
<n-tooltip placement="bottom" trigger="hover">
<template #trigger>
<n-button size="small">
<template #icon>
<component :is="item.icon" />
</template>
</n-button>
</template>
<span> {{ item.label }}</span>
</n-tooltip>
</template>
</n-space>
<!-- end -->
</n-space>
</template>
</n-card>
</n-modal>
</template>
<script setup lang="ts">
import { watchEffect, reactive } from 'vue'
import { renderIcon, requireUrl, requireFallbackImg } from '@/utils'
import { icon } from '@/plugins'
import { AppleControlBtn } from '@/components/AppleControlBtn'
const { HammerIcon } = icon.ionicons5
const emit = defineEmits(['close'])
const t = window['$t']
const props = defineProps({
show: Boolean,
cardData: Object
})
// 解决点击模态层不会触发 @on-after-leave 的问题
watchEffect(() => {
if (!props.show && props.cardData) {
closeHandle()
}
})
const fnBtnList = reactive([
{
label: t('global.r_edit'),
key: 'edit',
icon: renderIcon(HammerIcon)
}
])
// 关闭对话框
const closeHandle = () => {
emit('close')
}
</script>
<style lang="scss" scoped>
$padding: 30px;
$contentHeight: calc(80vh);
$contentWidth: calc(82vw);
@include go('modal-box') {
width: $contentWidth;
.list-content {
margin-top: 20px;
border-radius: $--border-radius-base;
overflow: hidden;
@include background-point('background-point');
@extend .go-point-bg;
&-top {
position: absolute;
top: 7px;
left: 0px;
padding-left: 10px;
height: 22px;
width: $contentWidth;
}
&-img {
@extend .go-flex-center;
img {
max-height: $contentHeight;
min-height: 200px;
max-width: 100%;
@extend .go-border-radius;
}
}
}
.list-footer {
line-height: 30px;
}
}
</style>