index.jsx 2.05 KB
Newer Older
wuhao's avatar
wuhao committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
import { Select } from "antd";
import React, { Component, useState, useEffect } from "react";

let { Option } = Select;

const Cascader = ({
  value,
  onChange,
  option,
  resetkey,
  form,
  mode,
  placeholder,
  rowkey,
  disabledlist,
  setvalueEnum,
}) => {
  const [innerOptions, setOptions] = useState([]);
  useEffect(() => {
    if (Array.isArray(option)) {
      setOptions(() => {
        let valueEnum = {};
        let options = option.map((it) => {
          let val = rowkey ? it[rowkey] : it.value;
          valueEnum[val] = {
            text: it.label,
          };
          return {
            label: it.label,
            value: val,
            disabled:
              disabledlist &&
              disabledlist.some(
                (item) => item == it[rowkey] || item == it.label
              ),
          };
        });
        setvalueEnum && setvalueEnum(valueEnum);
        return options;
      });
    } else {
      option.database(option.params).then((res) => {
        setOptions(() => {
          let valueEnum = {};
          let options = res.data.dataList.map((it) => {
            let val = rowkey ? it[rowkey] : it.value;
            valueEnum[val] = {
              text: it.label,
            };
            return {
              label: it.label,
              value: val,
              disabled:
                disabledlist &&
                disabledlist.some(
                  (item) => item == it[rowkey] || item == it.label
                ),
            };
          });
          setvalueEnum && setvalueEnum(valueEnum);
          return options;
        });
      });
    }
  }, [JSON.stringify(option)]);

  return (
    <Select
      showSearch
      mode={mode || ""}
      placeholder={placeholder || "请选择"}
      allowClear
      style={{ width: "100%" }}
      options={innerOptions}
      value={value}
      onChange={(val) => {
        onChange(val);
        if (resetkey) {
          resetkey.map((it) => {
            form.setFieldsValue({ [it]: null });
          });
        }
      }}
    />
  );
};

export default Cascader;