IndexNominum.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <MainContentLayout id="index-nominum" class="index">
  3. <template v-slot:header>
  4. <h1>Personnes</h1>
  5. <span v-if="!items.length" class="loading">Loading ...</span>
  6. </template>
  7. <ul v-if="items.length" class="item-list">
  8. <li
  9. v-for="item in items"
  10. :key="item.url"
  11. :class="{ hidden: activeLetter && item.letter !== activeLetter }"
  12. >
  13. <NominumItem :item="item" />
  14. </li>
  15. </ul>
  16. <template v-slot:nav>
  17. <div v-if="items.length" class="abc">
  18. <ul>
  19. <li :class="{ inactive: activeLetter }">
  20. <span
  21. class="tout"
  22. @click.prevent="onClickLetter(null)"
  23. @keyup.enter="onClickLetter(null)"
  24. >tout</span>
  25. <span class="quantity">[{{ items.length }}]</span>
  26. </li>
  27. <li
  28. v-for="l in letters" :key="l.l"
  29. :class="{ inactive: activeLetter && l.l !== activeLetter }"
  30. >
  31. <span
  32. class="letter"
  33. @click.prevent="onClickLetter(l.l)"
  34. @keyup.enter="onClickLetter(l.l)"
  35. >{{ l.l }}</span>
  36. <span class="quantity">[{{ l.q }}]</span>
  37. </li>
  38. </ul>
  39. </div>
  40. </template>
  41. </MainContentLayout>
  42. </template>
  43. <script>
  44. import { REST } from 'api/rest-axios'
  45. import MainContentLayout from '../components/Layouts/MainContentLayout'
  46. import NominumItem from '../components/Content/NominumItem'
  47. export default {
  48. name: 'IndexNominum',
  49. metaInfo: {
  50. title: 'Index Nominum'
  51. },
  52. components: {
  53. NominumItem,
  54. MainContentLayout
  55. },
  56. data: () => ({
  57. items: [],
  58. letters: {},
  59. activeLetter: null
  60. }),
  61. beforeCreate () {
  62. // items/gdpLeMaire1685T01BodyFr01.003.016
  63. // texts/gdpSauval1724
  64. REST.get(`${window.apipath}/indexNominum`, {})
  65. .then(({ data }) => {
  66. console.log('index nominum REST: data', data)
  67. if (data.content.length) {
  68. this.items = data.content.sort((a, b) => {
  69. let Aletter = a.letter.toLowerCase()
  70. let Bletter = b.letter.toLowerCase()
  71. if (Aletter < Bletter) {
  72. return -1
  73. } else if (Aletter > Bletter) {
  74. return 1
  75. } else {
  76. return 0
  77. }
  78. })
  79. }
  80. for (let i = 0; i < this.items.length; i++) {
  81. // console.log(typeof this.items[i].letter)
  82. if (this.items[i].letter !== '') {
  83. let letter = this.items[i].letter.toLowerCase()
  84. console.log(letter)
  85. if (Object.keys(this.letters).indexOf(letter) === -1) {
  86. this.letters[letter] = {
  87. l: letter,
  88. q: 1
  89. }
  90. } else {
  91. this.letters[letter].q += 1
  92. }
  93. }
  94. }
  95. console.log(this.letters)
  96. this.letters = this.letters.sort((a, b) => {
  97. if (a.l < b.l) {
  98. return -1
  99. } else if (a.l > b.l) {
  100. return 1
  101. } else {
  102. return 0
  103. }
  104. })
  105. })
  106. .catch((error) => {
  107. console.warn('Issue with index nominum', error)
  108. Promise.reject(error)
  109. })
  110. },
  111. methods: {
  112. onClickLetter (l) {
  113. this.activeLetter = l
  114. // console.log('activeLetter', this.activeLetter)
  115. }
  116. }
  117. }
  118. </script>
  119. <style lang="scss" scoped>
  120. </style>