mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-05 19:20:12 +08:00
48 lines
1.4 KiB
Vue
48 lines
1.4 KiB
Vue
<script setup lang="ts">
|
|
import { useI18n } from 'vue-i18n'
|
|
import { computed } from 'vue'
|
|
import MarkdownText from '../MarkdownText.vue'
|
|
import { useSession } from '../../store/session'
|
|
|
|
const { t } = useI18n()
|
|
|
|
const sessionStore = useSession()
|
|
const tasks = computed(() => {
|
|
console.log('session', sessionStore.session)
|
|
return sessionStore.session?.tasks.map((task) => {
|
|
const prefix = task.completed ? '✓' : '➤'
|
|
const color = task.completed ? 'text-text-primary' : 'text-text'
|
|
return {
|
|
...task,
|
|
class: `${color} markdown-content`,
|
|
content: `${prefix} ${task.name}`,
|
|
}
|
|
})
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<div class="h-full w-full max-h-full">
|
|
<p id="topic" class="text-text font-black" v-if="sessionStore.quest">
|
|
{{ sessionStore.quest.title }}
|
|
</p>
|
|
<br />
|
|
<div>
|
|
<div v-if="sessionStore.quest" class="whitespace-pre-wrap">
|
|
<MarkdownText
|
|
class="text-text markdown-content"
|
|
:content="sessionStore.quest.instruction"
|
|
/>
|
|
<br />
|
|
<p id="tasks" class="text-text font-bold">{{ t('game.task') }}</p>
|
|
<ul v-if="sessionStore.session">
|
|
<li v-for="task in tasks" :key="task.id">
|
|
<MarkdownText :class="task.class" :content="task.content" />
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<p class="text-text" v-else>{{ t('game.loading') }}</p>
|
|
</div>
|
|
</div>
|
|
</template>
|