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.

propertySearchFields.vue 8.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  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" @change="ProvinceSelected">
  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 class="form-group">
  84. <label for="city">City</label>
  85. <div class="input-group mb-3">
  86. <div class="input-group-prepend">
  87. <span class="input-group-text" style="color: #60CBEB">
  88. <b>C</b>
  89. </span>
  90. </div>
  91. <select class="form-control" v-model="propertySearch.city" @change="CitySelected">
  92. <option>All</option>
  93. <option v-for="(city, i) in cities" :key="i">{{ city.description }}</option>
  94. </select>
  95. <div class="input-group-append" @click="clearFilter('city')">
  96. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  97. <b>X</b>
  98. </span>
  99. </div>
  100. </div>
  101. </div>
  102. <div class="form-group">
  103. <label for="suburb">Suburb</label>
  104. <div class="input-group mb-3">
  105. <div class="input-group-prepend">
  106. <span class="input-group-text" style="color: #60CBEB">
  107. <b>S</b>
  108. </span>
  109. </div>
  110. <select class="form-control" v-model="propertySearch.suburb">
  111. <option>All</option>
  112. <option v-for="(suburb, i) in suburbs" :key="i">{{ suburb.description }}</option>
  113. </select>
  114. <div class="input-group-append" @click="clearFilter('suburb')">
  115. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  116. <b>X</b>
  117. </span>
  118. </div>
  119. </div>
  120. </div>
  121. <div class="form-group">
  122. <div class="row">
  123. <div class="col-md-6 text-left">
  124. <label>Minimum Price</label>
  125. <div class="input-group mb-3">
  126. <div class="input-group-prepend">
  127. <span class="input-group-text" style="color: #60CBEB">
  128. <b>R</b>
  129. </span>
  130. </div>
  131. <input
  132. class="form-control"
  133. type="number"
  134. setp="any"
  135. v-model="propertySearch.minPrice"
  136. />
  137. <div class="input-group-append" @click="clearFilter('minPrice')">
  138. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  139. <b>X</b>
  140. </span>
  141. </div>
  142. </div>
  143. </div>
  144. <div class="col-md-6 text-left">
  145. <label>Maximum Price</label>
  146. <div class="input-group mb-3">
  147. <div class="input-group-prepend">
  148. <span class="input-group-text" style="color: #60CBEB">
  149. <b>R</b>
  150. </span>
  151. </div>
  152. <input
  153. class="form-control"
  154. type="number"
  155. setp="any"
  156. v-model="propertySearch.maxPrice"
  157. />
  158. <div class="input-group-append" @click="clearFilter('maxPrice')">
  159. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  160. <b>X</b>
  161. </span>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. <div class="form-group">
  168. <div class="row">
  169. <div class="col-md-12 text-left">
  170. <label>Available From</label>
  171. <div class="input-group mb-3">
  172. <div class="input-group-prepend">
  173. <span class="input-group-text" style="color: #60CBEB">
  174. <b>R</b>
  175. </span>
  176. </div>
  177. <input
  178. class="form-control"
  179. type="date"
  180. setp="any"
  181. v-model="propertySearch.availableFrom"
  182. />
  183. <div class="input-group-append" @click="clearFilter('availableFrom')">
  184. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  185. <b>X</b>
  186. </span>
  187. </div>
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. <div class="form-group">
  193. <label for="propertytype">Property ID</label>
  194. <div class="input-group mb-3">
  195. <div class="input-group-prepend">
  196. <span class="input-group-text" style="color: #60CBEB">
  197. <b>T</b>
  198. </span>
  199. </div>
  200. <input class="form-control" v-model="propertySearch.propertyId" type="number" />
  201. <div class="input-group-append" @click="clearFilter('propertyId')">
  202. <span class="input-group-text cursor-pointer" style="color: #60CBEB">
  203. <b>X</b>
  204. </span>
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210. </template>
  211. <script>
  212. import { mapState, mapActions } from "vuex";
  213. export default {
  214. props: {
  215. propertyType: String,
  216. },
  217. data() {
  218. return {
  219. resType: "All",
  220. comType: "All",
  221. };
  222. },
  223. mounted() {
  224. this.getPropertyTypesRes();
  225. this.getPropertyTypesCom();
  226. this.propertySearch.propertyUsageType = this.propertyType;
  227. },
  228. computed: {
  229. ...mapState("property", ["propertyTypesRes", "propertyTypesCom"]),
  230. ...mapState("propertySearch", ["propertySearch"]),
  231. },
  232. methods: {
  233. ...mapActions("property", ["getPropertyTypesRes", "getPropertyTypesCom"]),
  234. ...mapActions("propertySearch", ["clearFilter"]),
  235. clearResType() {
  236. this.clearFilter("propertyType");
  237. this.resType = "All";
  238. },
  239. clearComType() {
  240. this.clearFilter("propertyType");
  241. this.comType = "All";
  242. },
  243. PropertyTypeSelected(item) {
  244. this.propertySearch.propertyType = item.target.value;
  245. let typeitem = this.propertyTypesCom.find(
  246. (t) => t.description === item.target.value
  247. );
  248. if (typeof typeitem === "undefined") {
  249. typeitem = this.propertyTypesRes.find(
  250. (t) => t.description === item.target.value
  251. );
  252. }
  253. if (typeitem.usageType === 1) {
  254. this.propertySearch.propertyUsageType = "Commercial";
  255. } else {
  256. this.propertySearch.propertyUsageType = "Residential";
  257. }
  258. },
  259. },
  260. };
  261. </script>