feat(creatures): première version du tableau
This commit is contained in:
parent
2cffd0476a
commit
888a22395f
4 changed files with 117 additions and 0 deletions
49
src/components/tableaux/TableCreature.vue
Normal file
49
src/components/tableaux/TableCreature.vue
Normal file
|
@ -0,0 +1,49 @@
|
|||
<script lang="ts" setup>
|
||||
import { computed, defineProps } from "vue";
|
||||
import { useCreaturesStore } from "@/stores/creatures";
|
||||
import { toURI } from "@/utils/urls";
|
||||
|
||||
const store = useCreaturesStore();
|
||||
|
||||
const props = defineProps<{
|
||||
group: string;
|
||||
}>();
|
||||
|
||||
const creatures = computed(() => {
|
||||
return store.datas ?? [];
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<p>
|
||||
Il y a en tout {{ creatures?.length ?? 0 }} créatures dans cette catégories.
|
||||
</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
<th>Type</th>
|
||||
<th>Classe</th>
|
||||
<th>Carrure</th>
|
||||
<th>Niv. Min</th>
|
||||
<th>Niv. Max</th>
|
||||
<th>Voir</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(creature, index) in creatures" :key="index">
|
||||
<td>{{ creature.nom }}</td>
|
||||
<td>{{ creature.type }}</td>
|
||||
<td>{{ creature.classe }}</td>
|
||||
<td>{{ creature.carrure }}</td>
|
||||
<td>{{ creature.min }}</td>
|
||||
<td>{{ creature.max }}</td>
|
||||
<td>
|
||||
<router-link :to="`/creatures/${group}/${toURI(creature.nom)}`"
|
||||
>Voir</router-link
|
||||
>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</template>
|
33
src/stores/creatures.ts
Normal file
33
src/stores/creatures.ts
Normal file
|
@ -0,0 +1,33 @@
|
|||
import { ref } from "vue";
|
||||
import { defineStore } from "pinia";
|
||||
import type Creature from "@/types/Creature";
|
||||
import axios from "axios";
|
||||
|
||||
const FOLDER = "creatures";
|
||||
|
||||
export const useCreaturesStore = defineStore("creatures", () => {
|
||||
const current = ref("");
|
||||
const datas = ref([] as Creature[]);
|
||||
|
||||
function load(filepath: string) {
|
||||
if (filepath !== current.value) {
|
||||
axios.get(`/datas/${FOLDER}/${filepath}.json`).then((response) => {
|
||||
datas.value = response.data;
|
||||
current.value = filepath;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function reset() {
|
||||
datas.value = [];
|
||||
current.value = "";
|
||||
}
|
||||
|
||||
function get(name: string): Creature | undefined {
|
||||
return datas.value.filter((data: Creature) => {
|
||||
return data.nom === name;
|
||||
})[0];
|
||||
}
|
||||
|
||||
return { load, reset, get, current, datas };
|
||||
});
|
14
src/types/Creature.ts
Normal file
14
src/types/Creature.ts
Normal file
|
@ -0,0 +1,14 @@
|
|||
export default interface Creature {
|
||||
nom: string;
|
||||
classe: string;
|
||||
carrure: string;
|
||||
min: number;
|
||||
max: number;
|
||||
armes: string[];
|
||||
armures: string;
|
||||
pouvoirs: string[];
|
||||
elements: string[];
|
||||
type: string;
|
||||
replace: { level: number; nom: string; description: string }[];
|
||||
overrideStat: { stat: string; new: number }[];
|
||||
}
|
21
src/views/CreatureListView.vue
Normal file
21
src/views/CreatureListView.vue
Normal file
|
@ -0,0 +1,21 @@
|
|||
<script setup lang="ts">
|
||||
import { useCreaturesStore } from "@/stores/creatures";
|
||||
import { onMounted } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import MarkdownFile from "../components/MarkdownFile.vue";
|
||||
import TableCreature from "@/components/tableaux/TableCreature.vue";
|
||||
|
||||
const store = useCreaturesStore();
|
||||
const route = useRoute();
|
||||
|
||||
onMounted(() => {
|
||||
store.load(`${route.params.group}`);
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<main>
|
||||
<MarkdownFile :path="`pages/creatures/${$route.params.group}`" />
|
||||
<TableCreature :group="`${$route.params.group}`" />
|
||||
</main>
|
||||
</template>
|
Loading…
Reference in a new issue