antd 自定义表单

 

 <ProForm.Item
              label=""
              labelCol={{ span: colSpan }}
              name={saftyCheckItem.dataKey}
              style={{ marginBottom: 0 }}
            >
              <ItemRadioAndCheckBox
                disabled={!!checkMod?.readOnly}
                dataOption={dataOption}
                saftyCheckItem={saftyCheckItem}
                // checkValue={checkValue}
              />
            </ProForm.Item>

自定义表单 <ItemRadioAndCheckBox>

接收父级传递的value onChange 

被设置了 name 属性的 Form.Item 包装的控件,表单控件会自动添加 value(或 valuePropName 指定的其他属性) onChange(或 trigger 指定的其他属性),数据同步将被 Form 接管,这会导致以下结果:

export function ItemRadioAndCheckBox({
  saftyCheckItem,
  dataOption,

  value,
  onChange,
  disabled,
}: FormBlockProps) {
  return (
    <div className="border border-color-layout-bg-border">
      <div className="bg-color-bg-layout h-8 pl-4 flex items-center">
        <div className="w-2 h-2 mr-1.5 rounded-full bg-color-primary"></div>
        {saftyCheckItem.name}
      </div>
      <div className="bg-white pt-3 pl-4 flex flex-wrap">
        {dataOption?.map((dataItem) => {
          let isActive = false;
          if (saftyCheckItem.enum_DataType == 4) {
            isActive = value === dataItem.value;
          } else if (saftyCheckItem.enum_DataType == 6) {
            if (
              Array.isArray(value) &&
              value?.some((element: number) => element == dataItem.value)
            ) {
              isActive = true;
            }
          }
          return (
            <div
              key={dataItem.value}
              className={cn(
                ItemClassName,
                isActive
                  ? 'bg-color-primary  text-white'
                  : 'bg-color-bg-layout  text-color-text-secondary',
                disabled && 'cursor-not-allowed opacity-70 hover:init',
              )}
              onClick={() => {
                if (!disabled) {
                  if (saftyCheckItem.enum_DataType == 4) {
                    //单选
                    onChange?.(value !== dataItem.value ? dataItem.value : undefined);
                  } else if (saftyCheckItem.enum_DataType == 6) {
                    //多选
                    let arr = value ? value : [];
                    if (arr && Array.isArray(arr)) {
                      if (arr.some((ele) => ele == dataItem.value)) {
                        arr = arr.filter((ele) => ele != dataItem.value);
                      } else {
                        arr.push(dataItem.value);
                      }
                    }
                    onChange?.(arr && Array.isArray(arr) ? [...arr] : []);
                  }
                }
              }}
            >
              {dataItem.label}
            </div>
          );
        })}
      </div>
    </div>
  );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值