IndexNominum.vue 4.1 KB

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