Sever.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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: '全校', // 选中
  30. // columns: [
  31. // ['全校', '小学', '初中'],
  32. // ],
  33. columns: [],
  34. }
  35. },
  36. created(){
  37. this.classData[0].label = '全校'
  38. this.columns.push(this.classData)
  39. console.log(this.columns)
  40. },
  41. methods: {
  42. pickerShow(){
  43. this.show = true
  44. // this.$refs.uPicker.setColumnValues(0, this.classData)
  45. this.$refs.uPicker.setColumnValues(1, [])
  46. this.$refs.uPicker.setColumnValues(2, [])
  47. },
  48. confirm(e) {
  49. if(e.indexs[0] == 0){
  50. // this.confirmData = e.value[0].label
  51. this.confirmData = '全校'
  52. var data = e.value[0].id
  53. this.$emit('search', '')
  54. }else{
  55. this.confirmData = e.value[e.value.length -1].label
  56. var data = e.value[e.value.length -1].id
  57. this.$emit('search', data)
  58. }
  59. console.log('confirm', data)
  60. this.show = false
  61. },
  62. changeHandler(e) {
  63. const {
  64. columnIndex,
  65. value,
  66. values, // values为当前变化列的数组内容
  67. index,
  68. // 微信小程序无法将picker实例传出来,只能通过ref操作
  69. picker = this.$refs.uPicker
  70. } = e
  71. // 当第一列值发生变化时,变化第二列(后一列)对应的选项
  72. if (columnIndex === 0) {
  73. // picker为选择器this实例,变化第二列对应的选项
  74. if(index == 0){
  75. console.log('w')
  76. picker.setColumnValues(1, [])
  77. picker.setColumnValues(2, [])
  78. return
  79. }
  80. picker.setColumnValues(1, this.classData[index].children)
  81. picker.setColumnValues(2, this.classData[index].children[0].children)
  82. }
  83. if (columnIndex === 1) {
  84. // picker为选择器this实例,变化第二列对应的选项
  85. console.log('value', e, 'index', index)
  86. picker.setColumnValues(2, value[0].children[index].children)
  87. }
  88. },
  89. // 关闭
  90. cancel(){
  91. this.show = false
  92. },
  93. },
  94. }
  95. </script>
  96. <style lang="scss" scoped>
  97. .choice-left{
  98. float: left;
  99. overflow: hidden;
  100. display: flex;
  101. width: 250rpx;
  102. }
  103. </style>