import { Popup, SafeArea, SearchBar, Dialog, Input, } from "@nutui/nutui-react-taro"; import { Icon } from "@/components"; import { ScrollView, View } from "@tarojs/components"; import React, { useEffect, useState } from "react"; import { business } from "@/services"; interface IDealerPickerProps { onFinish: (dealerVO: BusinessAPI.DealerVO) => void; trigger: React.ReactNode; enableManualInput?: boolean; } export default function DealerPicker(props: IDealerPickerProps) { const { onFinish, trigger, enableManualInput = true } = props; const [visible, setVisible] = useState(false); const [dealerVO, setDealerVO] = useState(); const [dealerList, setDealerList] = useState([]); const [searchText, setSearchText] = useState(""); const [inputVisible, setInputVisible] = useState(false); const [inputValue, setInputValue] = useState(""); useEffect(() => { if (visible) { handleSearch().then(); } }, [visible]); const handleSearch = async (value?: string) => { const { data } = await business.dealer.listDealer({ dealerListQry: { shortName: value || undefined, status: true, }, }); console.log("data", data); let dealerList = data?.data; setDealerList(dealerList || []); }; const handleConfirm = () => { if (inputValue.trim()) { // 创建一个模拟的DealerVO对象,只包含用户输入的名称 const mockDealer: any = { dealerId: "", shortName: inputValue.trim(), status: true, }; onFinish(mockDealer); setSearchText(""); setInputVisible(false); setVisible(false); } }; return ( <> { setVisible(true); event.stopPropagation(); }} > {trigger} {/* 选择经销商 */} { if (visible) { setDealerVO(undefined); setSearchText(""); setVisible(false); } else if (dealerVO) { onFinish(dealerVO); } }} > setSearchText(value)} onSearch={handleSearch} onClear={() => handleSearch("")} /> {dealerList?.length === 0 && ( 未找到匹配的经销商 )} {dealerList?.map((dealer) => ( { setDealerVO(dealer); setSearchText(""); setVisible(false); }} > {dealer.shortName} ))} {enableManualInput && ( setInputVisible(true)} > 没有找到目标经销商?点击这里手动输入 )} setInputValue(value)} /> } onCancel={() => setInputVisible(false)} onConfirm={handleConfirm} /> ); }