new_timepicker.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { rpxToPx } from "@/utils/tools";
  2. import { PickerView, PickerViewColumn, Text, View } from "@tarojs/components";
  3. import { useEffect, useState } from "react";
  4. import './new_timepicker.scss'
  5. import dayjs from "dayjs";
  6. import { MainColorType } from "@/context/themes/color";
  7. export default function NewTimePicker(props: { time?: string, onChange?: any, color?: string }) {
  8. const [items, setItems] = useState<any>([[0], [0]])
  9. const [values, setValues] = useState<any>([0, 0])
  10. const [loaded, setLoaded] = useState(false)
  11. useEffect(() => {
  12. var hours: any = []
  13. var tempValues: any = [0, 0]
  14. var str = props.time ? props.time : dayjs().format('HH:mm')
  15. var tempHour = str.split(':')[0]
  16. var tempMinute = str.split(':')[1]
  17. for (var i = 0; i <= 23; i++) {
  18. var str = (i + '').padStart(2, '0')
  19. if (str == tempHour) {
  20. tempValues[0] = i
  21. }
  22. hours.push(str)
  23. }
  24. var minutes: any = []
  25. for (var i = 0; i <= 59; i++) {
  26. var str = (i + '').padStart(2, '0')
  27. if (str == tempMinute) {
  28. tempValues[1] = i
  29. }
  30. minutes.push(str)
  31. }
  32. setItems([hours, minutes])
  33. setValues(tempValues)
  34. setLoaded(true)
  35. }, [])
  36. useEffect(() => {
  37. var hours: any = []
  38. var tempValues: any = [0, 0]
  39. var str = props.time ? props.time : dayjs().format('HH:mm')
  40. var tempHour = str.split(':')[0]
  41. var tempMinute = str.split(':')[1]
  42. for (var i = 0; i <= 23; i++) {
  43. var str = (i + '').padStart(2, '0')
  44. if (str == tempHour) {
  45. tempValues[0] = i
  46. }
  47. hours.push(str)
  48. }
  49. var minutes: any = []
  50. for (var i = 0; i <= 59; i++) {
  51. var str = (i + '').padStart(2, '0')
  52. if (str == tempMinute) {
  53. tempValues[1] = i
  54. }
  55. minutes.push(str)
  56. }
  57. setValues(tempValues)
  58. }, [props.time])
  59. function onPickerChange(e) {
  60. setValues(e.detail.value)
  61. if (props.onChange) {
  62. var list = e.detail.value
  63. props.onChange((list[0] + '').padStart(2, '0') + ':' + (list[1] + '').padStart(2, '0'))
  64. }
  65. }
  66. function getColor(i, j) {
  67. if (i == 0 && j == values[0]) {
  68. return true
  69. }
  70. if (i == 1 && j == values[1]) {
  71. return true
  72. }
  73. return false
  74. }
  75. if (!loaded) return <View />
  76. const bgStyle = `background-color: ${props.color}1A !important;`
  77. return <PickerView
  78. value={values}
  79. // itemStyle={{ color: '#000' }}
  80. style={{ color: '#000', height: rpxToPx(340), width: rpxToPx(670) }}
  81. onChange={onPickerChange}
  82. indicatorClass="pick_sel_item"
  83. indicatorStyle={bgStyle}//""
  84. immediateChange={true}
  85. className="picker"
  86. // maskClass={props.hideTitle?"picker-mask-small":"picker-mask"}
  87. >
  88. {
  89. items.map((item, index) => {
  90. return <PickerViewColumn key={index}>
  91. {item.map((obj, j) => {
  92. return (
  93. <Text key={j} style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', color: getColor(index, j) ? props.color ?? MainColorType.fast : '#000' }}>{obj}</Text>
  94. );
  95. })}
  96. </PickerViewColumn>
  97. })
  98. }
  99. </PickerView >
  100. }