pickerAddress.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <!-- 地址选择器组件 -->
  3. <picker @change="bindPickerChange" @columnchange="columnchange" :range="array" range-key="name" :value="value" mode="multiSelector">
  4. <slot></slot>
  5. </picker>
  6. </template>
  7. <script>
  8. // import AllAddress from './areadata.js'
  9. import AllAddress from './address.js'
  10. let selectVal = ['','','']
  11. let selectCode = ['','','']
  12. export default {
  13. data() {
  14. return{
  15. value: [0,0,0],
  16. array: [],
  17. index: 0
  18. }
  19. },
  20. props:{
  21. selectValue: {
  22. type: Array,
  23. default: [0,0,0]
  24. }
  25. },
  26. created() {
  27. this.value = this.selectValue
  28. this.initSelect()
  29. },
  30. methods:{
  31. // 初始化地址选项
  32. initSelect() {
  33. this.updateSourceDate() // 更新源数据
  34. .updateAddressDate() // 更新结果数据
  35. .$forceUpdate() // 触发双向绑定
  36. },
  37. // 地址控件改变控件
  38. columnchange(d) {
  39. this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引
  40. .updateSourceDate() // 更新源数据
  41. .updateAddressDate() // 更新结果数据
  42. .$forceUpdate() // 触发双向绑定
  43. },
  44. /**
  45. * 更新源数据
  46. * */
  47. updateSourceDate() {
  48. // console.log(AllAddress, '>>>>>>>AllAddress');
  49. this.array = []
  50. // this.array[0] = AllAddress.map(obj => {
  51. // return { name: obj.name }
  52. // })
  53. // this.array[1] = AllAddress[this.value[0]].city.map(obj => {
  54. // return { name: obj.name }
  55. // })
  56. // this.array[2] = AllAddress[this.value[0]].city[this.value[1]].area.map(obj => {
  57. // return { name: obj }
  58. // })
  59. this.array[0] = AllAddress.map(obj => {
  60. return {
  61. name: obj.name,
  62. code: obj.code
  63. }
  64. })
  65. this.array[1] = AllAddress[this.value[0]].children.map(obj => {
  66. return {
  67. name: obj.name,
  68. code: obj.code
  69. }
  70. })
  71. this.array[2] = AllAddress[this.value[0]].children[this.value[1]].children.map(obj => {
  72. return {
  73. name: obj.name,
  74. code: obj.code
  75. }
  76. })
  77. return this
  78. },
  79. /**
  80. * 更新索引
  81. * */
  82. updateSelectIndex(column, value){
  83. let arr = JSON.parse(JSON.stringify(this.value))
  84. arr[column] = value
  85. if(column === 0 ) {
  86. arr[1] = 0
  87. arr[2] = 0
  88. }
  89. if(column === 1 ) {
  90. arr[2] = 0
  91. }
  92. this.value = arr
  93. return this
  94. },
  95. /**
  96. * 更新结果数据
  97. * */
  98. updateAddressDate() {
  99. selectVal[0] = this.array[0][this.value[0]].name
  100. selectVal[1] = this.array[1][this.value[1]].name
  101. selectVal[2] = this.array[2][this.value[2]].name
  102. selectCode[0] = this.array[0][this.value[0]].code
  103. selectCode[1] = this.array[1][this.value[1]].code
  104. selectCode[2] = this.array[2][this.value[2]].code
  105. return this
  106. },
  107. /**
  108. * 点击确定
  109. * */
  110. bindPickerChange(e) {
  111. this.$emit('change', {
  112. index: this.value,
  113. data: selectVal,
  114. code: selectCode
  115. })
  116. return this
  117. }
  118. }
  119. }
  120. </script>
  121. <style>
  122. </style>