Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

propertySearchFields.vue 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <template>
  2. <div>
  3. <div class="container text-left">
  4. <div class="form-group">
  5. <label for="city">For:</label>
  6. <div class="input-group mb-3">
  7. <div class="input-group-prepend">
  8. <span class="input-group-text" style="color: #60CBEB">
  9. <b>F</b>
  10. </span>
  11. </div>
  12. <select class="form-control" v-model="propertySearch.salesType">
  13. <option value="Sale">Sale</option>
  14. <option value="Rent">Rent</option>
  15. </select>
  16. </div>
  17. </div>
  18. <div class="form-group" v-if="propertyType === 'Residential'">
  19. <label for="propertytype">Property Type</label>
  20. <div class="input-group mb-3">
  21. <div class="input-group-prepend">
  22. <span class="input-group-text" style="color: #60CBEB">
  23. <b>T</b>
  24. </span>
  25. </div>
  26. <select class="form-control" v-model="resType" @change="PropertyTypeSelected">
  27. <option>All</option>
  28. <option v-for="(propertyType, i) in propertyTypesRes" :key="i">
  29. {{
  30. propertyType.description
  31. }}
  32. </option>
  33. </select>
  34. <div class="input-group-append" @click="clearResType">
  35. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  36. <b>X</b>
  37. </span>
  38. </div>
  39. </div>
  40. </div>
  41. <div v-else class="form-group">
  42. <label for="propertytype">Property Type</label>
  43. <div class="input-group mb-3">
  44. <div class="input-group-prepend">
  45. <span class="input-group-text" style="color: #60CBEB">
  46. <b>T</b>
  47. </span>
  48. </div>
  49. <select class="form-control" v-model="comType" @change="PropertyTypeSelected">
  50. <option>All</option>
  51. <option v-for="(propertyType, i) in propertyTypesCom" :key="i">
  52. {{
  53. propertyType.description
  54. }}
  55. </option>
  56. </select>
  57. <div class="input-group-append" @click="clearComType">
  58. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  59. <b>X</b>
  60. </span>
  61. </div>
  62. </div>
  63. </div>
  64. <div class="form-group">
  65. <label for="province">Province</label>
  66. <div class="input-group mb-3">
  67. <div class="input-group-prepend">
  68. <span class="input-group-text" style="color: #60CBEB">
  69. <b>P</b>
  70. </span>
  71. </div>
  72. <select class="form-control" v-model="propertySearch.province">
  73. <option>All</option>
  74. <option v-for="(province, i) in provinces" :key="i">{{ province.description }}</option>
  75. </select>
  76. <div class="input-group-append" @click="clearFilter('province')">
  77. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  78. <b>X</b>
  79. </span>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="container text-left">
  85. <div class="form-group">
  86. <label for="city">City</label>
  87. <div class="input-group mb-3">
  88. <div class="input-group-prepend">
  89. <span class="input-group-text" style="color: #60CBEB">
  90. <b>C</b>
  91. </span>
  92. </div>
  93. <select class="form-control" v-model="propertySearch.city">
  94. <option>All</option>
  95. <option v-for="(city, i) in cities" :key="i">{{ city.description }}</option>
  96. </select>
  97. <div class="input-group-append" @click="clearFilter('city')">
  98. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  99. <b>X</b>
  100. </span>
  101. </div>
  102. </div>
  103. </div>
  104. </div>
  105. <div class="container text-left">
  106. <div class="form-group">
  107. <label for="suburb">Suburb</label>
  108. <div class="input-group mb-3">
  109. <div class="input-group-prepend">
  110. <span class="input-group-text" style="color: #60CBEB">
  111. <b>S</b>
  112. </span>
  113. </div>
  114. <select class="form-control" v-model="propertySearch.suburb">
  115. <option>All</option>
  116. <option v-for="(suburb, i) in suburbs" :key="i">{{ suburb.description }}</option>
  117. </select>
  118. <div class="input-group-append" @click="clearFilter('suburb')">
  119. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  120. <b>X</b>
  121. </span>
  122. </div>
  123. </div>
  124. </div>
  125. </div>
  126. <div class="container text-left">
  127. <div class="form-group">
  128. <div class="row">
  129. <div class="col-md-6 text-left">
  130. <label>Minimum Price</label>
  131. <div class="input-group mb-3">
  132. <div class="input-group-prepend">
  133. <span class="input-group-text" style="color: #60CBEB">
  134. <b>R</b>
  135. </span>
  136. </div>
  137. <input
  138. class="form-control"
  139. type="number"
  140. setp="any"
  141. v-model="propertySearch.minPrice"
  142. />
  143. <div class="input-group-append" @click="clearFilter('minPrice')">
  144. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  145. <b>X</b>
  146. </span>
  147. </div>
  148. </div>
  149. </div>
  150. <div class="col-md-6 text-left">
  151. <label>Maximum Price</label>
  152. <div class="input-group mb-3">
  153. <div class="input-group-prepend">
  154. <span class="input-group-text" style="color: #60CBEB">
  155. <b>R</b>
  156. </span>
  157. </div>
  158. <input
  159. class="form-control"
  160. type="number"
  161. setp="any"
  162. v-model="propertySearch.maxPrice"
  163. />
  164. <div class="input-group-append" @click="clearFilter('maxPrice')">
  165. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  166. <b>X</b>
  167. </span>
  168. </div>
  169. </div>
  170. </div>
  171. </div>
  172. </div>
  173. </div>
  174. </div>
  175. </template>
  176. <script>
  177. import { mapState, mapActions } from 'vuex';
  178. export default {
  179. props: {
  180. propertyType: String,
  181. },
  182. data() {
  183. return {
  184. resType: 'All',
  185. comType: 'All',
  186. };
  187. },
  188. mounted() {
  189. this.getProvince();
  190. this.getPropertyTypesRes();
  191. this.getPropertyTypesCom();
  192. setTimeout(() => {
  193. this.propertySearch.propertyUsageType = this.propertyType;
  194. }, 100);
  195. },
  196. computed: {
  197. ...mapState('searchTab', ['provinces', 'cities', 'suburbs']),
  198. ...mapState('property', ['propertyTypesRes', 'propertyTypesCom']),
  199. ...mapState('propertySearch', ['propertySearch']),
  200. },
  201. methods: {
  202. ...mapActions('searchTab', ['getProvince', 'getCities', 'getSuburbs']),
  203. ...mapActions('property', ['getPropertyTypesRes', 'getPropertyTypesCom']),
  204. ...mapActions('propertySearch', ['clearFilter']),
  205. clearResType() {
  206. this.clearFilter('propertyType');
  207. this.resType = 'All';
  208. },
  209. clearComType() {
  210. this.clearFilter('propertyType');
  211. this.comType = 'All';
  212. },
  213. PropertyTypeSelected(item) {
  214. this.propertySearch.propertyType = item.target.value;
  215. },
  216. ProvinceSelected(item) {
  217. if (item.target.value !== 'All') {
  218. this.getCities(
  219. Object.assign({}, { province: this.propertySearch.province }),
  220. );
  221. }
  222. },
  223. CitySelected(item) {
  224. if (item.target.value !== 'All') {
  225. this.getSuburbs(
  226. Object.assign(
  227. {},
  228. {
  229. province: this.propertySearch.province,
  230. city: this.propertySearch.city,
  231. },
  232. ),
  233. );
  234. }
  235. },
  236. },
  237. };
  238. </script>