InvoiceProjectSelect.tsx 1.59 KB
import { postServiceConstListInvoiceDetailNames } from '@/services';
import { Select, Tooltip } from 'antd';
import { useState } from 'react';

export const InvoiceProjectSelect = ({
  readOnly,
  value,
  onChange,
  setInvoiceProject,
}) => {
  const [options, setOptions] = useState<any[]>([]);
  // 定义防抖函数
  let timeoutId = null;
  const fetchOptions = async (keywords) => {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(async () => {
      const res = await postServiceConstListInvoiceDetailNames({
        data: {
          nameLike: keywords,
        },
      });
      const data = res.data;
      console.log('invoiceProject' + JSON.stringify(data));
      setOptions(
        data.map((item) => {
          return {
            label:
              '*' +
              item.productAndServiceCatagoryAbbreviation +
              '*' +
              item?.name,
            value: item.id,
            ...item,
          };
        }),
      );
      // 这里可以放置实际的搜索逻辑,比如发起网络请求等
    }, 500); // 设置延迟时间,单位毫秒
  };

  return readOnly ? (
    <Tooltip title={value}>{value}</Tooltip>
  ) : (
    <Select
      key="project"
      /*readonly={readonly}*/
      showSearch
      placeholder="请选择开票项目"
      filterOption={(input, option) => (option?.label ?? '').includes(input)}
      onChange={(e) => {
        setInvoiceProject(options.find((item) => item.value === e));
        onChange(e);
      }}
      defaultValue={value}
      options={options}
      onSearch={(e) => {
        fetchOptions(e);
      }}
    />
  );
};