You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

searchTimeshare.vue 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <template>
  2. <div class="container">
  3. <form
  4. id="mainForm"
  5. method="POST"
  6. action="/filter"
  7. accept-charset="UTF-8"
  8. enctype="multipart/form-data"
  9. >
  10. <div class="form-group text-left" v-if="!hideTop">
  11. <label>Province</label>
  12. <div class="input-group mb-3">
  13. <div class="input-group-prepend">
  14. <span class="input-group-text" style="color: #60CBEB">
  15. <b>P</b>
  16. </span>
  17. </div>
  18. <select class="form-control" name="region" id="region" v-model="filter.region">
  19. <option v-for="(item, i) in regions" :key="i" :value="item">{{item.regionName}}</option>
  20. </select>
  21. <div class="input-group-append" @click="clearFilter('region')">
  22. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  23. <b>X</b>
  24. </span>
  25. </div>
  26. </div>
  27. </div>
  28. <div class="form-group text-left" v-if="!hideTop">
  29. <label>Resort Name</label>
  30. <div class="input-group mb-3">
  31. <div class="input-group-prepend">
  32. <span class="input-group-text" style="color: #60CBEB">
  33. <b>RN</b>
  34. </span>
  35. </div>
  36. <select class="form-control" name="resort" id="resort" v-model="filter.resort">
  37. <option v-for="(item, i) in filteredResorts" :key="i" :value="item">{{item.resortName}}</option>
  38. </select>
  39. <div class="input-group-append" @click="clearFilter('resort')">
  40. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  41. <b>X</b>
  42. </span>
  43. </div>
  44. </div>
  45. </div>
  46. <div class="form-group text-left">
  47. <label>Bedrooms</label>
  48. <div class="input-group mb-3">
  49. <div class="input-group-prepend">
  50. <span class="input-group-text" style="color: #60CBEB">
  51. <b>Bed</b>
  52. </span>
  53. </div>
  54. <select class="form-control" name="bedrooms" v-model="filter.bedrooms">
  55. <option v-for="(item, i) in resortBedrooms" :key="i">{{item}}</option>
  56. </select>
  57. <div class="input-group-append" @click="clearFilter('bedrooms')">
  58. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  59. <b>X</b>
  60. </span>
  61. </div>
  62. </div>
  63. </div>
  64. <hr />
  65. <div class="form-group text-left">
  66. <label>Date</label>
  67. <div class="input-group mb-3">
  68. <div class="input-group-prepend">
  69. <span class="input-group-text" style="color: #60CBEB">
  70. <b>D</b>
  71. </span>
  72. </div>
  73. <input type="date" class="form-control" name="arrivaldate" v-model="filter.date" />
  74. <div class="input-group-append" @click="clearFilter('date')">
  75. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  76. <b>X</b>
  77. </span>
  78. </div>
  79. </div>
  80. </div>
  81. <hr />
  82. <div class="form-group">
  83. <div class="row">
  84. <div class="col-md-6 text-left">
  85. <label>Minimum Price</label>
  86. <div class="input-group mb-3">
  87. <div class="input-group-prepend">
  88. <span class="input-group-text" style="color: #60CBEB">
  89. <b>R</b>
  90. </span>
  91. </div>
  92. <input
  93. class="form-control"
  94. type="number"
  95. step="any"
  96. id="minPrice"
  97. name="minPrice"
  98. placeholder="Minimum Price"
  99. v-model="filter.minPrice"
  100. />
  101. <div class="input-group-append" @click="clearFilter('minPrice')">
  102. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  103. <b>X</b>
  104. </span>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="col-md-6 text-left">
  109. <label>Maximum Price</label>
  110. <div class="input-group mb-3">
  111. <div class="input-group-prepend">
  112. <span class="input-group-text" style="color: #60CBEB">
  113. <b>R</b>
  114. </span>
  115. </div>
  116. <input
  117. class="form-control"
  118. type="number"
  119. step="any"
  120. id="maxPrice"
  121. name="maxPrice"
  122. placeholder="Maximum Price"
  123. v-model="filter.maxPrice"
  124. />
  125. <div class="input-group-append" @click="clearFilter('maxPrice')">
  126. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  127. <b>X</b>
  128. </span>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. </form>
  135. </div>
  136. </template>
  137. <script>
  138. import { mapState, mapActions } from 'vuex';
  139. import _ from 'lodash';
  140. export default {
  141. props: {
  142. hideTop: undefined,
  143. },
  144. created() {
  145. this.initTimeshare();
  146. },
  147. computed: {
  148. ...mapState('timeshare', [
  149. 'resorts',
  150. 'regions',
  151. 'detailedRegion',
  152. 'resortBedrooms',
  153. 'maxSleep',
  154. ]),
  155. ...mapState('weekList', ['filter']),
  156. filteredResorts() {
  157. if (this.selectedRegion) {
  158. const list = _.find(
  159. this.detailedRegion,
  160. i => i.region.regionName === this.selectedRegion,
  161. ).children;
  162. return _.sortBy(list, r => r.resortName);
  163. }
  164. return this.resorts;
  165. },
  166. },
  167. methods: {
  168. ...mapActions('timeshare', ['initTimeshare']),
  169. ...mapActions('weekList', ['clearFilter']),
  170. },
  171. };
  172. </script>
  173. <style scoped>
  174. </style>