area-picker.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <view>
  3. <u-picker ref="uPicker" :show="areaShow" :defaultIndex="[1, 0, 0]" :columns="columns" @change="changeHandler"
  4. @confirm="confirm" @cancel="cancel" keyName="areaName"></u-picker>
  5. </view>
  6. </template>
  7. <script>
  8. import $http from '@/utils/request.js'
  9. export default {
  10. name: "area-picker",
  11. props: {
  12. areaShow: {
  13. type: [Boolean],
  14. default: false
  15. },
  16. },
  17. data() {
  18. return {
  19. columns: []
  20. };
  21. },
  22. methods: {
  23. async getArea() {
  24. const picker = this.$refs.uPicker
  25. let provinceRes = await $http.post('/api/v1/mp/area/listByPid', {
  26. pid: 0
  27. })
  28. let cityRes = await $http.post('/api/v1/mp/area/listByPid', {
  29. pid: provinceRes && provinceRes.data && provinceRes.data[1].areaId
  30. })
  31. let areaRes = await $http.post('/api/v1/mp/area/listByPid', {
  32. pid: cityRes && cityRes.data && cityRes.data[0].areaId
  33. })
  34. picker.setColumnValues(0, provinceRes.data)
  35. picker.setColumnValues(1, cityRes.data)
  36. picker.setColumnValues(2, areaRes.data)
  37. },
  38. async changeHandler(e) {
  39. const {
  40. columnIndex,
  41. index,
  42. value,
  43. // 微信小程序无法将picker实例传出来,只能通过ref操作
  44. picker = this.$refs.uPicker
  45. } = e
  46. if (columnIndex === 0) {
  47. let cityRes = await $http.post('/api/v1/mp/area/listByPid', {
  48. pid: value && value[0].areaId
  49. })
  50. let areaRes = await $http.post('/api/v1/mp/area/listByPid', {
  51. pid: cityRes && cityRes.data && cityRes.data[0].areaId
  52. })
  53. picker.setColumnValues(1, cityRes.data)
  54. picker.setColumnValues(2, areaRes.data)
  55. }
  56. if (columnIndex === 1) {
  57. let areaRes = await $http.post('/api/v1/mp/area/listByPid', {
  58. pid: value && value[1].areaId
  59. })
  60. picker.setColumnValues(2, areaRes.data)
  61. }
  62. },
  63. // 回调参数为包含columnIndex、value、values
  64. confirm(e) {
  65. const picker = this.$refs.uPicker
  66. const {
  67. value
  68. } = e
  69. // console.log(value);
  70. let confirmObj = {
  71. province: value[0].areaName,
  72. provinceId: value[0].areaId,
  73. city: value[1].areaName,
  74. cityId: value[1].areaId,
  75. area: value[2].areaName,
  76. areaId: value[2].areaId,
  77. cityShow: value.map(item => item.areaName).join('-')
  78. }
  79. this.$emit('confirmArea', confirmObj)
  80. },
  81. cancel() {
  82. this.$emit('cancel')
  83. },
  84. },
  85. mounted() {
  86. this.getArea()
  87. }
  88. }
  89. </script>
  90. <style lang="scss">
  91. </style>