import React, { useState, useEffect, useCallback } from "react"; import CommonPopup from "@/components/CommonPopup"; import { View, Text, Image } from "@tarojs/components"; import Picker from "./Picker"; import { renderYearMonth, renderYearMonthDay, renderHourMinute, } from "./PickerData"; import imgs from "@/config/images"; import styles from "./index.module.scss"; interface PickerOption { text: string | number; value: string | number; } interface PickerProps { visible: boolean; setvisible: (visible: boolean) => void; options?: PickerOption[][] | PickerOption[]; value?: (string | number)[]; type?: "month" | "day" | "hour" | "ntrp" | null; img?: string; onConfirm?: (options: PickerOption[], values: (string | number)[]) => void; onChange?: (value: (string | number)[]) => void; } const PopupPicker = ({ visible, setvisible, value = [], img, onConfirm, onChange, options = [], type = null, }: PickerProps) => { const [defaultValue, setDefaultValue] = useState<(string | number)[]>([]); const [defaultOptions, setDefaultOptions] = useState([]); const changePicker = (options: any[], values: any, columnIndex: number) => { if (onChange) { console.log("picker onChange", columnIndex, values, options); if ( type === "day" && JSON.stringify(defaultValue) !== JSON.stringify(values) ) { const [year, month] = values; const daysInMonth = new Date(Number(year), Number(month), 0).getDate(); const dayOptions = Array.from({ length: daysInMonth }, (_, i) => ({ text: i + 1 + "日", value: i + 1, })); const newOptions = [...defaultOptions]; if (JSON.stringify(newOptions[2]) !== JSON.stringify(dayOptions)) { newOptions[2] = dayOptions; setDefaultOptions(newOptions); } } if (JSON.stringify(defaultValue) !== JSON.stringify(values)) { setDefaultValue(values); } } }; const handleConfirm = () => { console.log(defaultValue, "defaultValue"); onChange(defaultValue); setvisible(false); }; const dialogClose = () => { setvisible(false); }; useEffect(() => { if (type === "month") { setDefaultOptions(renderYearMonth()); } else if (type === "day") { setDefaultOptions(renderYearMonthDay()); } else if (type === "hour") { setDefaultOptions(renderHourMinute()); } else { setDefaultOptions(options); } }, [type]); // useEffect(() => { // if (value.length > 0 && defaultOptions.length > 0) { // setDefaultValue([...value]) // } // }, [value, defaultOptions]) return ( <> {type === "ntrp" && ( 不知道自己的(NTRP)水平 快速测试 )} ); }; export default PopupPicker;