PickerSingleColumn.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { View, PickerView, PickerViewColumn } from "@tarojs/components"
  2. import Taro from "@tarojs/taro"
  3. export interface IndexProps {
  4. options: string[]
  5. headerTitle?: string
  6. selected: string
  7. showPicker: boolean
  8. setShowPicker: (show:boolean) => void
  9. onChange: (value: string) => void
  10. children: JSX.Element|JSX.Element[]
  11. }
  12. const Index = ({selected, showPicker, setShowPicker,onChange, options, headerTitle = '请选择', children }: IndexProps) => {
  13. // 处理选择变化
  14. const handleChange = (e:any) => {
  15. const { value } = e.detail
  16. onChange(options[value[0]])
  17. }
  18. // 确认选择
  19. const handleConfirm = () => {
  20. setShowPicker(false)
  21. Taro.showToast({
  22. title: `已选择: ${selected}`,
  23. icon: 'none'
  24. })
  25. }
  26. return <View>
  27. {children}
  28. {showPicker && (
  29. <View className='picker-modal'>
  30. <View className='picker-header'>
  31. <View className='picker-cancel' onClick={() => setShowPicker(false)}>
  32. 取消
  33. </View>
  34. <View className='picker-title'>{headerTitle}</View>
  35. <View
  36. className='picker-confirm'
  37. onClick={handleConfirm}
  38. style={{ color: '#317CFA' }} // 直接修改确认按钮颜色
  39. >
  40. 确定
  41. </View>
  42. </View>
  43. {/* 单列 PickerView */}
  44. <PickerView
  45. className='picker-view'
  46. indicatorStyle='height: 50px;' // 选中项高亮样式
  47. style='width: 100%; height: 300px;'
  48. onChange={handleChange}
  49. value={[options.indexOf(selected)]} // 初始选中项索引
  50. >
  51. <PickerViewColumn>
  52. {options.map((item) => (
  53. <View key={item} className='picker-item'>
  54. {item}
  55. </View>
  56. ))}
  57. </PickerViewColumn>
  58. </PickerView>
  59. </View>
  60. )}
  61. </View>
  62. }
  63. export default Index;