EvenementDataTable.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <template>
  2. <table>
  3. <thead>
  4. <tr>
  5. <th>Nom</th>
  6. <th>Modifié le</th>
  7. <th>Par</th>
  8. <th>Charger</th>
  9. </tr>
  10. </thead>
  11. <tbody>
  12. <tr v-for="version in versions" :key="version.id">
  13. <td>{{ version.name }}</td>
  14. <td>{{ formatDate(version.lastModified) }}</td>
  15. <td>{{ version.lastEditor.username }}</td>
  16. <td>
  17. <button class="btn icon small primary" @click="loadPreviousVersion(version.id)">
  18. <i class="material-icons">launch</i>
  19. </button>
  20. </td>
  21. </tr>
  22. </tbody>
  23. </table>
  24. </template>
  25. <script lang="ts">
  26. import EvenementVersion from "@/models/EvenementVersion";
  27. import dayjs from "dayjs";
  28. import { defineComponent, PropType } from "vue";
  29. export default defineComponent({
  30. emits: ["loadVersion"],
  31. props: {
  32. versions: { type: Array as PropType<Array<EvenementVersion>>, default: () => [] },
  33. },
  34. methods: {
  35. formatDate(str: string): string {
  36. return dayjs(str).format("DD MMM YYYY à HH[h]mm");
  37. },
  38. loadPreviousVersion(id: number) {
  39. const version = this.versions.find((o) => o.id == id);
  40. if (version) {
  41. this.$emit("loadVersion", version);
  42. }
  43. },
  44. },
  45. });
  46. </script>
  47. <style scoped>
  48. table {
  49. border-collapse: collapse;
  50. }
  51. table > thead > tr > th {
  52. padding: 8px;
  53. width: 190px;
  54. text-overflow: ellipsis;
  55. }
  56. table > thead > tr > th:last-child {
  57. width: 50px;
  58. }
  59. table > tbody > tr > td {
  60. text-align: center;
  61. padding: 8px;
  62. }
  63. table > thead > tr,
  64. table > tbody > tr {
  65. border-bottom: solid 1px var(--color-neutral-800);
  66. }
  67. table > tbody > tr:hover {
  68. background: var(--color-neutral-800);
  69. }
  70. </style>