Sever.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <view>
  3. <view class="choice-left" @click="pickerShow">{{confirmData}} <u-icon name="arrow-down" style="margin-left: 17rpx;"></u-icon></view>
  4. <u-picker
  5. :show="show"
  6. ref="uPicker"
  7. :columns="columns"
  8. @confirm="confirm"
  9. keyName="label"
  10. @close="cancel"
  11. @change="changeHandler"
  12. :closeOnClickOverlay="true"
  13. @cancel="cancel"
  14. :defaultIndex = '[0]'
  15. ></u-picker>
  16. </view>
  17. </template>
  18. <script>
  19. export default {
  20. props: {
  21. classData: {
  22. type: Array,
  23. default: ['1'],
  24. }
  25. },
  26. data() {
  27. return {
  28. show: false, // 控制全校多联选择器显隐
  29. confirmData: this.classData[0].label, // 选中
  30. // columns: [
  31. // ['全校', '小学', '初中'],
  32. // ],
  33. columns: [],
  34. }
  35. },
  36. created(){
  37. this.columns.push(this.classData)
  38. console.log(this.columns)
  39. },
  40. methods: {
  41. pickerShow(){
  42. this.show = true
  43. // this.$refs.uPicker.setColumnValues(0, this.classData)
  44. this.$refs.uPicker.setColumnValues(1, [])
  45. this.$refs.uPicker.setColumnValues(2, [])
  46. },
  47. confirm(e) {
  48. if(e.indexs[0] == 0){
  49. this.confirmData = e.value[0].label
  50. var data = e.value[0].id
  51. }else{
  52. this.confirmData = e.value[e.value.length -1].label
  53. var data = e.value[e.value.length -1].id
  54. }
  55. console.log('confirm', data)
  56. this.$emit('search', data)
  57. this.show = false
  58. },
  59. changeHandler(e) {
  60. const {
  61. columnIndex,
  62. value,
  63. values, // values为当前变化列的数组内容
  64. index,
  65. // 微信小程序无法将picker实例传出来,只能通过ref操作
  66. picker = this.$refs.uPicker
  67. } = e
  68. // 当第一列值发生变化时,变化第二列(后一列)对应的选项
  69. if (columnIndex === 0) {
  70. // picker为选择器this实例,变化第二列对应的选项
  71. if(index == 0){
  72. console.log('w')
  73. picker.setColumnValues(1, [])
  74. picker.setColumnValues(2, [])
  75. return
  76. }
  77. picker.setColumnValues(1, this.classData[index].children)
  78. picker.setColumnValues(2, this.classData[index].children[0].children)
  79. }
  80. if (columnIndex === 1) {
  81. // picker为选择器this实例,变化第二列对应的选项
  82. console.log('value', e, 'index', index)
  83. picker.setColumnValues(2, value[0].children[index].children)
  84. }
  85. },
  86. // 关闭
  87. cancel(){
  88. this.show = false
  89. },
  90. },
  91. }
  92. </script>
  93. <style lang="scss" scoped>
  94. .choice-left{
  95. float: left;
  96. overflow: hidden;
  97. display: flex;
  98. width: 250rpx;
  99. }
  100. </style>