selectAddress.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <view>
  3. <picker @change="bindPickerChange" :value="multiIndex" :range="multiArray" range-key='label'
  4. mode="multiSelector" @columnchange='columnchange'>
  5. <view class="text" :style="textStyle">{{searchPlace}}</view>
  6. </picker>
  7. </view>
  8. </template>
  9. <script>
  10. import {
  11. address
  12. } from '@/components/data/data.js'
  13. export default {
  14. name: 'selectAddress',
  15. props: {
  16. series: {
  17. type: String,
  18. default: '1'
  19. },
  20. textStyle: {
  21. type: Object,
  22. }
  23. },
  24. watch: {
  25. // keyword:function(val){
  26. // let arr = this.tList;
  27. // if(val!=''){
  28. // this.list = arr.filter(v => {
  29. // let flag = false
  30. // if(v.members.length>0){
  31. // v.members.forEach(m=>{
  32. // if(m.groupNickName.includes(val)){
  33. // flag = true
  34. // }
  35. // })
  36. // }
  37. // return flag
  38. // })
  39. // }else {
  40. // this.list = this.tList
  41. // }
  42. // }
  43. },
  44. data() {
  45. return {
  46. searchPlace: '全国',
  47. multiIndex: [0, 0, 0],
  48. multiArray: [
  49. [],
  50. [],
  51. []
  52. ],
  53. }
  54. },
  55. mounted() {
  56. for (let i = 0; i < address.length; i++) {
  57. this.multiArray[0].push(address[i])
  58. }
  59. // this.$emit('selectAddress', '')
  60. },
  61. methods: {
  62. columnchange(e) {
  63. console.log('picker发送选择改变', e.detail)
  64. this.multiIndex[e.detail.column] = e.detail.value
  65. console.log("this.multiIndex", this.multiIndex)
  66. switch (e.detail.column) {
  67. case 0: //拖动第1列
  68. this.multiArray[1] = address[e.detail.value].child
  69. this.multiArray[2] = this.multiArray[1][0].child
  70. console.log(this.multiArray[1])
  71. this.multiIndex.splice(1, 1, 0)
  72. this.multiIndex.splice(2, 1, 0)
  73. break
  74. case 1: //拖动第2列
  75. this.multiArray[2] = this.multiArray[1][this.multiIndex[1]].child
  76. this.multiIndex.splice(2, 1, 0)
  77. break
  78. }
  79. this.$forceUpdate()
  80. },
  81. bindPickerChange: function(e) {
  82. console.log('picker发送选择改变,携带值为', e.detail.value)
  83. this.index = e.detail.value
  84. console.log(this.multiArray)
  85. //判断全部
  86. let _address = ''
  87. let _showVal = ''
  88. if (this.multiArray[0][e.detail.value[0]].label == '全国') {
  89. _address = "全国"
  90. _showVal = '全国'
  91. } else if (this.multiArray[1][e.detail.value[1]]
  92. .label == '全部') {
  93. _address = this.multiArray[0][e.detail.value[0]].label
  94. this.searchPlace = this.multiArray[0][e.detail.value[0]].label
  95. } else if (this.multiArray[2][e.detail.value[2]].label == '全部') {
  96. _address = this.multiArray[0][e.detail.value[0]].label + this.multiArray[1][e.detail.value[1]]
  97. .label
  98. this.searchPlace = this.multiArray[1][e.detail.value[1]].label
  99. } else {
  100. _address = this.multiArray[0][e.detail.value[0]].label + this.multiArray[1][e.detail.value[1]]
  101. .label + this.multiArray[2][e.detail.value[2]].label
  102. this.searchPlace = this.multiArray[2][e.detail.value[2]].label
  103. }
  104. if (this.series == 3) {
  105. if (!_address) {
  106. this.searchPlace = '全国'
  107. return
  108. }
  109. this.searchPlace = _address
  110. }
  111. console.log("_showVal", _showVal)
  112. console.log("_address", _address)
  113. this.$emit('selectAddress', _address)
  114. }
  115. },
  116. }
  117. </script>
  118. <style lang="scss">
  119. .list-cell {
  120. display: flex;
  121. box-sizing: border-box;
  122. width: 100%;
  123. padding: 10px 24rpx;
  124. overflow: hidden;
  125. color: #323233;
  126. font-size: 28rpx;
  127. font-weight: 800;
  128. line-height: 48rpx;
  129. background-color: #fff;
  130. border-bottom: solid 3rpx #eeeeee;
  131. align-items: center;
  132. image {
  133. width: 76rpx;
  134. height: 76rpx;
  135. border-radius: 12rpx;
  136. flex: 0 0 76rpx;
  137. }
  138. &-name {
  139. padding-left: 20rpx;
  140. }
  141. }
  142. </style>