Modal.tsx 2.84 KB
import React, { useState, useEffect } from "react";
import "@ant-design/compatible/assets/index.css";
import { Select, Modal, Form, message } from "antd";
import * as api from "../api";
import { ListResult, SaveParams, saveApi, getShopRepairGroupsApi, ShopGroup } from "../api";
import useInitial from "@/hooks/useInitail";

const FormItem = Form.Item;
const { Option } = Select;
const maxFormProps = {
  labelCol: { span: 5 },
  wrapperCol: { span: 15 },
};

interface Props {
  visible: boolean;
  onCancel: () => any;
  shopId?: number;
  detail?: ListResult;
}

export default function SaveModal({ visible, onCancel, shopId, detail }: Props) {
  const isNew = !detail.id;

  const [form] = Form.useForm();

  const [confirmLoading, setConfirmLoading] = useState<boolean>(false);
  const [userData, setUserData] = useState<api.User[]>([]);

  const { data: userList } = useInitial(getShopRepairGroupsApi, [], { shopId });

  useEffect(() => {
    if (detail.id) {
      console.log(detail);
      // form.setFieldsValue({ ..._item });
    } else {
      form.resetFields();
    }
  }, [visible]);

  function save(fieldsValue: any) {
    console.log(fieldsValue);
    setConfirmLoading(true);
    const datas = {
      id: detail.id || undefined,
      roleCode: fieldsValue.roleCode.value,
      partTypes: (fieldsValue.partTypes || []).map((e: any) => e.value),
    };
    api
      .saveApi(datas)
      .then(() => {
        message.success("操作成功!");
        setConfirmLoading(false);
        onCancel();
      })
      .catch((e) => {
        setConfirmLoading(false);
        message.error(e.message);
      });
  }

  return (
    <Modal
      title={`${isNew ? "新增" : "编辑"}工时分成比例`}
      width={600}
      open={visible}
      confirmLoading={confirmLoading}
      onOk={() => form.submit()}
      onCancel={onCancel}
    >
      <Form form={form} onFinish={save}>
        <FormItem name="roleCode" label="角色" rules={[{ required: true, message: "必填" }]} {...maxFormProps}>
          <Select labelInValue placeholder="请选择角色">
            {userData.map((r) => (
              <Select.Option key={r.id} value={r.id}>
                {r.name || "--"}
              </Select.Option>
            ))}
          </Select>
        </FormItem>
        <FormItem
          label="可领辅料类型"
          name="partTypes"
          rules={[{ required: true, message: "该选项为必选项" }]}
          {...maxFormProps}
        >
          <Select placeholder="请选择辅料类型" mode="multiple" labelInValue>
            {[].map((r) => (
              <Select.Option key={r.id} value={r.id}>
                {r.name || "--"}
              </Select.Option>
            ))}
          </Select>
        </FormItem>
      </Form>
    </Modal>
  );
}