CommunicationHistoryModal.tsx 4.49 KB
import { RESPONSE_CODE } from '@/constants/enum';
import {
  postAdminClientAddOrModifyClientComunicationInfo,
  postAdminClientQueryClientComunicationInfo,
  postAdminClientRemoveClientComunicationInfo,
} from '@/services';
import {
  ActionType,
  EditableProTable,
  ModalForm,
  ProFormInstance,
} from '@ant-design/pro-components';
import { Popconfirm, message } from 'antd';
import { useEffect, useRef, useState } from 'react';
export default ({ clientId }) => {
  const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
  const [dataSource, setDataSource] = useState();
  const ref = useRef<ProFormInstance>();
  const actionRef = useRef<ActionType>();
  const columns = [
    {
      title: '跟进时间',
      dataIndex: 'datetime',
      width: 50,
      valueType: 'dateTime',
      rules: [{ required: true, message: '请选择时间' }],
    },
    {
      title: '方式',
      width: 50,
      dataIndex: 'way',
      rules: [{ required: true, message: '请选择方式' }],
    },
    {
      title: '内容',
      width: 100,
      valueType: 'textarea',
      rules: [{ required: true, message: '请输入内容' }],
      dataIndex: 'content',
    },
    {
      title: '操作',
      valueType: 'option',
      width: 50,
      render: (text, record, _, action) => [
        <a
          key="editable"
          onClick={() => {
            action?.startEditable?.(record.tid);
          }}
        >
          编辑
        </a>,
        <Popconfirm
          key={'delete'}
          title="删除记录"
          description="确认删除记录?"
          onConfirm={async () => {
            setDataSource(dataSource.filter((item) => item.tid !== record.tid));
            const res = await postAdminClientRemoveClientComunicationInfo({
              query: {
                id: record.id,
              },
            });
            if (res.result === RESPONSE_CODE.SUCCESS) {
              message.success(res.message);
              action?.reload();
            } else {
              message.error('删除失败');
            }
          }}
          okText="是"
          cancelText="否"
        >
          <a type={'danger'}>删除</a>
        </Popconfirm>,
      ],
    },
  ];

  useEffect(() => {
    console.log('clientId', clientId);
  }, []);
  return (
    <ModalForm
      title="跟进记录"
      trigger={<a type="primary">跟进记录</a>}
      modalProps={{
        destroyOnClose: true,
      }}
    >
      <EditableProTable
        rowKey="tid"
        formRef={ref}
        actionRef={actionRef}
        recordCreatorProps={{
          record: () => ({ tid: (Math.random() * 1000000).toFixed(0) }),
        }}
        loading={false}
        columns={columns}
        request={async () => {
          const res = await postAdminClientQueryClientComunicationInfo({
            data: {
              clientId: clientId,
            },
          });
          if (res.result === RESPONSE_CODE.SUCCESS) {
            console.log(JSON.stringify(res.data));
            return {
              ...res.data,
              data: res.data.data.map((item) => {
                return {
                  ...item,
                  tid: (Math.random() * 1000000).toFixed(0),
                };
              }),
            };
          } else {
            message.error('获取失败');
          }
        }}
        value={dataSource}
        onChange={setDataSource}
        editable={{
          type: 'multiple',
          editableKeys,
          onSave: async (rowKey, data, row) => {
            console.log(rowKey, data, row);
            const res = await postAdminClientAddOrModifyClientComunicationInfo({
              data: {
                ...data,
                clientId: clientId,
              },
            });
            if (res.result === RESPONSE_CODE.SUCCESS) {
              message.success(res.message);
            } else {
              message.error('修改失败');
            }
            actionRef.current?.reload();
          },
          onChange: setEditableRowKeys,
        }}
      />
      {/*<ProCard title="表格数据" headerBordered collapsible defaultCollapsed>
                <ProFormField
                    ignoreFormItem
                    fieldProps={{
                        style: {
                            width: '100%',
                        },
                    }}
                    mode="read"
                    valueType="jsonCode"
                    text={JSON.stringify(dataSource)}
                />
            </ProCard>*/}
    </ModalForm>
  );
};