jp-picker.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <view>
  3. <picker @change="PickerChange" :value="index" :disabled="disabled" :range-value="rangeValue" :range-key="rangeKey" :range="range">
  4. <view class=" picker action">
  5. <view class="text-grey ">{{label || '请选择'}}</view>
  6. </view>
  7. </picker>
  8. </view>
  9. </template>
  10. <script>
  11. export default {
  12. data() {
  13. return {
  14. index: -1,
  15. label: '请选择'
  16. };
  17. },
  18. props: {
  19. value: String,
  20. rangeKey: {
  21. type: String,
  22. default: 'label'
  23. },
  24. rangeValue: {
  25. type: String,
  26. default: 'value'
  27. },
  28. range: {
  29. type: Array,
  30. default: []
  31. },
  32. disabled: {
  33. type: Boolean,
  34. default: false
  35. }
  36. },
  37. mounted() {
  38. },
  39. watch:{
  40. value: {
  41. handler (val) {
  42. if(val) {
  43. let options = this.range.filter((option)=>{
  44. return option.value === val
  45. })
  46. if(options.length === 0){
  47. this.label = '请选择'
  48. } else {
  49. this.label = options[0][this.rangeKey]
  50. }
  51. }
  52. },
  53. immediate: true,
  54. deep: false
  55. }
  56. },
  57. methods:{
  58. PickerChange(e) {
  59. this.index = e.detail.value;
  60. if(this.index !== -1){
  61. this.label = this.range[this.index][this.rangeKey]
  62. this.$emit('input', this.range[this.index][this.rangeValue])
  63. }else{
  64. this.label = '请选择'
  65. this.$emit('input', null)
  66. }
  67. }
  68. }
  69. }
  70. </script>
  71. <style>
  72. </style>