CreateModal.tsx 4.67 KB
import React, { useEffect, useState } from "react";
import { Modal, Form, Select, message, Input, Radio } from "antd";
import { save, ListVO, queryBacklogList, BacklogItemVO } from "../api";
import useInitial from "@/hooks/useInitail";
import { systemListApi } from "@/pages/admin/Privilege/api";
import usePagination from "@/hooks/usePagination";
import { NumberTypeEnum, SymbolDescEnum } from "@/pages/backlog/entity";

interface Props {
  visible: boolean;
  onCancel: () => void;
  item?: ListVO;
  onRefresh?: () => void;
}

export default ({ visible, onCancel, item, onRefresh }: Props) => {
  const [form] = Form.useForm();
  const [saveLoading, setSaveLoading] = useState(false);
  const { data: BacklogList } = useInitial<BacklogItemVO[], any>(queryBacklogList, [], {});
  const { list: syslist } = usePagination(systemListApi, { current: 1, pageSize: 5000 });

  useEffect(() => {
    if (visible && item?.id) {
      form.setFieldsValue({
        name: item.name,
        configId: { value: item.configId, label: item.itemName },
        applySysId: { value: item.applySysId, label: item.applySysName },
        numberType: item.numberType,
        symbolType: item.symbolType,
        valueDesc: item.valueDesc,
        valueUnit: item.valueUnit,
      });
    }
    if (!visible) {
      setSaveLoading(false);
      form?.resetFields();
    }
  }, [visible]);

  function handleSave(feildValue: any) {
    setSaveLoading(true);
    const params = {
      ...feildValue,
      configId: feildValue?.configId.value,
      applySysId: feildValue?.applySysId.value,
      id: item?.id,
    };
    save(params)
      .then(() => {
        message.success("操作成功");
        onCancel?.();
        onRefresh?.();
      })
      .catch((e) => message.error(e.message))
      .finally(() => setSaveLoading(false));
  }

  return (
    <Modal
      visible={visible}
      onCancel={onCancel}
      onOk={form.submit}
      title={item?.id ? "编辑异常干预项" : "新增异常干预项"}
      confirmLoading={saveLoading}
      width="65%"
    >
      <Form form={form} onFinish={handleSave} wrapperCol={{ span: 18 }} labelCol={{ span: 4 }}>
        <Form.Item name="name" label="干预事项名称" rules={[{ required: true, message: "干预事项名称不能为空" }]}>
          <Input placeholder="请输入干预事项名称" />
        </Form.Item>
        <Form.Item name="configId" label="干预待办" rules={[{ required: true, message: "待办不能为空" }]}>
          <Select
            placeholder="请选择"
            disabled={!!item?.id}
            showSearch
            optionFilterProp="children"
            labelInValue
            filterOption={(input, option: any) => option?.children.indexOf(input) >= 0}
          >
            {BacklogList.map((item) => (
              <Select.Option value={item.id} key={item.id}>
                {item.itemName}
              </Select.Option>
            ))}
          </Select>
        </Form.Item>
        <Form.Item name="applySysId" label="归属系统" rules={[{ required: true, message: "归属系统不能为空" }]}>
          <Select
            placeholder="请选择"
            disabled={!!item?.id}
            showSearch
            optionFilterProp="children"
            labelInValue
            filterOption={(input, option: any) => option?.children.indexOf(input) >= 0}
          >
            {syslist.map((item) => (
              <Select.Option value={item.id} key={item.id}>
                {item.sysName}
              </Select.Option>
            ))}
          </Select>
        </Form.Item>
        <Form.Item initialValue={1} name="numberType" label="数据类型" rules={[{ required: true, message: "数据类型不能为空" }]}>
          <Radio.Group>
            {[1, 2].map((t) => (
              <Radio key={`nt-${t}`} value={t}>
                {NumberTypeEnum[t]}
              </Radio>
            ))}
          </Radio.Group>
        </Form.Item>
        <Form.Item initialValue={1} name="symbolType" label="运算符类型" rules={[{ required: true, message: "运算符类型不能为空" }]}>
          <Radio.Group>
            {[1, 2].map((t) => (
              <Radio key={`st-${t}`} value={t}>
                {SymbolDescEnum[t]}
              </Radio>
            ))}
          </Radio.Group>
        </Form.Item>
        <Form.Item name="valueDesc" label="干预阀值描述" rules={[{ required: true, message: "干预阀值描述不能为空" }]}>
          <Input placeholder="请输入干预阀值描述" />
        </Form.Item>
        <Form.Item name="valueUnit" label="单位" rules={[{ required: true, message: "单位不能为空" }]}>
          <Input placeholder="请输入单位" />
        </Form.Item>
      </Form>
    </Modal>
  );
};