areaPicker.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <template>
  2. <template>
  3. <view class="areaPicker">
  4. <h-picker ref="picker"
  5. @cancel="cancel"
  6. @change="change"
  7. range_key="name"
  8. :value="default_area"
  9. title="选择城市"
  10. @sure="sure"
  11. :column="[prov_list,city_list]"></h-picker>
  12. </view>
  13. </template>
  14. <script>
  15. import hPicker from "./hPicker.vue";
  16. import commonReq from "../../_common/requestCon/commonReq";
  17. export default {
  18. name: "areaPicker",
  19. components: {hPicker},
  20. props: {
  21. // default_area: {
  22. // default(){
  23. // return [0,0]
  24. // }
  25. // }
  26. },
  27. data() {
  28. return {
  29. prov_list: [],
  30. city_list: [],
  31. default_area:[0,0]
  32. }
  33. },
  34. methods: {
  35. hide(){
  36. this.$refs.picker.hide()
  37. },
  38. show(){
  39. this.$refs.picker.show()
  40. },
  41. /*获取省份列表*/
  42. getProv() {
  43. return new Promise((resolve, reject) => {
  44. commonReq.getArea()
  45. .then(res => {
  46. this.prov_list = res.data.map(v => {
  47. return {...v, value: v.uuid}
  48. })
  49. resolve(this.prov_list)
  50. })
  51. })
  52. },
  53. /*获取城市信息*/
  54. getCity(id) {
  55. return new Promise((resolve, reject) => {
  56. commonReq.getArea({grade: 1, parent_uuid: id})
  57. .then(res => {
  58. this.city_list = res.data.map(v => {
  59. return {...v, value: v.uuid}
  60. })
  61. resolve(this.city_list)
  62. })
  63. })
  64. },
  65. /*初始化地区选择*/
  66. initArea() {
  67. let index = this.default_area[0];//默认序号的省份
  68. this.getProv()
  69. .then(res => {
  70. let prov_list = this.prov_list;
  71. this.getCity(prov_list[index].uuid)
  72. })
  73. },
  74. /*省份变化*/
  75. provChange(val){
  76. console.log('provChange')
  77. let prov_list =this.prov_list;
  78. let city_list =this.city_list;
  79. let prov_index = val[0];
  80. //默认城市重置为第一个
  81. this.default_area[1] = 0;
  82. this.getCity(prov_list[prov_index].uuid)
  83. .then(res=>{
  84. this.$emit('change',[
  85. {_index:prov_index,...prov_list[prov_index]},
  86. {_index:0,...city_list[0]},
  87. ])
  88. })
  89. },
  90. // 城市变化
  91. cityChange(val){
  92. console.log('cityChange')
  93. let prov_list =this.prov_list;
  94. let city_list =this.city_list;
  95. let prov_index = val[0];
  96. let city_index = val[1];
  97. this.$emit('change',[
  98. {_index:prov_index,...prov_list[prov_index]},
  99. {_index:city_index,...city_list[city_index]},
  100. ])
  101. },
  102. sure(val){
  103. let prov_list =this.prov_list;
  104. let city_list =this.city_list;
  105. let prov_index =val ? val[0] :0;
  106. let city_index = val ? val[1] :0;
  107. this.$emit('sure',[
  108. {_index:prov_index,...prov_list[prov_index]},
  109. {_index:city_index,...city_list[city_index]},
  110. ])
  111. },
  112. cancel(){
  113. this.$emit('cancel',{})
  114. },
  115. change({_value}){
  116. let val =_value
  117. let default_area = this.default_area;
  118. if(val[0] !== default_area[0]){
  119. this.provChange(val)
  120. }
  121. if(val[1] !== default_area[1]){
  122. this.cityChange(val)
  123. }
  124. this.default_area = _value;
  125. }
  126. },
  127. mounted() {
  128. this.initArea()
  129. }
  130. }
  131. </script>
  132. <style scoped lang="scss">
  133. </style>
  134. </template>
  135. <script>
  136. </script>
  137. <style>
  138. </style>