RainPage.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <div>
  3. <div v-if="load" class="center">
  4. <loader-item/>
  5. </div>
  6. <div v-if="info">
  7. <div class="row">
  8. <div class="col s12">
  9. <h2>Jours de pluie &agrave; {{city}}</h2>
  10. </div>
  11. </div>
  12. <div v-if="info.length">
  13. <div class="row">
  14. <display-card v-for="i in info" :key="i.date" :icon="i.icon" :day="i.name" :date="i.date" :condition="i.general_forecast" :max="i.temparature_max" :min="i.temparature_min"/>
  15. </div>
  16. </div>
  17. <div v-else>
  18. <info-message message="Aucun jour de pluie prévu"/>
  19. </div>
  20. </div>
  21. <div v-if="messageInfo">
  22. <info-message :message="messageInfo"/>
  23. </div>
  24. <div v-if="messageError">
  25. <error-message :message="messageError"/>
  26. </div>
  27. </div>
  28. </template>
  29. <script>
  30. import Vue from 'vue'
  31. import VueResource from 'vue-resource'
  32. import ErrorMessage from '@/components/message/ErrorMessage.vue'
  33. import InfoMessage from '@/components/message/InfoMessage.vue'
  34. import DisplayCard from '@/components/display/ForecastCard.vue'
  35. import LoaderItem from '@/components/loader/JellyLoader.vue'
  36. Vue.use(VueResource)
  37. export default{
  38. data () {
  39. return {
  40. info: null,
  41. city: null,
  42. load: false,
  43. messageError: null,
  44. messageInfo: null
  45. }
  46. },
  47. props: {
  48. ville: String
  49. },
  50. http: {
  51. root: process.env.ROOT_API
  52. },
  53. created () {
  54. if (this.ville != null && this.ville.trim() !== '') {
  55. callApi(this, this.ville.trim())
  56. }
  57. window.bus.$on('newSearch', (ville) => {
  58. callApi(this, ville)
  59. })
  60. },
  61. components: {
  62. ErrorMessage,
  63. InfoMessage,
  64. DisplayCard,
  65. LoaderItem
  66. }
  67. }
  68. function callApi (vue, ville) {
  69. if (ville.trim() === '') {
  70. return false
  71. }
  72. // Indique le chargement
  73. vue.messageError = null
  74. vue.info = null
  75. vue.load = true
  76. // Appel l'api pour recup les resultats
  77. vue.$resource('meteo/ville/' + ville + '/pluie').get().then(
  78. (result) => {
  79. // Si
  80. vue.load = false
  81. if (result.body.code === 200) {
  82. vue.city = ville.charAt(0).toUpperCase() + ville.substring(1).toLowerCase()
  83. success(vue, result.body)
  84. } else {
  85. fail(vue, result.body)
  86. }
  87. }, (result) => {
  88. // Sinon
  89. // console.log('Error')
  90. vue.load = false
  91. vue.messageError = 'Impossible de contacter le serveur'
  92. }
  93. )
  94. }
  95. function success (vue, data) {
  96. // console.log('Succes')
  97. vue.info = data.resultat
  98. }
  99. function fail (vue, data) {
  100. // console.log('Fail')
  101. vue.messageError = data.message
  102. }
  103. </script>
  104. <style>
  105. </style>