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