ClientModal.tsx 7.1 KB
import { RESPONSE_CODE } from '@/constants/enum';
import {
  postAdminClientAddOrModifyClientComunicationInfo,
  postAdminClientQueryClientPage,
  postOrderErpOrderStagesUpload,
  postServiceConstClientWay,
} from '@/services';
import { enumToSelect } from '@/utils';
import {
  ModalForm,
  ProFormDateTimePicker,
  ProFormSelect,
  ProFormText,
  ProFormTextArea,
  ProFormUploadDragger,
} from '@ant-design/pro-components';
import { Button, Form, message } from 'antd';
import { RcFile } from 'antd/es/upload';
export default ({ data, type, reloadTable }) => {
  const [form] = Form.useForm();
  const onfinish = async (values) => {
    const resSearchId = await postAdminClientQueryClientPage({
      data: {
        groupFilter: 'all',
      },
    });
    const matchingItem = resSearchId.data.data.find(
      (item) => item.id === values.name,
    );
    let matchedId;
    if (matchingItem) {
      matchedId = matchingItem.id; // 匹配成功,取出 id
      values.name = matchingItem.name;
    } else {
      matchedId = null; // 如果没有匹配项,可以设置为 null 或其他值
    }
    const res = await postAdminClientAddOrModifyClientComunicationInfo({
      data: {
        ...values,
        clientId: matchedId,
      },
    });
    if (res.result === RESPONSE_CODE.SUCCESS) {
      message.success('新增成功');
      reloadTable();
      return true;
    }
    // 不返回不会关闭弹框
  };
  const editOnfinish = async (values) => {
    // setEditClientId(data.clientId);
    values.clientId = data.clientId;
    console.log(values, '5656editClientId');

    // const resSearchId = await postAdminClientQueryClientPage({
    //   data: {
    //     groupFilter: 'all',
    //   },
    // });
    // const matchingItem = resSearchId.data.data.find(
    //   (item) => item.id === values.name,
    // );

    const res = await postAdminClientAddOrModifyClientComunicationInfo({
      data: {
        ...values,
      },
    });
    if (res.result === RESPONSE_CODE.SUCCESS) {
      message.success('新增成功');
      reloadTable();
      return true;
    }
    // 不返回不会关闭弹框
  };
  const optType = {
    add: {
      readOnly: false,
      title: '新增跟进记录',
      button: (
        <Button size={'middle'} type="primary">
          新增
        </Button>
      ),
      onFinish: onfinish,
    },
    modify: {
      readOnly: false,
      title: '修改跟进记录',
      button: (
        <Button size={'middle'} type="primary">
          编辑
        </Button>
      ),
      onFinish: editOnfinish,
    },
    detail: {
      readOnly: true,
      title: '查看跟进记录',
      button: (
        <Button size={'middle'} type="primary" color="red">
          查看
        </Button>
      ),
      onFinish: () => {},
    },
  };
  return (
    <ModalForm
      title={optType[type].title}
      resize={{
        onResize() {
          console.log('resize!');
        },
        maxWidth: window.innerWidth * 0.8,
        minWidth: 400,
      }}
      form={form}
      trigger={optType[type].button}
      autoFocusFirstInput
      drawerProps={{
        destroyOnClose: true,
      }}
      submitTimeout={2000}
      onFinish={optType[type].onFinish}
    >
      <ProFormSelect
        name="name"
        readonly={optType[type].readOnly}
        fieldProps={{
          labelInValue: false,
          disabled: type === 'modify',
        }}
        initialValue={data ? data?.clientName + '' : null}
        label="客户"
        width="sm"
        request={async () => {
          const res = await postAdminClientQueryClientPage({
            data: {
              groupFilter: 'all',
            },
          });
          console.log(data, '5656data?.nameedit');
          // const namesArray = res.data.data.map((item) => item.name);
          // const formattedObject = res.data.data.reduce((acc, name) => {
          //   acc[name] = name; // 将名称作为键和值
          //   return acc;
          // }, {});
          // console.log(namesArray, '5656namesArray');
          // const formattedObject = res.data.data.reduce((acc, item) => {
          //   acc[item.name] = item.name; // 使用 name 作为键,id 作为值
          //   return acc;
          // }, {});
          // return enumToSelect(formattedObject);
          const options = res.data.data.reduce((acc, item) => {
            acc.push({ label: item.name, value: item.id }); // 使用 name 作为 label,id 作为 value
            return acc;
          }, []);
          return options;
        }}
        rules={[
          {
            required: true,
            message: '请选择客户',
          },
        ]}
      ></ProFormSelect>
      <ProFormDateTimePicker
        name="datetime"
        label="日期"
        initialValue={data ? data?.datetime + '' : null}
        placeholder="请选择跟进时间"
        width="sm"
        rules={[
          {
            required: true,
            message: '请选择日期',
          },
        ]}
      />
      <ProFormSelect
        name="way"
        width="sm"
        readonly={optType[type].readOnly}
        fieldProps={{
          labelInValue: false,
        }}
        initialValue={data?.way ? data?.way + '' : null}
        label="类型"
        request={async () => {
          const res = await postServiceConstClientWay();
          return enumToSelect(res.data);
        }}
        rules={[
          {
            required: true,
            message: '请选择跟进类型',
          },
        ]}
      ></ProFormSelect>
      <ProFormTextArea
        name="content"
        label="详情"
        placeholder="请输入详情"
        initialValue={data?.content}
        readonly={optType[type].readOnly}
        rules={[
          {
            required: true,
            message: '请输入详情',
          },
        ]}
      ></ProFormTextArea>
      <ProFormUploadDragger
        label="附件"
        name="attachment"
        action="upload.do"
        hidden={optType[type].readOnly}
        onChange={(info) => {
          const uploadFile = async ({ fileList: newFileList }) => {
            if (newFileList.length > 0) {
              const formData = new FormData();
              formData.append('file', newFileList[0].originFileObj as RcFile);
              const res = await postOrderErpOrderStagesUpload({
                data: formData,
                headers: {
                  'Content-Type':
                    'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
                },
              });
              const url = res.data;
              console.log('attachments' + JSON.stringify(url));
              form.setFieldValue('attachments', url);
            } else {
              form.setFieldValue('attachments', null);
            }
          };
          uploadFile(info);
        }}
        max={1}
      />
      <a hidden={!optType[type].readOnly} href={data?.attachments} download>
        下载附件
      </a>
      <ProFormText
        initialValue={data?.attachments}
        name="attachments"
        hidden
      ></ProFormText>
      <ProFormText initialValue={data?.id} name="id" hidden></ProFormText>
    </ModalForm>
  );
};