QueryForm.tsx 10.3 KB
import React, { useState, useEffect } from 'react';
import '@ant-design/compatible/assets/index.css';
import { Select, Input, Row, Button } from 'antd';
import Filter from './Filter';
import debounce from 'lodash/debounce';
import { ShippingStatus, TransportedStatus, lockedStatus, CashCarTypeStatus, OccupyTypeStatus } from "@/pages/stock/RepertoryFw/entity";
import { getStorageListApi, StorageSelect, StorageParams } from '@/pages/stock/Components/api';
import useInitial from '@/hooks/useInitail';

const { Option } = Select;

interface Props {
  onChange: (param: {}) => any;
  delearData: CommonApi.OptionVO[];
  setSearchParams: any;
  innerParams: Repertory.RepertoryParams;
  resetParam: any;
}

interface serchParams {
  vin?: string,
  material?: string,
  memberName?: string,
}
export default function QueryForm({ onChange, delearData, setSearchParams, innerParams, resetParam }: Props) {
  const [delay, setDelay] = useState(true);
  const { data: storageData, setParams, params: storageParams } = useInitial<StorageSelect[], StorageParams>(getStorageListApi, [], {} as StorageParams, delay);
  const [carArray, setCarArray] = useState<number[]>([]);
  const [searchValue, setSearchValue] = useState<serchParams>({});

  useEffect(() => {
    if (innerParams.brandId && innerParams.brandId !== storageParams.brandId) {
      setParams({ brandId: innerParams.brandId }, true);
      setDelay(false);
    }
  }, [innerParams.brandId]);

  const _onChange = debounce((params: any) => {
    onChange(params);
  }, 800);

  const btnClick = () => {
    resetParam({ sold: "0" });
    setCarArray([]);
    setSearchValue({});
  };

  return (
    <>
      <Row justify="space-around" style={{ flexWrap: "nowrap" }}>
        <Input.Search
          style={{ width: 180 }}
          allowClear
          placeholder="搜索VIN"
          onChange={(e) => {
            _onChange({ vin: e.target.value });
            setSearchValue({ ...searchValue, vin: e.target.value });
          }}
          onSearch={(v) => _onChange({ vin: v })}
          value={searchValue.vin}
        />
        <Select
          placeholder="请选择商家"
          allowClear
          onChange={(value, option) => {
            onChange({ dealerIds: value });
          }}
          style={{ width: 180 }}
          value={innerParams.dealerIds}
        >
          {delearData.map(({ id, name }) => (
            <Option key={`${id}`} value={id}>
              {name}
            </Option>
          ))}
        </Select>
        <div style={{ width: 180 }}>
          <Filter onFilter={(value: any) => _onChange({ brandId: value.brandId, seriesId: value.seriesId, specId: value.specId })} setCarArray={setCarArray} carArray={carArray} />
        </div>
        <Select
          placeholder="搜索库房名称"
          allowClear
          onChange={(v: any) => onChange({ storageName: v ? v.label : undefined, storageId: v ? v.value : undefined })}
          optionFilterProp="children"
          labelInValue
          notFoundContent={delay ? "请先选择品牌" : "暂无数据"}
          style={{ width: 180 }}
          value={innerParams.storageId ? { label: innerParams.storageName, value: innerParams.storageId } : undefined}
        >
          {storageData.map((item) => (
            <Option key={`${item.id}`} value={item.id}>
              {item.name}
            </Option>
          ))}
        </Select>
        <Input.Search
          style={{ width: 180 }}
          allowClear
          placeholder="搜索物料代码"
          onChange={(e) => { _onChange({ material: e.target.value }); setSearchValue({ ...searchValue, material: e.target.value }); }}
          onSearch={(v) => _onChange({ material: v })}
          value={searchValue.material}
        />
      </Row>
      <Row justify="space-around" style={{ flexWrap: "nowrap", marginTop: 10 }}>
        <Select placeholder="请选择资金类型" onChange={(value) => onChange({ financeType: value })} style={{ width: 180 }} allowClear value={innerParams.financeType}>
          <Option value="1" key="1">
            兵财
          </Option>
          <Option value="2" key="2">
            光大
          </Option>
          <Option value="3" key="3">
            现金
          </Option>
          <Option value="4" key="4">
            现金(折让)
          </Option>
          <Option value="5" key="5">
            中信
          </Option>
        </Select>
        <Select placeholder="请选择车辆类型" onChange={(value) => onChange({ vehicleType: value })} style={{ width: 180 }} allowClear value={innerParams.vehicleType}>
          <Option value="1" key="1">
            承兑汇票
          </Option>
          <Option value="2" key="2">
            现金车
          </Option>
          <Option value="3" key="3">
            贷款车
          </Option>
        </Select>
        <Select placeholder="特价车" onChange={(v) => onChange({ specialPriceCar: v })} style={{ width: 180 }} allowClear value={innerParams.specialPriceCar}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
          <Option value="2">申请中</Option>
        </Select>
        <Select placeholder="质损车" onChange={(value) => onChange({ damageCar: value })} style={{ width: 180 }} allowClear value={innerParams.damageCar}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
          <Option value="2">质损中</Option>
        </Select>
        <Select placeholder="请选择发运状态" onChange={(value) => onChange({ shippingStatus: value })} style={{ width: 180 }} allowClear value={innerParams.shippingStatus}>
          {ShippingStatus.map((i) => (
            <Option value={i.value} key={i.value}>
              {i.label}
            </Option>
          ))}
        </Select>
      </Row>
      <Row justify="space-around" style={{ flexWrap: "nowrap", marginTop: 10 }}>
        <Select placeholder="请选择调运状态" onChange={(v) => onChange({ transportedStatus: v })} style={{ width: 180 }} allowClear value={innerParams.transportedStatus}>
          {TransportedStatus.map((i) => (
            <Option value={i.value} key={i.value}>
              {i.label}
            </Option>
          ))}
        </Select>
        <Select placeholder="展厅样车" onChange={(value) => onChange({ showCar: value })} style={{ width: 180 }} allowClear value={innerParams.showCar}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
          <Option value="2">申请中</Option>
        </Select>
        <Select placeholder="锁车状态" onChange={(v) => onChange({ locked: v })} style={{ width: 180 }} allowClear value={innerParams.locked}>
          {lockedStatus.map((i) => (
            <Option value={i.value} key={i.value}>
              {i.label}
            </Option>
          ))}
        </Select>
        <Select placeholder="攻坚车" onChange={(v) => onChange({ crucialCar: v })} style={{ width: 180 }} allowClear value={innerParams.crucialCar}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
          <Option value="2">申请中</Option>
        </Select>
        <Select placeholder="特殊零售" onChange={(v) => onChange({ fakeRetail: v })} style={{ width: 180 }} allowClear value={innerParams.fakeRetail}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
        </Select>
      </Row>
      <Row justify="space-around" style={{ flexWrap: "nowrap", marginTop: 10 }}>
        <Select placeholder="绑定订单" onChange={(v) => onChange({ bindingTag: v })} style={{ width: 180 }} allowClear value={innerParams.bindingTag}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
        </Select>
        <Select placeholder="是否上传押品标记 " onChange={(v) => onChange({ collateralTag: v })} style={{ width: 180 }} allowClear value={innerParams.collateralTag}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
        </Select>
        <Select placeholder="定制车标记" onChange={(v) => onChange({ customTag: v })} style={{ width: 180 }} allowClear value={innerParams.customTag}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
        </Select>
        <Input.Search
          style={{ width: 180 }}
          allowClear
          placeholder="搜索定制客户名称"
          onChange={(e) => { _onChange({ memberName: e.target.value }); setSearchValue({ ...searchValue, memberName: e.target.value }); }}
          onSearch={(v) => _onChange({ memberName: v })}
          value={searchValue.memberName}
        />
        <Select placeholder="现金车类型" onChange={(v) => onChange({ cashCarType: v })} style={{ width: 180 }} allowClear value={innerParams.cashCarType}>
          {CashCarTypeStatus.map((i) => (
            <Option value={i.value} key={i.value}>
              {i.label}
            </Option>
          ))}
        </Select>
      </Row>
      <Row justify="space-around" style={{ flexWrap: "nowrap", marginTop: 10, marginBottom: 30 }}>
        <Select placeholder="库存占用类型" onChange={(v) => onChange({ occupyType: v })} style={{ width: 180 }} allowClear value={innerParams.occupyType}>
          {OccupyTypeStatus.map((i) => (
            <Option value={i.value} key={i.value}>
              {i.label}
            </Option>
          ))}
        </Select>
        <Select placeholder="临时锁车标识" onChange={(v) => onChange({ tempLocked: v })} style={{ width: 180 }} allowClear value={innerParams.tempLocked}>
          <Option value="0">否</Option>
          <Option value="1">是</Option>
        </Select>
        <Select placeholder="加装车" value={innerParams.optionalTag} allowClear onChange={(value) => onChange({ optionalTag: value })} style={{ width: 180 }}>
          <Option value="0">否</Option>
          <Option value="1"> 是</Option>
        </Select>
        <Select placeholder="请选择库存状态" value={innerParams.sold} allowClear onChange={(value) => onChange({ sold: value })} style={{ width: 180 }}>
          <Option value="0">未售出</Option>
          <Option value="1"> 已售出</Option>
        </Select>
        <div style={{ width: 180 }}>
          <Button
            type="primary"
            onClick={() => {
              btnClick();
            }}
          >
            重置
          </Button>
        </div>
      </Row>
    </>
  );
}