selector-picker.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <template>
  2. <view class="lb-selector-picker lb-picker-item"
  3. :style="{ height: height }">
  4. <picker-view :value="pickerValue"
  5. :style="{ height: height }"
  6. :indicator-style="indicatorStyle"
  7. @change="handleChange">
  8. <picker-view-column>
  9. <view v-for="(item, i) in list"
  10. :class="[
  11. 'lb-picker-column',
  12. (item[props.value] || item) === selectValue
  13. ? 'lb-picker-column-active'
  14. : ''
  15. ]"
  16. :key="i">
  17. <text class="lb-picker-column-label">
  18. {{ item[props.label] || item }}
  19. </text>
  20. </view>
  21. </picker-view-column>
  22. </picker-view>
  23. </view>
  24. </template>
  25. <script>
  26. import { isObject } from '../utils'
  27. import { commonMixin } from '../mixins'
  28. export default {
  29. props: {
  30. value: [String, Number],
  31. list: Array,
  32. mode: String,
  33. props: Object,
  34. visible: Boolean,
  35. height: String,
  36. isConfirmChange: Boolean
  37. },
  38. mixins: [commonMixin],
  39. data () {
  40. return {
  41. pickerValue: [],
  42. selectValue: '',
  43. selectItem: null
  44. }
  45. },
  46. methods: {
  47. handleChange (item) {
  48. const index = item.detail.value[0] || 0
  49. this.selectItem = this.list[index]
  50. this.selectValue = isObject(this.selectItem)
  51. ? this.selectItem[this.props.value]
  52. : this.selectItem
  53. this.pickerValue = item.detail.value
  54. this.$emit('change', {
  55. value: this.selectValue,
  56. item: this.selectItem,
  57. index: index,
  58. change: 'scroll'
  59. })
  60. }
  61. }
  62. }
  63. </script>
  64. <style lang="scss" scoped>
  65. @import "../style/picker-item.scss";
  66. </style>