You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Global-sales/src/views/Conversations/Online/ConversationBind.jsx

143 lines
4.4 KiB
JavaScript

import { useState } from 'react';
import { App, Modal, Button, Table } from 'antd';
import { isEmpty, cloneDeep } from '@/utils/commons';
import { fetchJSON } from '@/utils/request';
import AdvanceSearchForm from './../../orders/AdvanceSearchForm';
import { API_HOST } from '@/config';
import dayjs from 'dayjs';
const fetchOrderList = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/getdvancedwlorder`, params);
return errcode !== 0 ? [] : result;
};
const fetchBindOrder = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/bound_order`, params);
return errcode === 0 ? true : false;
// return errcode !== 0 ? {} : result;
};
export const ConversationBindFormModal = ({ currentConversationID, userId, onBoundSuccess }) => {
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false); // bind loading
const [searchLoading, setSearchLoading] = useState(false);
const [searchResult, setSearchResult] = useState([]);
const { notification, message } = App.useApp();
const onSearchOrder = async (values) => {
const copyObject = cloneDeep(values);
delete copyObject.type;
const allEmpty = Object.values(copyObject).every((val) => {
return val === null || val === '' || val === undefined;
});
if (allEmpty) {
notification.warning({
message: '温馨提示',
description: '请输入至少一个条件',
placement: 'top',
duration: 60,
});
return false;
}
values.opisn = userId;
setLoading(false);
setSearchLoading(true);
setSearchResult([]);
const result = await fetchOrderList(values);
setSearchResult(result);
setSearchLoading(false);
};
const handleBindOrder = async (coli_sn) => {
setLoading(true);
const success = await fetchBindOrder({ coli_sn, conversationid: currentConversationID });
setLoading(false);
success ? message.success('绑定成功') : message.error('绑定失败');
setOpen(false);
if (typeof onBoundSuccess === 'function') {
onBoundSuccess(coli_sn);
}
};
const paginationProps = {
showQuickJumper: true,
showLessItems: true,
showSizeChanger: true,
showTotal: (total) => {
return `总数:${total}`;
},
};
const searchResultColumns = [
{
title: '订单号',
key: 'COLI_ID',
dataIndex: 'COLI_ID',
width: 222,
},
{
title: '客人姓名',
key: 'coli_guest',
dataIndex: 'coli_guest',
render: (text, record) => {
let regularText = '';
if (record.buytime > 0) regularText = '(R' + record.buytime + ')';
return text + regularText;
},
},
{
title: '出发日期',
key: 'COLI_OrderStartDate',
dataIndex: 'COLI_OrderStartDate',
width: 120,
hidden: false,
sortDirections: ['ascend', 'descend'],
sorter: (a, b) => {
const datejsA = isEmpty(a.COLI_OrderStartDate) ? 0 : new dayjs(a.COLI_OrderStartDate).valueOf();
const datejsB = isEmpty(b.COLI_OrderStartDate) ? 0 : new dayjs(b.COLI_OrderStartDate).valueOf();
return datejsA - datejsB;
},
},
{
title: '附加信息',
ellipsis: true,
key: 'COLI_Introduction',
dataIndex: 'COLI_Introduction',
},
{
title: '',
key: 'action',
width: 150,
render: (_, record) => (
<Button type={'text'} className='text-primary' onClick={() => handleBindOrder(record.COLI_SN)}>
关联此订单
</Button>
),
},
];
return (
<>
{currentConversationID && <Button type='primary' onClick={() => setOpen(true)} >
现在关联
</Button>}
<Modal
width={window.innerWidth < 700 ? '95%' : '100%'}
open={open}
title={'关联订单'}
footer={false}
onCancel={() => {
setOpen(false);
}}
destroyOnClose>
<AdvanceSearchForm onSubmit={onSearchOrder} loading={searchLoading} />
<Table
key={'advanceOrderTable'}
loading={loading}
dataSource={searchResult}
columns={searchResultColumns}
pagination={searchResult.length <= 10 ? false : paginationProps}
/>
</Modal>
</>
);
};
export default ConversationBindFormModal;