feat(components): create story info component for story page
This commit is contained in:
parent
61c57e4161
commit
e574ef0b43
180
components/story/view/storyInfo.vue
Normal file
180
components/story/view/storyInfo.vue
Normal file
@ -0,0 +1,180 @@
|
||||
<script lang="ts" setup>
|
||||
import { format } from "date-fns";
|
||||
import { type SingleChapterResult } from "~/lib/client/types/slightlyDifferentStory";
|
||||
import icon from "~/components/icon.vue";
|
||||
const story = inject<SingleChapterResult | null>("story");
|
||||
console.log("storyyy--info", story);
|
||||
const dark = inject<Ref<boolean>>("dark");
|
||||
</script>
|
||||
<template>
|
||||
<a-card style="width: 45%; float: left; margin-right: 1.2em" v-if="!!story">
|
||||
<a-descriptions
|
||||
:label-style="{ fontWeight: 'bold' }"
|
||||
:colon="false"
|
||||
:column="1"
|
||||
>
|
||||
<a-descriptions-item label="Author">
|
||||
<nuxt-link :to="`/user/${story?.author._id}`">{{
|
||||
story?.author.username
|
||||
}}</nuxt-link>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="Bands">
|
||||
<div
|
||||
class="wrapLong"
|
||||
v-for="(item, index) in story?.currentChapter.bands"
|
||||
>
|
||||
<span>
|
||||
<nuxt-link :to="`/band/${item._id}`">
|
||||
{{ item.name }}
|
||||
</nuxt-link>
|
||||
{{
|
||||
(index < story!.currentChapter?.bands.length - 1 && ", ") ||
|
||||
""
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="Genre(s)">
|
||||
<div
|
||||
class="wrapLong"
|
||||
v-for="(item, index) in story?.currentChapter.genre"
|
||||
>
|
||||
<span>
|
||||
{{ item }}
|
||||
{{
|
||||
(index < story!.currentChapter?.genre.length - 1 && ", ") ||
|
||||
""
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="Relationship(s)">
|
||||
<div
|
||||
class="wrapLong"
|
||||
v-for="(item, index) in story?.currentChapter.relationships"
|
||||
>
|
||||
<span>
|
||||
{{ item.join("/") }}
|
||||
{{
|
||||
(index < story!.currentChapter?.relationships.length - 1 &&
|
||||
", ") ||
|
||||
""
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="Character(s)">
|
||||
<div class="wrapLong">
|
||||
<span v-for="(item, index) in story?.currentChapter.characters">
|
||||
{{ item
|
||||
}}{{
|
||||
(index < story!.currentChapter?.characters.length - 1 &&
|
||||
", ") ||
|
||||
""
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="Rating">
|
||||
{{
|
||||
story?.currentChapter.nsfw ? "Adult" : "Suitable for most audiences"
|
||||
}}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="Summary">
|
||||
<div v-html="story?.currentChapter.summary"></div>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="Date posted">
|
||||
<a-tooltip>
|
||||
<template #title>
|
||||
{{
|
||||
format(
|
||||
Date.parse(story?.currentChapter.posted as unknown as string),
|
||||
"EEEE, LLL dd yyyy @ hh:mm:ss.SSS aa",
|
||||
)
|
||||
}}
|
||||
</template>
|
||||
{{
|
||||
format(
|
||||
Date.parse(story?.currentChapter.posted as unknown as string),
|
||||
"yyyy-MM-dd",
|
||||
)
|
||||
}}
|
||||
</a-tooltip>
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
<a-divider />
|
||||
<div class="stats">
|
||||
<span>
|
||||
<span class="staticon">
|
||||
<icon
|
||||
:istyle="!dark ? 'solid' : 'regular'"
|
||||
icolor="#ff2883"
|
||||
:size="12"
|
||||
name="heart"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
{{ story.favs }}
|
||||
</span>
|
||||
</span>
|
||||
<span>
|
||||
<span class="staticon">
|
||||
<icon
|
||||
:istyle="!dark ? 'solid' : 'regular'"
|
||||
icolor="#1787d7"
|
||||
:size="12"
|
||||
name="book-open"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
{{ story.views }}
|
||||
</span>
|
||||
</span>
|
||||
<span>
|
||||
<span class="staticon">
|
||||
<icon
|
||||
:istyle="!dark ? 'solid' : 'regular'"
|
||||
icolor="#51e07c"
|
||||
:size="12"
|
||||
name="thumbs-up"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
{{ story.recs }}
|
||||
</span>
|
||||
</span>
|
||||
<span>
|
||||
<span class="staticon">
|
||||
<icon
|
||||
:istyle="!dark ? 'solid' : 'regular'"
|
||||
icolor="#c2d420"
|
||||
:size="12"
|
||||
name="download"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
{{ story.downloads }}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</a-card>
|
||||
</template>
|
||||
<style scoped>
|
||||
.wrapLong {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.stats {
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
}
|
||||
|
||||
.stats > * {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.stats > * > * + * {
|
||||
margin-left: 0.8em;
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue
Block a user