import InternationalPhoneInput from '@/components/InternationalPhoneInput'; import { logisticscontrollerCreateshippingaddress, logisticscontrollerDelshippingaddress, logisticscontrollerGetshippingaddresslist, logisticscontrollerUpdateshippingaddress, } from '@/servers/api/logistics'; import { stockcontrollerGetallstockpoints } from '@/servers/api/stock'; import { EditOutlined, PlusOutlined } from '@ant-design/icons'; import { ActionType, DrawerForm, PageContainer, ProColumns, ProForm, ProFormItem, ProFormSelect, ProFormText, ProTable, } from '@ant-design/pro-components'; import { App, Button, Divider, Popconfirm } from 'antd'; import { useRef } from 'react'; const ListPage: React.FC = () => { const actionRef = useRef(); const { message } = App.useApp(); const columns: ProColumns[] = [ { title: '仓库点', dataIndex: 'stockPointId', hideInSearch: true, valueType: 'select', request: async () => { const { data = [] } = await stockcontrollerGetallstockpoints(); return data.map((item) => ({ label: item.name, value: item.id, })); }, }, { title: '地区', dataIndex: ['address', 'region'], hideInSearch: true, }, { title: '城市', dataIndex: ['address', 'city'], hideInSearch: true, }, { title: '邮编', dataIndex: ['address', 'postal_code'], hideInSearch: true, }, { title: '详细地址', dataIndex: ['address', 'address_line_1'], hideInSearch: true, }, { title: '联系电话', render: (_, record) => `+${record.phone_number_extension} ${record.phone_number}`, hideInSearch: true, }, { title: '操作', dataIndex: 'option', valueType: 'option', render: (_, record) => ( <> { try { const { success, message: errMsg } = await logisticscontrollerDelshippingaddress({ id: record.id as number, }); if (!success) { throw new Error(errMsg); } actionRef.current?.reload(); } catch (error: any) { message.error(error.message); } }} > ), }, ]; return ( []} request={async () => { const { data, success } = await logisticscontrollerGetshippingaddresslist(); if (success) { return { data: data, }; } return { data: [], }; }} columns={columns} /> ); }; const region = { AB: 'Alberta', BC: 'British', MB: 'Manitoba', NB: 'New', NL: 'Newfoundland', NS: 'Nova', ON: 'Ontario', PE: 'Prince', QC: 'Quebec', SK: 'Saskatchewan', NT: 'Northwest', NU: 'Nunavut', YT: 'Yukon', }; const CreateForm: React.FC<{ tableRef: React.MutableRefObject; }> = ({ tableRef }) => { const { message } = App.useApp(); return ( 新建 } autoFocusFirstInput drawerProps={{ destroyOnClose: true, }} onFinish={async (values) => { const { contact, ...params } = values; try { const { success, message: errMsg } = await logisticscontrollerCreateshippingaddress({ ...params, phone_number: contact?.phone, phone_number_extension: contact?.extension, phone_number_country: contact?.country, } as API.ShippingAddress); if (!success) { throw new Error(errMsg); } tableRef.current?.reload(); message.success('提交成功'); return true; } catch (error: any) { message.error(error.message); } }} > { const { data = [] } = await stockcontrollerGetallstockpoints(); return data.map((item) => ({ label: item.name, value: item.id, })); }} /> ); }; const UpdateForm: React.FC<{ tableRef: React.MutableRefObject; value: API.ShippingAddress; }> = ({ tableRef, value }) => { const { message } = App.useApp(); const { id, phone_number, phone_number_country, phone_number_extension, ...initialValue } = value; return ( 编辑 } autoFocusFirstInput drawerProps={{ destroyOnClose: true, }} onFinish={async (values) => { const { contact, ...params } = values; try { const { success, message: errMsg } = await logisticscontrollerUpdateshippingaddress( { id: id as number }, { ...params, phone_number: contact?.phone, phone_number_extension: contact?.extension, phone_number_country: contact?.country, } as API.ShippingAddress, ); if (!success) { throw new Error(errMsg); } tableRef.current?.reload(); message.success('提交成功'); return true; } catch (error: any) { message.error(error.message); } }} initialValues={{ ...initialValue, contact: { phone: phone_number, extension: phone_number_extension, country: phone_number_country, }, }} > { const { data = [] } = await stockcontrollerGetallstockpoints(); return data.map((item) => ({ label: item.name, value: item.id, })); }} /> ); }; export default ListPage;